ES2929749T3 - Selector de calidad basado en vecinos 360, ajustador de rango, gestor de ventanilla y estimador de movimiento para gráficos - Google Patents

Selector de calidad basado en vecinos 360, ajustador de rango, gestor de ventanilla y estimador de movimiento para gráficos Download PDF

Info

Publication number
ES2929749T3
ES2929749T3 ES18165269T ES18165269T ES2929749T3 ES 2929749 T3 ES2929749 T3 ES 2929749T3 ES 18165269 T ES18165269 T ES 18165269T ES 18165269 T ES18165269 T ES 18165269T ES 2929749 T3 ES2929749 T3 ES 2929749T3
Authority
ES
Spain
Prior art keywords
graphics
video
frame
memory
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES18165269T
Other languages
English (en)
Inventor
Joydeep Ray
Abhishek R Appu
Stanley J Baran
Sang-Hee Lee
Atthar H Mohammed
Jong Dae Oh
Hiu-Fai R Chan
Ximin Zhang
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 ES2929749T3 publication Critical patent/ES2929749T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/44Receiver circuitry for the reception of television signals according to analogue transmission standards
    • H04N5/52Automatic gain control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformation in the plane of the image
    • G06T3/08
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N13/00Stereoscopic video systems; Multi-view video systems; Details thereof
    • H04N13/10Processing, recording or transmission of stereoscopic or multi-view image signals
    • H04N13/106Processing image signals
    • H04N13/139Format conversion, e.g. of frame-rate or size
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • H04N19/139Analysis of motion vectors, e.g. their magnitude, direction, variance or reliability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/154Measured or subjectively estimated visual quality after decoding, e.g. measurement of distortion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/57Motion estimation characterised by a search window with variable size or shape
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/597Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding specially adapted for multi-view video sequence encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • H04N19/86Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving reduction of coding artifacts, e.g. of blockiness
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10016Video; Image sequence
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/60Control of cameras or camera modules
    • H04N23/698Control of cameras or camera modules for achieving an enlarged field of view, e.g. panoramic image capture
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/14Picture signal circuitry for video frequency region
    • H04N5/144Movement detection

Abstract

Una realización puede incluir un procesador de visualización, una memoria para almacenar un cuadro 2D correspondiente a una proyección de un video 360 y un selector de calidad para seleccionar un factor de calidad para un bloque del cuadro 2D en función de la información de calidad de los bloques vecinos del cuadro 2D. , incluidos los bloques que son vecinos solo en el espacio de video 360. El sistema también puede incluir un ajustador de rango para ajustar un rango de búsqueda para el marco 2D basado en un área de búsqueda del marco 2D, un administrador de ventana gráfica para determinar si una solicitud de una ventana gráfica del marco 2D se extiende más allá del primer borde de la ventana 2D. marco y para llenar la ventana de visualización solicitada con información de imagen envolvente, y/o un estimador de movimiento para estimar la información de movimiento en función de la información de color y la información de profundidad. Se describen y reivindican otras realizaciones. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Selector de calidad basado en vecinos 360, ajustador de rango, gestor de ventanilla y estimador de movimiento para gráficos
CAMPO TÉCNICO
Las realizaciones se refieren en general a tecnología de visualización y, más particularmente, a actualizaciones de cámara basadas en bloque y visualizaciones asíncronas. Más particularmente, las realizaciones se refieren a uno o más de un selector de calidad basado en vecinos 360, ajustador de rango, gestor de ventanilla y estimador de movimiento para gráficos.
ANTECEDENTES
En vídeo 360, que también se conoce como vídeo de 360 grados, vídeo inmersivo o vídeo esférico, las grabaciones de vídeo pueden tomarse desde cada dirección (es decir, en 360 grados) simultáneamente usando una cámara omnidireccional o una colección de cámaras. En la reproducción, el espectador puede seleccionar una dirección de visualización o ventanilla para ver entre cualquiera de las direcciones disponibles. En sistemas (de códec) de compresión/descompresión, la eficiencia de compresión, la calidad de vídeo y la eficiencia de cálculo pueden ser criterios de rendimiento importantes. Estos criterios también pueden ser un factor importante en la diseminación de vídeo 360 y la experiencia de usuario en la visualización de tal vídeo 360. Las publicaciones de patente US2006/0034374 y US2016/0112704 divulgan una predicción de imágenes usando bloques vecinos de 360 grados.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Las diversas ventajas de las realizaciones serán evidentes para un experto en la materia leyendo las siguiente memoria descriptiva y reivindicaciones adjuntas, y haciendo referencia a los siguientes dibujos, en los que:
La Figura 1 es un diagrama de bloques que ilustra un sistema informático configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento;
Las Figuras 2A-2D ilustran un componente de procesador paralelo;
Las Figuras 3A-3B son diagramas de bloques de multiprocesadores de gráficos;
Las Figuras 4A-4F ilustran una arquitectura ilustrativa en la que una pluralidad de GPU se acopla comunicativamente a una pluralidad de procesadores de múltiples núcleos;
La Figura 5 ilustra una tubería de procesamiento de gráficos;
La Figura 6 es un diagrama de bloques de un ejemplo de un sistema de procesamiento electrónico;
La Figura 7A es un diagrama de bloques de un ejemplo de un aparato de gráficos de acuerdo con una realización; La Figura 7B es un diagrama de flujo de un ejemplo de un método de procesamiento de vídeo 360 de acuerdo con una realización;
La Figura 7C es un diagrama de bloques de otro ejemplo de un sistema de procesamiento electrónico;
La Figura 7D es un diagrama ilustrativo de un ejemplo de un fotograma bidimensional (2D) con un formato de vídeo 360 de proyección cilíndrica equidistante (ERP);
La Figura 7E es un diagrama ilustrativo de un ejemplo de una ventanilla;
La Figura 7F es un diagrama ilustrativo de un ejemplo de una ventanilla superpuesta en un fotograma 2D de formato cilíndrico equidistante;
La Figura 7G es un diagrama ilustrativo de un ejemplo de un fotograma 2D con un formato de vídeo 360 de mapa de cubo;
La Figura 7H es un diagrama en perspectiva ilustrativo de un ejemplo de un cubo;
La Figura 7I es un diagrama ilustrativo de un ejemplo de un fotograma 2D con un formato de vídeo 360 de mapa de cubo compacto;
La Figura 8A es un diagrama de bloques de otro ejemplo de un aparato de gráficos;
La Figura 8B es un diagrama de flujo de otro ejemplo de un método de procesamiento de vídeo 360;
La Figura 8C es un diagrama ilustrativo de otro ejemplo de un fotograma 2D con un formato de vídeo 360 de ERP; La Figura 9A es un diagrama de bloques de otro ejemplo de un aparato de gráficos;
La Figura 9B es un diagrama de flujo de otro ejemplo de un método de procesamiento de vídeo 360;
La Figura 9C es un diagrama ilustrativo de un ejemplo de ventanillas superpuestas sobre un vídeo 360;
La Figura 10A es un diagrama de bloques de otro ejemplo de un aparato de gráficos;
La Figura 10B es un diagrama de flujo de un ejemplo de un método de procesamiento de un fotograma;
Las Figuras 10C a 10E son diagramas ilustrativos de fotogramas sucesivos;
La Figura 11 es un diagrama de bloques de un ejemplo de un visualizador con un ejemplo de capacidad de luz de fondo localizada;
La Figura 12A es un diagrama de bloques de un ejemplo de un ejemplo de dispositivo de procesamiento de datos; La Figura 12B es una ilustración de un ejemplo de un ejemplo de determinación de distancia;
La Figura 13 es un diagrama de bloques de un ejemplo de un ejemplo de arquitectura de visualización en capas; La Figura 14 es un diagrama de bloques de un ejemplo de una arquitectura de visualización que incluye múltiples ejemplos de unidades de visualización; y
La Figura 15 es un diagrama de bloques de un ejemplo de un ejemplo de arquitectura de entrega de medios asistido por la nube;
Las Figuras 16-18 son diagramas de bloques de un ejemplo de una vista general de un ejemplo de sistema de procesamiento de datos;
La Figura 19 es un diagrama de bloques de un ejemplo de un ejemplo de motor de procesamiento de gráficos; Las Figuras 20-22 son diagramas de bloques de ejemplos de ejemplo de unidades de ejecución;
La Figura 23 es un diagrama de bloques de un ejemplo de un ejemplo de tubería de gráficos;
Las Figuras 24A-24B son diagramas de bloques de ejemplos de ejemplo de programación de tubería de gráficos; La Figura 25 es un diagrama de bloques de un ejemplo de un ejemplo de una arquitectura de software de gráficos; La Figura 26 es un diagrama de bloques de un ejemplo de un ejemplo de un sistema de desarrollo de núcleos de propiedad intelectual (IP); y
La Figura 27 es un diagrama de bloques de un ejemplo de un ejemplo de sistema en un circuito integrado en chip;
DESCRIPCIÓN DETALLADA
En la siguiente descripción, se exponen numerosos detalles específicos para proporcionar un entendimiento más completo de la presente invención. Sin embargo, será evidente para un experto en la materia que la presente invención puede ponerse en práctica sin uno o más de estos detalles específicos. En otros casos, no se han descrito características bien conocidas para evitar obstaculizar la presente invención.
Vista general del sistema
La Figura 1 es un diagrama de bloques que ilustra un sistema informático 100 configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento. El sistema informático 100 incluye un subsistema de procesamiento 101 que tiene uno o más procesador o procesadores 102 y una memoria de sistema 104 que se comunica mediante una ruta de interconexión que puede incluir un concentrador de memoria 105. El concentrador de memoria 105 puede ser un componente separado dentro de un componente del conjunto de chips o puede estar integrado dentro del uno o más procesador o procesadores 102. El concentrador de memoria 105 se acopla con un subsistema de E/S 111 mediante un enlace de comunicación 106. El subsistema de E/S 111 incluye un concentrador de E/S 107 que puede posibilitar que el sistema informático 100 reciba entrada desde uno o más dispositivo o dispositivos de entrada 108. Adicionalmente, el concentrador de E/S 107 puede posibilitar que un controlador de visualización, que puede estar incluido en el uno o más procesador o procesadores 102, proporcione salidas a uno o más dispositivo o dispositivos de visualización 110A. En un ejemplo, los uno o más dispositivo o dispositivos de visualización 110A acoplados con el concentrador de E/S 107 puede incluir un dispositivo de visualización local, interno o integrado.
En un ejemplo, el subsistema de procesamiento 101 incluye uno o más procesador o procesadores paralelos 112 acoplado al concentrador de memoria 105 a través de un bus u otro enlace de comunicación 113. El enlace de comunicación 113 puede ser uno de cualquier número de tecnologías o protocolos de enlace de comunicación basados en normas, tales como, pero sin limitación, PCI Express, o puede ser una interfaz de comunicaciones o tejido de comunicaciones específicos de proveedor. En un ejemplo, los uno o más procesadores paralelos 112 forman un sistema de procesamiento paralelo o vectorial de enfoque computacional que incluye un gran número de núcleos de procesamiento y/o agrupaciones de procesamiento, tal como un procesador de muchos núcleos integrados (MIC). En un ejemplo, los uno o más procesadores paralelos 112 forman un subsistema de procesamiento de gráficos que puede emitir píxeles a uno de los uno o más dispositivos de visualización 110A acoplados a través del concentrador de E/S 107. El uno o más procesador o procesadores paralelos 112 pueden incluir también un controlador de visualización e interfaz de visualización (no mostrados) para posibilitar una conexión directa a uno o más dispositivo o dispositivos de visualización 110B.
Dentro del subsistema de E/S 111, puede conectarse una unidad de almacenamiento de sistema 114 al concentrador de E/S 107 para proporcionar un mecanismo de almacenamiento para el sistema informático 100. Puede usarse un conmutador de E/S 116 para proporcionar un mecanismo de interfaz para posibilitar conexiones entre el concentrador de E/S 107 y otros componentes, tal como un adaptador de red 118 y/o un adaptador de red inalámbrica 119 que pueden estar integrados en la plataforma, y diversos otros dispositivos que pueden añadirse mediante uno o más dispositivo o dispositivos de adición 120. El adaptador de red 118 puede ser un adaptador Ethernet u otro adaptador de red alámbrica. El adaptador de red inalámbrica 119 puede incluir uno o más de un dispositivo Wi-Fi, Bluetooth, de comunicación de campo cercano (NFC) u otro dispositivo de red que incluye una o más radios inalámbricas.
El sistema informático 100 puede incluir otros componentes no explícitamente mostrados, que incluyen USB u otras conexiones de puerto, unidades de almacenamiento óptico, dispositivos de captura de vídeo, y similares, que pueden estar también conectados al concentrador de E/S 107. Las rutas de comunicación que interconectan los diversos componentes en la Figura 1 se pueden implementar usando cualquier protocolo adecuado, tal como protocolos basados en PCI (Interconexión de Componentes Periféricos) (por ejemplo, PCI-Express), o cualesquiera otras interfaces y/o protocolo o protocolos de comunicación de bus o de punto a punto, tales como la interconexión de alta velocidad NV-Link, o protocolos de interconexión conocidos en la técnica.
En un ejemplo, los uno o más procesadores paralelos 112 incorporan circuitería optimizada para procesamiento de gráficos y de vídeo, incluyendo, por ejemplo, circuitería de salida de vídeo, y constituye una unidad de procesamiento de gráficos (GPU). En otro ejemplo, los uno o más procesadores paralelos 112 incorporan circuitería optimizada para procesamiento de propósito general, mientras conservan la arquitectura computacional subyacente, descrita con mayor detalle en el presente documento. En otro ejemplo más, componentes del sistema informático 100 se pueden integrar con otros uno o más elementos de sistema en un único circuito integrado. Por ejemplo, el uno o más procesador o procesadores paralelos, 112 el concentrador de memoria 105, el procesador o procesadores 102 y el concentrador de E/S 107 pueden estar integrados en un circuito integrado de sistema en chip (SoC). Como alternativa, los componentes del sistema informático 100 pueden estar integrados en un único paquete para formar una configuración de sistema en paquete (SIP). En un ejemplo, al menos una porción de los componentes del sistema informático 100 se puede integrar en un módulo de múltiples chips (MCM), que se puede interconectar con otros módulos de múltiples chips para dar un sistema informático modular.
Se apreciará que el sistema informático 100 mostrado en el presente documento es ilustrativo y que son posibles variaciones y modificaciones. La topología de conexión, que incluye el número y disposición de los puentes, el número de procesador o procesadores 102 y el número de procesador o procesadores paralelos 112, pueden modificarse según se desee. Por ejemplo, en algunos ejemplos, la memoria de sistema 104 está conectada al procesador o procesadores 102 directamente en lugar de a través de un puente, mientras que otros dispositivos se comunican con la memoria de sistema 104 mediante el concentrador de memoria 105 y el procesador o procesadores 102. En otras topologías alternativas, el procesador o procesadores paralelos 112 están conectados al concentrador de E/S 107 o directamente a uno del uno o más procesador o procesadores 102, en lugar de al concentrador de memoria 105. En otros ejemplos, el concentrador de E/S 107 y el concentrador de memoria 105 se pueden integrar en un único chip. Algunos ejemplos pueden incluir dos o más conjuntos del procesador o procesadores 102 anexados a través de múltiples zócalos, que se pueden acoplar con dos o más instancias del procesador o procesadores paralelos 112.
Algunos de los componentes particulares mostrados en el presente documento son opcionales y pueden no estar incluidos en todas las implementaciones del sistema informático 100. Por ejemplo, puede soportarse cualquier número de tarjetas de adición o periféricos, o pueden eliminarse algunos componentes. Adicionalmente, algunas arquitecturas pueden usar una terminología diferente para componentes similares a los ilustrados en la Figura 1. Por ejemplo, el concentrador de memoria 105 puede denominarse como un puente norte en algunas, mientras el concentrador de E/S 107 puede denominarse como un puente sur.
La Figura 2A ilustra un procesador paralelo 200. Los diversos componentes del procesador paralelo 200 pueden implementarse usando uno o más dispositivos de circuito integrado, tales como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o campos de matrices de puertas programables (FPGA). El procesador paralelo 200 ilustrado es una variante de los uno o más procesadores paralelos 112 mostrados en la Figura 1.
En un ejemplo, el procesador paralelo 200 incluye una unidad de procesamiento paralelo 202. La unidad de procesamiento paralelo incluye una unidad de E/S 204 que posibilita la comunicación con otros dispositivos, que incluyen otras instancias de la unidad de procesamiento paralelo 202. La unidad de E/S 204 puede estar directamente conectada a otros dispositivos. En un ejemplo, la unidad de E/S 204 se conecta con otros dispositivos a través del uso de una interfaz de concentrador o de conmutador, tal como un concentrador de memoria 105. Las conexiones entre el concentrador de memoria 105 y la unidad de E/S 204 forman un enlace de comunicación 113. Dentro de la unidad de procesamiento paralelo 202, la unidad de E/S 204 se conecta con una interfaz de anfitrión 206 y una barra transversal de memoria 216, donde la interfaz de anfitrión 206 recibe comandos dirigidos para realizar operaciones de procesamiento y la barra transversal de memoria 216 recibe comandos dirigidos para realizar operaciones de memoria.
Cuando la interfaz de anfitrión 206 recibe una memoria intermedia de comando mediante la unidad de E/S 204, la interfaz de anfitrión 206 puede dirigir operaciones de trabajo para realizar estos comandos a un primer extremo frontal 208. En un ejemplo, el extremo frontal 208 se acopla con un planificador 210, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de agrupaciones de procesamiento 212. En un ejemplo, el planificador 210 garantiza que la matriz de agrupaciones de procesamiento 212 está configurada apropiadamente y en un estado válido antes de que las tareas se distribuyan a las agrupaciones de procesamiento de la matriz de agrupaciones de procesamiento 212. En un ejemplo, el planificador 210 se implementa a través de lógica de firmware que se ejecuta en un microcontrolador. El planificador implementado en el microcontrolador 210 es configurable para realizar operaciones complejas de planificación y distribución de trabajo en granularidad gruesa y fina, posibilitando conmutación rápida de prioridad y contexto de hilos que se ejecutan en la matriz de procesamiento 212. En un ejemplo, el software de anfitrión puede probar cargas de trabajo para su planificación en la matriz de procesamiento 212 a través de uno de múltiples llamadores de procesamiento de gráficos. Las cargas de trabajo pueden distribuirse, a continuación, automáticamente a través de la matriz de procesamiento 212 por la lógica del planificador 210 dentro del microcontrolador de planificador.
La matriz de agrupación de procesamiento 212 puede incluir hasta "N" agrupaciones de procesamiento (por ejemplo, la agrupación 214A, la agrupación 214B, hasta la agrupación 214N). Cada agrupación 214A-214N de la matriz de agrupación de procesamiento 212 puede ejecutar un gran número de hilos concurrentes. El planificador 210 puede asignar trabajo a las agrupaciones 214A-214N de la matriz de agrupación de procesamiento 212 usando diversos algoritmos de planificación y/o de distribución de trabajo, que pueden variar dependiendo de la carga de trabajo que surge para cada tipo de programa o cálculo. La planificación puede manejarse dinámicamente por el planificador 210, o puede ayudarse, en parte, por la lógica de compilador durante la compilación de la lógica de programa configurada para la ejecución por la matriz de agrupación de procesamiento 212. En un ejemplo, pueden asignarse diferentes agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 para procesar diferentes tipos de programas o para realizar diferentes tipos de cómputos.
La matriz de agrupación de procesamiento 212 puede estar configurada para realizar diversos tipos de operaciones de procesamiento paralelo. En un ejemplo, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de cálculo paralelo de fin general. Por ejemplo, la matriz de agrupación de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento que incluyen filtrado de vídeo y/o datos de audio, realizar operaciones de modelado, incluyendo operaciones físicas, y realizar transformaciones de datos.
En un ejemplo, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de procesamiento de gráficos paralelo. En ejemplos en los que el procesador paralelo 200 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de agrupaciones de procesamiento 212 puede incluir lógica adicional para soportar la ejecución de tales operaciones de procesamiento de gráficos, incluyendo, pero sin limitación, lógica de muestreo de textura para realizar operaciones de textura, así como lógica de teselación y otra lógica de procesamiento de vértices. Adicionalmente, la matriz de agrupación de procesamiento 212 puede estar configurada para ejecutar programas sombreadores relacionados con el procesamiento de gráficos tales como, pero sin limitación, sombreadores de vértices, sombreadores de teselación, sombreadores de geometría y sombreadores de píxeles. La unidad de procesamiento paralelo 202 puede transferir datos de la memoria de sistema mediante la unidad de E/S 204 para su procesamiento. Durante el procesamiento, los datos transferidos pueden almacenarse en una memoria en chip (por ejemplo, la memoria de procesador paralelo 222) durante el procesamiento y, a continuación, volverse a escribir en la memoria de sistema.
En un ejemplo, cuando se usa la unidad de procesamiento paralelo 202 para realizar un procesamiento de gráficos, el planificador 210 se puede configurar para dividir la carga de trabajo de procesamiento en tareas de un tamaño aproximadamente igual, para habilitar mejor la distribución de las operaciones de procesamiento de gráficos a múltiples agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212. En algunos ejemplos, porciones de la matriz de agrupaciones de procesamiento 212 pueden configurarse para realizar diferentes tipos de procesamiento. Por ejemplo, una primera porción puede estar configurada para realizar el sombreado de vértices y la generación de la topología, una segunda porción puede estar configurada para realizar la teselación y el sombreado de geometría, y una tercera porción puede estar configurada para realizar el sombreado de píxel u otras operaciones de espacio de pantalla, para producir una imagen representada para su visualización. Los datos intermedios producidos por una o más de las agrupaciones 214A-214N pueden almacenarse en memorias intermedias para permitir que los datos intermedios se transmitan entre las agrupaciones 214A-214N para su procesamiento adicional.
Durante la operación, la matriz de agrupación de procesamiento 212 puede recibir tareas de procesamiento que van a ejecutarse mediante el planificador 210, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 208. Para operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos que van a procesarse, por ejemplo, datos de superficie (parche), datos primitivos, datos de vértices y/o datos de píxeles, así como parámetros de estado y comandos para definir cómo han de procesarse los datos (por ejemplo, qué programa ha de ejecutarse). El planificador 210 puede estar configurado para extraer los índices que corresponden a las tareas o puede recibir los índices desde el extremo frontal 208. El extremo frontal 208 puede estar configurado para garantizar que la matriz de agrupación de procesamiento 212 está configurada en un estado válido antes de que se inicie la carga de trabajo especificada por las memorias intermedias de comando de entrada (por ejemplo, memorias intermedias de lotes, memorias intermedias de envío, etc.).
Cada una de la una o más instancias de la unidad de procesamiento paralelo 202 puede acoplarse con la memoria de procesador paralelo 222. La memoria de procesador paralelo 222 puede accederse mediante la barra transversal de memoria 216, que puede recibir solicitudes de memoria de la matriz de agrupación de procesamiento 212, así como de la unidad de E/S 204. La barra transversal de memoria 216 puede acceder a la memoria de procesador paralelo 222 mediante una interfaz de memoria 218. La interfaz de memoria 218 puede incluir múltiples unidades de partición (por ejemplo, la unidad de partición 220A, la unidad de partición 220B, hasta la unidad de partición 220N) cada una delas cuales puede acoplarse a una porción (por ejemplo, unidad de memoria) de la memoria de procesador paralelo 222. En una implementación, el número de unidades de partición 220A-220N está configurado para ser igual al número de unidades de memoria, de tal forma que una primera unidad de división 220A tiene una correspondiente primera unidad de memoria 224A, una segunda unidad de división 220B tiene una correspondiente unidad de memoria 224B, y una Nésima unidad de partición 220N tiene una correspondiente Nésima unidad de memoria 224N. En otros ejemplos, el número de unidades de partición 220A-220N puede no ser igual al número de dispositivos de memoria.
En diversos ejemplos, las unidades de memoria 224A-224N pueden incluir diversos tipos de dispositivos de memoria, que incluyen memoria de acceso aleatorio dinámico (DRAM) o memoria de acceso aleatorio de gráficos, tal como memoria de acceso aleatorio de gráficos síncrona (SGRAM), que incluye memoria de doble tasa de datos de gráficos (GDDR). En un ejemplo, las unidades de memoria 224A-224N pueden incluir también memoria en 3D apilada, que incluye, pero sin limitación, memoria de alto ancho de banda (HBM). Los expertos en la materia apreciarán que la implementación específica de las unidades de memoria 224A-224N puede variar, y que puede seleccionarse de uno de diversos diseños convencionales. Los objetivos de la representación, tales como memorias intermedias de fotogramas o mapas de textura, pueden almacenarse a través de las unidades de memoria 224A-224N, lo que permite a las unidades de partición 220A-220N escribir porciones de cada objetivo de representación en paralelo para usar eficientemente el ancho de banda disponible de la memoria de procesador paralelo 222. En algunos ejemplos, puede excluirse una instancia local de la memoria de procesador paralelo 222 en favor de un diseño de memoria unificada que utiliza memoria de sistema en conjunto con memoria de caché local.
En un ejemplo, una cualquiera de las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 puede procesar datos que se escribirán en cualquiera de las unidades de memoria 224A-224N dentro de la memoria de procesador paralelo 222. La barra transversal de memoria 216 puede configurarse para transferir la salida de cada agrupación 214A-214N a cualquier unidad de partición 220A-220N o a otra agrupación 214A-214N, que puede realizar operaciones de procesamiento adicionales en la salida. Cada agrupación 214A-214N puede comunicarse con la interfaz de memoria 218 a través de la barra transversal de memoria 216 para leer desde o escribir en diversos dispositivos de memoria externa. En un ejemplo, la barra transversal de memoria 216 tiene una conexión a la interfaz de memoria 218 para comunicarse con la unidad de E/S 204, así como una conexión a una instancia local de la memoria de procesador paralelo 222, lo que posibilita que las unidades de procesamiento dentro de las diferentes agrupaciones de procesamiento 214A-214N se comuniquen con la memoria de sistema u otra memoria que no sea local a la unidad de procesamiento paralelo 202. En un ejemplo, la barra transversal de memoria 216 puede usar canales virtuales para separar flujos de tráfico entre las agrupaciones 214A-214N y las unidades de subdivisión 220A-220N.
Aunque se ilustra una única instancia de la unidad de procesamiento paralelo 202 dentro del procesador paralelo 200, puede incluirse cualquier número de instancias de la unidad de procesamiento paralelo 202. Por ejemplo, pueden proporcionarse múltiples instancias de la unidad de procesamiento paralelo 202 en una única tarjeta de adición, o pueden interconectarse múltiples tarjetas de adición. Las diferentes instancias de la unidad de procesamiento paralelo 202 pueden estar configuradas para interoperar incluso si las diferentes instancias tienen diferentes números de núcleos de procesamiento, diferentes cantidades de memoria de procesador paralelo local y/u otras diferencias de configuración. Por ejemplo y en un ejemplo, algunas instancias de la unidad de procesamiento paralelo 202 pueden incluir unidades de coma flotante de precisión superior con relación a otras instancias. Los sistemas que incorporan una o más instancias de la unidad de procesamiento paralelo 202 o del procesador paralelo 200 pueden implementarse en una diversidad de configuraciones y factores de forma, incluyendo, pero sin limitación, sobremesa, portátil u ordenadores personales portátiles, servidores, estaciones de trabajo, consolas de juegos y/o sistemas integrados.
La Figura 2B es un diagrama de bloques de una unidad de partición 220, de acuerdo con un ejemplo. En un ejemplo, la unidad de partición 220 es una instancia de una de las unidades de partición 220A-220N de la Figura 2A. Como se ilustra, la unidad de partición 220 incluye una caché L2221, una interfaz de memoria intermedia de fotogramas 225 y una ROP 226 (unidad de operaciones de rasterización). La caché L2221 es una caché de lectura/escritura que está configurada para realizar operaciones de carga y almacén recibidas de la barra transversal de memoria 216 y la ROP 226. Se emiten pérdidas de lectura y solicitudes de escritura de vuelta urgentes por la caché L2221 a la interfaz de memoria intermedia de fotogramas 225 para su procesamiento. También pueden enviarse actualizaciones a la memoria intermedia de fotogramas mediante la interfaz de memoria intermedia de fotogramas 225 para su procesamiento. En un ejemplo, la interfaz de memoria intermedia de fotogramas 225 interconecta con una de las unidades de memoria en la memoria de procesador paralelo, tal como las unidades de memoria 224A-224N de la Figura 2 (por ejemplo, dentro de la memoria de procesador paralelo 222).
En aplicaciones de gráficos, la ROP 226 es una unidad de procesamiento que realiza operaciones de rasterización tales como estarcido, prueba z, mezcla y similares. La ROP 226 emite, a continuación, datos gráficos procesados que se almacenan en la memoria de gráficos. En algunos ejemplos, la ROP 226 incluye lógica de compresión para comprimir datos de profundidad o de color que se escriben en la memoria y descomprimir datos de profundidad o de color que se leen de la memoria. La lógica de compresión puede ser lógica de compresión sin pérdidas que hace uso de uno o más de múltiples algoritmos de compresión. El tipo de compresión que se realiza por la ROP 226 puede variar basándose en las características estadísticas de los datos a comprimir. Por ejemplo, en un ejemplo, se realiza una compresión de color delta sobre datos de profundidad y de color de una manera por mosaico.
En algunos ejemplos, la ROP 226 se incluye dentro de cada agrupación de procesamiento (por ejemplo, la agrupación 214A-214N de la Figura 2) en lugar de dentro de la unidad de partición 220. En tal ejemplo, se transmiten las solicitudes de escritura y lectura para datos de píxeles a través de la barra transversal de memoria 216 en lugar de datos de fragmento de píxel. Los datos de gráficos procesados pueden visualizarse en un dispositivo de visualización, tal como uno del uno o más dispositivo o dispositivos de visualización 110 de la Figura 1, encaminarse para su procesamiento adicional por el procesador o procesadores 102, o encaminarse para su procesamiento adicional por una de las entidades de procesamiento dentro del procesador paralelo 200 de la Figura 2A.
La Figura 2C es un diagrama de bloques de una agrupación de procesamiento 214 dentro de una unidad de procesamiento paralelo. En un ejemplo, la agrupación de procesamiento es una instancia de una de las agrupaciones de procesamiento 214A-214N de la Figura 2. La agrupación de procesamiento 214 puede estar configurada para ejecutar muchos hilos en paralelo, donde el término "hilo" hace referencia a una instancia de un programa particular que se ejecuta en un conjunto particular de datos de entrada. En algunos ejemplos, se usan técnicas de emisión de instrucción de única instrucción, múltiples datos (SIMD) para soportar la ejecución paralela de un gran número de hilos sin proporcionar múltiples unidades de instrucción independientes. En otros ejemplos, se usan técnicas de única instrucción, múltiples hilos (SIMT) para soportar la ejecución paralela de un gran número de hilos generalmente sincronizados, usando una unidad de instrucciones común configurada para emitir instrucciones a un conjunto de motores de procesamiento dentro de cada una de las agrupaciones de procesamiento. A diferencia del régimen de ejecución de SIMD, donde todos los motores de procesamiento típicamente ejecutan instrucciones idénticas, la ejecución de SIMT permite que diferentes hilos sigan más fácilmente las rutas de ejecución a través de un programa de hilos dado. Los expertos en la materia entenderán que un régimen de procesamiento de SIMD representa un subconjunto funcional de un régimen de procesamiento de SIMT.
La operación de la agrupación de procesamiento 214 puede controlarse mediante un gestor de tuberías 232 que distribuye tareas de procesamiento a procesadores paralelos de SIMT. El gestor de tuberías 232 recibe instrucciones del planificador 210 de la Figura 2 y gestiona la ejecución de estas instrucciones mediante un multiprocesador de gráficos 234 y/o una unidad de textura 236. El multiprocesador de gráficos 234 ilustrado es una instancia ilustrativa de un procesador paralelo de SIMT. Sin embargo, pueden incluirse diversos tipos de procesadores paralelos de SIMT de diferentes arquitecturas dentro de la agrupación de procesamiento 214. Puede incluirse una o más instancias del multiprocesador de gráficos 234 dentro de una agrupación de procesamiento 214. El multiprocesador de gráficos 234 puede procesar datos y puede usarse una barra transversal de datos 240 para distribuir los datos procesados a uno de múltiples destinos posibles, que incluyen otras unidades de sombreado. El gestor de tuberías 232 puede facilitar la distribución de datos procesados especificando destinos para datos procesados que van a distribuirse mediante la barra transversal de datos 240.
Cada multiprocesador de gráficos 234 dentro de la agrupación de procesamiento 214 puede incluir un conjunto idéntico de lógica de ejecución funcional (por ejemplo, unidades de lógica aritmética, unidades de carga-almacén, etc.). La lógica de ejecución funcional puede configurarse de una manera en tubería en la que pueden emitirse nuevas instrucciones antes de que se completen instrucciones anteriores. La lógica de ejecución funcional soporta una diversidad de operaciones que incluyen aritmética de enteros y de coma flotante, operaciones de comparación, operaciones booleanas, desplazamiento de bits y cálculo de diversas funciones algebraicas. En un ejemplo, puede aprovecharse el mismo hardware de unidad funcional para realizar diferentes operaciones y puede estar presente cualquier combinación de unidades funcionales.
Las instrucciones transmitidas a la agrupación de procesamiento 214 constituyen un hilo. Un conjunto de hilos que se ejecuta a través del conjunto de motores de procesamiento paralelo es un grupo de hilos. Un grupo de hilos ejecuta el mismo programa en diferentes datos de entrada. Cada hilo dentro de un grupo de hilos puede asignarse a un motor de procesamiento diferente dentro de un multiprocesador de gráficos 234. Un grupo de hilos puede incluir menos hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando un grupo de hilos incluye menos hilos que el número de motores de procesamiento, uno o más de los motores de procesamiento pueden estar en reposo durante ciclos en los que ese grupo de hilos se está procesando. Un grupo de hilos también puede incluir más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando el grupo de hilos incluye más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234, el procesamiento puede realizarse en ciclos de reloj consecutivos. En un ejemplo, múltiples grupos de hilos pueden ejecutarse concurrentemente en un multiprocesador de gráficos 234.
En un ejemplo, el multiprocesador de gráficos 234 incluye una memoria caché intenta para realizar operaciones de carga y almacén. En un ejemplo, el multiprocesador de gráficos 234 puede prescindir de una caché interna y usar una memoria caché (por ejemplo, caché L1308) dentro de la agrupación de procesamiento 214. Cada multiprocesador de gráficos 234 también tiene acceso a cachés L2 dentro de las unidades de partición (por ejemplo, las unidades de partición 220A-220N de la Figura 2) que se comparten entre todas las agrupaciones de procesamiento 214 y pueden usarse para transferir datos entre los hilos. El multiprocesador de gráficos 234 puede acceder también a la memoria global fuera del chip, que puede incluir uno o más de memoria de procesador paralelo local y/o memoria de sistema. Puede usarse cualquier memoria externa a la unidad de procesamiento paralelo 202 como memoria global. Ejemplos en los que la agrupación de procesamiento 214 incluye múltiples instancias del multiprocesador de gráficos 234 pueden compartir instrucciones y datos comunes, que pueden almacenarse en la caché L1 308.
Cada agrupación de procesamiento 214 puede incluir una MMU 245 (unidad de gestión de memoria) que está configurada para mapear direcciones virtuales en direcciones físicas. En otros ejemplos, una o más instancias de la MMU 245 pueden residir dentro de la interfaz de memoria 218 de la Figura 2. La MMU 245 incluye un conjunto de entradas de tabla de página (PTE) usadas para mapear una dirección virtual a una dirección física de un mosaico (más información sobre la aplicación de mosaico) y opcionalmente, una línea de índice de caché. La MMU 245 puede incluir memorias intermedias de traducción adelantada (TLB) de dirección o cachés que pueden residir dentro del multiprocesador de gráficos 234 o la caché L1 o la agrupación de procesamiento 214. La dirección física se procesa para distribuir la localidad de acceso a datos de superficie para permitir una intercalación de solicitudes eficiente entre unidades de partición. El índice de línea de caché puede usarse para determinar si una solicitud para una línea de caché es un acierto o un fallo.
En aplicaciones de gráficos e informáticas, una agrupación de procesamiento 214 puede estar configurada de manera que cada multiprocesador de gráficos 234 está acoplado a una unidad de textura 236 para realizar operaciones de mapeo de textura, por ejemplo, determinar posicione s de muestra de textura, leer datos de textura y filtrar los datos de textura. Los datos de textura se leen desde una caché L1 de textura interna (no mostrada) o, en algunos ejemplos, de la caché L1 dentro del multiprocesador de gráficos 234 y se extraen de una caché L2, memoria de procesador paralelo local o memoria de sistema, según sea necesario. Cada multiprocesador de gráficos 234 emite tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otra agrupación de procesamiento 214 para su procesamiento adicional o para almacenar la tarea procesada en una caché L2, memoria de procesador paralelo local o memoria de sistema mediante la barra transversal de memoria 216. Una preROP 242 (unidad de operaciones rasterización previa) está configurada para recibir datos del multiprocesador de gráficos 234, dirigir datos a las unidades de ROP, que pueden estar ubicadas con unidades de partición como se describe en el presente documento (por ejemplo, las unidades de partición 220A-220N de la Figura 2). La unidad preROP 242 puede realizar optimizaciones para mezcla de color, organizar datos de color de píxel y realizar traducciones de direcciones.
Se apreciará que, la arquitectura de núcleo descrita en el presente documento es ilustrativa y que son posibles variaciones y modificaciones. Puede incluirse cualquier número de unidades de procesamiento, por ejemplo, el multiprocesador de gráficos 234, las unidades de textura 236, las preROP 242, etc., dentro de una agrupación de procesamiento 214. Además, aunque únicamente se muestra una agrupación de procesamiento 214, una unidad de procesamiento paralelo, como se describe en el presente documento, puede incluir cualquier número de instancias de la agrupación de procesamiento 214. En un ejemplo, cada agrupación de procesamiento 214 puede estar configurada para operar independientemente de otras agrupaciones de procesamiento 214 usando unidades de procesamiento separadas y distintas, cachés L1, etc.
La Figura 2D muestra a multiprocesador de gráficos 234. En tal ejemplo, el multiprocesador de gráficos 234 se acopla con el gestor de tuberías 232 de la agrupación de procesamiento 214. El multiprocesador de gráficos 234 tiene una tubería de ejecución que incluye, pero sin limitación, una caché de instrucciones 252, una unidad de instrucciones 254, una unidad de mapeo de dirección 256, un fichero de registro 258, uno o más núcleos de unidad de procesamiento de gráficos de fin general (GPGPU) 262 y una o más unidades de carga/almacén 266. Los núcleos de GPGPU 262 y las unidades de carga/almacén 266 están acoplados con la memoria caché 272 y la memoria compartida 270 mediante una interconexión de memoria y caché 268.
En un ejemplo, la caché de instrucciones 252 recibe un flujo de instrucciones para que se ejecuten desde el gestor de tuberías 232. Las instrucciones se almacenan en caché en la caché de instrucciones 252 y se despachan para su ejecución por la unidad de instrucciones 254. La unidad de instrucciones 254 puede despachar instrucciones como grupos de hilos (por ejemplo, envolturas), con cada hilo del grupo de hilos asignado a una unidad de ejecución diferente dentro del núcleo de GPGPU 262. Una instrucción puede acceder a cualquiera de un espacio de direcciones local, compartido o global especificando una dirección dentro de un espacio de direcciones unificado. La unidad de mapeo de direcciones 256 puede usarse para traducir direcciones en el espacio de direcciones unificado en una dirección de memoria distinta que puede accederse por las unidades de carga/almacén 266.
El fichero de registro 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador de gráficos 324. El fichero de registro 258 proporciona un almacenamiento temporal para operandos conectados a las rutas de datos de las unidades funcionales (por ejemplo, los núcleos de GPGPU 262, las unidades de carga/almacén 266) del multiprocesador de gráficos 324. En un ejemplo, el archivo de registro 258 se divide entre cada una de las unidades funcionales de tal forma que cada unidad funcional se asigna a una porción especializada del archivo de registro 258. En un ejemplo, el archivo de registro 258 se divide entre las diferentes envolturas que se ejecutan por el multiprocesador de gráficos 324.
Los núcleos de GPGPU 262 puede incluir cada uno unidades de coma flotante (FPU) y/o unidades aritmético-lógicas (ALU) de números enteros que se usan para ejecutar instrucciones del multiprocesador de gráficos 324. Los núcleos de GPGPU 262 pueden ser similares en arquitectura o pueden diferir en arquitectura. Por ejemplo y en un ejemplo, una primera porción de los núcleos de GPGPU 262 incluye una FPU de precisión sencilla y una ALU de números enteros, mientras que una segunda porción de los núcleos de GPGPU incluye una FPU de precisión doble. En un ejemplo, las FPU pueden implementar la norma IEEE 754-2008 para aritmética de coma flotante o posibilitar aritmética de coma flotante de precisión variable. El multiprocesador de gráficos 324 puede incluir adicionalmente una o más unidades de función fija o de función especial para realizar funciones específicas tales como copiar rectángulos u operaciones de mezcla de píxeles. En un ejemplo, uno o más de los núcleos de GPGPU pueden incluir también lógica de función fija o especial.
En un ejemplo, los núcleos de GPGPU 262 incluyen lógica de SIMD capaz de realizar una única instrucción sobre múltiples conjuntos de datos. En un ejemplo, los núcleos de GPGPU 262 pueden ejecutar físicamente instrucciones de SIMD4, de SIMD8 y de SIMD16 y ejecutar lógicamente instrucciones de SIMD1, de SIMD2 y de SIMD32. Las instrucciones de SIMD para los núcleos de GPGPU pueden generarse en tiempo de compilación por un compilador de sombreador o generase automáticamente cuando se ejecutan programas escritos y compilados para arquitecturas de único programa, múltiples datos (SPMD) o SIMT. Múltiples hilos de un programa configurado para el modelo de ejecución de SIMT pueden ejecutarse a través de una única instrucción de SIMD. Por ejemplo y en un ejemplo, ocho hilos de SIMT que realizan las mismas operaciones, o unas similares, se pueden ejecutar en paralelo a través de una única unidad de lógica de SIMD8.
La interconexión de memoria y caché 268 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador de gráficos 324 al fichero de registro 258 y a la memoria compartida 270. En un ejemplo, la interconexión de memoria y caché 268 es una interconexión de barra transversal que permite que la unidad de carga/almacén 266 implemente operaciones de carga y almacén entre la memoria compartida 270 y el fichero de registro 258. El fichero de registro 258 puede operar en la misma frecuencia que los núcleos de GPGPU 262, por lo tanto la transferencia de datos entre los núcleos de GPGPU 262 y el fichero de registro 258 es de latencia muy baja. La memoria compartida 270 puede usarse para posibilitar comunicación entre hilos que se ejecutan en las unidades funcionales dentro del multiprocesador de gráficos 234. La memoria caché 272 puede usarse como una caché de datos, por ejemplo, para almacenar en caché datos de textura comunicados entre las unidades funcionales y la unidad de textura 236. La memoria compartida 270 también puede usarse como una caché gestionada por programa. Los hilos que se ejecutan en los núcleos de GPGPU 262 pueden almacenar programáticamente datos dentro de la memoria compartida además de los datos almacenados en caché automáticamente que se almacenan dentro de la memoria caché 272.
Las Figuras 3A-3B ilustran multiprocesadores de gráficos adicionales. Los multiprocesadores de gráficos 325, 350 ilustrados son variantes del multiprocesador de gráficos 234 de la Figura 2C. Los multiprocesadores de gráficos 325, 350 ilustrados pueden estar configurados como un multiprocesador de envío por flujo continuo (SM) que puede realizar la ejecución simultánea de un gran número de hilos de ejecución.
La Figura 3A muestra un multiprocesador de gráficos 325 de acuerdo con un ejemplo adicional. El multiprocesador de gráficos 325 incluye múltiples instancias adicionales de unidades de recursos de ejecución con relación al multiprocesador de gráficos 234 de la Figura 2D. Por ejemplo, el multiprocesador de gráficos 325 puede incluir múltiples instancias de la unidad de instrucciones 332A-332B, del fichero de registro 334A-334B y de la unidad o unidades de textura 344A-344B. El multiprocesador de gráficos 325 también incluye múltiples conjuntos de unidades de ejecución de gráficos o de cálculo (por ejemplo, el núcleo de GPGPU 336A-336B, el núcleo de GPGPU 337A-337B, el núcleo de GPGPU 338A-338B) y múltiples conjuntos de las unidades de carga/almacén 340A-340B. En un ejemplo, las unidades de recurso de ejecución tienen una caché de instrucciones 330 común, memoria caché de textura y/o datos 342 y memoria compartida 346.
Los diversos componentes pueden comunicarse mediante un tejido de interconexión 327. En un ejemplo, el tejido de interconexión 327 incluye uno o más conmutadores de barra transversal para posibilitar la comunicación entre los diversos componentes del multiprocesador de gráficos 325. En un ejemplo, el tejido de interconexión 327 es una capa de tejido de red de alta velocidad separada sobre la que se apila cada componente del multiprocesador de gráficos 325. Los componentes del multiprocesador de gráficos 325 se comunican con componentes remotos a través del tejido de interconexión 327. Por ejemplo, cada uno de los núcleos de GPGPU 336A-336B, 337A-337B y 3378A-338B puede comunicarse con la memoria compartida 346 a través del tejido de interconexión 327. El tejido de interconexión 327 puede arbitrar la comunicación dentro del multiprocesador de gráficos 325 para garantizar una asignación de ancho de banda equitativa entre componentes.
La Figura 3B muestra un multiprocesador de gráficos 350 de acuerdo con un ejemplo adicional. El procesador de gráficos incluye múltiples conjuntos de los recursos de ejecución 356A-356D, donde cada conjunto de recurso de ejecución incluye múltiples unidades de instrucción, ficheros de registro, núcleos de GPGPU y unidades de carga almacén, como se ilustra en la Figura 2D y en la Figura 3A. Los recursos de ejecución 356A-356D pueden trabajar en conjunto con la unidad o unidades de textura 360A-360D para operaciones de textura, mientras comparten una caché de instrucciones 354 y memoria compartida 362. En un ejemplo, los recursos de ejecución 356A-356D pueden compartir una caché de instrucciones 354 y una memoria compartida 362, así como múltiples instancias de una memoria de textura y/o de caché de datos 358A-358B. Los diversos componentes pueden comunicarse mediante un tejido de interconexión 352 similar al tejido de interconexión 327 de la Figura 3A.
Los expertos en la materia entenderán que la arquitectura descrita en las Figuras 1, 2A-2D y 3A-3B es descriptiva y no limitante en cuanto al alcance de los presentes ejemplos. Por lo tanto, las técnicas descritas en el presente documento pueden implementarse en cualquier unidad de procesamiento configurada apropiadamente, que incluye, sin limitación, uno o más procesadores de aplicación móvil, una o más unidades de procesamiento central de sobremesa o de servidor (CPU) que incluyen CPU de múltiples núcleos, una o más unidades de procesamiento paralelo, tal como la unidad de procesamiento paralelo 202 de la Figura 2, así como uno o más procesadores de gráficos o unidades de procesamiento de fin especial, sin alejarse del alcance de las realizaciones descritas en el presente documento.
En algunos ejemplos, un procesador paralelo o GPGPU como se describe en el presente documento está acoplado de manera comunicativa a núcleos de anfitrión/procesador para acelerar operaciones de gráficos, operaciones de aprendizaje automático, operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU puede acoplarse comunicativamente al procesador de anfitrión/núcleos a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otros ejemplos, la GPU se puede integrar en el mismo paquete o chip que los núcleos y estar acoplada de manera comunicativa a los núcleos a través de un bus/interconexión de procesador interno (es decir, internamente al paquete o chip). Independientemente de la manera en la que esté conectada la GPU, los núcleos de procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. La GPU a continuación usa circuitería/lógica especializada para procesar eficientemente estos comandos/instrucciones.
Técnicas para interconexión de GPU a procesador anfitrión
La Figura 4A ilustra una arquitectura ilustrativa en la que una pluralidad de GPU 410-413 se acopla comunicativamente a una pluralidad de procesadores de múltiples núcleos 405-406 a través de enlaces de alta velocidad 440-443 (por ejemplo, buses, interconexiones de punto a punto, etc.). En un ejemplo, los enlaces de alta velocidad 440-443 soportan un caudal de comunicación de 4 GB/s, 30 GB/s, 80 GB/s o superior, dependiendo de la implementación. Pueden usarse diversos protocolos de interconexión que incluyen, pero sin limitación, PCIe 4.0 o 5.0 y NVLink 2.0. Sin embargo, los principios subyacentes de la invención no están limitados a ningún protocolo o caudal de comunicación particular.
Además, en un ejemplo, dos o más de las GPU 410-413 están interconectadas a través de los enlaces de alta velocidad 444-445, que se pueden implementar usando los mismos protocolos/enlaces que, o unos diferentes de, los usados para los enlaces de alta velocidad 440-443. De manera similar, dos o más de los procesadores de múltiples núcleos 405-406 pueden estar conectados a través del enlace de alta velocidad 433 que puede ser buses de múltiples procesadores simétricos (SMP) que operan a 20 GB/s, 30 GB/s, 120 GB/s o mayor. Como alternativa, toda la comunicación entre los diversos componentes de sistema mostrados en la Figura 4A puede conseguirse usando los mismos protocolos/enlaces (por ejemplo, a través de un tejido de interconexión común). Sin embargo, como se ha mencionado, los principios subyacentes de la invención no están limitados a ningún tipo de tecnología de interconexión particular.
En un ejemplo, cada procesador de múltiples núcleos 405-406 está acoplado de manera comunicativa a una memoria de procesador 401-402, a través de las interconexiones de memoria 430-431, respectivamente, y cada GPU 410-413 está acoplada de manera comunicativa a la memoria de GPU 420-423 a través de las interconexiones de memoria de GPU 450-453, respectivamente. Las interconexiones de memoria 430-431 y 450-453 pueden utilizar las mismas o diferentes tecnologías de acceso de memoria. A modo de ejemplo, y no como limitación, las memorias de procesador 401-402 y las memorias de GPU 420-423 pueden ser memorias volátiles, tales como memorias de acceso aleatorio dinámicas (DRAM) (que incluyen DRAM apiladas), SDRAM DDR de gráficos (GDDR) (por ejemplo, GDDR5, GDDR6), o Memoria de Alto Ancho de Banda (HBM) y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram. En un ejemplo, alguna porción de las memorias puede ser memoria volátil y otra porción puede ser memoria no volátil (por ejemplo, usando una jerarquía de memoria de dos niveles (2LM)).
Como se describe a continuación, aunque los diversos procesadores 405-406 y las GPU 410-413 pueden estar físicamente acoplados a una memoria particular 401-402, 420-423, respectivamente, puede implementarse una arquitectura de memoria unificada en la que el mismo espacio de direcciones de sistema virtual (también denominado como el espacio de "direcciones efectivo") está distribuido entre todas las diversas memorias físicas. Por ejemplo, las memorias de procesador 401-402 pueden comprender cada una 64 GB del espacio de direcciones de memoria de sistema y las memorias de GPU 420-423 puede comprender cada una 32 GB del espacio de direcciones de memoria de sistema (dando como resultado un total de 256 GB de memoria direccionable en este ejemplo).
La Figura 4B ilustra detalles adicionales para una interconexión entre un procesador de múltiples núcleos 407 y un módulo de aceleración de gráficos 446. El módulo de aceleración de gráficos 446 puede incluir uno o más chips de GPU integrados en una tarjeta de línea que está acoplada al procesador 407 mediante el enlace de alta velocidad 440. Como alternativa, el módulo de aceleración de gráficos 446 puede estar integrado en el mismo paquete o chip que el procesador 407.
El procesador ilustrado 407 incluye una pluralidad de núcleos 460A-460D, cada uno con una memoria intermedia de traducción adelantada 461A-461D y una o más cachés 462A-462D. Los núcleos pueden incluir diversos otros componentes para ejecutar instrucciones y procesar datos que no se ilustran para evitar oscurecer los principios subyacentes de la invención (por ejemplo, unidades de extracción de instrucciones, unidades de predicción de ramal, decodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las cachés 462A-462D pueden comprender cachés de nivel 1 (L1) y de nivel 2 (L2). Además, puede incluirse una o más cachés compartidas 426 en la jerarquía de almacenamiento en caché y compartirse por conjuntos de los núcleos 460A-460D. Por ejemplo, un ejemplo del procesador 407 incluye 24 núcleos, cada uno con su propia caché de L1, doce cachés de L2 compartidas y doce cachés de L3 compartidas. En este ejemplo, una de las cachés de L2 y de L3 es compartida por dos núcleos adyacentes. El procesador 407 y el módulo de integración del acelerador de gráficos 446 se conectan con la memoria de sistema 441, que puede incluir las memorias de procesador 401 -402
Se mantiene la coherencia para los datos e instrucciones almacenados en las diversas cachés 462A-462D, 456 y en la memoria de sistema 441 mediante comunicación inter-núcleo a través de un bus de coherencia 464. Por ejemplo, cada caché puede tener una lógica/circuitería de coherencia de caché asociada con la misma para comunicase a través del bus de coherencia 464 en respuesta a lecturas o escrituras detectadas en líneas de caché particulares. En una implementación, se implementa un protocolo de monitorización (snooping) de caché a través del bus de coherencia 464 para monitorizar accesos de caché. Las técnicas de monitorización/coherencia de caché son bien entendidas por los expertos en la materia y no se describirán en detalle en este punto para evitar oscurecer los principios subyacentes de la invención.
En un ejemplo, un circuito intermediario 425 acopla de manera comunicativa el módulo de aceleración de gráficos 446 al bus de coherencia 464, permitiendo que el módulo de aceleración de gráficos 446 participe en el protocolo de coherencia de caché como un homólogo de los núcleos. En particular, una interfaz 435 proporciona conectividad al circuito de intermediario 425 a través del enlace de alta velocidad 440 (por ejemplo, un bus PCIe, NVLink, etc.) y una interfaz 437 conecta el módulo de aceleración de gráficos 446 al enlace 440.
En una implementación, un circuito de integración del acelerador 436 proporciona la gestión de caché, el acceso a memoria, la gestión de contexto y los servicios de gestión de interrupción en nombre de una pluralidad de motores de procesamiento de gráficos 431,432, N del módulo de aceleración de gráficos 446. Los motores de procesamiento de gráficos 431,432, N puede cada uno comprender una unidad de procesamiento de gráficos (GPU) separada. Como alternativa, los motores de procesamiento de gráficos 431,432, N pueden comprender diferentes tipos de motores de procesamiento de gráficos dentro de una GPU, tal como las unidades de ejecución de gráficos, los motores de procesamiento de medios (por ejemplo, los codificadores/decodificadores de vídeo), muestreadores y motores blit. En otras palabras, el módulo de aceleración de gráficos puede ser una GPU con una pluralidad de motores de procesamiento de gráficos 431-432, N o los motores de procesamiento de gráficos 431-432, N pueden ser GPU individuales integradas en un paquete, tarjeta de línea o chip común.
En un ejemplo, el circuito de integración de acelerador 436 incluye una unidad de gestión de memoria (MMU) 439 para realizar diversas funciones de gestión de memoria tales como traducciones de memoria virtual a física (también denominadas traducciones de memoria eficaz a real) y protocolos de acceso de memoria para acceder a la memoria de sistema 441. La MMU 439 puede incluir también una memoria intermedia de traducción adelantada (TLB) (no mostrada) para almacenar en caché las traducciones de direcciones de virtual/efectiva a física/real. En una implementación, una caché 438 almacena comandos y datos para acceso eficiente por los motores de procesamiento de gráficos 431-432, N. En una realización, los datos almacenados en la caché 438 y en las memorias de gráficos 433-434, N se mantienen coherentes con las cachés de núcleo 462A-462D, 456 y la memoria de sistema 411. Como se ha mencionado, esto puede conseguirse mediante el circuito de intermediario 425 que toma parte en el mecanismo de coherencia de caché en nombre de la caché 438 y de las memorias 433-434, N (por ejemplo, enviando actualizaciones a la caché 438 relacionadas con las modificaciones/acceso de las líneas de caché en las cachés de procesador 462A-462D, 456 y recibiendo actualizaciones de la caché 438).
Un conjunto de registros 445 almacena datos de contexto para hilos ejecutados por los motores de procesamiento de gráficos 431 -432, N y un circuito de gestión de contexto 448 gestiona los contextos de hilo. Por ejemplo, el circuito de gestión de contexto 448 puede realizar operaciones de grabación y restauración para grabar y restaurar contextos de los diversos hilos durante conmutaciones de contexto (por ejemplo, cuando se graba el primer hilo y se almacena un segundo hilo de modo que el segundo hilo puede ejecutarse por un motor de procesamiento de gráficos). Por ejemplo, en una conmutación de contexto, el circuito de gestión de contexto 448 puede almacenar valores de registro actuales para una región designada en memoria (por ejemplo, identificada por un puntero de contexto). A continuación, puede restaurar los valores de registro al volver al contexto. En un ejemplo, un circuito de gestión de interrupciones 447 recibe y procesa interrupciones recibidas desde dispositivos de sistema.
En una implementación, las direcciones virtuales/efectivas de un motor de procesamiento de gráficos 431 se traducen a direcciones reales/físicas en la memoria de sistema 411 por la MMU 439. Un ejemplo del circuito de integración de acelerador 436 soporta múltiples (por ejemplo, 4, 8, 16) módulos de acelerador de gráficos 446 y/u otros dispositivos aceleradores. El módulo del acelerador de gráficos 446 puede estar especializado a una única aplicación ejecutada en el procesador 407 o puede compartirse entre múltiples aplicaciones. En un ejemplo, se presenta un entorno de ejecución de gráficos virtualizado en el que los recursos de los motores de procesamiento de gráficos 431-432, N se comparten con múltiples aplicaciones o máquinas virtuales (VM). Los recursos pueden subdividirse en "cortes" que se asignan a diferentes VM y/o aplicaciones basándose en los requisitos de procesamiento y prioridades asociadas con las VM y/o las aplicaciones.
Por lo tanto, el circuito de integración del acelerador actúa como un puente al sistema para el módulo de aceleración de gráficos 446 y proporciona servicios de caché de traducción de dirección y de memoria de sistema. Además, el circuito de integración del acelerador 436 puede proporcionar instalaciones de virtualización para que el procesador de anfitrión gestione la virtualización de los motores de procesamiento de gráficos, las interrupciones y la gestión de memoria.
Debido a que los recursos de hardware de los motores de procesamiento de gráficos 431-432, N se mapean explícitamente al espacio de direcciones real observado por el procesador de anfitrión 407, cualquier procesador de anfitrión puede direccionar estos recursos directamente usando un valor de dirección efectivo. Una función del circuito de integración de acelerador 436, en un ejemplo, es la separación física de los motores de procesamiento de gráficos 431 -432, N de modo que aparecen ante el sistema como unidades independientes.
Como se ha mencionado, en el ejemplo ilustrado, una o más memorias de gráficos 433-434, M están acopladas a cada uno de los motores de procesamiento de gráficos 431-432, N, respectivamente. Las memorias de gráficos 433­ 434, M almacenan instrucciones y datos que se procesan por cada uno de los motores de procesamiento de gráficos 431-432, N. Las memorias de gráficos 433-434, M pueden ser memorias volátiles, tales como DRAM (que incluyen DRAM apiladas), memoria GDDR (por ejemplo, GDDR5, GDDR6), o HBM, y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram.
En un ejemplo, para reducir el tráfico de datos a través del enlace 440, se usan técnicas de desvío para garantizar que los datos almacenados en las memorias de gráficos 433-434, M son datos que se usarán más frecuentemente por los motores de procesamiento de gráficos 431-432, N y que preferentemente no se usarán por los núcleos 460A-460D (al menos no frecuentemente). De manera similar, el mecanismo de desvío intenta mantener los datos necesarios por los núcleos (y, preferentemente, no los motores de procesamiento de gráficos 431-432, N) dentro de las cachés 462A-462D, 456 de los núcleos y la memoria de sistema 411.
La Figura 4C ilustra otro ejemplo en el que el circuito de integración del acelerador 436 está integrado dentro del procesador 407. En este ejemplo, los motores de procesamiento de gráficos 431-432, N se comunican directamente a través del enlace de alta velocidad 440 al circuito de integración del acelerador 436 mediante la interfaz 437 y la interfaz 435 (que, de nuevo, pueden utilizar cualquier forma de bus o protocolo de interfaz). El circuito de integración del acelerador 436 puede realizar las mismas operaciones que aquellas descritas con respecto a la Figura 4B, pero potencialmente a un caudal superior dado su proximidad cercana al bus de coherencia 462 y a las cachés 462A-462D, 426.
Un ejemplo soporta diferentes modelos de programación que incluyen un modelo de programación de proceso dedicado (sin virtualización de módulo de aceleración de gráficos) y modelos de programación compartida (con virtualización). El último puede incluir modelos de programación que se controlan por el circuito de integración del acelerador 436 y modelos de programación que se controlan por el módulo de aceleración de gráficos 446.
En un ejemplo del modelo de proceso especializado, los motores de procesamiento de gráficos 431-432, N están especializados a una única aplicación o proceso bajo un único sistema operativo. La única aplicación puede canalizar otras solicitudes de aplicación a los motores de gráficos 431-432, N, que proporcionan virtualización dentro de una VM/partición.
En los modelos de programación de proceso especializado, los motores de procesamiento de gráficos 431-432, N, pueden compartirse por múltiples particiones de VM/aplicación. Los modelos compartidos requieren un sistema hipervisor para virtualizar los motores de procesamiento de gráficos 431-432, N para permitir el acceso por cada sistema operativo. Para sistemas de única partición sin un hipervisor, los motores de procesamiento de gráficos 431 -432, N son propiedad del sistema operativo. En ambos casos, el sistema operativo puede virtualizar los motores de procesamiento de gráficos 431 -432, N para proporcionar acceso a cada proceso o aplicación.
Para el modelo de programación compartida, el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos individual 431-432, N selecciona un elemento de proceso usando un manejador de proceso. En un ejemplo, se almacenan elementos de proceso en la memoria de sistema 411, y estos son direccionables usando las técnicas de traducción de dirección eficaz a dirección real descritas en el presente documento. El manejador de proceso puede ser un valor específico de la implementación proporcionado al proceso de anfitrión cuando se registra su contexto con el motor de procesamiento de gráficos 431-432, N (es decir, el software del sistema solicitante para añadir el elemento de proceso a la lista de elementos de proceso vinculados). Los 16 bits más bajos del manejador de proceso pueden ser el desplazamiento del elemento de proceso dentro de la lista de elementos de proceso vinculados.
La Figura 4D ilustra un corte de integración del acelerador 490 ilustrativo. Como se usa en el presente documento, un "corte" comprende una porción especificada de los recursos de procesamiento del circuito de integración del acelerador 436. El espacio de direcciones efectivo de la aplicación 482 dentro de la memoria de sistema 411 almacena elementos de proceso 483. En un ejemplo, los elementos de proceso 483 se almacenan en respuesta a las invocaciones de GPU 481 desde las aplicaciones 480 ejecutadas en el procesador 407. Un elemento de proceso 483 contiene el estado del proceso para la correspondiente aplicación 480. Un descriptor de trabajo (WD) 484 contenido en el elemento de proceso 483 puede ser un único trabajo solicitado por una aplicación o puede contener un puntero a una cola de trabajos. En el último caso, el WD 484 es un puntero a la cola de solicitudes de trabajo en el espacio de direcciones de la aplicación 482.
El módulo de aceleración de gráficos 446 y/o los motores de procesamiento de gráficos 431 -432, N individuales pueden compartirse por todos o un subconjunto de los procesos en el sistema. Ejemplos incluyen una infraestructura para establecer el estado de proceso y enviar un WD 484 a un módulo de aceleración de gráficos 446 para empezar un trabajo en un entorno virtualizado.
En una implementación, el modelo de programación de proceso especializado es específico de la implementación. En este modelo, un único proceso posee el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos 431 individual. Debido a que el módulo de aceleración de gráficos 446 es de propiedad de un único proceso, el hipervisor inicializa el circuito de integración del acelerador 436 para la partición propietaria y el sistema operativo inicializa el circuito de integración del acelerador 436 para el proceso propietario en el momento cuando se asigna el módulo de aceleración de gráficos 446.
En la operación, una unidad de extracción de WD 491 en el corte de integración del acelerador 490 extrae el siguiente WD 484 que incluye una indicación del trabajo que va a hacerse por uno de los motores de procesamiento de gráficos del módulo de aceleración de gráficos 446. Los datos del WD 484 pueden almacenarse en registros 445 y usarse por la MMU 439, el circuito de gestión de interrupción 447 y/o el circuito de gestión de contexto 446 como se ilustra. Por ejemplo, un ejemplo de la MMU 439 incluye circuitería de recorrido de segmentos/páginas para acceder a las tablas de segmentos/páginas 486 dentro del espacio de direcciones virtuales de SO 485. El circuito de gestión de interrupciones 447 puede procesar eventos de interrupción 492 recibidos del módulo de aceleración de gráficos 446. Cuando se realizan operaciones de gráficos, una dirección efectiva 493 generada por un motor de procesamiento de gráficos 431-432, N se traduce a una dirección real por la MMU 439.
En un ejemplo, se duplica el mismo conjunto de registros 445 para cada motor de procesamiento de gráficos 431 -432, N y/o puede inicializarse el módulo de aceleración de gráficos 446 y por el hipervisor o el sistema operativo. Cada uno de estos registros duplicados puede incluirse en un corte de integración del acelerador 490. Se muestran registros ilustrativos que pueden inicializarse por el hipervisor en la Tabla 1.
Tabla 1 - Registros de hipervisor inicializados
Figure imgf000013_0001
Se muestran registros ilustrativos que pueden inicializarse por el sistema operativo en la Tabla 2.
Tabla 2 - Registros de sistema operativo inicializados
Figure imgf000013_0002
En un ejemplo, cada WD 484 es específico para un módulo de aceleración de gráficos particular 446 y/o motor de procesamiento de gráficos 431-432, N. Contiene toda la información que requiere un motor de procesamiento de gráficos 431 -432, N para hacer su trabajo o puede ser un puntero a una ubicación de memoria donde la aplicación ha configurado una cola de comandos de trabajo para que se complete.
La Figura 4E ilustra detalles adicionales para un ejemplo de un modelo compartido. Este ejemplo incluye un espacio de direcciones real de hipervisor 498 en el que se almacena una lista de elementos de proceso 499. El espacio de direcciones real del hipervisor 498 es accesible mediante un hipervisor 496 que virtualiza los motores de módulo de aceleración de gráficos para el sistema operativo 495.
Los modelos de programación compartidos permiten que todos o un subconjunto de los procesos desde todas o un subconjunto de las particiones en el sistema usen un módulo de aceleración de gráficos 446. Hay dos modelos de programación donde se comparte el módulo de aceleración de gráficos 446 por múltiples procesos y particiones: compartido en intervalos de tiempo y compartido dirigido por gráficos.
En este modelo, el hipervisor de sistema 496 posee el módulo de aceleración de gráficos 446 y hace disponibles sus funciones a todos los sistemas operativos 495. Para que un módulo de aceleración de gráficos 446 soporte la virtualización por el sistema hipervisor 496, el módulo de aceleración de gráficos 446 puede adherirse a los siguientes requisitos: 1) Una solicitud de trabajo de la aplicación debe ser autónoma (es decir, el estado no necesita que se mantenga entre trabajos), o el módulo de aceleración de gráficos 446 debe proporcionar un mecanismo de grabación y restauración de contexto. 2) Se garantiza que se completa una solicitud de trabajo de la aplicación por el módulo de aceleración de gráficos 446 en una cantidad especificada de tiempo, que incluye cualquier fallo de traducción, o el módulo de aceleración de gráficos 446 proporciona la capacidad de anticiparse al procesamiento del trabajo. 3) El módulo de aceleración de gráficos 446 debe garantizar equidad entre procesos cuando opera en el modelo de programación compartido dirigido.
En un ejemplo, para el modelo compartido, se requiere que la aplicación 480 haga una llamada de sistema al sistema operativo 495 con un tipo del módulo de aceleración de gráficos 446, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero de área de guardado/restablecimiento de contexto (CSRP). El tipo de módulo de aceleración de gráficos 446 describe la función de aceleración dirigida para la llamada de sistema. El tipo de módulo de aceleración de gráficos 446 puede ser un valor específico de sistema. El WD se formatea específicamente para el módulo de aceleración de gráficos 446 y puede ser en forma de un comando de módulo de aceleración de gráficos 446, un puntero de dirección efectiva para una estructura definida por el usuario, un puntero de dirección efectiva a una cola de comandos, o cualquier otra estructura de datos para describir el trabajo para que se haga por el módulo de aceleración de gráficos 446. En un ejemplo, el valor de AMR es el estado de AMR a usar para el proceso actual. El valor pasado al sistema operativo es similar a una aplicación que ajusta el AMR. Si las implementaciones del circuito de integración del acelerador 436 y del módulo de aceleración de gráficos 446 no soportan un registro de anulación de máscara de autoridad de usuario (UAMOR), el sistema operativo puede aplicar el valor de UAMOR actual al valor de AMR antes de pasar el AMR en la llamada del hipervisor. El hipervisor 496 puede aplicar opcionalmente el valor de registro de anulación de máscara de autoridad (AMOR) actual antes de colocar el AMR en el elemento de proceso 483. En un ejemplo, el CSRP es uno de los registros 445 que contienen la dirección eficaz de un área en el espacio de direcciones de la aplicación 482 para que el módulo de aceleración de gráficos 446 grabe y restaure el estado de contexto. Este puntero es opcional si no se requiere que se grabe ningún estado entre trabajos o cuando se anticipa un trabajo. El área de grabación/restauración de contexto puede estar fijada en la memoria de sistema.
Después de recibir la llamada de sistema, el sistema operativo 495 puede verificar que se ha registrado la aplicación 480 y que se le ha proporcionado la autoridad para usar el módulo de aceleración de gráficos 446. El sistema operativo 495 a continuación solicita el hipervisor 496 con la información mostrada en la Tabla 3.
Tabla 3 - parámetros de llamada de SO a Hipervisor
Figure imgf000014_0002
Después de recibir la llamada del hipervisor, el hipervisor 496 verifica que se ha registrado el sistema operativo 495 y se le ha proporcionado la autoridad para usar el módulo de aceleración de gráficos 446. El hipervisor 496 a continuación pone el elemento de proceso 483 en la lista de elementos de proceso vinculados para el correspondiente tipo de módulo de aceleración de gráficos 446. El elemento de proceso puede incluir la información mostrada en la Tabla 4.
Tabla 4 - Información de elemento de proceso
Figure imgf000014_0001
Figure imgf000015_0001
En un ejemplo, el hipervisor inicializa una pluralidad de registros 445 de corte de integración del acelerador 490.
Como se ilustra en la Figura 4F, un ejemplo emplea una memoria unificada direccionable mediante un espacio de direcciones de memoria virtual común usado para acceder a las memorias de procesador físicas 401-402 y a las memorias de GPU 420-423. En esta implementación, las operaciones ejecutadas en las GPU 410-413 utilizan el mismo espacio de direcciones de memoria virtual/efectivo para acceder a las memorias de los procesadores 401 -402 y viceversa, simplificando de esta manera la capacidad de la programación. En un ejemplo, una primera porción del espacio de direcciones virtual/eficaz está asignada a la memoria de procesador 401, una segunda porción a la segunda memoria de procesador 402, una tercera porción a la memoria de GPU 420, y así sucesivamente. El espacio de memoria virtual/efectivo completo (en ocasiones denominado espacio de direcciones efectivo) se distribuye de esta manera a través de cada una de las memorias de procesador 401 -402 y las memorias de GPU 420-423, permitiendo que cualquier procesador o GPU acceda a cualquier memoria física con una dirección virtual mapeada a esa memoria.
En un ejemplo, la circuitería de gestión de desvío/coherencia 494A-494E dentro de una o más de las MMU 439A-439E garantiza la coherencia de caché entre las cachés de los procesadores de anfitrión (por ejemplo, 405) y las GPU 410­ 413 e implementa técnicas de desviación que indican las memorias físicas en las que deberían almacenarse ciertos tipos de datos. Aunque se ilustran múltiples instancias de la circuitería de gestión de desvío/coherencia 494A-494E en la Figura 4F, la circuitería de desvío/coherencia puede implementarse dentro de la MMU de uno o más procesadores de anfitrión 405 y/o dentro del circuito de integración del acelerador 436.
Un ejemplo permite que la memoria anexada a GPU 420-423 se mapee como parte de memoria de sistema, y que se acceda a la misma usando tecnología de memoria virtual compartida (SVM), pero sin adolecer de las desventajas de desempeño habituales asociadas con la coherencia de caché de sistema completa. La capacidad de que se acceda a la memoria adjunta a la GPU 420-423 como memoria de sistema sin sobrecarga de coherencia de caché onerosa proporciona un entorno de operación beneficioso para descarga de GPU. Esta disposición permite que el software del procesador de anfitrión 405 configure operandos y acceda a resultados de cálculo, sin la sobrecarga de las copias de datos de DMA de E/S tradicionales. Tales copias tradicionales implican llamadas de controlador, interrupciones y accesos de E/S de memoria mapeada (MMIO) que son todos ineficaces con relación a los accesos de memoria sencillos. Al mismo tiempo, la capacidad de acceder a memoria de GPU adjunta 420-423 sin sobrecargas de coherencia de caché puede ser crítica para el tiempo de ejecución de un cálculo descargado. En casos con tráfico de memoria de envío por flujo continuo sustancial, por ejemplo, la sobrecarga de la coherencia de caché puede reducir significativamente el ancho de banda de escritura efectivo observado por una GPU 410-413. La eficacia de la configuración del operando, la eficacia de los resultados de acceso, y la eficacia del cálculo de GPU todos desempeñan un papel al determinar la efectividad de la descarga de la GPU.
En una implementación, la selección de entre el procesador de desvío y anfitrión de GPU se controla por una estructura de datos de rastreador de desvío. Puede usarse una tabla de desvío, por ejemplo, que puede ser una estructura de página-granular (es decir, controlada en la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria de GPU adjunta. La tabla de desvío puede implementarse en un rango de memoria robado de una o más memorias de GPU adjuntas 420-423, con o sin una caché de desvío en la GPU 410-413 (por ejemplo, para almacenar en caché entradas frecuentemente/recientemente usadas de la tabla de desvío). Como alternativa, la tabla de desvío entera puede mantenerse dentro de la GPU.
En una implementación, se accede a la entrada de la tabla de desvío asociada con cada acceso en la memoria de GPU adjunta 420-423 antes del acceso real a la memoria de GPU, lo que provoca las siguientes operaciones. En primer lugar, las solicitudes locales desde la GPU 410-413 que encuentran su página en el desvío de la GPU se reenvían directamente a una correspondiente memoria de GPU 420-423. Las solicitudes locales de la GPU que encuentran su página en el desvío de anfitrión se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad como se ha analizado anteriormente). En un ejemplo, las solicitudes del procesador 405 que encuentran la página solicitada en una desviación de procesador de anfitrión completan la petición como una lectura de memoria normal. Como alternativa, las solicitudes dirigidas a una página de GPU de desvío pueden reenviarse a la GPU 410­ 413. La GPU puede a continuación pasar la página a un desvío de procesador de anfitrión si no está usando actualmente la página.
El estado de desvío de una página puede cambiarse por un mecanismo basado en software, un mecanismo asistido por hardware basado por software, o, para un conjunto de casos limitado, un mecanismo basado puramente en hardware.
Un mecanismo para cambiar el estado de desvío emplea una llamada de API (por ejemplo, OpenCL), que, a su vez, llama al controlador del dispositivo de la GPU que, a su vez, envía un mensaje (o pone en cola un descriptor de comando) a la GPU que la dirige para cambiar el estado de desvío y, para algunas transiciones, realiza una operación de vaciado de caché en el anfitrión. Se requiere la operación de vaciado de caché para una transición desde el desvío del procesador de anfitrión 405 a un desvío de GPU, pero no se requiere para la transición opuesta.
En un ejemplo, la coherencia de caché se mantiene haciendo temporalmente que las páginas con desvío de GPU no puedan ser almacenadas en caché por el procesador de anfitrión 405. Para acceder a estas páginas, el procesador 405 puede solicitar el acceso desde la GPU 410 que puede conceder o no el acceso de inmediato, dependiendo de la implementación. Por lo tanto, para reducir la comunicación entre el procesador 405 y la GPU 410, es beneficioso garantizar que las páginas con GPU desviada sean aquellas que se requieren por la GPU, pero no por el procesador de anfitrión 405 y viceversa.
Tubería de procesamiento de gráficos
La Figura 5 ilustra una tubería de procesamiento de gráficos 500. En un ejemplo, un procesador de gráficos puede implementar la canalización de procesamiento de gráficos 500 ilustrada. El procesador de gráficos se puede incluir dentro del subsistema de procesamiento paralelos como se describe en el presente documento, tal como el procesador paralelo 200 de la Figura 2, que, en un ejemplo, es una variante del procesador o procesadores paralelos 112 de la Figura 1. Los diversos sistemas de procesamiento paralelos pueden implementar la tubería de procesamiento de gráficos 500 mediante una o más instancias de la unidad de procesamiento paralelo (por ejemplo, la unidad de procesamiento paralelo 202 de la Figura 2) como se describe en el presente documento. Por ejemplo, una unidad de sombreado (por ejemplo, el multiprocesador de gráficos 234 de la Figura 3) puede estar configurada para realizar las funciones de una o más de una unidad de procesamiento de vértice 504, una unidad de proceso de control de teselación 508, una unidad de procesamiento de evaluación de teselación 512, una unidad de procesamiento de geometría 516 y una unidad de procesamiento de fragmento/píxel 524. Las funciones del ensamblador de datos 502, los ensambladores de primitivas 506, 514, 518, la unidad de teselación 510, el rasterizador 522, y la unidad de operaciones de rasterización 526 pueden realizarse también por otros motores de procesamiento dentro de una agrupación de procesamiento (por ejemplo, la agrupación de procesamiento 214 de la Figura 3) y una correspondiente unidad de partición (por ejemplo, la unidad de partición 220A-220N de la Figura 2). La tubería de procesamiento de gráficos 500 puede implementarse usando unidades de procesamiento especializadas para una o más funciones. En un ejemplo, una o más porciones de la canalización de procesamiento de gráficos 500 se pueden realizar mediante lógica de procesamiento paralelo dentro de un procesador de propósito general (por ejemplo, una CPU). En un ejemplo, una o más porciones de la canalización de procesamiento de gráficos 500 pueden acceder a memoria en chip (por ejemplo, la memoria de procesador paralelo 222 como en la Figura 2) a través de una interfaz de memoria 528, que puede ser una instancia de la interfaz de memoria 218 de la Figura 2.
En un ejemplo, el ensamblador de datos 502 es una unidad de procesamiento que recopila datos de vértice para superficies y primitivas. El ensamblador de datos 502 emite, a continuación, los datos de vértice, incluyendo los atributos de vértice, a la unidad de procesamiento de vértice 504. La unidad de procesamiento de vértice 504 es una unidad de ejecución programable que ejecuta programas de sombreador de vértices, iluminando y transformando datos de vértice como se especifica por los programas de sombreador de vértices. La unidad de procesamiento de vértice 504 lee datos que se almacenan en caché, memoria local o de sistema para su uso en el procesamiento de los datos de vértice y puede programarse para transformar los datos de vértice desde una representación de coordinadas basada en objeto a un espacio de coordenadas de espacio global o un espacio de coordinadas de dispositivo normalizado.
Una primera instancia de un ensamblador de primitivas 506 recibe atributos de vértice desde la unidad de procesamiento de vértice 504. Las lecturas del ensamblador de primitivas 506 almacenaron atributos de vértice según se necesite y construye primitivas gráficas para su procesamiento por la unidad de procesamiento de control de teselación 508. Las primitivas gráficas incluyen triángulos, segmentos de línea, puntos, parches y así sucesivamente, según se soportan por diversas interfaces de programación de aplicación (API) de procesamiento gráfico.
La unidad de procesamiento de control de teselación 508 trata los vértices introducidos como puntos de control para un parche geométrico. Los puntos de control se transforman desde una representación introducida desde el parche (por ejemplo, las bases del parche) a una representación que es adecuada para su uso en evaluación de superficie por la unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de control de teselación 508 también puede calcular factores de teselación para bordes de parches geométricos. Se aplica un factor de teselación a un único borde y cuantifica un nivel de vista dependiente de detalle asociado con el borde. Una unidad de teselación 510 está configurada para recibir los factores de teselación para bordes de un parche y para teselar el parche en múltiples primitivas geométricas, tales como primitivas de línea, triángulo o cuadrilátero, que se transmiten a una unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de evaluación de teselación 512 opera en coordenadas parametrizadas del parche subdividido para generar una representación superficial y atributos de vértice para cada vértice asociado con las primitivas geométricas.
Una segunda instancia de un ensamblador de primitivas 514 recibe atributos de vértice de la unidad de procesamiento de evaluación de teselación 512, que lee atributos de vértice almacenados según sea necesario, y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de geometría 516. La unidad de procesamiento de geometría 516 es una unidad de ejecución programable que ejecuta programas de sombreador de geometría para transformar primitivas geométricas recibidas desde el ensamblador de primitivas 514 como se especifica por los programas de sombreador de geometría. En un ejemplo, la unidad de procesamiento de geometría 516 está programada para subdividir las primitivas de gráficos en una o más primitivas de gráficos nuevas y calcular parámetros usados para rasterizar las nuevas primitivas de gráficos.
En algunos ejemplos, la unidad de procesamiento de geometría 516 puede añadir o borrar elementos en el flujo de geometría. La unidad de procesamiento de geometría 516 emite los parámetros y vértices que especifican nuevas primitivas geométricas al ensamblador de primitivas 518. El ensamblador de primitivas 518 recibe los parámetros y vértices desde la unidad de procesamiento de geometría 516 y construye primitivas geométricas para su procesamiento por una unidad de escalado de ventanilla, selección y recorte 520. La unidad de procesamiento de geometría 516 lee datos que se almacenan en memoria de procesador paralelo o memoria de sistema para su uso en el procesamiento de datos de geometría. La unidad de escala, selección y recorte de ventana gráfica 520 realiza recorte, selección y escalado de ventana gráfica y emite las primitivas de gráficos procesadas a un rasterizador 522.
El rasterizador 522 puede realizar selección de profundidad y otras optimizaciones basadas en profundidad. El rasterizador 522 también realiza conversión de exploración en las nuevas primitivas geométricas para generar fragmentos y emitir esos fragmentos y datos de cobertura asociados a la unidad de procesamiento de fragmento/píxel 524. La unidad de procesamiento de fragmento/píxel 524 es una unidad de ejecución programable que está configurada para ejecutar programas sombreadores de fragmentos o programas sombreadores de píxeles. La unidad de procesamiento de fragmento/píxel 524 que transforma fragmentos o píxeles recibidos desde el rasterizador 522, según se especifica por los programas sombreadores de fragmentos o de píxeles. Por ejemplo, la unidad de procesamiento de fragmento/píxel 524 puede programarse para realizar operaciones incluidas, pero sin limitación a, mapeo de texturas, sombreado, combinación, corrección de textura y corrección de perspectiva para producir fragmentos o píxeles sombreados que se emiten a una unidad de operaciones de rasterización 526. La unidad de procesamiento de fragmento/píxel 524 puede leer datos que se almacenan en o bien la memoria de procesador paralelo o bien la memoria de sistema para su uso cuando procesa los datos de fragmento. Los programas de sombreador de fragmento o píxeles pueden configurarse para sombrear en muestra, píxel, mosaico u otras granularidades dependiendo de la tasa de muestreo configurada para las unidades de procesamiento.
La unidad de operaciones de rasterización 526 es una unidad de procesamiento que realiza operaciones de ráster que incluye, pero sin limitación a, estarcido, prueba z, mezcla y similares, y emite datos de píxel como datos de gráficos procesados que hay que almacenar en memoria gráfica (por ejemplo, memoria de procesador paralelo 222 como en la Figura 2, y/o memoria de sistema 104 como en la Figura 1, que hay que visualizar en el uno o más dispositivo o dispositivos de visualización 110 o para su procesamiento adicional por uno del uno o más procesador o procesadores 102 o procesador o procesadores paralelos 112. En algunos ejemplos, la unidad de operaciones de rasterización 526 está configurada para comprimir datos z o de color que se escriben en memoria y descomprimir datos z o de color que se leen desde memoria.
Ejemplos de selector de calidad basado en vecinos 360, ajustador de rango, gestor de ventanilla y estimador de movimiento
Pasando ahora a la Figura 6, un ejemplo de un sistema de procesamiento electrónico 600 puede incluir un procesador de visualización 611 para generar datos de imagen para un visualizador, y una memoria 612 acoplada comunicativamente al procesador de visualización 611 para almacenar un fotograma bidimensional (2D) que corresponde a una proyección desde un espacio de vídeo 360. El sistema 600 puede incluir adicionalmente un selector de calidad 613 acoplado comunicativamente al procesador de visualización 611 para seleccionar un factor de calidad para un primer bloque del fotograma 2D basándose en información de calidad de uno o más bloques vecinos del fotograma 2D, en donde los uno o más bloques vecinos del fotograma 2D pueden incluir uno o más bloques que son vecinos del primer bloque del fotograma 2D únicamente en el espacio de vídeo 360 (por ejemplo, como se describe en más detalle a continuación). Por ejemplo, el selector de calidad 613 puede configurarse para seleccionar un valor de parámetro de cuantificación (QP) para el segundo bloque basándose en información de QP para el primer bloque si se determina que el primer bloque es el vecino del segundo bloque en el espacio de vídeo 360.
En algunos ejemplos, el sistema 600 puede incluir adicionalmente un ajustador de rango 614 acoplado comunicativamente al procesador de visualización 611 para ajustar un rango de búsqueda para el fotograma 2D basándose en un área de búsqueda del fotograma 2D (por ejemplo, como se describe en más detalle a continuación). Por ejemplo, el fotograma 2D puede corresponder a una instantánea de formato de ERP para el espacio de vídeo 360 y el ajustador de rango 614 puede configurarse para ajustar que un primer rango de búsqueda para un área polar del fotograma 2D sea relativamente mayor que un segundo rango de búsqueda para un área central del fotograma 2D. Algunos ejemplos del sistema 600 también pueden incluir un gestor de ventanilla 615 acoplado comunicativamente al procesador de visualización 611 para determinar si una petición para una ventanilla del fotograma 2D se extiende más allá de un primer borde del fotograma 2D y para rellenar la ventanilla solicitada con información de imagen envolvente (por ejemplo, como se describe en más detalle a continuación). Por ejemplo, el gestor de ventanilla 615 puede configurarse para rellenar la ventanilla solicitada con información de imagen que comienza desde un segundo borde del fotograma que es contiguo con el primer borde en el espacio de vídeo 360. Algunos ejemplos del sistema 600 pueden incluir adicionalmente un estimador de movimiento 616 acoplado comunicativamente al procesador de visualización 611 para estimar información de movimiento basándose tanto en información de color como en información de profundidad (por ejemplo, como se describe en más detalle a continuación). Por ejemplo, el estimador de movimiento 616 puede configurarse para determinar una primera estimación de movimiento basándose en la información de profundidad, y para determinar una segunda estimación de movimiento basándose en la primera estimación de movimiento y la información de color.
Ejemplos de cada uno de los anteriores procesador de visualización 611, memoria 612, selector de calidad 613, ajustador de rango 614, gestor de ventanilla 615, estimador de movimiento 616 y otros componentes de sistema pueden implementarse en hardware, software o cualquier combinación adecuada de los mismos. Por ejemplo, implementaciones de hardware pueden incluir lógica configurable, tal como, por ejemplo, matrices lógicas programables (PLA), FPGA, dispositivos lógicos programables complejos (CPLD), o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, semiconductor complementario de óxido metálico (CMOS) o tecnología de lógica de transistor a transistor (TTL) o cualquier combinación de los mismos. Como alternativa, o adicionalmente, estos componentes pueden implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como memoria de acceso aleatorio (RAM), memoria de solo lectura (ROM), ROM programable (PROM), firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERl , JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares.
Ejemplos de selector de calidad
Pasando ahora a la Figura 7A, una realización de un aparato de gráficos 700 incluye un codificador 721 para codificar un primer bloque de un fotograma bidimensional (2D), en donde el fotograma 2D corresponde a una proyección de un espacio de vídeo 360, y un selector de calidad 722 acoplado comunicativamente al codificador 721 para determinar si el primer bloque es un vecino de un segundo bloque del fotograma 2D en el espacio de vídeo 360, y para seleccionar un factor de calidad para el segundo bloque basándose en información de calidad para el primer bloque si se determina que el primer bloque es el vecino del segundo bloque en el espacio de vídeo 360. Por ejemplo, el selector de calidad 722 está configurado para seleccionar un valor de QP para el segundo bloque basándose en información de QP para el primer bloque si se determina que el primer bloque es el vecino del segundo bloque en el espacio de vídeo 360. El selector de calidad 722 también está configurado para determinar una diferencia entre un primer factor de calidad para el primer bloque y el factor de calidad seleccionado, y para ajustar el factor de calidad seleccionado para mantener la diferencia dentro de un umbral de diferencia. El codificador 721 puede configurarse para codificar el segundo bloque del fotograma 2D basándose en el factor de calidad seleccionado. El tamaño de un bloque puede variar en diversas realizaciones. Por ejemplo, un bloque puede referirse a un píxel individual, un grupo de píxeles o un conjunto de píxeles.
Algunas realizaciones del aparato 700 pueden incluir adicionalmente cualquiera de un ajustador de rango acoplado comunicativamente al codificador para ajustar un rango de búsqueda para el fotograma 2D basándose en un área de búsqueda del fotograma 2D, un gestor de ventanilla acoplado comunicativamente al codificador para determinar si una petición para una ventanilla del fotograma 2D se extiende más allá de un primer borde del fotograma 2D y para rellenar la ventanilla solicitada con información de imagen envolvente, y/o un estimador de movimiento acoplado comunicativamente al procesador de visualización para estimar información de movimiento basándose tanto en información de color como en información de profundidad.
Realizaciones de cada uno de los anteriores codificador 721, selector de calidad 722 y otros componentes del aparato 700 pueden implementarse en hardware, software o cualquier combinación de los mismos. Por ejemplo, implementaciones de hardware pueden incluir lógica configurable, tal como, por ejemplo, PLA, FPGA, CPLD, o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, CMOS o tecnología de TTL o cualquier combinación de los mismos. Como alternativa, o adicionalmente, estos componentes pueden implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como RAM, ROM, PROM, firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERL, JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares.
Pasando ahora a la Figura 7B, una realización de un método 730 de procesamiento de un vídeo 360 incluye codificar un primer bloque de un fotograma bidimensional (2D), en donde el fotograma 2D corresponde a una proyección de un espacio de vídeo 360 en el bloque 731, determinar si el primer bloque es un vecino de un segundo bloque del fotograma 2D en el espacio de vídeo 360 en el bloque 732, y seleccionar un factor de calidad para el segundo bloque basándose en información de calidad para el primer bloque si se determina que el primer bloque es el vecino del segundo bloque en el espacio de vídeo 360 en el bloque 733. Por ejemplo, el método 730 incluye seleccionar un valor de QP para el segundo bloque basándose en información de QP para el primer bloque si se determina que el primer bloque es el vecino del segundo bloque en el espacio de vídeo 360 en el bloque 734. El método 730 incluye adicionalmente determinar una diferencia entre un primer factor de calidad para el primer bloque y el factor de calidad seleccionado en el bloque 735, y ajustar el factor de calidad seleccionado para mantener la diferencia dentro de un umbral de diferencia en el bloque 736. En algunas realizaciones, el método 730 puede incluir adicionalmente codificar el segundo bloque del fotograma 2D basándose en el factor de calidad seleccionado en el bloque 737.
Realizaciones del método 730 pueden implementarse en un sistema, aparato, GPU o unidad de procesamiento paralelo (PPU), tales como, por ejemplo, los descritos en el presente documento. Más particularmente, implementaciones de hardware del método 730 pueden incluir lógica configurable, tal como, por ejemplo, PLA, FPGA, CPLD, o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, CMOS o tecnología de TTL o cualquier combinación de los mismos. Como alternativa, o adicionalmente, el método 730 puede implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como RAM, ROM, PROM, firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERL, JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares. Por ejemplo, el método 730 puede implementarse en un medio legible por ordenador.
Por ejemplo, realizaciones o porciones del método 730 pueden implementarse en aplicaciones o software de controlador (por ejemplo, a través de una API). Otras realizaciones o porciones del método 730 pueden implementarse en código especializado (por ejemplo, sombreadores) que van a ejecutarse en una GPU. Otras realizaciones o porciones del método 730 pueden implementarse en lógica de función fija o hardware especializado (por ejemplo, en la GPU).
Los cambios de QP a través de una imagen o los límites de cara de vídeo 360 están restringidos. Por ejemplo, ciertos bloques vecinos en la esfera 360 original pueden proyectarse como bloques discontinuos en formatos 2D debido a múltiples superficies 2D discontinuas (por ejemplo, formato de mapa de cubo) o límite de fotograma 2D (por ejemplo, formato de ERP). Algunas realizaciones pueden garantizar que los cambios de QP a través de tales bloques que originalmente son vecinos en la esfera 360 pueden restringirse de modo que artefactos visibles (por ejemplo, una aparente discontinuidad vertical u horizontal larga) pueden reducirse o eliminarse cuando se extrae una ventanilla del mapa 2D proyectado codificado (por ejemplo, que podría provocarse de otra manera mediante cambios de QP abruptos).
Sin limitarse a una teoría de operación, el objetivo del control de tasa basado en bloques es soportar una tasa de bits objetivo. Codificar para cada bloque puede tener su propio valor de QP. En algunos sistemas, el control de tasa basado en bloques puede cambiar valores de QP sobre la marcha. El sistema asigna un presupuesto para un fotograma actual, se selecciona un valor de QP inicial y la codificación continúa usando ese valor de QP. Para cada bloque, después de la decodificación, el sistema determina la cantidad de presupuesto empleado y cómo la codificación está tendiendo a cumplir el presupuesto asignado. Si se determina que la codificación está tendiendo a exceder el presupuesto, el sistema necesita disminuir la calidad para cumplir el presupuesto. El sistema aumenta el valor de QP para disminuir la calidad de codificación. Si el valor de QP se ajusta demasiado entre bloques vecinos, sin embargo, la diferencia en calidad entre bloques adyacentes puede ser más evidente para el espectador como un artefacto. El sistema puede hacer cambios más graduales al valor de QP entre bloques vecinos. Con vídeo 360, sin embargo, los bloques vecinos pueden expandir los bordes del fotograma 2D. En otros sistemas, el control de tasa basado en bloques puede resultar en artefactos visibles cuando la ventanilla cruza un borde del fotograma 2D proyectado desde el espacio de vídeo 360.
Ventajosamente, se proporciona el control de tasa basado en bloques para bloques vecinos que incluye bloques vecinos del espacio de vídeo 360, incluso si esos bloques no son vecinos en el fotograma 2D. Algunas realizaciones pueden aumentar el número de bloques vecinos disponibles para la selección de calidad de codificación, mejorando de este modo la selección hecha y reduciendo o eliminando los artefactos visibles.
El valor de QP seleccionado se restringe basándose en una diferencia entre el factor de QP seleccionado basándose en un cálculo de presupuesto y los valores de QP de los bloques vecinos (por ejemplo, incluyendo vecinos del espacio de vídeo 360). Se incluye un umbral de diferencia, que es un porcentaje (ningún cambio de valor de QP mayor del 10 %). Por ejemplo, un cálculo basado en presupuesto puede solicitar un aumento de valor de QP del 20 %, que excede el umbral de diferencia del 10 %. El valor de QP seleccionado para el bloque actual se ajusta para permanecer dentro del 10 % de los bloques vecinos (un promedio de cada bloque vecino anteriormente codificado, incluyendo vecinos 360). Para el siguiente bloque (o fila de bloques), el cálculo basado en presupuesto puede aún indicar que se necesita una reducción en calidad, por tanto el valor de QP puede aumentarse de nuevo (por ejemplo, hasta otro 10 % basándose en el umbral de diferencia). Esto puede continuar hasta que el valor de QP se ha incrementado lo suficiente para cumplir el presupuesto.
Cuando un vídeo 3D se mapea a 2D, en el mapa 2D puede no haber ninguna conexión entre los bordes del mapa.
Pero en el espacio 3D, los bordes izquierdo y derecho pueden estar conectados. Puede haber una correlación entre diversos bordes, y los bordes pueden ser vecinos en la esfera 3D. Algunas realizaciones pueden extender los bloques vecinos usados para selección de calidad de codificación para incluir bloques vecinos del espacio 3D, además de bloques vecinos en el espacio 2D. Por ejemplo, incluso si algunos píxeles no son vecinos en el espacio 2D, si los píxeles son vecinos en el espacio 3D pueden tratarse como vecinos en el espacio 2D y pueden añadirse al grupo de vecinos disponibles para la selección de calidad (por ejemplo, además de píxeles ya adyacentes o vecinos en el espacio 2D). La definición de vecino puede variar basándose en el tipo de codificación, el tipo de procesamiento y/u otros factores.
Algunas realizaciones pueden proporcionar ventajosamente selección de calidad basada en bloques mejorada para vídeo 360. Por ejemplo, como se explica en mayor detalle a continuación, para vídeo 360 en un plano proyectado 2D, los bloques vecinos en el espacio 3D original no son necesariamente adyacentes en el espacio 2D. Si un bloque actual tiene bloques vecinos en el espacio 3D original que ya están codificados, algunas realizaciones pueden usar esa información de vecino para la selección de calidad para el bloque actual. Algunas realizaciones pueden utilizar los vecinos del espacio 3D para mejorar la selección de calidad para toda o la mayoría de la codificación que puede verse afectada por una discontinuidad provocada por un mapeo 2D (por ejemplo, superficies, límites, etc.).
Algunas realizaciones pueden proporcionar ventajosamente selección de calidad de codificación mejorada para vídeo 360. Por ejemplo, la selección de calidad de codificación puede posibilitarse a lo largo de límites de fotogramas de vídeo 2D y caras de tales fotogramas de vídeo 2D que no son contiguos en el plano 2D proyectado cuando tales límites son contiguos en el correspondiente vídeo 360 (por ejemplo, en la correspondiente esfera de vídeo 360). En particular, en algunos contextos de codificación de vídeo 360, pueden proporcionarse fotogramas de vídeo 2D que son proyecciones de un espacio de vídeo 360 (por ejemplo, proyecciones desde vídeo 360 a un plano 2D basándose en un formato predeterminado) a un codificador para codificar en un flujo de bits, tal como un flujo de bits que se ajusta a las normas. El flujo de bits puede almacenarse o transmitirse o similar y procesarse mediante un decodificador. El decodificador, tal como un decodificador que se ajusta a las normas, puede decodificar el flujo de bits para reconstruir los fotogramas de vídeo 2D (por ejemplo, la proyecciones desde el vídeo 360). Los fotogramas de vídeo 2D reconstruidos pueden procesarse para su presentación a un usuario. Por ejemplo, una ventanilla seleccionada puede usarse para determinar una porción o porciones de los fotogramas de vídeo 2D reconstruidos, que pueden montarse según sea necesario y proporcionarse a un dispositivo de visualización para su presentación a un usuario.
En tales técnicas, las técnicas de códec (codificación/decodificación) que se ajustan a las normas pueden incluir selección de calidad de codificación en fotograma para bloques/píxeles adyacentes o vecinos en fotogramas de vídeo que cruzan los límites de fotograma/bloque (por ejemplo, macrobloque, unidad de codificación, etc.). Sin embargo, en la proyección desde el espacio de vídeo 360 a los fotogramas de vídeo 2D, algunos bloques que son vecinos en el espacio de vídeo 360 se presentan o formatean como bloques no vecinos en los fotogramas de vídeo 2D. En algunas realizaciones, la expresión no vecino puede indicar bloques que no son espacialmente adyacentes (por ejemplo, en un fotograma de vídeo 2D) y que conjuntos de bloques no tienen píxeles vecinos entre los mismos (por ejemplo, que ningún píxel de un primer bloque es vecino espacialmente de ningún píxel de un segundo bloque en un fotograma de vídeo 2D). Por ejemplo, tales bloques vecinos en el espacio de vídeo 3D pueden estar en límites opuestos del correspondiente fotograma de vídeo 2D, en límites no adyacentes de proyecciones de cara dentro del correspondiente fotograma de vídeo 2D o similar, como se analiza adicionalmente en el presente documento.
En algunas realizaciones, un grupo de bloques para selección de calidad de codificación puede identificarse dentro de un fotograma de vídeo 2D que es una proyección desde un espacio de vídeo 360 de tal forma que el grupo de bloques incluye un primer bloque y un segundo bloque que son bloques no vecinos en el fotograma de vídeo 2D y de tal forma que tienen un primer píxel individual del primer bloque y un segundo píxel individual del segundo bloque que son píxeles vecinos en el espacio de vídeo 360. El grupo de bloques identificado puede codificarse basándose en información de codificación de los bloques vecinos. Tales técnicas pueden repetirse sobre una base de línea a línea o bloque a bloque para cualquiera o todos los bloques que no son vecinos en el fotograma de vídeo 2D, pero son bloques vecinos en el espacio de vídeo 360 para generar un fotograma de vídeo codificado basándose en el fotograma de vídeo 2D individual.
Tales técnicas de selección de bloque, emparejamiento y/o selección de calidad de codificación pueden implementarse en cualquier contexto de codificación, decodificación, preprocesamiento de vídeo o posprocesamiento de vídeo. Por ejemplo, tales técnicas pueden aplicarse dentro de un bucle de codificación local de un codificador de vídeo, como un preprocesamiento antes de proporcionar fotogramas de vídeo a un codificador, como procesamiento de decodificador posterior o similar, como se analiza adicionalmente en el presente documento. Adicionalmente, las técnicas analizadas pueden usarse en cualquier contexto de codificación adecuado, tal como en la implementación de los códecs basados en las normas de codificación de vídeo avanzada (AVC) H.264/MPEG-4, los códecs basados en las normas de codificación de vídeo de alta eficiencia (H.265/HEVC), los códecs de codificación de vídeo (H.266) propuestos, los códecs basados en las normas de la Alianza para los Medios Abiertos (AOM), tales como la norma AV1, los códecs basados en las normas MPEG, tales como la norma MPEG-4, los códecs basados en las normas VP9 o cualquier otro códec adecuado o extensión o perfil de los mismos. Las técnicas analizadas reducen los artefactos en bloques de vídeo codificado visualizado a usuarios y proporcionan una experiencia de vídeo 360 mejorada.
La Figura 7C es un diagrama ilustrativo de un sistema 740 para procesar fotogramas de vídeo 2D que se proyectan desde un espacio de vídeo 360. El sistema 740 puede incluir una fuente de vídeo 360741, un proyector de 360 a 2D 742, un codificador 743, un generador de ventanillas 747 y un visualizador 748. Por ejemplo, el codificador 743 puede incluir un selector de calidad de codificación 744, que puede incluir adicionalmente un selector de bloque 745 y un selector de calidad 746.
El codificador 743 puede recibir fotogramas de vídeo 2D (por ejemplo, fotogramas de vídeo 2D que se proyectan desde un espacio 360 o esférico) desde el proyector de 360 a 2D 742, y el codificador 743 puede generar un correspondiente flujo de bits de salida. Aunque se ilustra con respecto al codificador 743 que recibe fotogramas de vídeo 2D desde el proyector de 360 a 2D 742, el codificador 743 puede recibir fotogramas de vídeo 2D desde cualquier fuente adecuada, tal como memoria, otro dispositivo o similar. El codificador 743 puede proporcionar una capacidad de codificador para el sistema 740. La fuente de vídeo 360741 puede incluir una cámara o grupo de cámaras adecuado que puede lograr vídeo 360 o vídeo esférico o similar. Adicionalmente, el proyector de 360 a 2D 742 puede recibir vídeo 360 y el proyector de 360 a 2D 742 puede generar fotogramas de vídeo 2D usando cualquier técnica o técnicas adecuadas. Por ejemplo, el proyector de 360 a 2D 742 puede proyectar vídeo 360 a fotogramas de vídeo 2D en cualquier formato 2D adecuado que representa la proyección del vídeo 360.
Otros módulos o componentes del sistema 740 también pueden recibir fotogramas de vídeo 2D o porciones de los mismos según se necesiten. El sistema 740 puede proporcionar, por ejemplo, compresión de vídeo y el sistema 740 puede ser un codificador de vídeo implementado a través de un ordenador o dispositivo informático o similar. Por ejemplo, el sistema 740 puede generar un flujo de bits de salida que es compatible con una norma (códec) de compresión-descompresión de vídeo, tal como la norma de codificación de vídeo avanzada (AVC) H.264/MPEG-4, la norma de codificación de vídeo de alta eficiencia (H.265/HEVC), la norma de codificación de vídeo (H.266) propuesta, la norma VP8, la norma VP9 o similar.
El codificador 743 puede recibir un flujo de bits de entrada que corresponde a o representa fotogramas 2D que se proyectan desde un espacio 360 o esférico y el codificador 743 puede generar correspondientes fotogramas de vídeo 2D (por ejemplo, de tal forma que se proyectan fotogramas 2D desde un espacio 360 o esférico). También puede recibirse un flujo de bits de entrada desde una memoria, otro dispositivo o similar. El codificador 743 puede proporcionar una capacidad de decodificador para el sistema 740. El flujo de bits de entrada puede decodificarse a fotogramas de vídeo 2D, que pueden visualizare a un usuario a través del visualizador 748 basándose en una ventanilla seleccionada dentro de los fotogramas de vídeo 2D. El visualizador 748 puede ser cualquier visualizador adecuado, tal como un visualizador de realidad virtual (RV), un visualizador de RV montado en la cabeza o similar.
Adicionalmente, aunque se ilustra con todos de la fuente de vídeo 360741, el proyector de 360 a 2D 742, el codificador 743, el generador de ventanillas 747 y el visualizador 748, el sistema 740 puede incluir únicamente algunos de estos componentes. Diversas combinaciones de estos componentes, así como otros componentes, pueden proporcionarse para el sistema 740 dependiendo de la naturaleza del dispositivo o dispositivos que implementan el sistema 740. El sistema 740 puede implementarse a través de cualquier dispositivo o dispositivos adecuados, tales como, por ejemplo, un servidor, un ordenador personal, un ordenador portátil, una tableta, un tabléfono, un teléfono inteligente, una cámara digital, una consola de juegos, un dispositivo ponible, un dispositivo de visualización, un dispositivo todo en uno, un dispositivo todo en dos o similar o plataforma, tal como una plataforma móvil o similar. Por ejemplo, como se usa en el presente documento, un sistema, dispositivo, ordenador o dispositivo informático puede incluir cualquier tal dispositivo o plataforma.
Como se ha analizado, el codificador 743 puede recibir fotogramas de vídeo 2D. Los fotogramas de vídeo 2D (así como otros fotogramas de vídeo analizados en el presente documento) pueden incluir cualesquiera datos de vídeo adecuados, tales como píxeles o valores o datos de píxel, secuencia de vídeo, instantáneas de una secuencia de vídeo, fotogramas de vídeo, instantáneas de vídeo, secuencia de fotogramas de vídeo, grupo de instantáneas, grupos de instantáneas, datos de vídeo o similares en cualquier resolución adecuada. Los fotogramas de vídeo 2D pueden caracterizarse como vídeo, datos de vídeo de entrada, datos de vídeo, vídeo sin procesar o similar. Por ejemplo, los fotogramas de vídeo 2D pueden ser matriz de gráficos de vídeo (VGA), alta definición (HD), Full-HD (por ejemplo, 1080p), o vídeo con resolución 4K o similar. Adicionalmente, los fotogramas de vídeo 2D pueden incluir cualquier número de fotogramas de vídeo, secuencias de fotogramas de vídeo, instantáneas, grupos de instantáneas o similar. Técnicas analizadas en el presente documento se analizan con respecto a píxeles y valores de píxel de fotogramas de vídeo por claridad de presentación. Sin embargo, tales fotogramas de vídeo y/o datos de vídeo pueden caracterizarse como instantáneas, instantáneas de vídeo, fotogramas, secuencias de fotogramas, secuencias de vídeo o similar. Como se usa en el presente documento, el término píxel o valor de píxel puede incluir un valor que representa un píxel de un fotograma de vídeo, tal como un valor de luminancia para el píxel, un valor de canal de color para el píxel o similar. En diversos ejemplos, fotogramas de vídeo 2D pueden incluir vídeo sin procesar o vídeo decodificado. Adicionalmente, como se analiza en el presente documento, el codificador 743 puede proporcionar tanto funcionalidad de codificación como de decodificación.
El selector de calidad de codificación 744 puede recibir fotogramas de vídeo 2D que incluyen proyecciones desde un espacio de vídeo 360. Como se usa en el presente documento, el término proyectado desde un espacio de vídeo 360 puede indicar que el formato de fotogramas de vídeo 2D puede incluir información de instantánea o vídeo que corresponde a un espacio 360, espacio esférico o similar. Por ejemplo, un vídeo 360 puede formatearse o proyectarse a una imagen 2D o plano de fotograma de vídeo o similar usando técnicas conocidas. Tales proyecciones (y sus diversas ventajas y desventajas) pueden ser análogas, por ejemplo, a la generación 2D de mapas a partir de un globo. El formato de tales fotogramas de vídeo 2D puede incluir cualquier formato adecuado tal como, por ejemplo, un formato de proyección cilíndrica equidistante (ERP), un formato de mapa de cubo, un formato de mapa de cubo compacto o similar.
El selector de bloque 745 puede seleccionar grupos de bloques para selección de calidad de codificación (por ejemplo, para algunos o todos los fotogramas de vídeo 2D). El selector de bloque 745 puede seleccionar tales grupos de bloques para selección de calidad de codificación usando cualquier técnica o técnicas adecuadas. El selector de bloque 745 puede recibir un indicador o indicadores indicativos de un tipo de formato de los fotogramas de vídeo 2D (por ejemplo, formato cilíndrico equidistante, formato de mapa de cubo, formato de mapa de cubo compacto o similar) y el selector de bloque 745 puede determinar qué grupos de bloques seleccionar para selección de calidad de codificación en respuesta al indicador o indicadores de tipo de formato. Cada uno de tal grupo de bloques seleccionados para selección de calidad de codificación puede incluir un primer conjunto de bloques y un segundo conjunto de bloques de tal forma que el primer y segundo conjunto de bloques no son vecinos en el fotograma de vídeo 2D, sino que son vecinos en el espacio de vídeo 360. Adicionalmente, tal primer y segundo conjuntos de bloques pueden separarse por un límite a través del cual puede aplicarse una selección de calidad de codificación. El límite puede proporcionarse mediante un límite de fotograma del fotograma de vídeo 2D, un límite de cara de una porción de proyección del fotograma de vídeo 2D o similar. Por ejemplo, los dos conjuntos de bloques pueden seleccionarse y orientarse/alinearse para selección de calidad de codificación. Como se muestra en la Figura 7C, tal selección de calidad de codificación puede aplicarse mediante el selector de calidad 746 del selector de calidad de codificación 744. La calidad seleccionada puede usarse mediante el codificador 743 como una parte de codificación, decodificación, preprocesamiento o posprocesamiento como se analiza adicionalmente en el presente documento.
La Figura 7D ilustra un ejemplo fotograma de vídeo 2D 750 que incluye una proyección desde un espacio de vídeo 360 en un formato de ERP y una ventanilla 751 que solapa el fotograma de vídeo 2D 750. El fotograma de vídeo 2D 750 puede incluir una proyección de vídeo 360 en el formato de ERP. Por ejemplo, el formato de ERP puede proyectar una imagen 3D esférica o fotograma en coordenadas ortogonales de una imagen 2D o fotograma. La ventanilla 751 puede aplicarse con respecto al fotograma de vídeo 2D 750 (por ejemplo, mediante el generador de ventanillas 747) de tal forma que un usuario puede desear ver el vídeo que corresponde a la ventanilla 751. La ventanilla 751 puede envolver el fotograma de vídeo 2D 750 de tal forma que una porción 752 de la ventanilla 751 está en un lado derecho del fotograma de vídeo 2D 750 y otra porción 753 de la ventanilla 751 está en un lado izquierdo del fotograma de vídeo 2D 750. Por ejemplo, para lograr los datos de vídeo de la ventanilla 751 para su presentación, la porción 753 de la ventanilla 751, que sobreextiende un límite de fotograma 754 del fotograma de vídeo 2D 750, debe lograrse desde el lado izquierdo del fotograma de vídeo 2D 750. Una ventanilla montada 751 que incluye las porciones 752, 753 puede presentarse a un usuario, por ejemplo.
La Figura 7E ilustra una disposición de selección de calidad de codificación dentro de la ventanilla 751. Para realizar una selección de calidad de codificación para un bloque B5, un grupo de bloques B1 a B4 y B6 a B9 pueden identificarse como vecinos del bloque B5. Por ejemplo, los bloques B3, B6 y B9 pueden ser vecinos del bloque B5 en el espacio de vídeo 360, pero no en la correspondiente proyección de fotograma de vídeo 2D. Por ejemplo, la ventanilla 751 proporciona una vista contigua en el espacio de vídeo 360. Adicionalmente, los bloques B5 y B6 pueden incluir píxeles no vecinos y no contiguos en el fotograma de vídeo 2D 750 porque el bloque B5 es de un lado derecho del fotograma de vídeo 2D 750 y el bloque B6 es de un lado izquierdo del fotograma de vídeo 2D 750 (por ejemplo, véase la Figura 7D). Por ejemplo, los bloques B5 y B6 pueden separarse mediante el límite 754 de tal forma que el límite 754 separa bloques que no son vecinos en el espacio de fotograma de vídeo 2D, sino que son vecinos en el espacio 360 o esférico.
En un orden de procesamiento de izquierda a derecha y de arriba a abajo, los bloques B1 a B4 pueden codificarse antes del bloque B5. Para otros órdenes de procesamiento, otros subconjuntos de los bloques vecinos pueden procesarse antes de que se procese el bloque en la actualidad. El selector de bloque 745 puede seleccionar el subconjunto de los bloques vecinos que tiene información de codificación/procesamiento anterior disponible y proporcionar esos bloques o esa información al selector de calidad 746. Ventajosamente, el subconjunto de bloques vecinos proporcionado al selector de calidad 746 puede proporcionar más información de codificación al selector de calidad 746 para una selección mejorada (por ejemplo, y/o para eficiencia de codificación de vídeo mejorada, etc.). En este ejemplo, el subconjunto de vecinos con información de codificación útil para el bloque B5 puede incluir los bloques vecinos B1, B2 y B4 del fotograma 2D y también el bloque vecino B3 del espacio 360. El selector de calidad 746 puede alinear los bloques (por ejemplo, ponerlos en un orden de fila o columna) o rotar y/o reordenar de otra manera los bloques de tal forma que los bloques vecinos de espacio de vídeo 3D se colocan próximos o cercanos entre sí, según pueda necesitarse para realizar la selección de calidad de codificación.
Como se ha analizado con respecto al sistema 740, el grupo del grupo de bloques B1 a B4 puede seleccionarse mediante el selector de bloque 745, alinearse en relación con el bloque B5 para selección de calidad de codificación mediante el selector de bloque 745, y tener un valor de calidad seleccionado para el bloque B5 mediante el selector de calidad 746. La selección de calidad de codificación puede realizarse para cualquier información de codificación/procesamiento adecuada, incluyendo selección de valor de QP y similares. Para selección de valor de QP, los bloques vecinos seleccionados pueden incluir bloques que ya se han codificado a lo largo de una dirección de rasterización. Para una exploración de izquierda a derecha y de arriba a abajo, la selección de valor de QP para un bloque actual puede usar información de valor de QP de los bloques vecinos anteriormente codificados por encima y hacia la izquierda de los bloques actuales. Ventajosamente, algunas realizaciones pueden aumentar el número de bloques vecinos seleccionados incluyendo bloques vecinos del espacio 3D.
Con referencia a la Figura 7D, pueden seleccionarse grupos adicionales de bloques a través del límite 754 de tal forma que el grupo de bloques incluye bloques de un lado derecho del fotograma de vídeo 2D 750 (por ejemplo, adyacentes a un límite o borde derecho del fotograma de vídeo 2D 750) y bloques de un lado izquierdo del fotograma de vídeo 2D 750 (por ejemplo, adyacentes a un límite o borde izquierdo del fotograma de vídeo 2D 750), respectivamente. Por ejemplo, en el formato cilíndrico equidistante, todos los píxeles más a la izquierda y los correspondientes más a la derecha del fotograma de vídeo 2D 750 son vecinos en el espacio de vídeo 360 mientras que no son vecinos (no contiguos) en el fotograma de vídeo 2D 750. La selección de calidad de codificación puede extenderse para algunos o todos los grupos de bloques que incluyen bloques desde los lados izquierdo y derecho del fotograma de vídeo 2D 750.
La Figura 7F ilustra un fotograma de vídeo 2D 760 que incluye bloques seleccionados dispuestos para selección de calidad de codificación. El fotograma de vídeo 2D 760 puede incluir una proyección de vídeo 360 en el formato cilíndrico equidistante. Los bloques seleccionados pueden incluir un primer grupo de bloques G1 y un segundo grupo de bloques G2, que puede seleccionarse para selección de calidad de codificación. Para selección de calidad de codificación, por ejemplo, el bloque 761 puede alinearse a la derecha del bloque 762 y puede realizarse la selección de calidad de codificación. El grupo G2 puede incluir un bloque 763 y un bloque 764 de tal forma que, para selección de calidad de codificación, el bloque 763 puede invertirse y alinearse a la parte superior del bloque 764 (o viceversa) y puede realizarse la selección de calidad de codificación.
El bloque 761 y el bloque 762 no son vecinos en el fotograma de vídeo 2D 760 (por ejemplo, ningún píxel del bloque 761 es contiguo con o adyacente a ningún píxel del bloque 762 en el fotograma de vídeo 2D 760). Sin embargo, en el espacio de vídeo 360, un píxel del bloque 761 en un límite de fotograma 766 es un vecino de un píxel del bloque 762 en un límite de fotograma 767. Adicionalmente, los bloques 761, 762 pueden estar a la misma distancia (d2) de un límite de fotograma inferior 769 (y un límite de fotograma superior 768). Con referencia a la Figura 7F, en el formato cilíndrico equidistante, para cualquier bloque adyacente al límite de fotograma izquierdo 766, puede encontrarse un correspondiente bloque adyacente al límite de fotograma derecho 767 (a la misma distancia del límite de fotograma inferior 769 o límite de fotograma superior 768) de tal forma que los grupos de bloques no son vecinos en el fotograma de vídeo 2D 760, sino que son vecinos en el espacio de vídeo 360. Pueden hacerse determinaciones similares para identificar un grupo de bloques vecinos que corresponden al grupo de bloques vecinos B1 a B9 en la Figura 7E. Los bloques vecinos identificados también pueden usarse para selección de calidad de codificación.
El grupo G2 puede incluir el bloque 763 y el bloque 764 para selección de calidad de codificación. Por ejemplo, para selección de calidad de codificación, el bloque 763 puede invertirse y alinearse a la parte superior del bloque 764 (o bloque 764 puede invertirse y alinearse con la parte superior del bloque 763) y puede realizarse selección de calidad de codificación. El bloque 763 y el bloque 764 no son vecinos en el fotograma de vídeo 2D 760, pueden ser vecinos en el espacio de vídeo 360. Por ejemplo, los bloques 763, 764 pueden ser equidistantes (es decir, ambos a la distancia d1) desde una línea central 765 del fotograma de vídeo 2D 760. Para cualquier bloque adyacente al límite de fotograma superior 768 (excepto para píxeles exactamente en la línea central 765, si hubiera), puede encontrarse un correspondiente bloque también adyacente al límite de fotograma superior 768 y equidistante a la línea central 765 de tal forma que los bloques no son vecinos en el fotograma de vídeo 2D 760, sino que son vecinos en el espacio de vídeo 360. De manera similar, para cualquier bloque adyacente al límite de fotograma inferior 769, puede encontrarse un correspondiente bloque también adyacente al límite de fotograma inferior 769 y equidistante a la línea central 765 de tal forma que los bloques no son vecinos en el fotograma de vídeo 2D 760, sino que son vecinos en el espacio de vídeo 360. Pueden hacerse determinaciones similares para identificar un grupo de bloques vecinos que corresponden al grupo de bloques vecinos B1 a B9 en la Figura 7E. Los bloques vecinos identificados también pueden usarse para selección de calidad de codificación.
Las técnicas de selección de bloque y de selección de calidad de codificación descritas para fotograma de vídeo 2D que son proyecciones de un espacio de vídeo 360 pueden realizarse para cualquier formato de proyección. Por ejemplo, el fotograma de vídeo 2D puede ser un fotograma cilíndrico equidistante proyectado desde el espacio de vídeo 360 (como se ha analizado con respecto a las Figuras 7D a 7F y en cualquier otro sitio en el presente documento), un fotograma de formato de mapa de cubo proyectado desde el espacio de vídeo 360 (como se ha analizado con respecto a la Figura 7G y en cualquier otro sitio en el presente documento), un fotograma de formato de mapa de cubo compacto proyectado desde el espacio de vídeo 360 (como se ha analizado con respecto a la Figura 7I y en cualquier otro sitio en el presente documento), un mapeo de entorno a cualquier forma, una red geométrica de cualquier forma 3D o similar. Por ejemplo, un formato de mapa de cubo puede proyectar el espacio de vídeo 360 en los lados de un cubo, que puede desplegarse o disponerse dentro del fotograma de vídeo 2D.
La Figura 7G ilustra un fotograma de vídeo 2D 770 que incluye una proyección desde un espacio de vídeo 360 en un formato de mapa de cubo y bloques seleccionados para selección de calidad de codificación. Por ejemplo, un grupo de bloques G3 puede incluir un bloque 771 y un bloque 772 que pueden alinearse para selección de calidad de codificación. El grupo de bloques G4 puede incluir un bloque 773 y un bloque 774 que pueden rotarse o alinearse según se necesite para selección de calidad de codificación. Como se analiza en el presente documento, otras combinaciones de bloques pueden identificarse como vecinos y alinearse en grupos de bloques para selección de calidad de codificación. El fotograma de vídeo 2D 770 puede incluir un límite de fotograma izquierdo 776, un límite de fotograma derecho 777, un límite de fotograma superior 778 y un límite de fotograma inferior 779. Adicionalmente, el fotograma de vídeo 2D 770 puede incluir regiones de píxel en blanco R1, R2, que se ilustran rayadas en el fotograma de vídeo 2D 770, pero puede incluir cualquier color adecuado o valores de píxel (por ejemplo, negro). El bloque 771 y el bloque 772 pueden identificarse como vecinos en el espacio de vídeo 360 porque pueden la misma distancia (d1) desde un límite de fotograma inferior 779 (y un límite de fotograma superior 778). El bloque 773 y el bloque 774 pueden identificarse como vecinos en el espacio de vídeo 360 porque pueden ser equidistantes (por ejemplo, ambos a la distancia d2) desde la esquina de la cara C y la cara B. Pueden hacerse determinaciones similares para identificar un grupo de bloques vecinos que corresponden al grupo de bloques vecinos B1 a Bg en la Figura 7E. Los bloques vecinos identificados también pueden usarse para selección de calidad de codificación.
La Figura 7H ilustra un cubo 780 para recibir proyecciones desde un espacio de vídeo 3D. El cubo 780 puede tener 6 caras (etiquetadas A-F de tal forma que A es la parte trasera, B es la parte frontal, C es la parte superior, D es la parte inferior, E es el lado derecho y F es el lado izquierdo). Por ejemplo, un vídeo 3D (por ejemplo, fotogramas o instantáneas) puede proyectarse en el cubo 780 de tal forma que cada cara del cubo 780 incluye una porción del vídeo en 3D o esfera. Con referencia a la Figura 7G, cada cara del cubo 780, en el formato de mapa de cubo, puede colocarse abierta de una forma de unión de bordes a través del fotograma de vídeo 2D 770. Por ejemplo, el fotograma de vídeo 2D 770 puede incluir una red geométrica del cubo 780. Aunque se muestra con las caras en un formato en T lateral, puede usarse cualquier formato adecuado tal como un formato de cubo compacto como se analiza adicionalmente a continuación con respecto a la Figura 7I.
Como se muestra en la Figura 7H, el bloque 773 y el bloque 774 pueden unirse en el límite entre las caras B y C con respecto al cubo 780. Por ejemplo, un píxel del bloque 773 en el límite y un píxel del bloque 774 también en el límite son píxeles vecinos en el espacio de vídeo 3D proyectados en el cubo 780. Como se analiza adicionalmente a continuación, el grupo G4 que incluye el bloque 773 y el bloque 774 puede seleccionarse para selección de calidad de codificación. De manera similar, pueden seleccionarse correspondientes grupos de bloques que comparten un límite entre caras adyacentes para selección de calidad de codificación. Por ejemplo, tales grupos de bloques pueden formarse entre un límite compartido entre la cara C y la cara B, un límite compartido entre la cara C y la cara E, un límite compartido entre la cara A y la cara F (por ejemplo, como se muestra con respecto al bloque 771 y al bloque 772 en la Figura 7G) y así sucesivamente.
Con respecto a las caras A-F, cada cara puede tener un límite de cara izquierdo, límite de cara derecho, límite de cara superior y límite de cara inferior. Tales límites pueden compartirse con otra cara, una región de píxel en blanco o un límite de fotograma como se muestra. Como se ha analizado con respecto a la Figura 7H, conjuntos de bloques en ángulos derechos a los siguientes límites de cara pueden seleccionarse/emparejarse y rotarse/alinearse para selección de calidad de codificación: límite superior de cara B con límite derecho de cara C, límite inferior de cara B con límite derecho de cara D, límite superior de cara E con límite superior de cara C, límite inferior de cara E con límite inferior de cara D, límite superior de cara A con límite izquierdo de cara C, límite derecho de cara A con límite izquierdo de cara F, límite inferior de cara A con límite izquierdo de cara D.
La Figura 7I ilustra un fotograma de vídeo 2D 790 que puede incluir una proyección desde un espacio de vídeo 360 en un formato de mapa de cubo compacto y grupos de grupos de bloques de los bloques G5, G6 seleccionados para selección de calidad de codificación. Por ejemplo, el grupo G5 puede incluir un bloque 791 y un bloque 792 que pueden rotarse y/o alinearse para selección de calidad de codificación. El grupo G6 puede incluir un bloque 793 y un bloque 794 que también pueden rotarse y/o alinearse para selección de calidad de codificación. Otras combinaciones de bloques pueden alinearse en grupos de bloques para selección de calidad de codificación. Por ejemplo, puede seleccionarse cualquier grupo de bloques que tiene bloques que comparten un límite entre caras adyacentes para selección de calidad de codificación.
Con referencia a las Figuras 7H y 7I, cada cara del cubo 780, en el formato de mapa de cubo compacto, puede proporcionarse dentro del fotograma de vídeo 2D 790 como se muestra. Con respecto al alineamiento de las caras de cubo proporcionadas en la Figura 7G, las caras A, B, E y F pueden tener la misma alineación mientras las caras C' y D' pueden rotarse 180°. Aunque se ilustra en un formato de cubo compacto particular, puede usarse cualquier formato adecuado para la proyección desde el espacio de vídeo 360.
El fotograma de vídeo 2D 790 incluye un límite de fotograma izquierdo 796, un límite de fotograma derecho 797, un límite de fotograma superior 798 y un límite de fotograma inferior 799. También, como se muestra con respecto a las caras A, B, C', D', E, F, cada cara puede tener un límite de cara izquierdo, límite de cara derecho, límite de cara superior y límite de cara inferior. Tales límites pueden compartirse con otra cara o un límite de fotograma como se muestra. Por ejemplo, bloques en ángulos derechos a los siguientes límites de cara pueden seleccionarse/emparejarse y rotarse/alinearse para selección de calidad de codificación: límite superior de cara B con límite izquierdo de cara C', límite inferior de cara B con límite izquierdo de cara D', límite superior de cara E con límite inferior de cara C', límite inferior de cara E con límite superior de cara D', límite superior de cara A con límite derecho de cara C', límite derecho de cara A con límite izquierdo de cara F, límite inferior de cara A con límite derecho de cara D'.
El bloque 791 y el bloque 792 no son vecinos en el fotograma de vídeo 2D 790, sino que son vecinos en el espacio de vídeo 360 (por ejemplo, basándose en un límite izquierdo de la cara D' que se comparte con un límite inferior de la cara B). El bloque 793 y el bloque 794 no son vecinos en el fotograma de vídeo 2D 790, sino que son vecinos en el espacio de vídeo 360 (por ejemplo, basándose en un límite superior de la cara B que se comparte con un límite izquierdo de la cara C'). Pueden hacerse determinaciones similares para identificar un grupo de bloques vecinos que corresponde al grupo de bloques vecinos B1 a B9 en la Figura 7E. Los bloques vecinos identificados también pueden usarse para selección de calidad de codificación.
Como se ha analizado, las técnicas de selección de bloque y de selección de calidad de codificación analizadas en el presente documento pueden usarse en cualquier contexto de codificación, decodificación, preprocesamiento o posprocesamiento de vídeo 3D adecuado.
Ejemplos de ajustador de rango
Pasando ahora a la Figura 8A, un aparato de gráficos 800 puede incluir un codificador 821 para codificar un primer bloque de un fotograma bidimensional (2D), en donde el fotograma 2D corresponde a una proyección de un espacio de vídeo 360, y un ajustador de rango 822 acoplado comunicativamente al codificador 821 para ajustar un rango de búsqueda para el fotograma 2D basándose en un área de búsqueda del fotograma 2D. Por ejemplo, el ajustador de rango 822 puede configurarse para ajustar un primer rango de búsqueda para una primera área de búsqueda del fotograma 2D para que sea relativamente mayor que un segundo rango de búsqueda para una segunda área de búsqueda del fotograma 2D basándose en la primera área de búsqueda que tiene una distorsión geométrica relativamente mayor en comparación con la segunda área de búsqueda. El fotograma 2D puede corresponder a una proyección cilíndrica equidistante del espacio de vídeo 360, y el ajustador de rango 822 puede configurarse para ajustar un primer rango de búsqueda para un área polar del fotograma 2D para que sea relativamente mayor que un segundo rango de búsqueda para un área central del fotograma 2D. El codificador 821 puede configurarse para realizar una estimación de movimiento para el fotograma 2D basándose en el primer y segundo rangos de búsqueda.
El aparato 800 puede incluir adicionalmente cualquiera de un gestor de ventanilla acoplado comunicativamente al codificador para determinar si una petición para una ventanilla del fotograma 2D se extiende más allá de un primer borde del fotograma 2D y para rellenar la ventanilla solicitada con información de imagen envolvente, y/o un estimador de movimiento acoplado comunicativamente al procesador de visualización para estimar información de movimiento basándose tanto en información de color como en información de profundidad.
Cada uno de los anteriores codificador 821, ajustador de rango 822 y otros componentes del aparato 800 puede implementarse en hardware, software o cualquier combinación de los mismos. Por ejemplo, implementaciones de hardware pueden incluir lógica configurable, tal como, por ejemplo, PLA, FPGA, CPLD, o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, CMOS o tecnología de TTL o cualquier combinación de los mismos. Como alternativa, o adicionalmente, estos componentes pueden implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como RAM, ROM, PROM, firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERL, JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares.
Pasando ahora a la Figura 8B, un método 830 de procesamiento de un vídeo 360 puede incluir codificar un primer bloque de un fotograma bidimensional (2D), en donde el fotograma 2D corresponde a una proyección de un espacio de vídeo 360 en el bloque 831, y ajustar un rango de búsqueda para el fotograma 2D basándose en un área de búsqueda del fotograma 2D en el bloque 832. Por ejemplo, el método 830 puede incluir ajustar un primer rango de búsqueda para una primera área de búsqueda del fotograma 2D para que sea relativamente mayor que un segundo rango de búsqueda para una segunda área de búsqueda del fotograma 2D basándose en la primera área de búsqueda que tiene una distorsión geométrica relativamente mayor en comparación con la segunda área de búsqueda en el bloque 833. El fotograma 2D puede corresponder a una proyección cilíndrica equidistante del espacio de vídeo 360 en el bloque 834, y el método 830 puede incluir ajustar un primer rango de búsqueda para un área polar del fotograma 2D para que sea relativamente mayor que un segundo rango de búsqueda para un área central del fotograma 2D en el bloque 835. El método 830 también puede incluir realizar una estimación de movimiento para el fotograma 2D basándose en el primer y segundo rangos de búsqueda en el bloque 836.
El método 830 puede implementarse en un sistema, aparato, GPU o unidad de procesamiento paralelo (PPU), tales como, por ejemplo, los descritos en el presente documento. Más particularmente, implementaciones de hardware del método 830 pueden incluir lógica configurable, tal como, por ejemplo, PLA, FPGA, CPLD, o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, CMOS o tecnología de TTL o cualquier combinación de los mismos. Como alternativa, o adicionalmente, el método 830 puede implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como RAM, ROM, PROM, firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERL, JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares. Por ejemplo, el método 830 puede implementarse en un medio legible por ordenador como se describe en conexión con los Ejemplos 36 a 39 a continuación.
Por ejemplo, el método 830 puede implementarse en aplicaciones o software de controlador (por ejemplo, a través de una API). Otros ejemplos o porciones del método 830 pueden implementarse en código especializado (por ejemplo, sombreadores) que van a ejecutarse en una GPU. Otros ejemplos o porciones del método 830 pueden implementarse en lógica de función fija o hardware especializado (por ejemplo, en la GPU).
Algunos ejemplos pueden proporcionar ventajosamente búsqueda de movimiento mejorada para vídeo 360 en formato de ERP. Por ejemplo, puede ajustarse un rango de búsqueda de dirección x y/o dirección y basándose en la distorsión geométrica introducida cuando se convierte desde la esfera original al formato de ERP. Específicamente, algunos ejemplos pueden aumentar un rango de búsqueda x y/o reducir un rango de búsqueda y para áreas polares norte/sur del fotograma 2D formateado con ERP cuando se realiza un cálculo de búsqueda de movimiento.
Pasando ahora a la Figura 8C, un fotograma 2D formateado con ERP 840 puede incluir distorsión geométrica, que puede ser más pronunciada para un área polar norte 842 y un área polar sur 844 del fotograma 2D 840 (por ejemplo, pueden envolverse porciones del fotograma 840). Algunos ejemplos pueden aumentar un rango de búsqueda en las áreas de polo norte y sur 842, 844 en comparación con un área de área central 846 (por ejemplo, alejada de los polos). Además, o como alternativa, algunos ejemplos pueden disminuir un rango de búsqueda en el área central 846. Para una búsqueda de movimiento, por ejemplo, proporcionar rangos de búsqueda de movimiento relativamente grandes en las áreas polares 842, 844 en comparación con el área central 846 puede mejorar la calidad de imagen y/o puede mejorar la eficiencia de codificación para procesar imágenes de formato de ERP. El tamaño de cada rango de búsqueda y la cantidad de diferencia relativa entre rangos puede variar, por ejemplo, basándose en la cantidad de distorsión geométrica en un área de la búsqueda. Puede proporcionarse un rango de búsqueda más pequeño en el punto central del fotograma, puede proporcionarse un rango de búsqueda más grande en los polos (por ejemplo, en donde el movimiento puede amplificarse), con cambios graduales en el tamaño de los rangos de búsqueda entre esas áreas. El rango de búsqueda para cada área puede determinarse a partir de un mapa discreto de rangos de búsqueda, o puede determinarse mediante una fórmula (por ejemplo, que corresponde a la distorsión geométrica).
Otros sistemas pueden aplicar rangos de búsqueda de movimiento uniformes a través de todo el fotograma 2D, que pueden resultar en recursos desproporcionados dedicados a los polos en relación con otras porciones del área de imagen. Aumentando el rango de búsqueda proporcional al área de imagen original (por ejemplo, en lugar de la imagen distorsionada), algunos ejemplos pueden asignar menos recursos a los polos y más recursos al área central. Ventajosamente, la calidad de imagen codificada puede mejorar y pueden utilizarse más apropiadamente los recursos.
Ejemplos de gestor de ventanilla
Pasando ahora a la Figura 9A, un aparato de gráficos 900 puede incluir una memoria 921 acoplada comunicativamente al procesador de visualización para almacenar un fotograma de un vídeo, y un gestor de ventanilla 922 acoplado comunicativamente a la memoria 921. El gestor de ventanilla 922 puede configurarse para determinar si una petición para una ventanilla del fotograma se extiende más allá de un primer borde del fotograma, determinar si el vídeo se identifica como vídeo 360, y rellenar la ventanilla solicitada con información de imagen envolvente si el vídeo se identifica como vídeo 360. Por ejemplo, el gestor de ventanilla 922 puede configurarse para rellenar la ventanilla solicitada con información de imagen que comienza desde un segundo borde del fotograma que es contiguo con el primer borde en el espacio de vídeo 360. El gestor de ventanilla también puede configurarse para identificar la petición como fuera de límites, y/o para devolver una ventanilla parcial, si el vídeo no se identifica como vídeo 360. En algunas realizaciones, un procesador de gráficos puede incluir lógica para implementar el gestor de ventanilla en hardware. El aparato 900 puede incluir adicionalmente un estimador de movimiento acoplado comunicativamente al procesador de gráficos para estimar información de movimiento basándose tanto en información de color como en información de profundidad.
Cada uno de los anteriores memoria 921, gestor de ventanilla 922 y otros componentes del aparato 900 puede implementarse en hardware, software o cualquier combinación de los mismos. Por ejemplo, implementaciones de hardware pueden incluir lógica configurable, tal como, por ejemplo, PLA, FPGA, CPLD, o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, CMOS o tecnología de TTL o cualquier combinación de los mismos. Como alternativa, o adicionalmente, estos componentes pueden implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como RAM, ROM, PROM, firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERL, JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares.
Pasando ahora a la Figura 9B, un método 930 de procesamiento de un vídeo 360 puede incluir almacenar un fotograma de un vídeo en el bloque 931, determinar si una petición para una ventanilla del fotograma se extiende más allá de un primer borde del fotograma en el bloque 932, determinar si el vídeo se identifica como vídeo 360 en el bloque 933, y rellenar la ventanilla solicitada con información de imagen envolvente si el vídeo se identifica como vídeo 360 en el bloque 934. El método 930 puede incluir rellenar la ventanilla solicitada con información de imagen que comienza desde un segundo borde del fotograma que es contiguo con el primer borde en el espacio de vídeo 360 en el bloque 935. El método 930 también puede incluir adicionalmente, o como alternativa, identificar la petición como fuera de límites si el vídeo no se identifica como vídeo 360 en el bloque 936, y devolver una ventanilla parcial si el vídeo no se identifica como vídeo 360 en el bloque 937.
El método 930 puede implementarse en un sistema, aparato, GPU o unidad de procesamiento paralelo (PPU), tales como, por ejemplo, los descritos en el presente documento. Más particularmente, implementaciones de hardware del método 930 pueden incluir lógica configurable, tal como, por ejemplo, PLA, FPGA, CPLD, o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, CMOS o tecnología de TTL o cualquier combinación de los mismos. Como alternativa, o adicionalmente, el método 930 puede implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como RAM, ROM, PROM, firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERL, JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares. Por ejemplo, el método 930 puede implementarse en un medio legible por ordenador como se describe en conexión con los Ejemplos 53 a 56 a continuación.
Por ejemplo, ejemplos o porciones del método 930 pueden implementarse en aplicaciones o software de controlador (por ejemplo, a través de una API). Otros ejemplos o porciones del método 930 pueden implementarse en código especializado (por ejemplo, sombreadores) que van a ejecutarse en una GPU. Otros ejemplos o porciones del método 930 pueden implementarse en lógica de función fija o hardware especializado (por ejemplo, en la GPU).
Algunos ejemplos pueden proporcionar ventajosamente instrucciones de bloque de medios de hardware para imagen 360. Por ejemplo, algunos ejemplos pueden proporcionar soporte de hardware para envolvente de ventanilla para vídeo 360. En el módulo de hardware, una petición para una ventanilla de un fotograma de un vídeo que se extiende fuera de límites en el lado izquierdo del fotograma, por ejemplo, puede extenderse automáticamente dentro de límites en el lado derecho del fotograma si el vídeo se identifica como un vídeo 360.
Pasando ahora a la Figura 9C, un vídeo 360940 puede representarse como un fotograma plano 941. Las imágenes en el fotograma 941 pueden envolverse desde un borde izquierdo 942 del fotograma 941 hasta un borde derecho 943 del fotograma 941. Una primera ventanilla 944 puede estar completamente dentro del fotograma 941, mientras que una segunda ventanilla 945 puede cruzar los bordes izquierdo y derecho 942, 943 del fotograma.
Algunos ejemplos pueden incluir instrucciones o una API para codificación de medios acelerada mientras también tiene en cuenta la característica de imagen envolvente de vídeo 360. Por ejemplo, una instrucción puede especificar una ventana, y todos los píxeles para esa ventana pueden devolverse, incluso si la imagen se envuelve. Si la ventana solicitada se desliza fuera del borde, la unidad de instrucción puede continuar automáticamente rellenando los píxeles de la ventana desde el borde del fotograma que sería contiguo en el espacio 360. Por ejemplo, algunos ejemplos pueden incluir un mapa de memoria lógica a físico que mapea peticiones de direcciones de memoria que exceden la dirección de memoria de fotograma más a la derecha a las correspondiente direcciones para las direcciones de memoria de fotograma más a la izquierda.
Para acelerar la codificación/decodificación de medios 360 en un núcleo de sombreador, por ejemplo, pueden añadirse nuevas instrucciones de bloque en la unidad de puerto de datos de GPU. Una instrucción de bloque puede o bien devolver un bloque de píxeles desde una imagen en memoria o bien puede escribir un bloque de píxeles en la imagen. La instrucción puede especificar la ubicación, anchura y altura del bloque. Si una parte del bloque especificado cae fuera del límite izquierdo, derecho, superior o inferior de la imagen, el hardware envolverá el bloque al lado copiado de la imagen y devuelve píxeles (o escribe en píxeles) desde el lado copiado. La envolvente puede hacerse o bien en una superficie 2D (por ejemplo, véase la Figura 7D, en donde la envolvente sucede desde un límite de fotograma de lado derecho hasta un límite de fotograma de lado izquierdo), o en una proyección 2D desde espacio 3D (por ejemplo, véase las Figuras 7G y 7H, en donde la envolvente sucede entre diversas caras de un cubo).
Ventajosamente, una aplicación o controlador que usa la instrucción puede hacer una única petición de píxeles desde una ventanilla, sin tener en cuenta si la ventanilla expande un borde del vídeo 360. Algunos ejemplos pueden simplificar software para funcionar con vídeo 360 gestionando las peticiones de ventanilla a través de bordes del vídeo 360 en firmware y/o hardware. Por ejemplo, la imagen puede identificarse al hardware como una imagen 360 o el hardware puede detectar que la imagen es una imagen 360. Por ejemplo, la instrucción que solicita la ventana puede incluir un bit que indica que el hardware debería tratar la imagen como una imagen 360. Cuando se establece el bit, el hardware puede tratar una petición de fuera de límites como una petición de envolvente. Cuando se establece el bit, en lugar de truncar los datos de píxel devueltos, el hardware puede rellenar los datos de píxel con píxeles del otro borde de la imagen. El hardware para gestionar envolventes de ventanilla puede integrarse con una GPU, PPU y/u otras unidades de gráficos como se describe en el presente documento.
En algunos ejemplos, una llamada de API puede incluir una variable de entrada que especifica que la imagen debería tratarse como una imagen 360. Ventajosamente, las aplicaciones de software para vídeo 360 pueden simplificarse y el rendimiento puede mejorarse mediante la gestión de hardware de peticiones de ventanilla.
Ejemplos de estimador de movimiento
Pasando ahora a la Figura 10A, un aparato de gráficos 1000 puede incluir un estimador de movimiento 1021 para estimar información de movimiento para un fotograma basándose tanto en información de color de un fotograma como en información de profundidad, y un codificador 1022 acoplado comunicativamente al estimador de movimiento 1021 para codificar el fotograma basándose en la información de movimiento estimada. Por ejemplo, el estimador de movimiento 1021 puede configurarse para determinar una primera estimación de movimiento basándose en la información de profundidad, y para determinar una segunda estimación de movimiento basándose en la primera estimación de movimiento y la información de color. El estimador de movimiento 1021 puede configurarse adicionalmente para determinar un vector de movimiento estimado basándose en la primera estimación de movimiento y la segunda estimación de movimiento. El estimador de movimiento 1021 puede configurarse para determinar una de información de segmentación e información de discontinuidad de profundidad basándose en la información de profundidad.
Cada uno de los anteriores estimador de movimiento 1021, codificador 1022 y otros componentes del aparato 1000 puede implementarse en hardware, software o cualquier combinación de los mismos. Por ejemplo, implementaciones de hardware pueden incluir lógica configurable, tal como, por ejemplo, PLA, FPGA, CPLD, o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, CMOS o tecnología de TTL o cualquier combinación de los mismos. Como alternativa, o adicionalmente, estos componentes pueden implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como RAM, ROM, PROM, firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERL, JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares.
Pasando ahora a la Figura 10B, un método 1030 de procesamiento de un vídeo 360 puede incluir estimar información de movimiento para un fotograma basándose tanto en información de color de un fotograma como en información de profundidad en el bloque 1031, y codificar el fotograma basándose en la información de movimiento estimada en el bloque 1032. Por ejemplo, el método 1030 puede incluir determinar una primera estimación de movimiento basándose en la información de profundidad en el bloque 1033, y determinar una segunda estimación de movimiento basándose en la primera estimación de movimiento y la información de color en el bloque 1034. El método 1030 puede incluir determinar un vector de movimiento estimado basándose en la primera estimación de movimiento y la segunda estimación de movimiento en el bloque 1035. El método 1030 también puede incluir adicionalmente, o como alternativa, determinar una de información de segmentación e información de discontinuidad de profundidad basándose en la información de profundidad en el bloque 1036.
Ejemplos del método 1030 pueden implementarse en un sistema, aparato, GPU o unidad de procesamiento paralelo (PPU), tales como, por ejemplo, los descritos en el presente documento. Más particularmente, implementaciones de hardware del método 1030 pueden incluir lógica configurable, tal como, por ejemplo, PLA, FPGA, CPLD, o en hardware lógico de funcionalidad fija usando tecnología de circuito, tal como, por ejemplo, ASIC, CMOS o tecnología de TTL o cualquier combinación de los mismos. Como alternativa, o adicionalmente, el método 1030 puede implementarse en uno o más módulos como un conjunto de instrucciones lógicas almacenadas en un medio de almacenamiento legible por máquina u ordenador, tal como RAM, ROM, PROM, firmware, memoria flash, etc., que van a ejecutarse por un procesador o dispositivo informático. Por ejemplo, código de programa informático para efectuar las operaciones de los componentes puede escribirse en cualquier combinación de uno o más lenguajes de programación aplicables/apropiados de sistema operativo, incluyendo un lenguaje de programación orientado a objetos, tal como PYTHON, PERL, JAVA, SMALLTALK, C++, C# o similar y lenguajes de programación procedurales convencionales, tales como el lenguaje de programación "C" o lenguajes de programación similares. Por ejemplo, el método 1030 puede implementarse en un medio legible por ordenador como se describe en conexión con los Ejemplos 69 a 72 a continuación.
Por ejemplo, ejemplos o porciones del método 1030 pueden implementarse en aplicaciones o software de controlador (por ejemplo, a través de una API). Otros ejemplos o porciones del método 1030 pueden implementarse en código especializado (por ejemplo, sombreadores) que van a ejecutarse en una GPU. Otros ejemplos o porciones del método 1030 pueden implementarse en lógica de función fija o hardware especializado (por ejemplo, en la GPU).
Algunos ejemplos pueden proporcionar ventajosamente estimación de movimiento de imagen de profundidad y color. Por ejemplo, algunos ejemplos pueden utilizar imagen de profundidad de contenidos 3D como información de segmentación (por ejemplo, basándose en una búsqueda piramidal o jerárquica). En otros sistemas, la estimación de movimiento puede realizarse basándose en únicamente la imagen de color. La imagen de color puede ser una imagen plana sin información de profundidad. Con contenido de gráficos 3D, sin embargo, la información de profundidad puede estar disponible. Algunos ejemplos pueden proporcionar una mejor estimación de movimiento basándose tanto en la imagen de color como en la información de profundidad. Por ejemplo, algunos ejemplos pueden proporcionar un vector de movimiento más preciso.
La información de profundidad puede usarse, por ejemplo, como información de segmentación. Para algunas imágenes, la información de color puede ser diferente entre porciones de primer plano y de segundo plano de la imagen. Pero en ocasiones el color puede no ser significativamente diferente entre el primer plano y el segundo plano, y la segmentación puede ser difícil o imprecisa basándose únicamente en el color. Información de profundidad entre el primer plano y el segundo plano puede ser diferente incluso si el color no es significativamente diferente, y algunos ejemplos pueden separar más fácilmente el primer plano del segundo plano basándose en la información de profundidad.
Algunos ejemplos pueden usar la información de profundidad para determinar la segmentación y una primera estimación de movimiento. La información de color puede usarse, a continuación, para determinar una segunda estimación de movimiento. Por ejemplo, la primera y segunda estimaciones de movimiento pueden combinarse para determinar un vector de movimiento previsto más preciso.
Volviendo a las Figuras 10C a 10E, algunos ejemplos pueden mejorar la tasa de fotogramas para un juego o aplicación 3D. La conversión ascendente de tasa de fotogramas puede mejorar el rendimiento de un sistema de gráficos y puede permitir una tasa de fotogramas aumentada en un contexto de juegos (por ejemplo, de tal forma que un dispositivo de extremo inferior puede tener aparentemente un mejor rendimiento). Un juego 3D puede crear un primer fotograma 1041 en el momento t, y un segundo fotograma 1042 en el momento t+1. La conversión ascendente de tasa de fotogramas puede extrapolar un nuevo fotograma 1043 en el momento t+1,5 (por ejemplo, antes de que el juego 3D cree el siguiente fotograma en el momento t+2). La conversión ascendente de tasa de fotogramas puede continuar para crear fotogramas extra para el momento t+2,5, t+3,5, etc. Los fotogramas adicionales pueden aumentar una tasa de fotogramas aparente con los fotogramas intersticiales previstos/estimados. La conversión ascendente de tasa de fotogramas puede extrapolar el fotograma extra 1043, y fotogramas extra adicionales, basándose en un vector de movimiento previsto. El vector de movimiento previsto para el fotograma extra 1043 puede predecirse con mayor precisión utilizando información de profundidad del juego 3D junto con información de color del fotograma anterior 1042 (por ejemplo, o fotogramas anteriores 1041 y 1042). Algunos tipos de conversión ascendente de tasa de fotogramas pueden denominarse como envolvente de espacio asíncrono (ASW).
Por ejemplo, algunos ejemplos pueden realizar una búsqueda de parámetros para determinar una estimación de vector de movimiento de múltiples niveles. Por ejemplo, el nivel 0 puede corresponder a la imagen original. El nivel 1 puede escalarse descendentemente a la mitad en la dirección horizontal y a la mitad en la dirección vertical (por ejemplo, un cuarto del tamaño del nivel 0). El nivel 2 puede escalarse descendentemente a un 1/16 del tamaño de la imagen original, y así sucesivamente. La información de profundidad puede usarse como un predictor para el punto de inicio del vector de movimiento.
En un ejemplo de dos niveles, algunos ejemplos pueden usar primero únicamente la información de profundidad para la estimación de vector de movimiento en un nivel inferior (por ejemplo, el nivel 1). Puede haber una discontinuidad de profundidad entre el primer plano y el segundo plano, y algunos ejemplos pueden usar la imagen de profundidad para una estimación de vector de movimiento alrededor del área de discontinuidad de profundidad. La discontinuidad de profundidad puede corresponder a un límite entre el primer plano y el segundo plano. A un nivel superior (por ejemplo, el nivel 0), algunos ejemplos pueden usar la información de nivel 1 como un predictor. Por ejemplo, el punto de inicio de la búsqueda de vectores de movimiento en el nivel 0 puede ser la estimación de vector de movimiento basada en profundidad del nivel 1. Si en el nivel 1 no hay discontinuidad de profundidad, el nivel 0 puede usar solo la imagen de color para la estimación de vector de movimiento. La búsqueda de vectores de movimiento en el nivel 0 puede resultar ventajosamente en un vector de movimiento previsto más preciso porque el punto de inicio se basa en la información de profundidad.
Tecnología de visualización
Pasando ahora a la Figura 11, se muestra un sistema informático con rendimiento mejorado 1100. En el ejemplo ilustrado, un procesador 1110 se acopla a un visualizador 1120. El procesador 1110 puede generar generalmente imágenes que hay que visualizarse en un panel de LCD 1150 del visualizador 1120. En un ejemplo, el procesador 1110 incluye una interfaz de comunicación tal como, por ejemplo, una matriz de gráficos de vídeo, una interfaz de DisplayPort (DP), una interfaz de DisplayPort integrado (eDP), una interfaz multimedia de alta definición (HDMI), una interfaz visual digital (DVI) y así sucesivamente. El procesador 1110 puede ser un procesador de gráficos (por ejemplo, una unidad de procesamiento de gráficos/GPU) que procesa datos de gráficos y genera las imágenes (por ejemplo, fotogramas de vídeo, imágenes fijas) visualizadas en el panel de LCD 1150. Además, el procesador 1110 puede incluir una o más tuberías de procesamiento de imágenes que generan datos de píxel. Las tuberías de procesamiento de imágenes pueden cumplir con la arquitectura de OPENGL, u otra arquitectura adecuada. Adicionalmente, el procesador 1110 puede conectarse a un procesador anfitrión (por ejemplo, central unidad de procesamiento/CPU), en donde el procesador anfitrión ejecuta uno o más controladores de dispositivo que controlan y/o interactúan con el procesador 1110.
El visualizador ilustrado 1120 incluye un controlador de temporización (TCON) 1130, que puede abordar individualmente diferentes píxeles en el panel de LCD 1150 y actualizar cada píxel individual en el panel de LCD 1150 por ciclo de refresco. En este sentido, el panel de LCD 1150 puede incluir una pluralidad de elementos de cristal líquido tales como, por ejemplo, un filtro de cristal líquido y color integrado. Cada pixel del panel de LCD 1150 puede incluir un trío de elementos de cristal líquido con filtros de color rojo, verde y azul, respectivamente. El panel de LCD 1150 puede disponer los píxeles en una matriz bidimensional (2D) que se controla a través de controladores de fila 1152 y controladores de columna 1154 para actualizar la imagen que se está visualizando por el panel de LCD 1150. Por lo tanto, el TCON 1130 puede controlar los controladores de fila 1152 y los controladores de columna 1154 para abordar píxeles específicos del panel de LCD 1150. El TCON 1130 también puede ajustar la tensión proporcionada a los elementos de cristal líquido en el píxel para cambiar la intensidad de la luz que pasa a través de cada uno de los tres elementos de cristal líquido y, por lo tanto, cambiar el color del píxel visualizado en la superficie del panel de LCD 1150.
Una luz de fondo 1160 puede incluir una pluralidad de elementos emisores de luz tales como, por ejemplo, diodos emisores de luz (LED), que se disponen en un borde del panel de LCD 1150. Por consiguiente, la luz generada por los LED puede dispersarse a través del panel de LCD 1150 por un difusor (no mostrado). En otro ejemplo, los LED se disponen en una matriz 2D directamente detrás del panel de LCD 1150 en una configuración en ocasiones denominado retroiluminación directa porque cada LED dispersa la luz a través de uno o más correspondientes píxeles del panel de LCD 1150 colocados en frente del LED. Los elementos emisores de luz también pueden incluir lámparas fluorescentes compactas (CFL) dispuestas a lo largo de uno o más bordes del panel de LCD 1150. Para eliminar múltiples bordes, la combinación de bordes puede alterarse para conseguir iluminación selectiva de una región, en donde menos que el conjunto total de elementos de iluminación se usa con menos potencia.
Los elementos emisores de luz también pueden incluir una o más láminas de material electroluminiscente situada detrás del panel de LCD 1150. En un caso de este tipo, la luz desde la superficie de la lámina puede dispersarse a través de los píxeles del panel de LCD 1150. Adicionalmente, la lámina puede dividirse en una pluralidad de regiones tales como, por ejemplo, cuadrantes. En un ejemplo, cada región se controla individualmente para iluminar únicamente una porción del panel de LCD 1150. También pueden usarse otras soluciones de retroiluminación.
El visualizador 1120 ilustrado también incluye un controlador de luz de fondo (BLC) 1140 que proporciona una tensión a los elementos emisores de luz de la luz de fondo 1160. Por ejemplo, el BLC 1140 puede incluir un controlador de modulación de anchura de impulso (PWM) (no mostrado) para generar una señal de PWM que activa al menos una porción de los elementos emisores de luz de la luz de fondo 1160. El ciclo de trabajo y la frecuencia de la señal de PWM puede hacer que la luz generada por los elementos emisores de luz se atenúe. Por ejemplo, un ciclo de trabajo del 100 % puede corresponder a los elementos emisores de luz estando totalmente encendidos y un ciclo de trabajo del 0 % puede corresponder a los elementos emisores de luz estando totalmente apagados. Por lo tanto, los ciclos de trabajo intermedios (por ejemplo, 25 %, 50 %) hacen habitualmente que los elementos emisores de luz se enciendan para una porción de un periodo de ciclo que es proporcional al porcentaje del ciclo de trabajo. El periodo de ciclo puede ser lo suficientemente rápido para que la intermitencia de los elementos emisores de luz no sea perceptible al ojo humano. Además, el efecto al usuario puede ser que el nivel de la luz emitida por la luz de fondo 1160 es menor que si la luz de fondo 1160 estuviera totalmente activada. El BLC 1140 puede estar separado de o incorporado en el TCON 1130.
Como alternativa, puede usarse un sistema de visualización de emisión en el que el panel de LCD 1150 se sustituiría por un panel de visualización de emisión (por ejemplo, diodo de emisión de luz orgánico/OLED), la luz de fondo 1160 se omitiría, y los controladores de fila y columna 1152 y 1154, respectivamente, pueden usarse para modular directamente color y brillo de píxel.
Resolución de visualización basada en distancia
La Figura 12A muestra un escenario en el que un usuario 1218 interactúa con un dispositivo de procesamiento de datos 1200 que contiene una unidad de visualización 1228. El dispositivo de procesamiento de visualización 1200 puede incluir, por ejemplo, un ordenador portátil, un ordenador de sobremesa, un ordenador de tableta, una tableta convertible, un dispositivo de internet móvil (MID), un asistente digital personal (PDA), un dispositivo ponible (por ejemplo, pantalla montada en la cabeza/HMD), un reproductor multimedia, etc., o cualquier combinación de los mismos. El dispositivo de procesamiento de datos 1200 ilustrado incluye un procesador 1224 (por ejemplo, controlador integrado, microcontrolador, procesador anfitrión, procesador de gráficos) acoplado a una memoria 1222, que puede incluir ubicaciones de almacenamiento que son direccionables a través del procesador 1224. Como se analizará en mayor detalle, un sensor de distancia 1210 puede posibilitar resolución de visualización basada en distancia con respecto a las unidades de visualización 1228.
La memoria 1222 ilustrada incluye datos de visualización 1226 que tienen que representarse en la unidad de visualización 1228. En un ejemplo, el procesador 1224 lleva a cabo conversión de datos en los datos de visualización 1226 antes de presentar los datos de visualización 1226 en la unidad de visualización 1228. Un motor de posprocesamiento 1214 puede ejecutarse en el procesador 1224 para recibir los datos de visualización 1226 y una salida del sensor de distancia 1210. El motor de posprocesamiento 1214 puede modificar los datos de visualización 1226 para mejorar la legibilidad de contenido de pantalla en la unidad de visualización 1228, reducir consumo de potencia en el dispositivo de procesamiento de datos 1200, etc., o cualquier combinación de los mismos.
La memoria ilustrada 1222 almacena un ajuste de resolución de visualización 1216, además de un sistema operativo 1212 y una aplicación 1220. El ajuste de resolución de visualización 1216 puede especificar un número de píxeles de los datos de visualización 1226 que hay que presentar en la unidad de visualización 1228 a lo largo de una dimensión de longitud y una dimensión de anchura. Si los datos de visualización 1226 como se generan por la aplicación 1220 son incompatibles con el formato de la unidad de visualización 1228, el procesador 1224 puede configurar la escala de los datos de visualización 1226 para coincidir con el formato de las unidades de visualización 1228. En este sentido, el ajuste de resolución de visualización 1216 puede asociarse con y/o incorporarse en los datos de configuración que definen otros ajustes para la unidad de visualización 1228. Además, el ajuste de resolución de visualización 1216 puede definirse en términos de distancia o área de unidad (por ejemplo, píxeles por pulgada/PPI) u otro parámetro adecuado.
La aplicación 1220 puede generar una interfaz de usuario, en donde el usuario 1218 puede interactuar con la interfaz de usuario para seleccionar el ajuste de resolución de visualización 1216 de entre una o más opciones proporcionadas a través de la interfaz de usuario, introducir el ajuste de resolución de visualización 1216 como un valor solicitado y así sucesivamente. Por lo tanto, los datos de visualización 1226 pueden redimensionarse para ajustarse al ajuste de resolución de visualización 1216 antes de representarse en la unidad de visualización 1228.
El sensor de distancia 1210 puede rastrear la distancia entre el usuario 1218 y la unidad de visualización 1228, en donde la detección de distancia puede desencadenarse a través de un botón físico asociado con el dispositivo de procesamiento de datos 1200/unidad de visualización 1228, a través de la interfaz de usuario proporcionada por la aplicación 1220 y/o carga del sistema operativo 1220, y así sucesivamente. Por ejemplo, durante un encendido del dispositivo de procesamiento de datos 1200, el sistema operativo 1212 puede llevar a cabo un proceso automático para desencadenar la detección de distancia en el primer o segundo plano. La detección de distancia puede llevarse a cabo de forma periódica o continua.
La Figura 12B muestra un ejemplo de un escenario de detección de distancia. En el ejemplo ilustrado, el sensor de distancia 1210 usa un transceptor 1208 para emitir un haz electromagnético 1202 en la dirección del usuario 1218. Por lo tanto, el transceptor 1202 podría colocarse en una superficie orientada hacia delante del dispositivo de procesamiento de datos 1200 (Figura 12A). El haz electromagnético 1202 puede impactar al usuario 1218 y reflejarse/dispersarse desde el usuario 1218 como un haz electromagnético de retorno 1204. El haz electromagnético de retorno 1204 puede analizarse por, por ejemplo, el procesador 1224 (Figura 12A) y/o el motor de posprocesamiento 1214 (Figura 12A) para determinar la distancia 1206 entre el usuario 1218 y la unidad de visualización 1228 (Figura 12A). La distancia 1206 puede usarse para ajustar el ajuste de resolución de visualización 1216.
Capas de visualización
Pasando ahora a la Figura 13, se muestra un sistema de visualización 1300 en el que se usan capas de visualización en cascada 1361,1362 y 1363 para conseguir superresolución espacial/temporal en un conjunto de visualización 1360. En el ejemplo ilustrado, un procesador 1310 proporciona datos de gráficos originales 1334 (por ejemplo, fotogramas de vídeo, imágenes fijas), al sistema 1300 a través de un bus 1320. Un programa de visualización en cascada 1331 puede almacenarse en una memoria 1330, en donde el programa de visualización en cascada 1331 puede ser parte de un controlador de visualización asociado con el conjunto de visualización 1360. La memoria ilustrada 1330 también incluye los datos de gráficos originales 1334 y datos de gráficos factorizados 1335. En un ejemplo, el programa de visualización en cascada 1331 incluye un componente de factorización temporal 1332 y un componente de factorización espacial 1333. El componente de factorización temporal 1332 puede realizar cálculo de factorización temporal y el componente de factorización espacial puede realizar cálculo de factorización espacial. El programa de visualización en cascada 1331 puede derivar los datos de gráficos factorizados 1335 para presentación en cada capa de visualización 1361,1362 y 1363 basándose en configuraciones de usuarios y los datos de gráficos originales 1334.
El conjunto de visualización 1360 puede implementarse como una LCD (pantalla de cristal líquido) usado en, por ejemplo, una aplicación de pantalla montada en la cabeza (HMD). Más particularmente, el conjunto de visualización 1360 puede incluir una pila de paneles de LCD, placas de interfaz, una instalación de lente, y así sucesivamente. Cada panel puede operarse a una resolución nativa de, por ejemplo, 1280x800 píxeles y con una tasa de refresco de 60 Hz. Pueden usarse otras resoluciones nativas, tasas de refresco, tecnología de panel de visualización y/o configuraciones de capa.
Múltiples unidades de visualización
La Figura 14 muestra un sistema de visualización de gráficos 1400 que incluye un conjunto de unidades de visualización 1430 (1430a-1430n) que pueden usarse generalmente para emitir una presentación de pantalla ancha (por ejemplo, panorámica) 1440 que incluye contenido coordinado en una forma topológica cohesiva y estructurada. En el ejemplo ilustrado, un dispositivo de procesamiento de datos 1418 incluye un procesador 1415 que aplica una función lógica 1424 a datos de perfil de hardware 1402 recibidos desde el conjunto de unidades de visualización 1430 a través de una red 1420. La aplicación de la función lógica 1424 a los datos de perfil de hardware 1402 puede crear un conjunto de ajustes de topología automáticos 1406 cuando no se encuentra una coincidencia de los datos de perfil de hardware con un conjunto de ajustes en una tabla de consulta de perfiles de hardware 1412. El conjunto ilustrado de ajustes de topología automáticos 1406 se transmiten desde el dispositivo de procesamiento de visualización 1418 a las unidades de visualización 1430 a través de la red 1420.
El procesador 1415 puede realizar y ejecutar la función lógica 1424 tras la recepción de la función lógica 1424 desde un controlador de visualización 1410. En este sentido, el controlador de visualización 1410 puede incluir un módulo de topología automático 1408 que automáticamente configura y estructura las topologías de las unidades de visualización 1432 para crear la presentación 1440. En un ejemplo, el controlador de visualización 1410 es un conjunto de instrucciones, que cuando se ejecutan por el procesador 1415, hacen que el dispositivo de procesamiento de datos 1418 se comunique con las unidades de visualización 1430, tarjetas de vídeo, etc., y llevar a cabo operaciones de generación de topología automática.
El dispositivo de procesamiento de datos 1418 puede incluir, por ejemplo, un servidor, sobremesa, ordenador portátil, ordenador de tableta, tableta convertible, MID, PDA, dispositivo ponible, reproductor de medios y así sucesivamente. Por lo tanto, el dispositivo de procesamiento de visualización 1418 puede incluir un módulo de control de hardware 1416, un dispositivo de almacenamiento 1414, memoria de acceso aleatorio (RAM, no mostrada), tarjetas de controlador que incluyen una o más tarjetas de controlador de vídeo y así sucesivamente. En un ejemplo, las unidades de visualización 1430 son visualizadores de panel plano (por ejemplo, cristal líquido, matriz activa, plasma, etc.), HMD, dispositivos de proyección de vídeo y así sucesivamente, que coordinan entre sí para producir la presentación 1440. Además, la presentación 1440 puede generarse basándose en un archivo de medios almacenado en el dispositivo de almacenamiento 1414, en donde el archivo de medios podría incluir, por ejemplo, una película, clip de vídeo, animación, publicidad, etc., o cualquier combinación de los mismos.
El término "topología" puede considerarse el número, escalado, forma y/u otro parámetro de configuración de una primera unidad de visualización 1430a, una segunda unidad de visualización 1430b, una tercera unidad de visualización 1430n y así sucesivamente. Por consiguiente, la topología de las unidades de visualización 1430 pueden posibilitar que la presentación 1440 se presente visualmente en concierto de tal forma que las secciones individuales de la presentación 1440 son proporcionales y compatibles con las dimensiones originales y alcance de los medios que se reproducen a través de las unidades de visualización 1430. Por lo tanto, la topología puede constituir relaciones espaciales y/o propiedades geométricas que no se vean impactadas por el cambio continuo de la forma o tamaño del contenido representado en la presentación 1440. En un ejemplo, el módulo de topología automático 1408 incluye un módulo de temporización 1426, un módulo de control 1428, un módulo de supervisión de señales 1432 y un módulo de visualización de señales 1434. El módulo de temporización 1426 puede designar una unidad de visualización particular en el conjunto de unidades de visualización 1430 como una unidad de visualización de muestra. En un caso de este tipo, el módulo de temporización 1426 puede designar las restantes unidades de visualización 1430 como unidades de visualización adicionales. En un ejemplo, el módulo de temporización 1426 establece automáticamente un factor de forma para ser compatible con los datos de perfil de hardware 1402, en donde la presentación 1440 se inicia automáticamente por una secuencia de señales gráficas 1422.
En un ejemplo, el módulo de control 1428 modifica el conjunto de ajustes de topología automáticos 1406. Adicionalmente, el módulo de supervisión de señales 1432 puede supervisar automáticamente la secuencia de señales gráficas 1422 y desencadenar el dispositivo de almacenamiento 1414 para asociar el conjunto de ajustes de topología automáticos 1406 con la tabla de consulta de perfiles de hardware 1412. Además, el módulo de supervisión de señales 1432 puede detectar automáticamente cambios en el conjunto de unidades de visualización 1430 de acuerdo con un conjunto de criterios de cambio y generar automáticamente un nuevo perfil de topología que corresponde al cambio en el conjunto de unidades de visualización 1430. Por lo tanto, el nuevo perfil de topología puede aplicarse al conjunto de unidades de visualización 1430. El módulo de supervisión de señales 1432 también pueden desencadenar el módulo de visualización de señales 1434 para aplicar de nuevo el conjunto de ajustes de apología automáticos 1406 si la secuencia de señales gráficas 1422 no cumple con un conjunto de criterios. Si los datos de perfil de hardware 1402 no soportan visualización de topología automática de la secuencia de señales gráficas 1422, el dispositivo de procesamiento de datos 1418 puede notificar un error y registrar el error en un registro de errores 1413.
Entrega de medios asistidos en la nube
Pasando ahora a la Figura 15, un sistema de juegos en la nube 1500 incluye un cliente 1540 que se acopla a un servidor 1520 a través de una red 1510. El cliente 1540 puede ser generalmente un consumidor de contenido de gráficos (por ejemplo, juegos, realidad virtual/RV, realidad aumentada/RA) que se aloja, procesa y representa en el servidor 1520. El servidor 1520 ilustrado, que puede ser escalable, tiene la capacidad para proporcionar el contenido de gráficos a múltiples clientes simultáneamente (por ejemplo, aprovechando procesamiento paralelo y distribuido y recursos de representación). En un ejemplo, la escalabilidad del servidor 1520 está limitada por la capacidad de la red 1510. Por consiguiente, puede haber algún número de clientes umbral por encima del cual puede degradarse el servicio a todos los clientes.
En un ejemplo, el servidor 1520 incluye un procesador de gráficos (por ejemplo, GPU) 1530, un procesador anfitrión (por ejemplo, CPU) 1524 y una tarjeta de interfaz de red (NIC) 1522. La NIC 1522 puede recibir una solicitud desde el cliente 1540 para contenido de gráficos. La petición desde el cliente 1540 puede hacer que el contenido de gráficos se recupera desde la memoria a través de una aplicación que se ejecuta en el procesador anfitrión 1524. El procesador anfitrión 1524 puede efectuar operaciones de nivel alto tales como, por ejemplo, determinar posición, colisión y movimiento de objetos en una escena dada. Basándose en las operaciones de nivel alto, el procesador anfitrión 1524 puede generar comandos de representación que se combinan con los datos de escena y se ejecutan por el procesador de gráficos 1530. Los comandos de representación pueden hacer que el procesador de gráficos 1530 defina la geometría de escena, sombreado, iluminación, movimiento, textura, parámetros de cámara, etc., para escenas que hay que presentar a través del cliente 1540.
Más particularmente, el procesador de gráficos 1530 ilustrado incluye un representador de gráficos 1532 que ejecuta procedimientos de representación de acuerdo con los comandos de representación generados por el procesador anfitrión 1524. La salida del representador de gráficos 1532 puede ser un flujo de fotogramas de vídeo sin procesar que se proporcionan a un capturador de fotogramas 1534. El capturador de fotogramas 1534 ilustrado se acopla a un codificador 1536, que puede comprimir/formatear el flujo de vídeo sin procesar para su transmisión a través de la red 1510. El codificador 1536 puede usar una amplia variedad de algoritmos de compresión de vídeo tales como, por ejemplo, la norma H.264 de Sector de Normalización de Telecomunicaciones de la Unión Internacional de Telecomunicaciones (ITUT), la norma de Codificación de Vídeo Avanzada (AVC) de MPEG4 de la Organización Internacional de Normalización/Comisión Electrotécnica Internacional (ISO/IEC), y así sucesivamente.
El cliente 1540 ilustrado, que puede ser un ordenador de sobremesa, ordenador portátil, ordenador de tableta, tableta convertible, dispositivo ponible, MID, PDA, reproductor de medios, etc., incluye una NIC 1542 para recibir el flujo de vídeo transmitido desde el servidor 1520. La NIC 1522, puede incluir la capa física y la base para la capa de software de la interfaz de red en el cliente 1540 para facilitar comunicaciones a través de la red 1510. El cliente 1540 también puede incluir un decodificador 1544 que emplea el mismo esquema de formateo/compresión del codificador 1536. Por lo tanto, el flujo de vídeo descomprimido puede proporcionarse desde el decodificador 1544 a un representador de vídeo 1546. El representador de vídeo 1546 ilustrado se acopla a un visualizador 1548 que presenta visualmente el contenido de gráficos.
Como ya se ha indicado, el contenido de gráficos puede incluir contenido de juegos. En este sentido, el cliente 1540 puede llevar a cabo difusión en continuo interactiva en tiempo real que implica la recopilación de entrada de usuario desde un dispositivo de entrada 1550 y entrega de la entrada de usuario al servidor 1520 a través de la red 1510. Este componente interactivo en tiempo real de juego en la nube puede plantear desafíos con respecto a la latencia.
Ejemplo de visión general del sistema adicional
La Figura 16 es un diagrama de bloques de un sistema de procesamiento 1600. En diversos ejemplos, el sistema 1600 incluye uno o más procesadores 1602 y uno o más procesadores de gráficos 1608, y puede ser un único sistema de escritorio de procesador, un sistema de estación de trabajo multiprocesador o un sistema de servidor que tiene un gran número de procesadores 1602 o núcleos de procesador 1607. En un ejemplo, el sistema 1600 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, portátiles o integrados.
El sistema 1600 puede incluir, o estar incorporada 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 en línea. En algunos ejemplos, el sistema 1600 es un teléfono móvil, un teléfono inteligente, un dispositivo informático de tableta o dispositivo de Internet móvil. El sistema de procesamiento de datos 1600 puede incluir también, estar acoplado con o estar integrado dentro de un dispositivo llevable, tal como un dispositivo llevable de tipo reloj inteligente, un dispositivo de gafas inteligente, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunos ejemplos, el sistema de procesamiento de datos 1600 es una televisión o un dispositivo de decodificador de salón que tiene uno o más procesadores 1602 y una interfaz gráfica generada por uno o más procesadores de gráficos 1608.
En algunos ejemplos, cada uno del uno o más procesadores 1602 incluye uno o más núcleos de procesador 1607 para procesar instrucciones que, cuando se ejecutan, realizan operaciones para el sistema y el software del usuario. En algunos ejemplos, cada uno del uno o más núcleos de procesador 1607 está configurado para procesar un conjunto de instrucciones 1609 específico. En algunos ejemplos, el conjunto de instrucciones 1609 puede facilitar el cálculo de conjunto de instrucciones complejo (CISC), el cálculo de conjunto de instrucciones reducido (RISC), o cálculo mediante una palabra de instrucción muy larga (VLIW). Cada uno de los múltiples núcleos de procesador 1607 puede procesar un conjunto de instrucciones 1609 diferente, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo de procesador 1607 puede incluir también otros dispositivos de procesamiento, tal como un procesador de señales digitales (DSP).
En algunos ejemplos, el procesador 1602 incluye la memoria caché 1604. Dependiendo de la arquitectura, el procesador 1602 puede tener una única caché interna o múltiples niveles de caché interna. En algunos ejemplos, la memoria caché se comparte entre diversos componentes del procesador 1602. En algunos ejemplos, el procesador 1602 también usa una caché externa (por ejemplo, una caché de nivel 3 (L3) o caché de último nivel (LLC)) (no mostrada), que puede compartirse entre núcleos de procesador 1607 usando técnicas de coherencia de caché conocidas. Un fichero de registro 1606 está incluido adicionalmente en el procesador 1602 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 fin general, mientras que otros registros pueden ser específicos al diseño del procesador 1602.
En algunos ejemplos, el procesador 1602 se acopla a un bus de procesador 1610 para transmitir señales de comunicación tales como una dirección, datos o señales de control entre el procesador 1602 y otros componentes en el sistema 1600. En un ejemplo, el sistema 1600 usa una arquitectura de sistema de 'concentrador' ilustrativa, que incluye un concentrador de controlador de memoria 1616 y un concentrador de controlador de Entrada Salida (E/S) 1630. Un concentrador de controlador de memoria 1616 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 1600, mientras que un concentrador del controlador de E/S (ICH) 1630 proporciona conexiones a dispositivos de E/S mediante un bus de E/S local. En un ejemplo, la lógica del concentrador de controlador de memoria 1616 está integrada dentro del procesador.
El dispositivo de memoria 1620 puede ser un dispositivo de memoria de acceso aleatorio dinámica (DRAM), un dispositivo de memoria de acceso aleatorio estática (SRAM), un dispositivo de memoria flash, dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tiene un rendimiento adecuado para servir como una memoria de proceso. En un ejemplo, el dispositivo de memoria 1620 puede operar como memoria de sistema para el sistema 1600, para almacenar datos 1622 e instrucciones 1621 para su uso cuando el uno o más procesadores 1602 ejecutan una aplicación o proceso. El concentrador de controlador de memoria 1616 también se acopla con un procesador de gráficos externo opcional 1612, que puede comunicarse con el uno o más procesadores de gráficos 1608 en los procesadores 1602 para realizar operaciones de gráficos y medios.
En algunos ejemplos, el ICH 1630 posibilita que los periféricos se conecten al dispositivo de memoria 1620 y al procesador 1602 mediante a un bus de E/S de alta velocidad. Los periféricos de E/S incluyen, pero sin limitación, un controlador de audio 1646, una interfaz de firmware 1628, un transceptor inalámbrico 1626 (por ejemplo, Wi-Fi, Bluetooth), un dispositivo de almacenamiento de datos 1624 (por ejemplo, una unidad de disco duro, memoria flash, etc.), y un controlador de E/S heredado 1640 para acoplar dispositivos heredados (por ejemplo, de tipo sistema personal 2 (PS/2)) al sistema. Uno o más controladores de Bus Serie Universal (USB) 1642 conectan los dispositivos de entrada, tales como las combinaciones de teclado y ratón 1644. Un controlador de red 1634 puede acoplarse también al ICH 1630. En algunos ejemplos, un controlador de red de alto rendimiento (no mostrado) se acopla al bus del procesador 1610. Se apreciará que el sistema 1600 mostrado es ilustrativo y no limitante, ya que pueden usarse también otros tipos de sistemas de procesamiento de datos que están configurados de manera diferente. Por ejemplo, el concentrador del controlador de E/S 1630 puede estar integrado dentro del uno o más procesadores 1602, o el concentrador de controlador de memoria 1616 y el concentrador de controlador de E/S 1630 pueden estar integrados en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 1612.
La Figura 17 es un diagrama de bloques de un procesador 1700 que tiene uno o más núcleos de procesador 1702A-1702N, un controlador de memoria integrado 1714 y un procesador de gráficos integrado 1708. Esos elementos de la Figura 17 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a este tipo. El procesador 1700 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 1702N representado por los recuadros con línea discontinua. Cada uno de los núcleos de procesador 1702A-1702N incluye una o más unidades de caché internas 1704A-1704N. En algunos ejemplos, cada núcleo de procesador también tiene acceso a una o más unidades en caché compartidas 1706.
Las unidades de caché internas 1704A-1704N y las unidades de caché compartidas 1706 representan una jerarquía de memoria caché dentro del procesador 1700. La jerarquía de memoria caché puede incluir al menos un nivel de instrucción y caché de datos dentro de cada núcleo de procesador y uno o más niveles de caché de nivel medio compartida, tal como un nivel 2 (L2), nivel 3 (L3), nivel 4 (L4) u otros niveles de cache, donde el nivel más alto de caché antes de memoria externa se clasifica como el LLC. En algunos ejemplos, la lógica de coherencia de caché mantiene la coherencia entre las diversas unidades de caché 1706 y 1704A-1704N.
El procesador 1700 puede incluir también un conjunto de una o más unidades de controlador de bus 1716 y un núcleo de agente de sistema 1710. La una o más unidades de controlador de bus 1716 gestionan un conjunto de buses periféricos, tal como uno o más buses de Interconexión de Componentes Periféricos (por ejemplo, PCI, PCI Express). El núcleo de agente de sistema 1710 proporciona la funcionalidad de gestión para los diversos componentes de procesador. En algunos ejemplos, el núcleo de agente de sistema 1710 incluye uno o más controladores de memoria integrados 1714 para gestionar el acceso a diversos dispositivos de memoria externos (no mostrados).
En algunos ejemplos, uno o más de los núcleos de procesador 1702A-1702N incluyen soporte para múltiples hilos simultáneos. El núcleo de agente de sistema 1710 incluye componentes para coordinar y operar los núcleos 1702A-1702N durante el procesamiento de múltiples hilos. El núcleo de agente de sistema 1710 puede incluir adicionalmente una unidad de control de potencia (PCU), que incluye lógica y componentes para regular el estado de potencia de los núcleos de procesador 1702A-1702N y del procesador de gráficos 1708.
En algunos ejemplos, el procesador 1700 incluye adicionalmente el procesador de gráficos 1708 para ejecutar operaciones de procesamiento de gráficos. En algunos ejemplos, el procesador de gráficos 1708 se acopla con el conjunto de unidades de caché compartidas 1706, y el núcleo de agente de sistema 1710, que incluye el uno o más controladores de memoria integrados 1714. En algunos ejemplos, un controlador de visualización 1711 está acoplado con el procesador de gráficos 1708 para controlar la salida del procesador de gráficos a una o más pantallas acopladas. El controlador de visualización 1711 puede ser un módulo separado acoplado con el procesador de gráficos mediante al menos una interconexión, o puede estar integrado dentro del procesador de gráficos 1708 o el núcleo de agente de sistema 1710.
En algunos ejemplos, se usa una unidad de interconexión basada en anillo 1712 para acoplar los componentes internos del procesador 1700. Sin embargo, puede usarse una unidad de interconexión alternativa, tal como una interconexión de punto a punto, una interconexión conmutada, u otras técnicas, que incluyen técnicas bien conocidas en la técnica. En algunos ejemplos, el procesador de gráficos 1708 se acopla con la interconexión en anillo 1712 mediante un enlace de E/S 1713.
El enlace de E/S 1713 ilustrativo representa al menos una de múltiples variedades de interconexiones de E/S, que incluyen una interconexión de E/S en paquete que facilita la comunicación entre diversos componentes de procesador y un módulo de memoria integrado de alto rendimiento 1718, tal como un módulo eDRAM. En algunos ejemplos, cada uno de los núcleos de procesador 1702-1702N y del procesador de gráficos 1708 usan módulos de memoria integrados 1718 como una caché de último nivel compartida.
En algunos ejemplos, los núcleos de procesador 1702A-1702N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otro ejemplo, los núcleos de procesador 1702A-1702N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 1702A-N 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 un ejemplo, los núcleos de procesador 1702A-1702N son heterogéneos en términos de microarquitectura, donde uno o más núcleos que tienen un consumo de potencia relativamente mayor se acoplan con uno o más núcleos de potencia que tienen un consumo de potencia menor. Adicionalmente, el procesador 1700 puede implementarse en uno o más chips como un circuito integrado SoC que tiene los componentes ilustrados, además de otros componentes.
La Figura 18 es un diagrama de bloques de un procesador de gráficos 1800, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador de gráficos integrado con una pluralidad de núcleos de procesamiento. En algunos ejemplos, el procesador de gráficos se comunica, a través de una interfaz de E/S correlacionada con memoria, con registros en el procesador de gráficos y con comandos colocados en la memoria de procesador. En algunos ejemplos, el procesador de gráficos 1800 incluye una interfaz de memoria 1814 para acceder a la memoria. La interfaz de memoria 1814 puede ser una interfaz a memoria local, a una o más cachés internas, a una o más cachés externas compartidas y/o a memoria de sistema.
En algunos ejemplos, el procesador de gráficos 1800 también incluye un controlador de visualización 1802 para controlar la salida de visualización a un dispositivo de visualización 1820. El controlador de visualización 1802 incluye hardware para uno o más planos de superposición para la visualización y composición de múltiples capas de vídeo o elementos de interfaz de usuario. En algunos ejemplos, el procesador de gráficos 1800 incluye un motor de códec de vídeo 1806 para codificar, decodificar o transcodificar medios a, desde o entre uno o más formatos de codificación de medios, que incluyen, pero sin limitación, formatos del Grupo de Expertos de Imágenes en Movimiento (MPEG) tales como MPEG-2, formatos de Codificación de Vídeo Avanzada (AVC) tales como H.264/MPEG-4 AVC, así como de la Sociedad de Ingenieros de Imagen en Movimiento y Televisión (SMPTE) 421M/VC-1, y formatos del Grupo Mixto de Expertos en Fotografía (JPEG) tales como los formatos JPEG y Motion JPEG (MJPeG).
En algunos ejemplos, el procesador de gráficos 1800 incluye un motor de transferencia de imagen de bloque (BLIT) 1804 para realizar operaciones del rasterizador bidimensionales (2D) que incluyen, por ejemplo, transferencias de bloque de límite de bits. Sin embargo, en un ejemplo, se realizan operaciones en gráficos 2D usando uno o más componentes del motor de procesamiento de gráficos (GPE) 1810. En algunos ejemplos, el motor de procesamiento de gráficos 1810 es un motor de cálculo para realizar operaciones de gráficos, que incluyen operaciones de gráficos tridimensionales (3D) y operaciones de medios.
En algunos ejemplos, el GPE 1810 incluye una tubería 3D 1812 para realizar operaciones en 3D, tales como representar imágenes y escenas tridimensionales usando funciones de procesamiento que actúan en formas primitivas en 3D (por ejemplo, rectángulo, triángulo, etc.). La tubería 3D 1812 incluye elementos de función programables y fijos que realizan diversas tareas dentro del elemento y/o abarcan hilos de ejecución a un subsistema 3D/de medios 1815. Aunque puede usarse la tubería 3D 1812 para realizar operaciones de medios, un ejemplo de GPE 1810 también incluye una tubería de medios 1816 que se usa específicamente para realizar operaciones de medios, tales como post procesamiento de vídeo y mejora de imagen.
En algunos ejemplos, la tubería de medios 1816 incluye unidades de lógica de función fija o programable para realizar una o más operaciones de medios especializadas, tales como aceleración de decodificación de vídeo, desentrelazado de vídeo y aceleración de codificación de vídeo en lugar de, o en nombre del motor de códec de vídeo 1806. En algunos ejemplos, la tubería de medios 1816 incluye adicionalmente una unidad de generación de hilos para generar hilos para la ejecución en el subsistema en 3D/de medios 1815. Los hilos generados realizan cálculos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema en 3D/de medios 1815.
En algunos ejemplos, el subsistema en 3D/de medios 1815 incluye lógica para ejecutar hilos generados por la tubería 3D 1812 y la tubería de medios 1816. En una realización, las tuberías envían solicitudes de ejecución de hilo al subsistema en 3D/de medios 1815, que incluye la lógica de despacho de hilo para arbitrar y despachar las diversas solicitudes a recursos de ejecución de hilo disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los hilos en 3D y los medios. En algunos ejemplos, el subsistema en 3D/de medios 1815 incluye una o más cachés internas para instrucciones de hilo y de datos. En algunos ejemplos, el subsistema también incluye memoria compartida, incluyendo registros y memoria direccionable, para compartir datos entre hilos y para almacenar datos de salida.
Procesamiento 3D/de medios
La Figura 19 es un diagrama de bloques de un motor de procesamiento de gráficos 1910 de un procesador de gráficos. En un ejemplo, el GPE 1910 es una versión del GPE 1810 mostrado en la Figura 18. Los elementos de la Figura 19 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a tal.
En algunos ejemplos, el GPE 1910 se acopla con o incluye un emisor de envío por flujo continuo de comando 1903, que proporciona un flujo de comandos al GPE 3D y tuberías de medios 1912, 1916. En algunos ejemplos, el emisor de flujo continuo de comando 1903 está acoplado a memoria, que puede ser memoria de sistema, o una o más de memoria caché interna y memoria caché compartida. En algunos ejemplos, el emisor de flujo continuo de comando 1903 recibe comandos desde la memoria y envía los comandos a la tubería 3D 1912 y/o a la tubería de medios 1916. Los comandos son directivas extraídas desde una memoria intermedia en anillo, que almacena comandos para las tuberías 3D y de medios 1912, 1916. En un ejemplo, la memoria intermedia en anillo puede incluir adicionalmente memorias intermedias de comandos por lotes que almacenan lotes de múltiples comandos. Las tuberías 3D y de medios 1912, 1916 procesan los comandos realizando operaciones a través de lógica dentro de las respectivas tuberías o despachando uno o más hilos de ejecución a una matriz de unidades de ejecución 1914. En algunos ejemplos, la matriz de unidades de ejecución 1914 es escalable, de tal forma que la matriz incluye un número variable de unidades de ejecución basándose en la potencia objetivo y en el nivel de rendimiento del GPE 1910.
En algunos ejemplos, un motor de muestreo 1930 se acopla con la memoria (por ejemplo, memoria caché o memoria de sistema) y la matriz de unidades de ejecución 1914. En algunos ejemplos, el motor de muestreo 1930 proporciona un mecanismo de acceso de memoria para la matriz de unidades de ejecución 1914 que permite que la matriz de ejecución 1914 lea datos de gráficos y de medios desde la memoria. En algunos ejemplos, el motor de muestreo 1930 incluye lógica para realizar operaciones de muestreo de imagen especializadas para medios.
En algunos ejemplos, la lógica de muestreo de medios especializada en el motor de muestreo 1930 incluye un módulo de eliminación de ruido/entrelazado 1932, un módulo de estimación de movimiento 1934 y un módulo de escalado y filtrado de imágenes 1936. En algunos ejemplos, el módulo de eliminación de ruido/intercalado 1932 incluye lógica para realizar uno o más de un algoritmo de eliminación de ruido o eliminación de entrelazado en datos de vídeo decodificados. La lógica de eliminación de entrelazado combina campos alternos de contenido de vídeo entrelazado en un único fotograma de vídeo. La lógica de eliminación de ruido reduce o elimina ruido de datos de datos de vídeo y de imagen. En algunos ejemplos, la lógica de eliminación de ruido y lógica de eliminación de entrelazado son adaptables al movimiento y usan filtrado temporal o espacial basándose en la cantidad de movimiento detectado en los datos de vídeo. En algunos ejemplos, el módulo de eliminación de ruido/entrelazado 1932 incluye lógica de detección de movimiento especializada (por ejemplo, dentro del motor de estimación de movimiento 1934).
En algunos ejemplos, el motor de estimación de movimiento 1934 proporciona aceleración de hardware para operaciones de vídeo realizando funciones de aceleración de vídeo tales como estimación y predicción de vector de movimiento en datos de vídeo. El motor de estimación de movimiento determina vectores de movimiento que describen la transformación de datos de imagen entre fotogramas de vídeo sucesivos. En algunos ejemplos, un códec de medios de procesador de gráficos usa el motor de estimación de movimiento de vídeo 1934 para realizar operaciones en vídeo a nivel de macrobloque que de otra manera puede requerir demasiados cálculos para realizar con un procesador de fin general. En algunos ejemplos, el motor de estimación de movimiento 1934 está generalmente disponible para que componentes de procesador de gráficos ayuden con las funciones de decodificación de vídeo y de procesamiento que son sensibles o adaptables a la dirección o magnitud del movimiento dentro de datos de vídeo.
En algunos ejemplos, el módulo de escalado y filtrado de imágenes 1936 realiza operaciones de procesamiento de imágenes para mejorar la calidad visual de imágenes y vídeo generados. En algunos ejemplos, el módulo de escalado y filtrado 1936 procesa datos de imagen y vídeo durante la operación de muestreo antes de proporcionar los datos a la matriz de unidades de ejecución 1914.
En algunos ejemplos, el GPE 1910 incluye un puerto de datos 1944, que proporciona un mecanismo adicional para que los subsistemas gráficos accedan a memoria. En algunos ejemplos, el puerto de datos 1944 facilita acceso a memoria para operaciones que incluyen escrituras objetivo de representación, lecturas de memoria intermedia constantes, lecturas/escrituras de espacio de memoria reutilizable y accesos a superficie de medios. En algunos ejemplos, el puerto de datos 1944 incluye espacio de memoria caché para almacenar en caché accesos a memoria. La memoria caché puede ser una única caché de datos o separada en múltiples cachés para los múltiples subsistemas que acceden a memoria a través del puerto de datos (por ejemplo, una caché de memoria intermedia de representación, una caché de memoria intermedia constante, etc.). En algunos ejemplos, hilos que se ejecutan en una unidad de ejecución en la matriz de unidades de ejecución 1914 se comunican con el puerto de datos intercambiando mensajes a través de una interconexión de distribución de datos que acopla cada uno de los subsistemas del GPE 1910.
Unidades de ejecución
La Figura 20 es un diagrama de bloques de otro procesador de gráficos 2000. Los elementos de la Figura 20 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a tal.
En algunos ejemplos, el procesador de gráficos 2000 incluye una interconexión en anillo 2002, un extremo frontal de tubería 2004, un motor de medios 2037 los núcleos de gráficos 2080A-2080N. En algunos ejemplos, la interconexión en anillo 2002 acopla el procesador de gráficos a otras unidades de procesamiento, que incluyen otros procesadores de gráficos o uno o más núcleos de procesador de fin general. En algunos ejemplos, el procesador de gráficos es uno de muchos procesadores integrados dentro de un sistema de procesamiento de múltiples núcleos.
En algunos ejemplos, el procesador de gráficos 2000 recibe lotes de comandos mediante la interconexión en anillo 2002. Los comandos entrantes se interpretan por un emisor por flujo continuo de comando 2003 en el extremo frontal de la tubería 2004. En algunos ejemplos, el procesador de gráficos 2000 incluye lógica de ejecución escalable para realizar el procesamiento de geometría en 3D y el procesamiento de medios mediante el núcleo o núcleos de gráficos 2080A-2080N. Para los comandos de procesamiento de geometría en 3D, el emisor de envío por flujo continuo 2003 suministra comandos a la tubería de geometría 2036. Para al menos algunos comandos de procesamiento de medios, el emisor por flujo continuo de comando 2003 suministra los comandos a un extremo frontal de vídeo 2034, que se acopla con un motor de medios 2037. En algunos ejemplos, el motor de medios 2037 incluye un motor de calidad de vídeo (VQE) 2030 para post procesamiento de vídeo y de imagen y un motor de codificación/decodificación multiformato (MFX) 2033 para proporcionar la codificación y decodificación de datos de medios acelerados por hardware. En algunos ejemplos, la tubería de geometría 2036 y el motor de medios 2037 cada uno genera hilos de ejecución para los recursos de ejecución de hilo proporcionados por al menos un núcleo de gráficos 2080A.
En algunos ejemplos, el procesador de gráficos 2000 incluye recursos de ejecución de hilo escalables que presentan núcleos modulares 2080A-2080N (en ocasiones denominados cortes de núcleo), teniendo cada uno múltiples subnúcleos 2050A-2050N, 2060A-2060N (en ocasiones denominados subcortes de núcleo). En algunos ejemplos, el procesador de gráficos 2000 puede tener cualquier número de núcleos de gráficos 2080A a 2080N. En algunos ejemplos, el procesador de gráficos 2000 incluye un núcleo de gráficos 2080A que tiene al menos un primer subnúcleo 2050A y un segundo subnúcleo de núcleo 2060A. En otros ejemplos, el procesador de gráficos es un procesador de baja potencia con un único subnúcleo (por ejemplo, 2050A). En algunos ejemplos, el procesador de gráficos 2000 incluye múltiples núcleos de gráficos 2080A-2080N, incluyendo cada uno un conjunto de primeros subnúcleos 2050A-2050N y un conjunto de segundos subnúcleos 2060A-2060N. Cada subnúcleo en el conjunto de primeros subnúcleos 2050A-2050N incluye al menos un primer conjunto de unidades de ejecución 2052A-2052N y muestreadores de medios/textura 2054A-2054N. Cada subnúcleo en el conjunto de segundos subnúcleos 2060A-2060N incluye al menos un segundo conjunto de unidades de ejecución 2062A-2062N y los muestreadores 2064A-2064N. En algunos ejemplos, cada subnúcleo 2050A-2050N, 2060A-2060N comparte un conjunto de recursos compartidos 2070A-2070N. En algunos ejemplos, los recursos compartidos incluyen memoria caché compartida y lógica de operación de píxel. También se pueden incluir otros recursos compartidos en las diversos ejemplos del procesador de gráficos.
La Figura 21 ilustra lógica de ejecución de hilos 2100 que incluye una matriz de elementos de procesamiento empleados en algunos ejemplos de un GPE. Los elementos de la Figura 21 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a tal.
En algunos ejemplos, la lógica de ejecución de hilo 2100 incluye un sombreador de píxeles 2102, un despachador de hilo 2104, caché de instrucciones 2106, una matriz de unidades de ejecución escalable que incluye una pluralidad de unidades de ejecución 2108A-2108N, un muestreador 2110, una caché de datos 2112 y un puerto de datos 2114. En un ejemplo, los componentes incluidos están interconectados a través de un tejido de interconexión que se enlaza con cada uno de los componentes. En algunos ejemplos, la lógica de ejecución de hilo 2100 incluye una o más conexiones a memoria, tal como la memoria de sistema o memoria caché, a través de uno o más de la caché de instrucciones 2106, el puerto de datos 2114, el muestreador 2110 y la matriz de unidades de ejecución 2108A-2108N. En algunos ejemplos, cada unidad de ejecución (por ejemplo, 2108A) es un procesador de vector individual con capacidad de ejecutar múltiples hilos simultáneos y procesar múltiples elementos de datos en paralelo para cada hilo. En algunos ejemplos, la matriz de unidades de ejecución 2108A-2108N incluye cualquier unidad de ejecución individual de número.
En algunos ejemplos, la matriz de unidades de ejecución 2108A-2108N se usa esencialmente para ejecutar programas "sombreadores". En algunos ejemplos, las unidades de ejecución en la matriz 2108A-2108N ejecutan un conjunto de instrucciones que incluye soporte nativo para muchas instrucciones de sombreador de gráficos en 3D convencionales, de tal forma que se ejecutan los programas sombreadores de las librerías gráficas (por ejemplo, Direct 3D y OpenGL) con una traducción mínima. Las unidades de ejecución soportan procesamiento de vértices y de geometría (por ejemplo, programas de vértices, programas de geometría, sombreadores de vértices), procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos), y procesamiento de fin general (por ejemplo, sombreadores de cálculo y de medios).
Cada unidad de ejecución en la matriz de unidades de ejecución 2108A-2108N 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 acceso de elemento de datos, enmascaramiento y control de flujo dentro de las instrucciones. El número de canales puede ser independiente del número de Unidades Aritmético-Lógicas (ALU) físicas o Unidades de Coma Flotante (FPU) para un procesador de gráficos particular. En algunos ejemplos, las unidades de ejecución 2108A-2108N soportan tipos de datos de números enteros y de coma flotante.
El conjunto de instrucciones de unidad de ejecución incluye instrucciones de única instrucción, múltiples datos (SIMD). Los diversos elementos de datos pueden almacenarse como un tipo de datos empaquetado en un registro y la unidad de ejecución procesará los diversos elementos basándose en el tamaño de datos de los elementos. Por ejemplo, cuando se opera en un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera en el vector como cuatro elementos de datos de 64 bits empaquetados separados (elementos de datos de tamaño de palabra cuádruple (QW)), ocho elementos de datos de 32 bits empaquetados separados (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos de 16 bits empaquetados separados (elementos de datos de tamaño de palabra (W)), o treinta y dos elementos de datos de 8 bits separados (elementos de datos de tamaño de byte (B)). Sin embargo, son posibles diferentes anchuras de vector y tamaños de registro.
Una o más cachés de instrucciones internas (por ejemplo, 2106) están incluidas en la lógica de ejecución de hilo 2100 a instrucciones de hilo de caché para las unidades de ejecución. En algunos ejemplos, una o más cachés de datos (por ejemplo, 2112) están incluidas en los datos de hilo de caché durante la ejecución de hilo. En algunos ejemplos, se incluye el muestreador 2110 para proporcionar el muestreo de textura para operaciones en 3D y muestreo de medios para operaciones de medios. En algunos ejemplos, el muestreador 2110 incluye funcionalidad de muestreo de textura o de medios especializada para procesar datos de textura o de medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
Durante la ejecución, los gráficos y las tuberías de medios envían solicitudes de iniciación de hilo a la lógica de ejecución de hilo 2100 mediante lógica de generación y despacho de hilo. En algunos ejemplos, la lógica de ejecución de hilos 2100 incluye un despachador de hilo local 2104 que arbitra peticiones de iniciación de hilo a partir de las tuberías de gráficos y de medios e instancia los hilos requeridos en una o más unidades de ejecución 2108A-2108N. Por ejemplo, la tubería de geometría (por ejemplo, 2036 de la Figura 20) despacha procesamiento de vértices, teselación o hilos de procesamiento de geometría a lógica de ejecución de hilos 2100 (Figura 21). En algunos ejemplos, el despachador de hilo 2104 puede procesar también hilos en tiempo de ejecución que generan solicitudes de los programas sombreadores en ejecución.
Una vez que un grupo de objetos geométricos se ha procesado y rasterizado en datos de píxel, se invoca un sombreador de píxeles 2102 para calcular adicionalmente información de salida y hacer que los resultados se escriban en superficies de salida (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de estarcido, etc.). En algunos ejemplos, el sombreador de píxeles 2102 calcula los valores de los diversos atributos de vértice que han de interpolarse través del objeto rasterizado. En algunos ejemplos, el sombreador de píxeles 2102 ejecuta, a continuación, un programa de sombreador de píxeles suministrado por la interfaz de programación de aplicación (API). Para ejecutar el programa de sombreador de píxeles, el sombreador de píxeles 2102 despacha hilos a una unidad de ejecución (por ejemplo, 2108A) a través del despachador de hilo 2104. En algunos ejemplos, el sombreador de píxeles 2102 usa lógica de muestreo de textura en el muestreador 2110 para acceder a datos de textura en mapas de textura almacenados en memoria. Las operaciones aritméticas en los datos de textura y en los datos de geometría de entrada calculan datos de color de píxel para cada fragmento geométrico o descartan uno o más píxeles de su procesamiento adicional.
En algunos ejemplos, el puerto de datos 2114 proporciona un mecanismo de acceso a memoria para los datos procesados de salida de la lógica de ejecución de hilo 2100 para su procesamiento en una tubería de salida del procesador de gráficos. En algunos ejemplos, el puerto de datos 2114 incluye o se acopla a una o más memorias de caché (por ejemplo, la caché de datos 2112) para almacenar en caché datos para acceso de memoria mediante el puerto de datos.
La Figura 22 es un diagrama de bloques que ilustra un formato de instrucción de procesador de gráficos 2200. En uno o más ejemplos, las unidades de ejecución de procesador de gráficos soportan un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Los recuadros de línea continua ilustran los componentes que están incluidos en general en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que están incluidos únicamente en un subconjunto de las instrucciones. En algunos ejemplos, el formato de instrucción 2200 descrito e ilustrado son macro-instrucciones, ya que son instrucciones suministradas a la unidad de ejecución, a diferencia de las micro-operaciones resultantes de la decodificación de la instrucción una vez que se ha procesado la instrucción.
En algunos ejemplos, las unidades de ejecución de procesador de gráficos soportan de forma nativa instrucciones en un formato de 128 bits 2210. Está disponible un formato de instrucciones de 64 bits compacto 2230 para algunas instrucciones basándose en la instrucción seleccionada, en las opciones de la instrucción y en el número de operandos. El formato de 128 bits nativo 2210 proporciona acceso a todas las opciones de instrucción, mientras que algunas opciones y operaciones están restringidas en el formato de 64 bits 2230. Las instrucciones nativas disponibles en el formato de 64 bits 2230 varían por ejemplo. En algunos ejemplos, la instrucción se compacta en parte usando un conjunto de valores de índice en un campo de índice 2213. El hardware de la unidad de ejecución hace referencia a un conjunto de tablas de compactación basándose en los valores de índice y usa las salidas de la tabla de compactación para reconstruir una instrucción nativa en el formato de 128 bits 2210.
Para cada formato, el código de operación de la instrucción 2212 define la operación que va a 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 a través de cada canal de color que representa un elemento de textura o elemento de imagen. Por defecto, la unidad de ejecución realiza cada instrucción a través de todos los canales de datos de los operandos. En algunos ejemplos, el campo de control de instrucción 2214 posibilita el control a través de ciertas opciones de ejecución, tales como la selección de canales (por ejemplo, predicación) y el orden de canal de datos (por ejemplo, mezcla). Para instrucciones de 128 bits 2210, un campo de tamaño de ejecución 2216 limita el número de canales de datos que se ejecutarán en paralelo. En algunos ejemplos, el campo de tamaño de ejecución 2216 no está disponible para su uso en el formato de instrucciones compacto de 64 bits 2230.
Algunas instrucciones de unidad de ejecución tienen hasta tres operandos que incluyen dos operandos de origen, src0 2220, src1 2222 y uno de destino 2218. En algunos ejemplos, las unidades de ejecución soportan instrucciones de destino dual, 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, SRC22224), donde el código de operación de instrucción 2212 determina el número de operandos de origen. Un último operando de origen de la instrucción puede ser un valor inmediato (por ejemplo, precodificado) pasado con la instrucción.
En algunos ejemplos, el formato de instrucción de 128 bits 2210 incluye una información de modo de acceso/dirección 2226 que especifica, por ejemplo, si se usa el modo de direccionamiento de registro directo o el modo de direccionamiento de registro indirecto. Cuando se usa el modo de direccionamiento de registro directo, se proporciona la dirección de registro de uno o más operandos directamente por bits en la instrucción 2210.
En algunos ejemplos, el formato de instrucción de 128 bits 2210 incluye un campo de modo de acceso/dirección 2226, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En un ejemplo, el modo de acceso para definir una alineación de acceso de datos para la instrucción. Algunos ejemplos soportan 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 2210 puede usar direccionamiento alineado en byte para operandos de origen y destino y cuando está en un segundo modo, la instrucción 2210 puede usar direccionamiento alineado en 16 bytes para todos los operandos de origen y destino.
En un ejemplo, la porción de modo de dirección del campo de modo de acceso/dirección 2226 determina si la instrucción es para usar direccionamiento directo o indirecto. Cuando se usa el modo de direccionamiento de registro directo, bits en la instrucción 2210 proporcionan directamente la dirección de registro de uno o más operandos. Cuando se usa el modo de direccionamiento de registro indirecto, puede calcularse la dirección de registro de uno o más operandos basándose en un valor de registro de dirección y un campo inmediato de dirección en la instrucción.
En algunos ejemplos, las instrucciones se agrupan basándose en campos de bits de código de operación 2212 para simplificar la decodificación del código de operación 2240. Para un código de operación de 8 bits, los bits 4, 5 y 6 permiten que la unidad de ejecución determine el tipo de código de operación. La agrupación de código de operación precisa mostrada es simplemente un ejemplo. En algunos ejemplos, un grupo de código de operación de movimiento y lógica 2242 incluye instrucciones de movimiento y lógica de datos (por ejemplo, mover (mov), comparar (cmp)). En algunos ejemplos, el grupo de movimiento y lógica 2242 comparte los cinco bits más significativos (MSB), donde las instrucciones mover (mov) son en forma de 0000xxxxb y las instrucciones lógicas son en forma de 0001xxxxb. Un grupo de instrucciones de control de flujo 2244 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones misceláneas 2246 incluye una mezcla de instrucciones, incluyendo instrucciones de sincronización (por ejemplo, espera, envío) en forma de 0011xxxxb (por ejemplo, 0x30). Un grupo de instrucciones de cálculo paralelo 2248 incluye instrucciones aritméticas a nivel de componente (por ejemplo, añadir, multiplicar (mul)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo de cálculos paralelo 2248 realiza las operaciones aritméticas en paralelo a través de canales de datos. El grupo de cálculos vectoriales 2250 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101xxxxb (por ejemplo, 0x50). El grupo de cálculos vectoriales realiza cálculos aritméticos tales como cálculos de producto vectorial en operandos vectoriales.
Tubería de gráficos
La Figura 23 es un diagrama de bloques de otro procesador de gráficos 2300. Los elementos de la Figura 23 que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en otra parte en el presente documento, pero no están limitados a tal.
En algunos ejemplos, el procesador de gráficos 2300 incluye una tubería de gráficos 2320, una tubería de medios 2330, un motor de visualización 2340, lógica de ejecución de hilo 2350 y una tubería de salida del representador 2370. En algunos ejemplos, el procesador de gráficos 2300 es un procesador de gráficos dentro de un sistema de procesamiento de múltiples núcleos que incluye uno o más núcleos de procesamiento de fin general. El procesador de gráficos se controla por escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador de gráficos 2300 mediante una interconexión en anillo 2302. En algunos ejemplos, la interconexión en anillo 2302 acopla el procesador de gráficos 2300 a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de fin general. Los comandos de la interconexión en anillo 2302 se interpretan por un emisor de envío por flujo continuo de comando 2303, que suministra instrucciones a la tubería de componentes individuales de gráficos 2320 o a la tubería de medios 2330.
En algunos ejemplos, el emisor por flujo continuo de comando 2303 dirige la operación de un extractor de vértices 2305 que lee los datos de vértices desde la memoria y ejecuta comandos de procesamiento de vértices proporcionados por el emisor de envío por flujo continuo 2303. En algunos ejemplos, el extractor de vértices 2305 proporciona datos de vértices al sombreador de vértices 2307, que realiza operaciones de transformación e iluminación de espacio de coordenadas a cada vértice. En algunos ejemplos, el extractor de vértices 2305 y el sombreador de vértices 2307 ejecutan instrucciones de procesamiento de vértices despachando hilos de ejecución a unidades de ejecución 2352A, 2352B mediante un despachador de hilo 2331.
En algunos ejemplos, las unidades de ejecución 2352A, 2352B son una matriz de procesadores vectoriales que tienen un conjunto de instrucciones para realizar operaciones de gráficos y de medios. En algunos ejemplos, las unidades de ejecución 2352A, 2352B tienen una caché de nivel L1 adjunta 2351 que es específica para cada matriz o se comparte entre las matrices. La caché puede estar configurada como una caché de datos, una caché de instrucciones o una única caché que está subdividida para contener datos e instrucciones en diferentes particiones.
En algunos ejemplos, la tubería de gráficos 2320 incluye componentes de teselación para realizar teselación acelerada por hardware de objetos 3D. En algunos ejemplos, un sombreador de casco programable 2311 configura las operaciones de teselación. Un sombreador de dominio programable 2317 proporciona una evaluación de extremo trasero de la salida de la teselación. Un teselador 2313 opera en la dirección del sombreador de casco 2311 y contiene la lógica de fin especial para generar un conjunto de objetos geométricos detallados basándose en un modelo geométrico aproximado que se proporciona como entrada en la tubería de gráficos 2320. En algunos ejemplos, si no se usa teselación, pueden omitirse los componentes de teselación 2311,2313, 2317.
En algunos ejemplos, pueden procesarse los objetos geométricos completos por un sombreador de geometría 2319 a través de uno o más hilos despachados a las unidades de ejecución 2352A, 2352B o pueden proceder directamente al recortador 2329. En algunos ejemplos, el sombreador de geometría opera sobre objetos geométricos enteros, en lugar de vértices o parches de vértices como en fases previas de la canalización de gráficos. Si se deshabilita la teselación, el sombreador de geometría 2319 recibe la entrada desde el sombreador de vértices 2307. En algunos ejemplos, el sombreador de geometría 2319 es programable por un programa sombreador de geometría para realizar teselación de geometría si se desactivan las unidades de teselación.
Antes de la rasterización, un recortador 2329 procesa datos de vértices. El recortador 2329 puede ser un recortador de función fija o un recortador programable que tiene funciones de recorte y de sombreador de geometría. En algunos ejemplos, un rasterizador 2373 (por ejemplo, componente de prueba de profundidad) en la tubería de salida de representación 2370 despacha los sombreadores de píxel para convertir los objetos geométricos en sus representaciones por píxel. En algunos ejemplos, se incluye lógica de sombreador de píxel en la lógica de ejecución de hilo 2350. En algunos ejemplos, una aplicación puede omitir el rasterizador 2373 y acceder a unos datos de vértice no rasterizados mediante una unidad de salida de flujo 2323.
El procesador de gráficos 2300 tiene un bus de interconexión, un tejido de interconexión o algún otro mecanismo de interconexión que permite el paso de datos y mensajes entre los componentes principales del procesador. En algunos ejemplos, las unidades de ejecución 2352A, 2352B y la caché o cachés asociadas 2351, el muestreador de texturas y medios 2354, y la caché de texturas/muestreador 2358 se interconectan mediante un puerto de datos 2356 para realizar acceso de memoria y se comunican con los componentes de tubería de salida del representador del procesador. En algunos ejemplos, cada uno del muestreador 2354, las cachés 2351,2358 y las unidades de ejecución 2352A, 2352B tienen rutas de acceso a memoria separadas.
En algunos ejemplos, la tubería de salida del representador 2370 contiene un rasterizador 2373 que convierte objetos basados en vértices en una representación basada en píxeles asociada. En algunos ejemplos, la lógica de rasterizador incluye una unidad generadora de ventanas/enmascaradora para realizar una rasterización de líneas y de triángulos de función fija. También están disponibles una caché del representador asociada 2378 y caché de profundidad 2379, en algunos ejemplos. Un componente de operaciones de píxel 2377 realiza operaciones basadas en píxel en los datos, aunque, en algunos casos, las operaciones de píxel asociadas con las operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) se realizan por el motor 2D 2341, o se sustituyen en tiempo de visualización por el controlador de visualización 2343 usando planos de visualización superpuestos. En algunos ejemplos, está disponible una caché L3 compartida 2375 para todos los componentes de gráficos, lo que permite la compartición de datos sin el uso de memoria de sistema principal.
En algunos ejemplos, la tubería de medios del procesador de gráficos 2330 incluye un motor de medios 2337 y un extremo frontal de vídeo 2334. En algunos ejemplos, el extremo frontal de vídeo 2334 recibe comandos de tubería desde el emisor por flujo continuo de comando 2303. En algunos ejemplos, la tubería de medios 2330 incluye un emisor por flujo continuo de comando separado. En algunos ejemplos, el extremo frontal de vídeo 2334 procesa comandos de medios antes de enviar el comando al motor de medios 2337. En algunos ejemplos, el motor de medios 2337 incluye funcionalidad de generación de hilos para abarcar hilos para despachar a la lógica de ejecución de hilo 2350 mediante el despachador de hilo 2331.
En algunos ejemplos, el procesador de gráficos 2300 incluye un motor de visualización 2340. En algunos ejemplos, el motor de visualización 2340 es externo al procesador 2300 y se acopla con el procesador de gráficos mediante la interconexión en anillo 2302, o algún otro bus o tejido de interconexión. En algunos ejemplos, el motor de visualización 2340 incluye un motor 2D 2341 y un controlador de visualización 2343. En algunos ejemplos, el motor de visualización 2340 contiene lógica de fin especial que puede operar independientemente de la tubería 3D. En algunos ejemplos, el controlador de visualización 2343 se acopla con un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización de sistema integrado, como en un ordenador portátil, o un dispositivo de visualización externo adjunto mediante un conector de dispositivo de visualización.
En algunos ejemplos, la tubería de gráficos 2320 y la tubería de medios 2330 son configurables para realizar operaciones basándose en múltiples gráficos e interfaces de programación de medios y no son específicas a ninguna interfaz de programación de aplicación (API). En algunos ejemplos, software de controlador para el procesador de gráficos traduce llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden ser procesados por el procesador de gráficos. En algunos ejemplos, se proporciona soporte para la Biblioteca de Gráficos Abierta (OpenGL) y Lenguaje de Computación Abierto (OpenCL) de Khronos Group, la biblioteca de Direct3D de Microsoft Corporation, o puede proporcionarse soporte tanto a OpenGL como D3D. Puede proporcionarse también soporte para la Biblioteca de Visión Informática de Código Abierto (OpenCV). También se soportaría una API futura con una tubería 3D compatible si pudiera realizarse un mapeo desde la tubería de la API futura a la tubería del procesador de gráficos.
Programación de tubería de gráficos
La Figura 24A es un diagrama de bloques que ilustra un formato de comando de procesador de gráficos 2400 de acuerdo con algunas realizaciones. La Figura 24B es un diagrama de bloques que ilustra una secuencia de comando de procesador de gráficos 2410. Los recuadros de línea continua en la Figura 24A ilustran los componentes que están incluidos en general en un comando de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que únicamente están incluidos en un subconjunto de los comandos de gráficos. El formato de comando de procesador de gráficos 2400 ilustrativo de la Figura 24A incluye campos de datos para identificar un cliente objetivo 2402 del comando, un comando código de operación (opcode) 2404, y los datos relevantes 2406 para el comando. También se incluye un subcódigo de operación 2405 y un tamaño de comando 2408 en algunos comandos.
En algunos ejemplos, el cliente 2402 especifica la unidad de cliente del dispositivo de gráficos que procesa los datos de comando. En algunos ejemplos, un analizador de comandos de procesador de gráficos examina el campo de cliente de cada comando para acondicionar el procesamiento adicional del comando y encaminar los datos de comando a la unidad de cliente apropiada. En algunos ejemplos, las unidades de cliente de procesador de gráficos incluyen una unidad de interfaz de memoria, una unidad de representación, una unidad de 2D, una unidad de 3D y una unidad de medios. Cada unidad de cliente tiene una correspondiente tubería de procesamiento que procesa los comandos. Una vez que se recibe el comando por la unidad de cliente, la unidad de cliente lee el código de operación 2404 y, si está presente, el subcódigo de operación 2405 para determinar la operación a realizar. La unidad de cliente realiza el comando usando información en el campo de datos 2406. Para algunos comandos, se espera un tamaño de comando explícito 2408 para especificar el tamaño del comando. En algunos ejemplos, el analizador de comandos determina automáticamente el tamaño de al menos algunos de los comandos basándose en el código de operación de comando. En algunos ejemplos, los comandos se alinean a través de múltiplos de una palabra doble.
El diagrama de flujo en la Figura 24B muestra una secuencia de comandos de procesador de gráficos 2410 ilustrativo. En algunos ejemplos, el software o firmware de un sistema de procesamiento de datos que cuenta con una realización de un procesador de gráficos usa una versión de la secuencia de comandos mostrada para establecer, ejecutar y terminar un conjunto de operaciones de gráficos. Se muestra y se describe una secuencia de comandos de muestra solo con fines de ejemplo, debido a que los ejemplos no se limitan a estos comandos específicos o a esta secuencia de comandos. Además, pueden emitirse los comandos como lotes de comandos en una secuencia de comandos, de manera que el procesador de gráficos procesará la secuencia de comandos en concurrencia al menos parcialmente.
En algunos ejemplos, la secuencia de comandos del procesador de gráficos 2410 puede comenzar con un comando de vaciado de tubería 2412 para hacer que cualquier tubería de gráficos activa complete los comandos actualmente pendientes para la tubería. En algunos ejemplos, la tubería 3D 2422 y la tubería de medios 2424 no operan concurrentemente. Se realiza el vaciado de tubería para hacer que la tubería de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de tubería, el analizador de comando para el procesador de gráficos pausará el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las cachés de lectura relevantes. Opcionalmente, cualquier dato en la caché del representador que se marque 'sucio' puede vaciarse en memoria. En algunos ejemplos, el comando de vaciado de tubería 2412 puede usarse para la sincronización de tubería o antes de colocar el procesador de gráficos en un estado de baja potencia.
En algunos ejemplos, se usa un comando de selección de tubería 2413 cuando una secuencia de comandos requiere que el procesador de gráficos conmute explícitamente entre tuberías. En algunos ejemplos, se requiere únicamente un comando de selección de tubería 2413 una vez dentro de un contexto de ejecución antes de emitir comandos de tubería a menos que el contexto sea emitir comandos para ambas tuberías. En algunos ejemplos, se requiere un comando de vaciado de tubería 2412 inmediatamente antes de una conmutación de tubería mediante el comando de selección de tubería 2413.
En algunos ejemplos, un comando de control de tubería 2414 configura una tubería de gráficos para su operación y se usa para programar la tubería 3D 2422 y la tubería de medios 2424. En algunos ejemplos, el comando de control de tubería 2414 configura el estado de la tubería para la tubería activa. En un ejemplo, se usa el comando de control de tubería 2414 para sincronización de tubería y para limpiar datos de una o más memorias de caché dentro de la tubería activa antes del procesamiento de un lote de comandos.
En algunos ejemplos, se usan comandos de estado de memoria intermedia de retorno 2416 para configurar un conjunto de memorias intermedias de retorno para que las respectivas tuberías escriban datos. Algunas operaciones de tubería requieren la asignación, selección o configuración de una o más memorias intermedias de retorno en las que las operaciones escriben datos intermedios durante el procesamiento. En algunos ejemplos, el procesador de gráficos también usa una o más memorias intermedias de retorno para almacenar datos de salida y para realizar una comunicación a través de hilos. En algunos ejemplos, el estado de la memoria intermedia de retorno 2416 incluye seleccionar el tamaño y número de memorias intermedias de retorno para usar para un conjunto de operaciones de tubería.
Los comandos restantes en la secuencia de comandos difieren basándose en la tubería activa para las operaciones. Basándose en una determinación de tubería 2420, la secuencia de comandos está adaptada a la tubería 3D 2422 que comienza con el estado de tubería 3D 2430 o la tubería de medios 2424 que comienza en el estado de la tubería de medios 2440.
Los comandos para el estado de la tubería 3D 2430 incluyen comandos de ajuste de estado 3D para el estado de la memoria intermedia de vértice, el estado de color constante, el estado de la memoria intermedia de profundidad y otras variables de estado que han de configurarse antes de que se procesen los comandos de las primitivas 3D. Los valores de estos comandos se determinan, al menos en parte, basándose en la API 3D particular en uso. En algunos ejemplos, los comandos de estado de tubería 3D 2430 también pueden desactivar u omitir de manera selectiva ciertos elementos de tubería si no se usarán estos elementos.
En algunos ejemplos, se emite el comando de la primitiva 3D 2432 para enviar primitivas 3D para que se procesen por la tubería 3D. Los comandos y parámetros asociados que se pasan al procesador de gráficos mediante el comando de primitiva 3D 2432 se reenvían a la función de extracción de vértice en la tubería de gráficos. La función de extracción de vértice usa los datos de comando de primitiva 3D 2432 para generar estructuras de datos de vértice. Las estructuras de datos de vértice se almacenan en una o más memorias intermedias de retorno. En algunos ejemplos, se usa el comando de primitiva 3D 2432 para realizar operaciones de vértice en primitivas 3D mediante sombreadores de vértice. Para procesar sombreadores de vértice, la tubería 3D 2422 despacha hilos de ejecución de sombreador a las unidades de ejecución de procesador de gráficos.
En algunos ejemplos, se desencadena la tubería 3D 2422 mediante un comando o evento de ejecución 2434. En algunos ejemplos, una escritura de registro desencadena una ejecución de comando. En algunos ejemplos, la ejecución se desencadena a través de un comando 'ir' o 'poner en marcha' en la secuencia de comandos. En un ejemplo, la ejecución de comando se desencadena usando un comando de sincronización de canalización para vaciar la secuencia de comandos a través de la canalización de gráficos. La tubería 3D realizará un procesamiento de geometría para las primitivas 3D. Una vez que las operaciones están completadas, se rasterizan los objetos geométricos resultantes y el motor de píxeles colorea los píxeles resultantes. Pueden incluirse también comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo trasero para estas operaciones.
En algunos ejemplos, la secuencia de comandos del procesador de gráficos 2410 sigue la ruta de tubería de medios 2424 cuando se realizan operaciones de medios. En general, el uso y la manera específica de la programación para la tubería de medios 2424 depende de los medios o de las operaciones de cálculo que han de realizarse. Las operaciones de decodificación de medios específicas pueden descargase en la tubería de medios durante la decodificación de medios. En algunos ejemplos, la canalización de medios también se puede sortear y la descodificación de medios se puede realizar, en su totalidad o en parte, usando recursos proporcionados por uno o más núcleos de procesamiento de propósito general. En un ejemplo, la canalización de medios también incluye elementos para operaciones de unidad de procesador de gráficos de propósito general (GPGPU), en donde el procesador de gráficos se usa para realizar operaciones vectoriales de SIMD usando programas de sombreado computacional que no están relacionados explícitamente con la representación de primitivas de gráficos.
En algunos ejemplos, la tubería de medios 2424 está configurada de una manera similar que la tubería 3D 2422. Se despacha un conjunto de comandos de estado de tubería de medios 2440 o se pone en una cola de comandos antes de los comandos del objeto de medios 2442. En algunos ejemplos, los comandos de estado de tubería de medios 2440 incluyen datos para configurar los elementos de tubería de medios que se usarán para procesar los objetos de medios. Esto incluye datos para configurar la lógica de decodificación de vídeo y de codificación de vídeo dentro de la tubería de medios, tal como el formato de codificación o de decodificación. En algunos ejemplos, los comandos de estado de tubería de medios 2440 también soportan el uso de uno o más punteros a elementos de estado "indirecto" que contienen un lote de ajustes de estado.
En algunos ejemplos, los comandos de objeto de medios 2442 suministran punteros a objetos de medios para su procesamiento por la tubería de medios. Los objetos de medios incluyen memorias intermedias de memoria que contiene datos de vídeo que van a procesarse. En algunos ejemplos, todos los estados de la tubería de medios deben ser válidos antes de emitir un comando de objeto de medios 2442. Una vez que está configurado el estado de la tubería y se ponen en cola los comandos de objeto de medios 2442, se activa la tubería de medios 2424 mediante un comando de ejecución 2444 o un evento de ejecución equivalente (por ejemplo, una escritura de registro). La salida desde la tubería de medios 2424 puede a continuación procesarse posteriormente por operaciones proporcionadas por la tubería 3D 2422 o la tubería de medios 2424. En algunos ejemplos, las operaciones de GPGPU se configuran y se ejecutan de una manera similar a la de las operaciones de medios.
Arquitectura de software de gráficos
La Figura 25 ilustra arquitectura de software de gráficos ilustrativa para un sistema de procesamiento de datos 2500. En algunos ejemplos, la arquitectura de software incluye una aplicación de gráficos en 3D 2510, un sistema operativo 2520 y al menos un procesador 2530. En algunos ejemplos, el procesador 2530 incluye un procesador de gráficos 2532 y uno o más núcleo o núcleos de procesador de fin general 2534. La aplicación de gráficos 2510 y el sistema operativo 2520 cada uno puede ejecutarse en la memoria de sistema 2550 del sistema de procesamiento de datos.
En algunos ejemplos, la aplicación de gráficos en 3D 2510 contiene uno o más programas sombreadores que incluyen las instrucciones del sombreador 2512. Las instrucciones del lenguaje del 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 2514 en un lenguaje de máquina adecuado para la ejecución por el núcleo de procesador de fin general 2534. La aplicación también incluye objetos de gráficos 2516 definidos por datos de vértice.
En algunos ejemplos, el sistema operativo 2520 es un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo similar a UNIX propietario o un sistema operativo similar a UNIX de código abierto que usa una variante del núcleo de Linux. Cuando está en uso la API Direct3D, el sistema operativo 2520 usa un compilador de sombreador de extremo frontal 2524 para compilar cualquier instrucción del sombreador 2512 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 compilación previa de sombreador. En algunos ejemplos, se compilan sombreadores de alto nivel en sombreadores de bajo nivel durante la compilación de la aplicación de gráficos en 3D 2510.
En algunos ejemplos, el controlador de gráficos de modo de usuario 2526 contiene un compilador de sombreador de extremo trasero 2527 para convertir las instrucciones del sombreador 2512 en una representación específica de hardware. Cuando está en uso la API OpenGL, las instrucciones del sombreador 2512 en el lenguaje de alto nivel GLSL se pasan a un controlador de gráficos de modo de usuario 2526 para su compilación. En algunos ejemplos, el controlador de gráficos de modo de usuario 2526 usa las funciones de modo de núcleo de sistema operativo 2528 para comunicarse con un controlador de gráficos de modo de núcleo 2529. En algunos ejemplos, el controlador de gráficos de modo de núcleo 2529 se comunica con el procesador de gráficos 2532 para despachar comandos e instrucciones.
Implementaciones de núcleo de IP
Uno o más aspectos de al menos un ejemplo se pueden implementar mediante un código representativo almacenado en un medio legible por máquina que representa y/o define una lógica dentro de un circuito integrado tal como un procesador. Por ejemplo, el medio legible por máquina puede incluir representaciones que representan diversa lógica dentro del procesador. Cuando se leen por una máquina, las instrucciones pueden hacer que la fábrica fabrique la lógica para realizar las técnicas descritas en el presente documento. Tales representaciones, conocidas como "núcleos de IP", son unidades reutilizables de lógica para un circuito integrado que puede almacenarse en un medio legible tangible por máquina como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware puede suministrarse a diversos clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que fabrican el circuito integrado. El circuito integrado se puede fabricar de tal forma que el circuito realiza operaciones descritas en asociación con cualquiera de los ejemplos descritos en el presente documento.
La Figura 26 es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 2600 que puede usarse para fabricar un circuito integrado para realizar operaciones. Puede usarse el sistema de desarrollo de núcleo de IP 2600 para generar diseños modulares, reutilizables que pueden incorporarse en un diseño mayor o usarse para construir un circuito integrado entero (por ejemplo, un circuito integrado SOC). Una instalación de diseño 2630 puede generar una simulación por software 2610 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 2610 puede usarse para diseñar, probar y verificar el comportamiento del núcleo de IP. A continuación, puede crearse un diseño de nivel de transferencia de registro (RTL) o sintetizarse a partir del modelo de simulación 2600. El diseño RTL 2615 es una abstracción del comportamiento del circuito integrado que modela el flujo de señales digitales entre registro de hardware, que incluye la lógica asociada realizada usando las señales digitales modeladas. Además de un diseño RTL 2615, pueden crearse, diseñarse, o sintetizarse también diseños de nivel inferior al nivel de lógica o al nivel de transistores. Por lo tanto, los detalles particulares del diseño y simulación iniciales pueden variar.
El diseño de RTL 2615 o equivalente puede sintetizarse adicionalmente por la instalación de diseño en un modelo de hardware 2620, que puede ser 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 adicionalmente para verificar el diseño de núcleo de IP. El diseño de núcleo de IP puede almacenarse para su entrega a una instalación de fabricación de terceros 2665 usando memoria no volátil 2640 (por ejemplo, disco duro, memoria flash o cualquier medio de almacenamiento no volátil). Como alternativa, el diseño de núcleo de IP puede transmitirse (por ejemplo, mediante Internet) a través de una conexión cableada 2650 o conexión inalámbrica 2660. La instalación de fabricación 2665 puede fabricar a continuación un circuito integrado que está basado al menos en parte en el diseño de núcleo de IP. El circuito integrado fabricado se puede configurar para realizar operaciones de acuerdo con al menos un ejemplo descrito en el presente documento.
La Figura 27 es un diagrama de bloques que ilustra un sistema ilustrativo en un circuito de chip integrado 2700 que puede fabricarse usando uno o más núcleos de IP. El circuito integrado ilustrativo incluye uno o más procesador o procesadores 2705 de aplicación (por ejemplo, CPU), al menos un procesador de gráficos 2710, y puede incluir adicionalmente un procesador de imágenes 2715 y/o un procesador de vídeo 2720, cualquiera de los cuales puede ser un núcleo de IP modular de las mismas o múltiples instalaciones de diseño diferentes. El circuito integrado incluye lógica de periféricos o de bus que incluye un controlador de USB 2725, controlador de UART 2730, un controlador de SPI/SDIO 2735, y un controlador de I2S/I2C 2740. Adicionalmente, el circuito integrado puede incluir un dispositivo de visualización 2745 acoplado a uno o más de un controlador de interfaz multimedia de alta definición (HDMI) 2750 y una interfaz de visualización de la interfaz de procesador industrial móvil (MIPI) 2755. El almacenamiento puede proporcionarse por un subsistema de memoria flash 2760 que incluye memoria flash y un controlador de memoria flash. La interfaz de memoria puede proporcionarse mediante un controlador de memoria 2765 para acceso a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 2770.
Adicionalmente, pueden incluirse otra lógica y circuitos en el procesador del circuito integrado 2700, incluyendo procesadores/núcleos de gráficos adicionales, controladores de interfaz periféricos o núcleos de procesador de fin general.
Ventajosamente, cualquiera de los anteriores sistemas, procesadores, procesadores de gráficos, aparatos y/o métodos puede integrarse o configurarse con cualquiera de los diversos ejemplos descritos en el presente documento (por ejemplo, o porciones de los mismos), incluyendo, por ejemplo, los descritos en las siguientes Notas adicionales y Ejemplos.
Los ejemplos son aplicables para su uso con todo tipo de chips de circuito integrado ("CI") de semiconductor. Ejemplos de estos chips de CI incluyen, pero sin limitación, procesadores, controladores, componentes de conjunto de chips, matrices lógicas programables (PLA), chips de memoria, chips de red, sistemas en chip (SoC), ASIC de controlador de SSD/NAND y similares. Además, en algunos de los dibujos, las líneas conductoras de señales se representan con líneas. Algunas pueden ser diferentes, para indicar más trayectorias de señal constituyentes, tener una etiqueta numérica, para indicar un número de trayectorias de señal constituyentes, y/o tener flechas en uno o más extremos, para indicar una dirección de flujo de información primaria. Esto, sin embargo, no debería interpretarse de una manera limitante. En su lugar, tal detalle añadido puede usarse en conexión con una o más realizaciones ilustrativas para facilitar un entendimiento más fácil de un circuito. Cualquier línea de señal representada, tenga o no información adicional, puede comprender realmente una o más señales que pueden viajar en múltiples direcciones y pueden implementarse con cualquier tipo adecuado de esquema de señal, por ejemplo, líneas digitales o analógicas implementadas con pares diferenciales, líneas de fibra óptica y/o líneas de un solo extremo.
Pueden haberse proporcionado tamaños/modelos/valores/rangos de ejemplo, aunque las realizaciones no se limitan a los mismos. Ya que las técnicas de fabricación (por ejemplo, fotolitografía) maduran con el paso del tiempo, se espera que podrían fabricarse dispositivos de menor tamaño. Además, dentro de las figuras pueden o no mostrarse conexiones de potencia/tierra bien conocidas a chips de CI y otros componentes, por simplicidad de ilustración y análisis, y para no obstaculizar ciertos aspectos de las realizaciones. Además, pueden mostrarse disposiciones en forma de diagrama de bloques para evitar obstaculizar las realizaciones, y también en vista del hecho de que específicos con respecto a la implementación de tales disposiciones de diagrama de bloques dependen altamente de la plataforma dentro de la que tiene que implementarse la realización, es decir, tales específicos deberían estar bien dentro del alcance de un experto en la materia. Donde detalles específicos (por ejemplo, circuitos) se exponen para describir realizaciones de ejemplo, debería ser evidente para un experto en la materia que las realizaciones pueden ponerse en práctica sin, o con variación de, estos detalles específicos. La descripción, por lo tanto, debe considerarse como ilustrativa en lugar de limitativa.
El término "acoplado" puede usarse en el presente documento para hacer referencia a cualquier tipo de relación, directa o indirecta, entre los componentes en cuestión, y puede aplicarse a conexiones eléctricas, mecánicas, fluidas, ópticas, electromagnéticas, electromecánicas u otras conexiones. Además, los términos "primero", "segundo", etc. pueden usarse en el presente documento únicamente para facilitar la descripción, y no conllevan ninguna significancia temporal o cronológica particular a no ser que se indique lo contrario. Adicionalmente, se entiende que los artículos indefinidos "un" o "una" conllevan el significado de "uno o más" o "al menos uno".
Las realizaciones se han descrito anteriormente con referencia a realizaciones específicas. Expertos en la materia, sin embargo, entenderán que pueden hacerse diversas modificaciones y cambios a las mismas sin alejarse del alcance de las realizaciones como se expone en las reivindicaciones adjuntas. La descripción y dibujos anteriores deben considerarse, por consiguiente, en un sentido ilustrativo en lugar de restrictivo.

Claims (3)

REIVINDICACIONES
1. Un aparato de gráficos (700), que comprende:
un codificador (721) para codificar una pluralidad de bloques de un fotograma bidimensional (2D) basándose en una pluralidad de parámetros de cuantificación, en donde el fotograma 2D corresponde a una proyección de un espacio de vídeo 360; y
un selector de calidad (722) acoplado comunicativamente al codificador (721) para:
determinar la pluralidad de parámetros de cuantificación para la pluralidad de bloques basándose en un presupuesto de fotogramas para soportar una tasa de bits objetivo,
determinar que un primer bloque del fotograma 2D es un vecino de cada uno de la pluralidad de bloques en uno o más del espacio de vídeo 360 o el fotograma 2D, y
en respuesta a que se determina que el primer bloque es el vecino de cada uno de la pluralidad de bloques en los uno o más del espacio de vídeo 360 o el fotograma 2D, se ajusta un primer parámetro de cuantificación determinado para el primer bloque del fotograma 2D basándose en el presupuesto de fotogramas de tal forma que el primer parámetro de cuantificación permanece dentro de un rango del 10 % alrededor de un parámetro de cuantificación promedio calculado a partir de la pluralidad de parámetros de cuantificación de cada uno de los bloques vecinos anteriormente codificados.
2. Un método de procesamiento de un vídeo 360, que comprende:
codificar (731) una pluralidad de bloques de un fotograma bidimensional (2D) basándose en una pluralidad de parámetros de cuantificación, donde el fotograma 2D corresponde a una proyección de un espacio de vídeo 360; determinar la pluralidad de parámetros de cuantificación para la pluralidad de bloques basándose en un presupuesto de fotogramas para soportar una tasa de bits objetivo;
determinar (732) que un primer bloque del fotograma 2D es un vecino de cada uno de la pluralidad de bloques en uno o más del espacio de vídeo 360 o el fotograma 2D;
y
en respuesta a que se determina que el primer bloque es el vecino de cada uno de la pluralidad de bloques en los uno o más del espacio de vídeo 360 o el fotograma 2D, ajustar un primer parámetro de cuantificación determinado para el primer bloque del fotograma 2D basándose en el presupuesto de fotogramas de tal forma que el primer parámetro de cuantificación permanece dentro de un rango del 10 % alrededor de un parámetro de cuantificación promedio calculado a partir de la pluralidad de parámetros de cuantificación de cada uno de los bloques vecinos anteriormente codificados.
3. Al menos un medio legible por ordenador, que comprende un conjunto de instrucciones, que cuando se ejecutan mediante un dispositivo informático provocan que el dispositivo informático efectúe el método de la reivindicación 2.
ES18165269T 2017-04-01 2018-03-29 Selector de calidad basado en vecinos 360, ajustador de rango, gestor de ventanilla y estimador de movimiento para gráficos Active ES2929749T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/477,014 US10506196B2 (en) 2017-04-01 2017-04-01 360 neighbor-based quality selector, range adjuster, viewport manager, and motion estimator for graphics

Publications (1)

Publication Number Publication Date
ES2929749T3 true ES2929749T3 (es) 2022-12-01

Family

ID=61868365

Family Applications (1)

Application Number Title Priority Date Filing Date
ES18165269T Active ES2929749T3 (es) 2017-04-01 2018-03-29 Selector de calidad basado en vecinos 360, ajustador de rango, gestor de ventanilla y estimador de movimiento para gráficos

Country Status (5)

Country Link
US (3) US10506196B2 (es)
EP (2) EP4125271A1 (es)
CN (1) CN108777798A (es)
ES (1) ES2929749T3 (es)
PL (1) PL3393127T3 (es)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110114803B (zh) * 2016-12-28 2023-06-27 松下电器(美国)知识产权公司 三维模型分发方法、三维模型接收方法、三维模型分发装置以及三维模型接收装置
US10506196B2 (en) * 2017-04-01 2019-12-10 Intel Corporation 360 neighbor-based quality selector, range adjuster, viewport manager, and motion estimator for graphics
US10360695B1 (en) * 2017-06-01 2019-07-23 Matrox Graphics Inc. Method and an apparatus for enabling ultra-low latency compression of a stream of pictures
US11049219B2 (en) 2017-06-06 2021-06-29 Gopro, Inc. Methods and apparatus for multi-encoder processing of high resolution content
CN107396081B (zh) * 2017-06-19 2019-04-12 深圳市铂岩科技有限公司 针对全景视频的优化编码方法及装置
KR20200012957A (ko) * 2017-06-30 2020-02-05 후아웨이 테크놀러지 컴퍼니 리미티드 인터-프레임 예측 방법 및 디바이스
WO2019009600A1 (ko) * 2017-07-04 2019-01-10 엘지전자 주식회사 360도 비디오에 대한 영상 코딩 시스템에서 프로젝션 타입 기반 양자화 파라미터를 사용한 영상 디코딩 방법 및 장치
US10614609B2 (en) * 2017-07-19 2020-04-07 Mediatek Inc. Method and apparatus for reduction of artifacts at discontinuous boundaries in coded virtual-reality images
US10595045B2 (en) * 2017-07-27 2020-03-17 Advanced Micro Devices, Inc. Device and method for compressing panoramic video images
CN109660825B (zh) * 2017-10-10 2021-02-09 腾讯科技(深圳)有限公司 视频转码方法、装置、计算机设备及存储介质
CN109785347A (zh) * 2018-04-27 2019-05-21 京东方科技集团股份有限公司 图像处理方法、图像处理系统及存储介质
CN108962150B (zh) * 2018-06-13 2020-06-09 深圳创维-Rgb电子有限公司 基于区域调光的画质优化方法、装置、设备及存储介质
KR102491939B1 (ko) * 2018-08-24 2023-01-26 삼성전자주식회사 전방향 이미지를 프로세싱하기 위한 방법 및 장치
TWI822863B (zh) * 2018-09-27 2023-11-21 美商Vid衡器股份有限公司 360度視訊寫碼樣本導出
CN109815012B (zh) * 2018-12-29 2023-08-18 深圳市创梦天地科技有限公司 一种图像可见质量值搜索方法和相关装置
US11310496B2 (en) * 2019-03-27 2022-04-19 Ati Technologies Ulc Determining quality values for blocks of encoded video
US11228781B2 (en) 2019-06-26 2022-01-18 Gopro, Inc. Methods and apparatus for maximizing codec bandwidth in video applications
US11481863B2 (en) * 2019-10-23 2022-10-25 Gopro, Inc. Methods and apparatus for hardware accelerated image processing for spherical projections
US11350103B2 (en) 2020-03-11 2022-05-31 Videomentum Inc. Methods and systems for automated synchronization and optimization of audio-visual files
CN112203095B (zh) * 2020-12-04 2021-03-09 腾讯科技(深圳)有限公司 视频运动估计方法、装置、设备及计算机可读存储介质
US11270468B1 (en) * 2020-12-18 2022-03-08 Facebook Technologies, Llc. Joint color image and texture data compression
US11647193B2 (en) 2020-12-18 2023-05-09 Meta Platforms Technologies, Llc Adaptive range packing compression
CN112822398B (zh) * 2021-01-04 2022-11-01 维沃移动通信有限公司 拍摄方法、装置和电子设备

Family Cites Families (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100677142B1 (ko) 2004-08-13 2007-02-02 경희대학교 산학협력단 파노라마 영상의 움직임 추정 및 보상
EP1779672A4 (en) * 2004-08-13 2010-10-27 Ind Academic Coop METHOD AND DEVICE FOR ESTIMATING AND MOVING COMPENSATION FOR A PANORAMIC IMAGE
US7869666B2 (en) 2005-01-13 2011-01-11 Nvidia Corporation Video processing system and method with dynamic tag architecture
TWI274509B (en) * 2005-02-22 2007-02-21 Sunplus Technology Co Ltd Method and system for dynamically adjusting motion estimation
US7724211B2 (en) 2006-03-29 2010-05-25 Nvidia Corporation System, method, and computer program product for controlling stereo glasses shutters
US8169467B2 (en) 2006-03-29 2012-05-01 Nvidia Corporation System, method, and computer program product for increasing an LCD display vertical blanking interval
US8724694B2 (en) 2008-10-14 2014-05-13 Nvidia Corporation On-the spot deblocker in a decoding pipeline
US8442111B2 (en) 2008-11-24 2013-05-14 Nvidia Corporation Optimal power usage in encoding data streams
US20100128797A1 (en) 2008-11-24 2010-05-27 Nvidia Corporation Encoding Of An Image Frame As Independent Regions
US20100128798A1 (en) 2008-11-25 2010-05-27 Nvidia Corporation Video processor using optimized macroblock sorting for slicemap representations
KR101660312B1 (ko) * 2009-09-22 2016-09-27 삼성전자주식회사 3차원 비디오의 움직임 탐색 장치 및 방법
CN102213851A (zh) 2010-04-12 2011-10-12 辉达公司 用于显示三维立体图像的液晶显示器、系统及方法
US8670613B2 (en) 2010-08-31 2014-03-11 Nvidia Corporation Lossless frame buffer color compression
WO2012050808A1 (en) 2010-09-29 2012-04-19 Dolby Laboratories Licensing Corporation Region based asymmetric coding for 3d video compression
FR2969492B1 (fr) * 2010-12-23 2013-07-05 Galderma Res & Dev Mousses dermatologiques obtenues a partir d'un gel ou d'une suspension contenant de l'adapalene
US8624891B2 (en) * 2011-01-17 2014-01-07 Disney Enterprises, Inc. Iterative reprojection of images
JP6056122B2 (ja) 2011-01-24 2017-01-11 ソニー株式会社 画像符号化装置と画像復号装置およびその方法とプログラム
BR122020015659B1 (pt) 2011-03-09 2023-03-28 Nec Corporation Dispositivo de decodificação de vídeo e método de decodificação de vídeo
KR101242560B1 (ko) * 2011-03-30 2013-03-19 한양대학교 산학협력단 탐색 영역 조정 장치 및 방법
KR101280298B1 (ko) * 2011-07-07 2013-07-01 에스케이하이닉스 주식회사 블록 기반의 움직임 추정 방법
KR20130049524A (ko) 2011-11-04 2013-05-14 오수미 인트라 예측 블록 생성 방법
CN103108154A (zh) 2011-11-14 2013-05-15 辉达公司 一种汽车导航设备
CN103108197A (zh) 2011-11-14 2013-05-15 辉达公司 一种用于3d视频无线显示的优先级压缩方法和系统
KR101336139B1 (ko) * 2012-06-11 2013-12-05 동의대학교 산학협력단 깊이 카메라를 이용한 움직임 추정 시스템 및 방법
US9576340B2 (en) 2012-07-30 2017-02-21 Nvidia Corporation Render-assisted compression for remote graphics
CN103587479A (zh) 2012-08-14 2014-02-19 辉达公司 一种用于倒车的裸眼三维视频系统和包括该系统的车辆
US20140057714A1 (en) 2012-08-27 2014-02-27 Nvidia Corporation Modifiable gaming experience based on user position and/or orientation
US9081535B2 (en) 2012-09-03 2015-07-14 Nvidia Corporation Automatic topology configuration through automatic hardware profiles across multiple display units
US20140071245A1 (en) 2012-09-10 2014-03-13 Nvidia Corporation System and method for enhanced stereo imaging
US8938127B2 (en) 2012-09-18 2015-01-20 Nvidia Corporation Hybrid encoding/decoding for remote gaming
US8797340B2 (en) 2012-10-02 2014-08-05 Nvidia Corporation System, method, and computer program product for modifying a pixel value as a function of a display duration estimate
US20140153635A1 (en) 2012-12-05 2014-06-05 Nvidia Corporation Method, computer program product, and system for multi-threaded video encoding
US9082180B2 (en) 2012-12-28 2015-07-14 Nvidia Corporation System, method, and computer program product for implementing a spatially varying unsharp mask noise reduction filter
US9071765B2 (en) 2012-12-28 2015-06-30 Nvidia Corporation System, method, and computer program product implementing an image processing pipeline for high-dynamic range images
US9451187B2 (en) 2012-12-31 2016-09-20 Nvidia Corporation Lens shading calibration for cameras
KR20140111859A (ko) 2013-03-12 2014-09-22 삼성전자주식회사 콘텐트 공유 방법 및 이를 위한 디바이스
US20140267222A1 (en) 2013-03-12 2014-09-18 Nvidia Corporation Efficient autostereo support using display controller windows
US9971959B2 (en) 2013-03-15 2018-05-15 Nvidia Corporation Performing object detection operations via a graphics processing unit
US20140286390A1 (en) 2013-03-20 2014-09-25 Nvidia Corporation Encoder controller graphics processing unit and method of encoding rendered graphics
US9092658B2 (en) 2013-04-25 2015-07-28 Nvidia Corporation Automatic detection of stereoscopic content in video/image data
US20140327771A1 (en) 2013-05-01 2014-11-06 Nvidia Corporation System, method, and computer program product for displaying a scene as a light field
CN104184961A (zh) 2013-05-22 2014-12-03 辉达公司 用于生成全景视频的移动设备和系统
US9118932B2 (en) 2013-06-14 2015-08-25 Nvidia Corporation Adaptive filtering mechanism to remove encoding artifacts in video data
US9232210B2 (en) 2013-07-08 2016-01-05 Nvidia Corporation Mapping sub-portions of three-dimensional (3D) video data to be rendered on a display unit within a comfortable range of perception of a user thereof
US20150022636A1 (en) 2013-07-19 2015-01-22 Nvidia Corporation Method and system for voice capture using face detection in noisy environments
US20150036875A1 (en) 2013-07-31 2015-02-05 Nvidia Corporation Method and system for application execution based on object recognition for mobile devices
US20150103184A1 (en) 2013-10-15 2015-04-16 Nvidia Corporation Method and system for visual tracking of a subject for automatic metering using a mobile device
US9437165B2 (en) 2013-10-31 2016-09-06 Nvidia Corporation Power-efficient control of display data configured to be rendered on a display unit of a data processing device
US20150138065A1 (en) 2013-11-21 2015-05-21 Nvidia Corporation Head-mounted integrated interface
US9292908B2 (en) 2013-11-21 2016-03-22 Nvidia Corporation System, method, and computer program product for enhancing an image utilizing a hyper-clarity transform
US20150208079A1 (en) 2014-01-22 2015-07-23 Nvidia Corporation Adaptive frame type detection for real-time low-latency streaming servers
US20150221064A1 (en) 2014-02-03 2015-08-06 Nvidia Corporation User distance based modification of a resolution of a display unit interfaced with a data processing device and/or a display area size thereon
US9549147B2 (en) 2014-02-13 2017-01-17 Nvidia Corporation System and method for creating a video frame from a single video field
US20150243048A1 (en) 2014-02-26 2015-08-27 Nvidia Corporation System, method, and computer program product for performing one-dimesional searches in two-dimensional images
JP6421422B2 (ja) * 2014-03-05 2018-11-14 日本電気株式会社 映像解析装置、監視装置、監視システムおよび映像解析方法
US10264211B2 (en) 2014-03-14 2019-04-16 Comcast Cable Communications, Llc Adaptive resolution in software applications based on dynamic eye tracking
US9892669B2 (en) 2014-03-18 2018-02-13 Nvidia Corporation Superresolution display using cascaded panels
US9786255B2 (en) 2014-05-30 2017-10-10 Nvidia Corporation Dynamic frame repetition in a variable refresh rate system
US9237350B2 (en) * 2014-06-16 2016-01-12 Sony Corporation Image processing system with random access capable integral image compression and method of operation thereof
US9918082B2 (en) 2014-10-20 2018-03-13 Google Llc Continuous prediction domain
US20170026659A1 (en) 2015-10-13 2017-01-26 Mediatek Inc. Partial Decoding For Arbitrary View Angle And Line Buffer Reduction For Virtual Reality Video
US10225546B2 (en) * 2016-02-26 2019-03-05 Qualcomm Incorporated Independent multi-resolution coding
US10277914B2 (en) * 2016-06-23 2019-04-30 Qualcomm Incorporated Measuring spherical image quality metrics based on user field of view
CN114245123B (zh) * 2016-10-04 2023-04-07 有限公司B1影像技术研究所 图像数据编码/解码方法、介质和发送比特流的方法
CN110036640B (zh) * 2016-12-14 2023-06-20 深圳市大疆创新科技有限公司 用于支持视频比特流切换的系统和方法
US20180242016A1 (en) * 2017-02-21 2018-08-23 Intel Corporation Deblock filtering for 360 video
CN110521207A (zh) * 2017-03-13 2019-11-29 韩国电子通信研究院 用于视频编码/解码的基于非典型块的运动预测和补偿的方法及其装置
US10506255B2 (en) * 2017-04-01 2019-12-10 Intel Corporation MV/mode prediction, ROI-based transmit, metadata capture, and format detection for 360 video
US10506196B2 (en) * 2017-04-01 2019-12-10 Intel Corporation 360 neighbor-based quality selector, range adjuster, viewport manager, and motion estimator for graphics
US10628907B2 (en) * 2017-04-01 2020-04-21 Intel Corporation Multi-resolution smoothing
US10587800B2 (en) * 2017-04-10 2020-03-10 Intel Corporation Technology to encode 360 degree video content
EP3622710A4 (en) * 2017-10-09 2020-03-18 Samsung Electronics Co., Ltd. GENERATION OF 360 DEGREE IMAGE CONTENT ON RECTANGULAR PROJECTION IN AN ELECTRONIC DEVICE USING PADDING INFORMATION

Also Published As

Publication number Publication date
EP3393127A2 (en) 2018-10-24
US20180288356A1 (en) 2018-10-04
EP3393127A3 (en) 2019-01-09
US20200195878A1 (en) 2020-06-18
CN108777798A (zh) 2018-11-09
US11108987B2 (en) 2021-08-31
PL3393127T3 (pl) 2022-12-05
US10506196B2 (en) 2019-12-10
US20220053157A1 (en) 2022-02-17
EP4125271A1 (en) 2023-02-01
EP3393127B1 (en) 2022-08-17

Similar Documents

Publication Publication Date Title
ES2929749T3 (es) Selector de calidad basado en vecinos 360, ajustador de rango, gestor de ventanilla y estimador de movimiento para gráficos
US11051038B2 (en) MV/mode prediction, ROI-based transmit, metadata capture, and format detection for 360 video
US11218633B2 (en) Technology to assign asynchronous space warp frames and encoded frames to temporal scalability layers having different priorities
US10872441B2 (en) Mixed reality coding with overlays
US20220264110A1 (en) Technology to accelerate scene change detection and achieve adaptive content display
ES2922054T3 (es) Soporte de múltiples tasas de refresco en regiones diferentes del visor del panel
ES2959308T3 (es) Reducción del ancho de banda de pantalla con múltiples resoluciones
US10643358B2 (en) HDR enhancement with temporal multiplex
EP3435672A2 (en) Encoding 3d rendered images by tagging objects
US20210281851A1 (en) Video motion processing including static scene determination, occlusion detection, frame rate conversion, and adjusting compression ratio
EP3389273A1 (en) Region based processing
EP4072142A2 (en) Video motion processing including static scene determination, occlusion detection, frame rate conversion, and adjusting compression ratio
ES2915592T3 (es) Uso óptimo de espejos virtuales de automóvil
US11435819B2 (en) Viewing angles influenced by head and body movements
US20180292743A1 (en) Processing stereoscopic motion vectors
EP3396941A1 (en) Hdr enhancement with temporal multiplex