ES2688353T3 - Motor de copia de memoria para procesamiento de gráficos - Google Patents
Motor de copia de memoria para procesamiento de gráficos Download PDFInfo
- Publication number
- ES2688353T3 ES2688353T3 ES12748636.3T ES12748636T ES2688353T3 ES 2688353 T3 ES2688353 T3 ES 2688353T3 ES 12748636 T ES12748636 T ES 12748636T ES 2688353 T3 ES2688353 T3 ES 2688353T3
- Authority
- ES
- Spain
- Prior art keywords
- data
- memory
- gpu
- copy engine
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Un aparato que comprende: una memoria (30) de sistema que es accesible a través de un bus (24) de sistema; y una unidad de procesamiento de gráficos (GPU) que comprende: una memoria local (18); un motor (20) de copia de memoria configurado para recuperar unos primeros datos de la memoria de sistema a través del bus de sistema, realizar una o más tareas de modificación en los primeros datos, y almacenar los primeros datos modificados en la memoria local; y, un procesador (16) de sombreado configurado para recuperar los primeros datos modificados de la memoria local, procesar los primeros datos modificados para generar segundos datos y almacenar los segundos datos en la memoria local, en el que el motor de copia de memoria está configurado además para: recuperar los segundos datos de la memoria local, realizar una o más tareas de modificación en los segundos datos, y almacenar los segundos datos modificados en la memoria de sistema a través del bus de sistema,; e indicar al procesador de sombreado que el motor de copia de memoria ha terminado al menos una de almacenamiento de los primeros datos modificados en la memoria local, y almacenamiento de los segundos datos modificados en la memoria de sistema, estando el aparato caracterizado por que las tareas de modificación comprenden al menos una de recopilación y compactación de datos, conversión de color de datos, compresión de datos, descompresión de datos, o conversión de datos generados por un programa de sombreado en una 30 forma de datos utilizable por otro programa de sombreado.
Description
5
10
15
20
25
30
35
40
45
50
55
60
65
DESCRIPCION
Motor de copia de memoria para procesamiento de gráficos CAMPO TÉCNICO
[001] Esta divulgación se refiere a unidades de procesamiento de gráficos (GPU) y, más particularmente, a una interacción entre una GPU y una memoria.
ANTECEDENTES
[002] Un dispositivo que genera contenido de gráficos en general incluye una unidad de procesamiento de gráficos (GPU). La GPU puede procesar datos de gráficos para generar valores de píxel para los píxeles en una pantalla. Parte del procesamiento de datos de gráficos puede requerir que la GPU acceda a su memoria local o memoria de sistema. Por ejemplo, al menos una parte de los datos de gráficos puede almacenarse en memoria de sistema, y la GPU puede recuperar los datos de gráficos de una memoria de sistema. La publicación US 2010/053180 A1 divulga un sistema de gráficos conectado a una memoria de sistema a través de un bus externo, que incluye una memoria de vídeo y un motor de copia dedicado a las funciones de copia entre la memoria de sistema y la memoria de sistema, que permite que las operaciones de copia se realicen en paralelo a unas operaciones realizadas por el procesador de gráficos.
[003] La publicación US 2009/051687 A1 divulga un dispositivo de procesamiento de imágenes que incluye un procesador de sombreado para llevar a cabo un proceso de sombreado de vértices y un proceso de sombreado de píxeles sucesivamente, que comprende un bucle de retroalimentación que devuelve la salida del procesamiento de datos de imagen al procesador de sombreado de tal forma que el núcleo de sombreado que lleva a cabo el proceso de sombreado de vértices y el proceso de sombreado de píxeles secuencialmente se compone de un único procesador de sombreado.
[004] La publicación US 2011/210976 A1 divulga un procedimiento para transferir datos de gráficos desde una memoria de sistema a una unidad de procesamiento de gráficos discretos (DGPU).
SUMARIO
[005] En general, esta divulgación describe técnicas para acceder a datos de gráficos almacenados en una memoria. En algunos ejemplos, las técnicas pueden incluir realizar tareas de modificación de datos, independientemente de la ejecución de uno o más programas en una unidad de procesamiento de gráficos (GPU). Por ejemplo, las técnicas de esta divulgación pueden permitir a la GPU separar las tareas relacionadas con la gestión de memoria y la modificación de datos de las tareas relacionadas con el procesamiento de datos, y permitir la ejecución independiente de estas tareas. En un ejemplo, las técnicas descritas en esta divulgación pueden permitir a la GPU recuperar datos de la memoria o almacenar datos en la memoria, y en paralelo con la realización de dichas funciones, ejecutar las instrucciones de uno o más programas. En otro ejemplo, las técnicas descritas en esta divulgación pueden permitir a la GPU convertir datos en una forma más adecuada, que las instrucciones ejecutadas utilizan, independientemente de la ejecución de las instrucciones.
[006] En un ejemplo, esta divulgación describe un aparato que incluye una memoria de sistema que es accesible a través de un bus de sistema, y una unidad de procesamiento de gráficos (GPU). La GPU incluye una memoria local, un motor de copia de memoria y un procesador de sombreado. El motor de copia de memoria es operativo para recuperar primeros datos de la memoria de sistema a través del bus de sistema y almacenar los primeros datos en la memoria local, y recuperar segundos datos de la memoria local y almacenar los segundos datos en la memoria de sistema a través del bus de sistema. El procesador de sombreado es operativo para recuperar los primeros datos de la memoria local, procesar los primeros datos para generar los segundos datos y almacenar los segundos datos en la memoria local.
[007] En otro ejemplo, esta divulgación describe un procedimiento que incluye recuperar, con un motor de copia de memoria de una unidad de procesamiento de gráficos (GPU), primeros datos de una memoria de sistema que es externa a la GPU a través de un bus de sistema, y almacenar, con el motor de copia de memoria de la GPU, los primeros datos en la memoria local de la GPU. El procedimiento incluye además recuperar, con un procesador de sombreado de la GPU, los primeros datos de la memoria local, procesar, con el procesador de sombreado de la GPU, los primeros datos para generar unos segundos datos, y almacenar, con el procesador de sombreado de la GPU, los segundos datos en la memoria local. El procedimiento también incluye recuperar, con el motor de copia de memoria de la GPU, los segundos datos de la memoria local, y almacenar, con el motor de copia de memoria de la GPU, los segundos datos en la memoria de sistema a través del bus de sistema.
[008] En otro ejemplo, esta divulgación describe un aparato que incluye una memoria de sistema que es accesible a través de un bus de sistema, y una unidad de procesamiento de gráficos (GPU) que es externa a la memoria de sistema. La GPU incluye una memoria local. En este ejemplo, la GPU también incluye medios para
5
10
15
20
25
30
35
40
45
50
55
60
65
recuperar, con un motor de copia de memoria de la GPU, primeros datos de la memoria de sistema que es externa a la GPU a través del bus de sistema, y medios para almacenar, con el motor de copia de memoria de la GPU, los primeros datos en la memoria local. La GPU también incluye medios para recuperar, con un procesador de sombreado de la GPU, los primeros datos de la memoria local, medios para procesar, con el procesador de sombreado de la GPU, los primeros datos para generar unos segundos datos, y medios para almacenar, con el procesador de sombreado de la GPU, los segundos datos en la memoria local. La GPU incluye además medios para recuperar, con el motor de copia de memoria de la GPU, los segundos datos de la memoria local y medios para almacenar, con el motor de copia de memoria de la GPU, los segundos datos en la memoria de sistema a través del bus de sistema.
[009] En otro ejemplo, esta divulgación describe un medio de almacenamiento no transitorio legible por ordenador. El medio de almacenamiento no transitorio legible por ordenador incluye instrucciones que hacen que una unidad de procesamiento de gráficos (GPU) recupere, con un motor de copia de memoria de la GPU, primeros datos de la memoria de sistema que es externa a la GPU a través de un bus de sistema, y almacene, con el motor de copia de memoria de la GPU, los primeros datos en la memoria local de la GPU. Las instrucciones también hacen que la GPU recupere, con un procesador de sombreado de la GPU, los primeros datos de la memoria local, procese con el procesador de sombreado de la GPU, los primeros datos para generar unos segundos datos, y almacene, con el procesador de sombreado de la GPU, los segundos datos en la memoria local. Las instrucciones también hacen que la GPU recupere, con el motor de copia de memoria de la GPU, los segundos datos de la memoria local y almacene, con el motor de copia de memoria de la GPU, los segundos datos en la memoria de sistema a través del bus de sistema. La presente invención proporciona un aparato de acuerdo con la reivindicación 1, un procedimiento de acuerdo con la reivindicación 9 y un medio de almacenamiento no transitorio legible por ordenador que comprende instrucciones que hacen que una unidad de procesamiento de gráficos realice el procedimiento de acuerdo con cualquiera de las reivindicaciones 9 a 14.
[010] Las reivindicaciones dependientes se refieren a modos de realización preferidos.
[011] Los detalles de uno o más ejemplos se exponen en los dibujos adjuntos y en la siguiente descripción. Otras características, objetivos y ventajas resultarán evidentes a partir de la descripción y los dibujos, y a partir de las reivindicaciones.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
[012]
La figura 1 es un diagrama de bloques que ilustra un ejemplo de una unidad de procesamiento de gráficos (GPU) que puede ser operativa para implementar uno o más aspectos de esta divulgación.
La figura 2 es un diagrama de bloques que ilustra un ejemplo de un dispositivo informático que puede incorporar la GPU de la figura 1 para implementar uno o más aspectos de esta divulgación.
La figura 3 es un diagrama de flujo que ilustra una operación de ejemplo de una GPU, como la mostrada en la figura 1, de acuerdo con uno o más aspectos de esta divulgación.
DESCRIPCIÓN DETALLADA
[013] En general, esta divulgación se refiere a una interacción entre una unidad de procesamiento de gráficos (GPU) y una memoria, tal como una memoria de sistema de un dispositivo que aloja la GPU. Las técnicas de esta divulgación son en general aplicables a dispositivos de vídeo tales como reproductores de medios, descodificadores, teléfonos inalámbricos tales como teléfonos móviles, asistentes personales digitales (PDA), ordenadores de escritorio, ordenadores portátiles, consolas de juegos, dispositivos de visualización, televisores y similares.
[014] Los sistemas de procesamiento de gráficos en general incluyen la GPU y la memoria de sistema. La GPU incluye un procesador de sombreado y memoria local, que a veces se pueden compartir con otros procesadores externos a la GPU o incluso parte de la GPU. El procesador de sombreado, a veces denominado núcleo de sombreado, puede estar configurado para ejecutar diversos tipos de programas relacionados con gráficos, tales como un sombreador de geometría, un sombreador de vértices y un sombreador de fragmentos. En algunos ejemplos, el procesador de sombreado puede estar configurado para ejecutar otros programas además de los programas relacionados con el procesamiento de gráficos.
[015] Por ejemplo, una GPU puede estar configurada para realizar de manera rápida y eficiente múltiples tareas en paralelo. Algunas aplicaciones pueden utilizar las capacidades de procesamiento paralelo eficientes de la GPU para un procesamiento de propósito general. En este sentido, la GPU puede funcionar como una GPU de propósito general (GPGPU). Los programas para procesamiento de propósito general que se ejecutan en el procesador de sombreado de la GPU pueden denominarse sombreadores de cómputo. Los programas relacionados con gráficos, tales como sombreadores de vértices, sombreadores de píxeles y sombreadores de fragmentos, y los programas de
5
10
15
20
25
30
35
40
45
50
55
60
65
procesamiento de propósito general, tales como sombreadores de cómputo, pueden denominarse comúnmente programas de sombreado para indicar que dichos programas son ejecutados por el procesador de sombreado de la GPU. En otras palabras, el término «programas de sombreado» no debe considerarse limitado solo a programas que realizan funciones relacionadas con gráficos.
[016] En algunos de los ejemplos descritos en esta divulgación, una GPU también puede incluir un motor de copia de memoria, además del procesador de sombreado y la memoria local. El motor de copia de memoria puede implementarse como hardware, software que se ejecuta en hardware o una combinación de los mismos. El motor de copia de memoria puede ser operativo para ocuparse de tareas relacionadas con la memoria para recuperar datos de una memoria de sistema y almacenar datos en ella. De esta manera, las instrucciones relacionadas con la gestión de memoria de la memoria de sistema pueden separarse de las instrucciones que no están relacionadas con la gestión de memoria. Esto puede permitir que el procesador de sombreado ejecute las instrucciones de los programas de sombreado en paralelo con el motor de copia de memoria ejecutando instrucciones para el almacenamiento de datos en la memoria de sistema o la recuperación de datos de ella. La ejecución paralela de instrucciones puede referirse a la ejecución simultánea de instrucciones por el procesador de sombreado y el motor de copia de memoria, así como a la ejecución de instrucciones por el procesador de sombreado que se superponen con la ejecución de instrucciones por el motor de copia de memoria.
[017] Las tareas realizadas por el motor de copia de memoria pueden controlarse mediante diversos mecanismos. Por ejemplo, un procesador de mandatos puede programar tareas del motor de copia de memoria y el procesador de sombreado. De forma alternativa, el procesador de sombreado puede programar las tareas del motor de copia de memoria. En otros ejemplos, un dispositivo externo a la GPU, tal como una unidad central de procesamiento (CPU), puede programar tareas del motor de copia de memoria y del procesador de sombreado.
[018] En algunos ejemplos, el motor de copia de memoria puede ejecutar otras instrucciones además de ejecutar instrucciones de copia. Estas instrucciones adicionales pueden denominarse instrucciones de modificación. Las instrucciones de modificación pueden modificar los datos en una forma más adecuada que los programas de sombreado pueden utilizar, o modificar la ubicación donde se almacenan los datos para facilitar el acceso, en dos ejemplos. De esta manera, el procesador de sombreado está más libre para realizar operaciones aritméticas, y se pueden delegar otras operaciones al motor de copia de memoria.
[019] La figura 1 es un diagrama de bloques que ilustra un ejemplo de una unidad de procesamiento de gráficos (GPU) 10 que puede ser operativa para implementar uno o más aspectos de esta divulgación. Los ejemplos de GPU 10 incluyen, sin limitarse a, un procesador de señales digitales (DSP), un microprocesador de propósito general, un circuito integrado específico de aplicación (ASIC), una matriz lógica programable in situ (FPGA) u otros circuitos lógicos integrados o discretos equivalentes. Como se ilustra en la figura 1, la GPU 10 puede incluir un procesador 12 de mandatos, unas unidades 14 de gráficos de función fija, un procesador 16 de sombreado, una memoria local 18, un 20 motor de copia de memoria y una interfaz 22 de memoria. La interfaz 22 de memoria puede implementarse como unos componentes de hardware, software que se ejecuta en hardware, firmware que se ejecuta en hardware o cualquier combinación de los mismos. La GPU 10 puede incluir unidades o módulos adicionales que no se ilustran en la figura 1 para mayor claridad.
[020] La GPU 10 puede ser operativa para implementar diversos tipos de canalizaciones de gráficos. Por ejemplo, la GPU 10 puede implementar una canalización de gráficos similar a la descrita en la especificación de OpenGL ES 2.0, publicada por Khronos Group el 24 de abril de 2008, y que está a disposición del público. En otro ejemplo, unos aspectos de esta divulgación pueden implementarse en unas interfaces de programación de aplicaciones (API) Microsoft® DirectX (DX) 10 y 11 que definen una canalización de gráficos. La canalización de gráficos puede implementarse como software que se ejecuta en la GPU 10, firmware que se ejecuta en la GPU 10, una o más unidades de hardware, tales como unidades 14 de gráficos de función fija, formadas en la GPU 10, o una combinación de los mismos. La GPU 10 puede implementar otros tipos de canalizaciones de gráficos también, y los aspectos de esta divulgación no deben considerarse limitados a la canalización de gráficos de la especificación de OpenGL ES 2.0, o las API DX 10 y 11. Además, puede haber otros tipos de algoritmos de gráficos que la GPU 10 puede implementar. Por ejemplo, la GPU 10 puede implementar el trazado de rayos en lugar o además de las API Open GL ES 2.0 y DX 10 y 11.
[021] Además de implementar canalizaciones de gráficos, la GPU 10 puede ser operativa para implementar funciones no relacionadas con gráficos. Por ejemplo, la GPU 10 puede estar configurada para admitir la funcionalidad de procesamiento masivo paralelo, que es adecuada para funciones relacionadas con gráficos que requieren un procesamiento rápido y eficiente de múltiples tareas en paralelo para generar valores de píxel para un número relativamente grande de píxeles de una pantalla. Para algunas aplicaciones no relacionadas con gráficos, se puede considerar deseable explotar este procesamiento paralelo rápido y eficiente de la GPU 10. En este sentido, la GPU 10 se puede considerar como una GPU de propósito general (GPGPU) que es operativa para realizar funciones relacionadas con gráficos y no relacionadas con gráficos. Como se describe con más detalle, unos programas que se ejecutan en una GPU 10 pueden definir estas funciones relacionadas con gráficos y no relacionadas con gráficos.
5
10
15
20
25
30
35
40
45
50
55
60
65
[022] El procesador 12 de mandatos puede ser el controlador de la GPU 10. Por ejemplo, el procesador 12 de mandatos puede programar las tareas que el procesador 16 de sombreado y el motor 20 de copia de memoria van a realizar. En un ejemplo, el procesador 16 de sombreado puede realizar operaciones, tales como operaciones aritméticas, en bloques de datos almacenados en la memoria de sistema (no mostrada). En este ejemplo, el procesador 12 de mandatos puede ordenar al motor 20 de copia de memoria que recupere un primer bloque de datos de la memoria de sistema, y quealmacene el primer bloque de datos en la memoria local 18. El procesador 12 de mandatos puede ordenar al procesador 16 de sombreado que recupere el primer bloque de datos de la memoria local 18, y que realice funciones en el primer bloque de datos. En algunos ejemplos, mientras el procesador 16 de sombreado está realizando operaciones en el primer bloque de datos, el procesador 12 de mandatos puede ordenar al motor 20 de copia de memoria que recupere un segundo bloque de datos de la memoria de sistema, en paralelo con el procesador 16 de sombreado que está realizando operaciones en el primer bloque de datos.
[023] Por ejemplo, puede considerarse que el procesador 12 de mandatos canaliza las tareas realizadas por el motor 20 de copia de memoria y el procesador 16 de sombreado. Por ejemplo, el procesador 12 de mandatos puede ordenar al motor 20 de copia de memoria que realice una siguiente instrucción de copia (por ejemplo, recuperar datos de la memoria de sistema o almacenar datos en ella), antes de que el motor 20 de copia de memoria haya terminado de realizar la instrucción de copia actual. En este ejemplo, después de que el motor 20 de copia de memoria termina la instrucción de copia actual, el motor 20 de copia de memoria está listo para realizar inmediatamente la siguiente instrucción de copia.
[024] En algunos ejemplos, el motor 20 de copia de memoria puede proporcionar una indicación al procesador 16 de sombreado una vez terminada una tarea de copia de memoria. Por ejemplo, el motor 20 de copia de memoria puede prealmacenar un siguiente bloque de datos que el procesador 16 de sombreado va a utilizar, mientras el procesador 16 de sombreado está realizando tareas en un bloque de datos actual. En este ejemplo, el motor 20 de copia de memoria puede indicar al procesador 16 de sombreado que el siguiente bloque de datos ya está almacenado en la memoria local 18, y el procesador 16 de sombreado puede recuperar el siguiente bloque de datos de la memoria local 18 para su procesamiento.
[025] De esta manera, el motor 20 de copia de memoria puede sincronizar sus operaciones con las del procesador 16 de sombreado. Por ejemplo, debido a que el motor 20 de copia de memoria proporciona una indicación al procesador 16 de sombreado cuando los datos están disponibles para el procesamiento, puede ser que el procesador 16 de sombreado no intente recuperar y procesar datos antes de que los datos estén disponibles para su recuperación. En potencia esto puede provocar que el procesador 16 de sombreado permanezca inactivo mientras el procesador 16 de sombreado espera la indicación del motor 20 de copia de memoria. Sin embargo, este tiempo de inactividad puede ser menor que el tiempo que llevaría al procesador 16 de sombreado ocuparse de todas las tareas relacionadas con la memoria, porque el motor 20 de copia de memoria ejecuta sus instrucciones de copia mientras el procesador 16 de sombreado ejecuta sus operaciones aritméticas.
[026] En ejemplos alternativos, el procesador 12 de mandatos puede averiguar cuándo el motor 20 de copia de memoria ha terminado sus tareas, y proporcionar la indicación de que el motor 20 de copia de memoria ha terminado sus tareas al procesador 16 de sombreado. En otras palabras, el procesador 12 de mandatos puede mantener la sincronización adecuada entre las funciones que el procesador 16 de sombreado realiza y las funciones que el motor 20 de copia de memoria realiza.
[027] En algunos ejemplos alternativos, el procesador 16 de sombreado puede realizar las funciones del procesador 12 de mandatos, y puede ser que el procesador 12 de mandatos no sea necesario en estos ejemplos. En algunos otros ejemplos alternativos, la GPU 10 puede recibir información de programación desde un dispositivo externo tal como una unidad central de procesamiento (CPU). En estos ejemplos, el procesador 12 de mandatos puede no ser necesario. Sin embargo, incluso en cualquiera de estos ejemplos alternativos, la GPU 10 puede seguir incluyendo el procesador 12 de mandatos para realizar otras funciones. Asimismo, en cualquiera de estos ejemplos alternativos, el motor 20 de copia de memoria puede proporcionar una indicación al procesador 16 de sombreado cuando termina sus tareas para sincronizar las instrucciones ejecutadas por el procesador 16 de sombreado y las instrucciones ejecutadas por el motor 20 de copia de memoria.
[028] Las unidades 14 de gráficos de función fija pueden ser unidades de hardware que pueden estar predeterminadas para realizar tareas específicas. Por ejemplo, las unidades 12 de gráficos de función fija pueden incluir una o más de una unidad de ensamblaje de primitivas y una unidad de rasterización, aunque las unidades 14 de gráficos de función fija pueden incluir unidades adicionales. La unidad de ensamblaje de primitivas de las unidades 14 de gráficos de función fija puede ensamblar primitivas, tales como triángulos u otros tipos de polígonos, basándose en las coordenadas de vértice recibidas desde el procesador 16 de sombreado. La unidad de rasterización de las unidades 14 de gráficos de función fija puede determinar las ecuaciones de línea para los polígonos ensamblados, y determinar qué píxeles residen dentro de los polígonos ensamblados basándose en las ecuaciones de línea determinadas. Dicha funcionalidad de las unidades 14 de gráficos de función fija puede no requerir flexibilidad operativa y, por lo tanto, puede estar predeterminada para realizar funciones particulares.
[029] Mientras que las unidades 14 de gráficos de función fija pueden no proporcionar flexibilidad operativa, el
5
10
15
20
25
30
35
40
45
50
55
60
65
procesador 16 de sombreado puede proporcionar una amplia flexibilidad operativa. Por ejemplo, el procesador 16 de sombreado, que también se puede denominar núcleo de sombreado, es operativo para ejecutar programas tales como programas relacionados con gráficos y no relacionados con gráficos. Los programas ejecutados por el procesador 16 de sombreado definen las funciones que realiza el procesador 16 de sombreado.
[030] Por ejemplo, el procesador 16 de sombreado es operativo para ejecutar programas relacionados con gráficos tales como sombreadores de geometría, sombreadores de vértices y sombreadores de fragmentos. Los sombreadores de geometría reciben datos de gráficos de un solo polígono y pueden dividir el único polígono en múltiples polígonos. Los sombreadores de vértices pueden recibir los múltiples polígonos desde los sombreadores de geometría y realizar funciones tales como transformación de coordenadas e iluminación en los vértices de los polígonos recibidos. Los sombreadores de fragmentos pueden determinar los valores de píxel de los píxeles que se muestran en una pantalla.
[031] En algunos ejemplos, el procesador 16 de sombreado también puede ser operativo para ejecutar programas no relacionados con gráficos. Por ejemplo, las capacidades de procesamiento masivo paralelo de la GPU 10 pueden promover la ejecución eficiente de ciertos tipos de programas no relacionados con gráficos que realizan múltiples funciones paralelas. Este tipo de programas no relacionados con gráficos se pueden denominar sombreadores de cómputo. El término «programa de sombreado» puede referirse en general a cualquier programa que se ejecuta en el procesador 16 de sombreado. Por ejemplo, el término programa de sombreado se refiere a sombreadores de geometría, sombreadores de vértices, sombreadores de fragmentos y sombreadores de cómputo.
[032] Los programas de sombreado, que se ejecutan en el procesador 16 de sombreado, realizan operaciones tales como operaciones aritméticas en datos almacenados en la memoria de sistema. Por ejemplo, el procesador 16 de sombreado puede incluir una pluralidad de unidades lógicas aritméticas (ALU) que son programables para realizar operaciones aritméticas deseadas. El término «datos» se utiliza para referirse a datos relacionados con gráficos tales como valores de píxel (por ejemplo, valores de color, valores de opacidad u otros atributos de píxeles), así como datos no relacionados con gráficos (por ejemplo, datos utilizados por un sombreador de cómputo). La memoria de sistema también puede almacenar datos generados por los programas de sombreado tales como los resultados de las operaciones aritméticas. La memoria de sistema puede ser una memoria que es externa a la GPU 10, y requiere el bus 24 de sistema para el acceso a los datos.
[033] De acuerdo con aspectos de esta divulgación, el motor 20 de copia de memoria puede ocuparse de tareas relacionadas con la memoria que requieren interacción con la memoria de sistema. El motor 20 de copia de memoria puede implementarse como hardware, software que se ejecuta en hardware o una combinación de los mismos. Por ejemplo, como ejemplo no limitante, el motor 20 de copia de memoria puede ser un programa que realiza funciones muy específicas y está diseñado de acuerdo con la norma OpenGL u OpenCL, cuando se implementa como software.
[034] Con fines de ilustración, el motor 20 de copia de memoria se describe en el contexto de ser una unidad de hardware. Por ejemplo, el motor 20 de copia de memoria puede formarse como un DSP, un ASIC, una FPGA u otros circuitos integrados equivalentes. En algunos ejemplos, el motor 20 de copia de memoria puede estar formado como unos circuitos lógicos discretos o unos circuitos analógicos discretos. Los ejemplos anteriores para una unidad de hardware se proporcionan con fines de ilustración y no deben considerarse limitantes.
[035] En un ejemplo, el motor 20 de copia de memoria puede ejecutar instrucciones de copia, tales como instrucciones para recuperar datos de la memoria de sistema o almacenar datos en ella. Por ejemplo, el motor 20 de copia de memoria puede ejecutar instrucciones para recuperar datos de la memoria de sistema y almacenar los datos recuperados en la memoria local 18 para su uso por los programas de sombreado que se ejecutan en el procesador 16 de sombreado. El motor 20 de copia de memoria también puede ejecutar instrucciones para recuperar datos almacenados en la memoria local 18 y almacenar los datos recuperados en la memoria de sistema.
[036] Como se ilustra en la figura 1, el motor 20 de copia de memoria puede estar acoplado a la interfaz 22 de memoria. El motor 20 de copia de memoria puede recuperar datos de la memoria de sistema o almacenar datos en ella a través de la interfaz 22 de memoria. En este sentido, la interfaz 22 de memoria puede funcionar como intermediario entre los componentes de la GPU 10 y la memoria de sistema. Por ejemplo, la interfaz 22 de memoria puede incluir componentes que permiten que la interfaz 22 de memoria facilite datos a través del bus 24 de sistema, y reciba datos a través del bus 24 de sistema.
[037] En las técnicas de ejemplo descritas en esta divulgación, el procesador 16 de sombreado puede ser capaz de ejecutar instrucciones en paralelo con el motor 20 de copia de memoria que ejecuta instrucciones para el almacenamiento de datos en la memoria de sistema o la recuperación de datos de ella. Por ejemplo, el procesador 16 de sombreado puede ejecutar instrucciones mientras que el motor 20 de copia de memoria está ejecutando instrucciones para el almacenamiento de datos en la memoria de sistema o la recuperación de datos de ella. La ejecución paralela del procesador 16 de sombreado y el motor 20 de copia de memoria puede referirse a la ejecución simultánea o a la ejecución solapada de instrucciones por el procesador 16 de sombreado y el motor 20 de copia de memoria.
5
10
15
20
25
30
35
40
45
50
55
60
65
[038] Debe entenderse que las instrucciones ejecutadas por el procesador 16 de sombreado y el motor 20 de copia de memoria, ya sea en paralelo o de otro modo, no necesitan ser las mismas instrucciones. En general, el motor 20 de copia de memoria puede ejecutar instrucciones relacionadas con el acceso a la memoria, que el procesador 16 de sombreado puede no ejecutar. Además, aunque las técnicas descritas en esta divulgación permiten que el motor 20 de copia de memoria y el procesador 16 de sombreado ejecuten instrucciones al mismo tiempo, los aspectos de esta divulgación no se limitan a ello. Por ejemplo, el motor 20 de copia de memoria y el procesador 16 de sombreado no necesitan ejecutar instrucciones al mismo tiempo en todos los ejemplos. En su lugar, el motor 20 de copia de memoria y el procesador 16 de sombreado son capaces de ejecutar instrucciones al mismo tiempo.
[039] En algunos ejemplos, debido a que el motor 20 de copia de memoria puede ejecutar instrucciones para almacenar datos en la memoria de sistema o recuperar datos de ella, el procesador 16 de sombreado puede estar configurado para no recuperar datos de la memoria de sistema o almacenar datos en la memoria de sistema. En otras palabras, el acceso a la memoria de sistema puede delegarse por completo desde el procesador 16 de sombreado, y dicho acceso puede ser realizado solo por el motor 20 de copia de memoria, en este ejemplo. De esta manera, el procesador 16 de sombreado es libre de ejecutar el programa o los programas de sombreado, mientras el motor 20 de copia de memoria recupera y almacena datos. Esto libera al procesador 16 de sombreado de la necesidad de ejecutar instrucciones para la recuperación o el almacenamiento de datos y es libre de ejecutar instrucciones del programa o los programas de sombreado simultáneamente con las funciones de recuperación y almacenamiento de datos realizadas por el motor 20 de copia de memoria. En ejemplos alternativos, aún puede ser posible que el procesador 16 de sombreado acceda a la memoria de sistema.
[040] En unos ejemplos de esta divulgación, el procesador 16 de sombreado puede seguir ejecutando instrucciones para almacenar datos generados por los programas de sombreado en la memoria local 18 e instrucciones para recuperar datos de la memoria local 18. Por ejemplo, el motor 20 de copia de memoria puede ejecutar instrucciones de copia relacionadas con el almacenamiento y la recuperación de datos, y mientras el motor 20 de copia de memoria está ejecutando dichas instrucciones de copia, el procesador 16 de sombreado puede continuar ejecutando instrucciones de procesamiento de datos al mismo tiempo (por ejemplo, simultáneamente), tales como instrucciones de procesamiento de datos de los programas de sombreado. Un ejemplo de las instrucciones de procesamiento de datos puede ser el de las instrucciones aritméticas, porque dichas instrucciones en general son para realizar operaciones aritméticas en los datos.
[041] La delegación al motor 20 de copia de memoria de instrucciones relacionadas con el acceso a la memoria de sistema puede promover aún más las eficiencias de procesamiento de la GPU 10. Por ejemplo, las técnicas convencionales dependían del procesador 16 de sombreado para ocuparse de todas las instrucciones relacionadas con el acceso a la memoria, por ejemplo, tanto la memoria local 18 como la memoria de sistema. Por ejemplo, en estas técnicas convencionales, el procesador 16 de sombreado estaría acoplado a la interfaz 22 de memoria a través de una canalización de recopilación de texturas. De acuerdo con estas técnicas convencionales, el procesador 16 de sombreado accedería a la memoria de sistema a través de la canalización de recopilación de texturas y la interfaz 22 de memoria.
[042] Sin embargo, aunque las instrucciones de los programas de sombreado para acceder a la memoria local 18 pueden ejecutarse de forma asincrónica con otras instrucciones de los programas de sombreado, las instrucciones de los programas de sombreado para acceder a la memoria de sistema pueden no ejecutarse de forma asincrónica. En su lugar, las instrucciones para acceder a la memoria de sistema, en el procesador 16 de sombreado, pueden ejecutarse de forma sincrónica con otras instrucciones de los programas de sombreado. Para las instrucciones para acceder a la memoria de sistema, en las técnicas convencionales, el procesador 16 de sombreado puede permanecer inactivo, e incapaz de ejecutar otras instrucciones, mientras el procesador 16 de sombreado espera a que los datos se almacenen en la memoria de sistema o recuperen de la memoria de sistema.
[043] Con el motor 20 de copia de memoria, las técnicas descritas en esta divulgación pueden permitir que el procesador 16 de sombreado ejecute instrucciones de procesamiento de datos para los datos en paralelo con, por ejemplo, de forma sustancialmente simultánea con, la ejecución de las instrucciones de copia de memoria por el motor 20 de copia de memoria, por ejemplo, operaciones de transferencia de datos entre la memoria de sistema y la GPU 10, y con un rendimiento incrementado, puesto que el procesador 16 de sombreado ya no necesita ejecutar las instrucciones de copia de memoria. Los intervalos para las instrucciones de los programas de sombreado, utilizados previamente para instrucciones de copia de memoria, pueden liberarse para las instrucciones que el procesador 16 de sombreado va a ejecutar para realizar operaciones aritméticas reales, por ejemplo, ejecutar instrucciones de procesamiento de datos. Con el motor 20 de copia de memoria, no es necesario que el procesador 16 de sombreado permanezca inactivo e incapaz de ejecutar otras instrucciones, mientras los datos se copian en la memoria de sistema o se recuperan de la memoria de sistema. En su lugar, el motor 20 de copia de memoria se ocupa de estas tareas, permitiendo que el procesador 16 de sombreado continúe ejecutando instrucciones de procesamiento de datos.
[044] Como se ilustra, el motor 20 de copia de memoria es una unidad de procesamiento separada e
5
10
15
20
25
30
35
40
45
50
55
60
65
independiente del procesador 16 de sombreado, aunque es posible que el procesador 16 de sombreado pueda controlar el motor 20 de copia de memoria. Por ejemplo, aunque el motor 20 de copia de memoria y el procesador 16 de sombreado pueden estar formados dentro de la GPU 10, el motor 20 de copia de memoria y el procesador 16 de sombreado pueden no estar formados uno dentro del otro. En otras palabras, en algunos ejemplos, las funciones realizadas por el motor 20 de copia de memoria son funciones que el procesador 16 de sombreado no necesita realizar. Por ejemplo, el procesador 16 de sombreado puede seguir teniendo acceso a la memoria de sistema para almacenamiento y recuperación; sin embargo, dado que el motor 20 de copia de memoria realiza dichas tareas, el procesador 16 de sombreado puede liberarse de realizar dichas tareas. Las operaciones aritméticas que los programas de sombreado deben realizar están localizadas dentro del procesador 16 de sombreado. Las operaciones relacionadas con el acceso a la memoria de sistema están localizadas dentro del motor 20 de copia de memoria. En algunos ejemplos, el motor 20 de copia de memoria puede realizar solo funciones relacionadas con el acceso a la memoria de sistema; sin embargo, los aspectos de esta divulgación no se limitan a ello, tal como se describe a continuación.
[045] En general, el motor 20 de copia de memoria, el procesador 16 de sombreado y la memoria local 18 están separados entre sí y en un chip de la GPU 10. Por ejemplo, cuando la GPU 10 es su propio circuito integrado (por ejemplo, un chip), el motor 20 de copia de memoria, el procesador 16 de sombreado y la memoria local 18 son componentes diferenciados del chip de la GPU 10 (por ejemplo, separados unos de otros y en el chip de la GPU 10). En otros ejemplos, el motor 20 de copia de memoria y el procesador 16 de sombreado pueden estar separados entre sí y una parte de la GPU 10; sin embargo, la memoria local 18 puede compartirse con otros dispositivos.
[046] Puede haber diversas formas de hacer que el motor 20 de copia de memoria realice las funciones de ejemplo descritas anteriormente. En general, las técnicas de ejemplo para hacer que el motor 20 de copia de memoria realice las funciones de ejemplo pueden permitir que el motor 20 de copia de memoria prealmacene datos en la memoria local 18 de tal forma que están disponibles para su procesamiento por los programas de sombreado que se ejecutan en el procesador 16 de sombreado cuando dichos programas de sombreado requieren los datos. Por ejemplo, el motor 20 de copia de memoria puede ser capaz de almacenar secuencialmente datos de vértice en la memoria local 18 antes de que el procesador 16 de sombreado utilice los datos de vértice. Asimismo, las técnicas de ejemplo para hacer que el motor 20 de copia de memoria realice las funciones de ejemplo pueden permitir que el motor 20 de copia de memoria almacene datos de la memoria local 18 en la memoria de sistema mientras el procesador 16 de sombreado está ejecutando otras instrucciones.
[047] En un ejemplo, el procesador 12 de mandatos puede programar instrucciones de copia de memoria que el motor 20 de copia de memoria ejecuta simultáneamente con las instrucciones de procesamiento de datos que el procesador 16 de sombreado ejecuta. Por ejemplo, el procesador 12 de mandatos puede hacer que el motor 20 de copia de memoria recupere un primer bloque de datos de origen de la memoria de sistema y almacene el primer bloque de datos de origen en la memoria local 18. Un bloque de datos puede ser una cantidad predeterminada de datos, por ejemplo, valores de atributo para 10 píxeles en un ejemplo solo para fines ilustrativos. Los datos de origen se pueden denominar datos recuperados de la memoria de sistema.
[048] El procesador 12 de mandatos a continuación puede hacer que el procesador 16 de sombreado recupere el primer bloque de datos de origen de la memoria local 18 y procese el primer bloque de datos de origen para generar un primer bloque de datos de resultados. El primer bloque de datos de resultados puede ser un bloque de datos generado por el procesador 16 de sombreado después de que el procesador 16 de sombreado ha procesado un bloque de datos de origen.
[049] Mientras que el procesador 16 de sombreado está procesando el primer bloque de datos de origen (por ejemplo, al mismo tiempo), el procesador 12 de mandatos puede hacer que el motor 20 de copia de memoria ejecute instrucciones para recuperar un segundo bloque de datos de origen de la memoria de sistema y almacene el segundo bloque de datos de origen en la memoria local 18. Una vez que el procesador 16 de sombreado ha terminado el procesamiento del primer bloque de datos de origen, el procesador 16 de sombreado puede almacenar los resultados del procesamiento del primer bloque de datos de origen, por ejemplo, un primer bloque de datos de resultados, en la memoria local 18, e inmediatamente comenzar a procesar el segundo bloque de datos de origen de la memoria local 18. De esta manera, si la memoria local 18 incluye capacidad de almacenamiento suficiente para almacenar datos recuperados de la memoria de sistema, por ejemplo, datos de origen, y almacenar datos procesados que el procesador 16 de sombreado ha procesado, por ejemplo, datos de resultados, al mismo tiempo, el motor 20 de copia de memoria puede ejecutar instrucciones de copia al mismo tiempo que el procesador 16 de sombreado ejecuta instrucciones de procesamiento de datos. De esta manera, el procesador 12 de mandatos puede poner en cola las operaciones de copia de memoria que el motor 20 de copia de memoria realiza.
[050] En otro ejemplo, el procesador 16 de sombreado puede realizar algunas o todas las funciones de ejemplo del procesador 12 de mandatos descritas en el ejemplo anterior. En estos ejemplos, el procesador 12 de mandatos puede no ser necesario porque el procesador 16 de sombreado puede realizar dichas funciones del procesador 12 de mandatos. Sin embargo, la GPU 10 puede seguir incluyendo el procesador 12 de mandatos, si el procesador 12 de mandatos es necesario para realizar otras tareas.
5
10
15
20
25
30
35
40
45
50
55
60
65
[051] Por ejemplo, el procesador 16 de sombreado puede facilitar un mandato al motor 20 de copia de memoria que ordena al motor 20 de copia de memoria ejecutar instrucciones para recuperar un siguiente bloque de datos de origen, mientras el procesador 16 de sombreado está procesando un bloque actual de datos de origen. A continuación, después de terminar el procesamiento del bloque actual de datos de origen, el procesador 16 de sombreado puede almacenar los datos de resultados (por ejemplo, los resultados del procesamiento del bloque actual de datos de origen) en la memoria local 18, y procesar los datos de origen para el siguiente bloque, que el motor 20 de copia de memoria ha prealmacenado en la memoria local 18. El procesador 16 de sombreado también puede ordenar al motor 20 de copia de memoria que recupere los datos de resultados de la memoria local 18 y almacene los datos de resultados en la memoria de sistema.
[052] En otro ejemplo más, el procesador 12 de mandatos puede funcionar como un secuenciador de mandatos. En este ejemplo, el procesador 12 de mandatos puede recibir instrucciones que va a ejecutar la GPU 10 de otro dispositivo, tal como una unidad central de procesamiento (CPU). El procesador 12 de mandatos puede dividir las instrucciones recibidas en instrucciones que va a realizar el procesador 16 de sombreado e instrucciones que va a realizar el motor 20 de copia de memoria. Por ejemplo, el procesador 12 de mandatos puede dividir las instrucciones en operaciones aritméticas que va a realizar el procesador 16 de sombreado y en operaciones de interacción de memoria que va a realizar el motor 20 de copia de memoria. El procesador 12 de mandatos puede a continuación reenviar las instrucciones para realizar operaciones aritméticas al procesador 16 de sombreado y reenviar las instrucciones para realizar operaciones de interacción de memoria al motor 20 de copia de memoria, según corresponda.
[053] Por ejemplo, el procesador 12 de mandatos puede reenviar instrucciones al procesador 16 de sombreado que hacen que el procesador 16 de sombreado recupere un bloque de datos de la memoria local 18 y procese los datos. El procesador 12 de mandatos puede reenviar instrucciones al motor 20 de copia de memoria para recuperar un bloque de datos de origen de la memoria de sistema, y el procesador 16 de sombreado y el motor 20 de copia de memoria pueden ejecutar sus instrucciones respectivas al mismo tiempo. De esta manera, los datos de origen que el procesador 16 de sombreado procesará a continuación se prealmacenan en la memoria local 18. Además, el procesador 12 de mandatos puede reenviar instrucciones al motor 20 de copia de memoria para recuperar los datos resultantes de las operaciones realizadas por el procesador 16 de sombreado de la memoria local 18, y almacenar dichos datos en la memoria de sistema.
[054] En un ejemplo más, otro dispositivo, tal como la CPU, puede transmitir instrucciones directamente a cada uno del procesador 16 de sombreado y el motor 20 de copia de memoria. Por ejemplo, la CPU puede transmitir todas las instrucciones relacionadas con las interacciones con la memoria de sistema al motor 20 de copia de memoria, y todas las instrucciones relacionadas con las operaciones aritméticas al procesador 16 de sombreado.
[055] En estos ejemplos, el procesador 12 de mandatos puede no ser necesario debido a que la CPU puede proporcionar instrucciones directamente al procesador 16 de sombreado y al motor 20 de copia de memoria. Sin embargo, la GPU 10 puede seguir incluyendo el procesador 12 de mandatos, si el procesador 12 de mandatos se necesita para realizar otras tareas.
[056] En los ejemplos anteriores (por ejemplo, donde la GPU 10 incluye el procesador 12 de mandatos o donde la GPU 10 no incluye el procesador 12 de mandatos), el motor 20 de copia de memoria puede prealmacenar datos que el procesador 16 de sombreado utilizará subsiguientemente. En algunos ejemplos, el motor 20 de copia de memoria puede proporcionar una indicación al procesador 16 de sombreado de que los siguientes datos que el procesador 16 de sombreado debería utilizar ya están almacenados en la memoria local 18 para sincronizar las instrucciones del motor 20 de copia de memoria y el procesador 16 de sombreado. El procesador 16 de sombreado a continuación puede recuperar los datos prealmacenados de la memoria local 18, procesar los datos y generar datos de resultados que son el resultado del procesamiento de los datos. El procesador 16 de sombreado a continuación puede almacenar los datos de resultados en la memoria local 18. En algunos ejemplos, por ejemplo, cuando el procesador 16 de sombreado ya no necesita los datos de resultados, el motor 20 de copia de memoria puede recuperar los datos de resultados de la memoria local 18 y almacenar los datos de resultados en la memoria de sistema. Incluso en los casos en los que los datos de resultados se necesitan para un subsiguiente procesamiento, el motor 20 de copia de memoria puede recuperar los datos de resultados de la memoria local 18 y almacenar los datos de resultados en la memoria de sistema para liberar espacio de memoria en la memoria local 18.
[057] Las técnicas de ejemplo descritas en esta divulgación pueden ser beneficiosas en diversos tipos de sistemas. En algunos ejemplos, las técnicas descritas en esta divulgación pueden ser aplicables para la optimización de la renderización basada en agrupamiento, el procesamiento de imágenes, la copia de áreas limítrofes (por ejemplo, copia de partes de bloques o mosaicos vecinos) y la comunicación basada en colas. En general, las técnicas de ejemplo descritas en esta divulgación pueden ser beneficiosas para cualquier aplicación de procesador de sombreado que requiera la transferencia de datos entre la GPU 10 y la memoria de sistema.
[058] En un ejemplo, dicha funcionalidad puede ser beneficiosa para ejecutar un programa de sombreado que realiza operaciones de filtrado en una imagen generada, aunque no se debe considerar que los aspectos de esta
5
10
15
20
25
30
35
40
45
50
55
60
65
divulgación se limiten a ello. Por ejemplo, el programa de sombreado que realiza operaciones de filtrado puede realizar dichas operaciones de filtrado de bloque en bloque o de mosaico en mosaico en la imagen generada. En este ejemplo, el motor 20 de copia de memoria puede prealmacenar el siguiente bloque o mosaico, mientras el procesador 16 de sombreado está realizando tareas en el bloque o mosaico actual. Debe entenderse que los aspectos de esta divulgación pueden ser beneficiosos para otras situaciones aparte de las situaciones en las que el procesador 16 de sombreado ejecuta un programa de sombreado que realiza operaciones de filtrado. La capacidad del motor 20 de copia de memoria para prealmacenar los datos puede ser beneficiosa en una amplia diversidad de diferentes tipos de programas de sombreado.
[059] En otro ejemplo, cuando se realizan operaciones de filtrado, la funcionalidad del motor 20 de copia de memoria puede permitir cargar, además del siguiente bloque o mosaico de la imagen de origen, partes de sus bloques o mosaicos vecinos, según lo requiera el filtro. En algunos ejemplos, cuando los programas de sombreado necesitan almacenar datos que están fuera del bloque o mosaico actual en la memoria local 18, la operación puede dar como resultado redundancia o complejidad incrementada. El motor 20 de copia de memoria puede no estar restringido de esta manera. Por ejemplo, el motor 20 de copia de memoria puede ser capaz de recuperar una parte más grande de datos sin redundancia ni complejidad incrementada.
[060] Además, en algunos ejemplos, estos programas de sombreado pueden necesitarse para cargar datos con una huella rectangular (por ejemplo, datos que deben almacenarse en ubicaciones de almacenamiento de memoria local que forman un área rectangular). El motor 20 de copia de memoria puede no ser necesario para cargar datos con dichas restricciones. En algunos ejemplos, el motor 20 de copia de memoria puede estar configurado de tal forma que puede cargar datos con huellas no rectangulares. De esta manera, el motor 20 de copia de memoria puede reducir la redundancia y la complejidad.
[061] Aunque en la descripción de los ejemplos previos se indica que el motor 20 de copia de memoria realiza tareas relacionadas con el acceso a la memoria de sistema, los aspectos de esta divulgación no se limitan a ello. En algunos ejemplos, el motor 20 de copia de memoria, en lugar o además de realizar tareas relacionadas con el acceso a la memoria de sistema, puede realizar tareas de modificación. Las tareas de modificación pueden referirse a la modificación de datos almacenados en el sistema o datos que se van a almacenar en la memoria de sistema como datos en una forma más utilizable. Las tareas de modificación también pueden referirse a la modificación de las ubicaciones donde se almacenan los datos.
[062] En un ejemplo de tareas de modificación en el que el motor 20 de copia de memoria modifica las ubicaciones donde se almacenan los datos, el motor 20 de copia de memoria puede reunir y compactar datos. Por ejemplo, los datos que se comparten entre los diferentes programas de sombreado pueden tener una presencia poco densa. Los datos de presencia poco densa pueden referirse a una cantidad relativamente pequeña de datos que se almacenan en una parte de almacenamiento relativamente grande. En estos casos, el motor 20 de copia de memoria puede compactar los datos de tal forma que no se almacenan en una parte relativamente grande de la memoria de sistema o la memoria local 18. En cambio, los datos de presencia poco densa pueden reescribirse en una parte más pequeña de la memoria. Esta compactación de datos puede permitir que el motor 20 de copia de memoria acceda a los datos más rápidamente. Además, dado que el procesador 16 de sombreado no tiene conocimiento de dicha compactación de datos, puede no ser necesario modificar las instrucciones de los programas de sombreado que utilizan los datos para operaciones aritméticas.
[063] En algunos ejemplos, cuando el motor 20 de copia de memoria modifica datos almacenados en la memoria de sistema o datos que se van a almacenar en la memoria de sistema, el motor 20 de copia de memoria puede convertir un bloque lineal de datos en un bloque de datos en mosaico o viceversa para almacenamiento en la memoria local 18 o almacenamiento en la memoria de sistema. El motor 20 de copia de memoria también puede ordenar aleatoriamente datos en las direcciones x, y de una matriz, convertir colores rojo, verde y azul (RGB) en colores de luminancia y crominancia (YUV), o viceversa, codificar el formato RGB o yUv como otro formato, así como realizar cualquier otra modificación útil para el procesador 16 de sombreado. Por ejemplo, el motor 20 de copia de memoria también puede ejecutar instrucciones de modificación que convierten los datos almacenados en la memoria local 18 en otra forma que es utilizable por algún otro programa de sombreado. El motor 20 de copia de memoria también puede empaquetar o desempaquetar estructuras de datos comprimidos o formatos de imagen al recuperar datos de la memoria de sistema y almacenar los datos en la memoria local 18, así como empaquetar o desempaquetar estructuras de datos comprimidos o formatos de imagen al recuperar datos de la memoria local 18 y almacenar los datos en la memoria de sistema.
[064] Por ejemplo, un sombreador de cómputo puede generar datos de resultados para un sombreador de vértices. Sin embargo, el formato de datos de los datos de resultados puede no ser el formato correcto para el sombreador de vértices. En este ejemplo, el motor 20 de copia de memoria puede modificar el formato de los datos de resultados, del sombreador de cómputo, a un formato adecuado para el sombreador de vértices. El motor 20 de copia de memoria también puede modificar las ubicaciones donde se almacenan los datos (por ejemplo, copiar datos de una ubicación de la memoria local 18 a otra ubicación de la memoria local 18). En términos de rendimiento, esto puede ser beneficioso porque el motor 20 de copia de memoria puede colocar datos en ubicaciones de memoria local 18 a las que el procesador 16 de sombreado puede acceder de manera eficiente utilizando patrones
5
10
15
20
25
30
35
40
45
50
55
60
65
de acceso rápido a la memoria local 18 que el procesador 16 de sombreado tiene.
[065] En otros ejemplos más, el motor 20 de copia de memoria también puede realizar tareas de modificación tales como conversión de listas vinculadas a formato lineal, YUV plano a relleno, o viceversa, formatos de HDR (alto rango dinámico) codificado o RGB a FP16 o FP32, adición o eliminación de relleno, alineación de datos, compresión o descompresión de datos, transformación de wavelet 2D, análisis de estructuras de datos (tales como estructuras de lista y árbol) y similares. El motor 20 de copia de memoria también puede proporcionar múltiples copias de los datos. Por ejemplo, cuando se almacenan datos en la memoria de sistema, el motor 20 de copia de memoria puede almacenar múltiples copias de los datos para la protección de los datos contra su alteración. Estos son diversos ejemplos de las tareas de modificación que el motor 20 de copia de memoria puede realizar, proporcionados con fines de ilustración, y los aspectos de esta divulgación no deben considerarse limitados a los ejemplos anteriores.
[066] De esta manera, algunas de las instrucciones de modificación que el procesador 16 de sombreado puede haber ejecutado pueden delegarse al motor 20 de copia de memoria. Esto puede permitir que el procesador 16 de sombreado ejecute solo instrucciones de procesamiento de datos tales como operaciones aritméticas, y el motor 20 de copia de memoria puede realizar cualquier tarea de copia y modificación.
[067] La memoria local 18 puede estar formada como memoria caché, unos registros o cualquier forma en la que se puedan almacenar datos. Los componentes de la GPU 10 pueden ser capaces de recuperar datos de la memoria local 18 o almacenar datos en ella más rápidamente y con un consumo de energía menor que cuando se recuperan datos de la memoria de sistema o se almacenan datos en ella. Por ejemplo, los componentes de la GPU 10 pueden acceder a la memoria local 18 sin necesitar una amplia programación y sin un bus separado. Sin embargo, acceder a la memoria de sistema puede requerir una programación de acceso que puede conllevar una pérdida de tiempo. Por ejemplo, la GPU 10 puede tener acceso a la memoria de sistema durante los intervalos de tiempo disponibles cuando no hay transferencia de datos por el bus 24 de sistema. El acceso a la memoria de sistema a través del bus 24 de sistema puede consumir energía.
[068] Además, aunque la memoria local 18 ilustrada es interna a la GPU 10, los aspectos de esta divulgación no se limitan a ello. En algunos ejemplos, la GPU 10 puede formar parte de un circuito integrado más grande. Este circuito integrado puede incluir unidades de procesamiento adicionales tales como un procesador de visualización, un procesador de vídeo y similares. En estos ejemplos, la memoria local 18 puede ser potencialmente externa a la GPU 10, y puede funcionar como una memoria local para las diversas unidades de procesamiento del circuito integrado. En este sentido, la memoria local 18 puede considerarse una memoria local compartida. Sin embargo, incluso en estos ejemplos, los componentes de la GPU 10 pueden ser capaces de acceder a la memoria local 18 con más rapidez y menor consumo de energía que cuando se accede a la memoria de sistema a través del bus 24 de sistema. Por otra parte, en cualquiera de estos ejemplos, se puede seguir considerando que la GPU 10 comprende la memoria local 18, porque la memoria local 18 funciona como la memoria local para la GPU 10. Por ejemplo, incluso cuando la memoria local 18 es externa a la GPU 10, la memoria local 18 todavía puede considerarse funcionalmente una parte de la GPU 10, porque la memoria local 18 proporciona almacenamiento y recuperación de memoria local a los componentes de la GPU 10.
[069] La figura 2 es un diagrama de bloques que ilustra un ejemplo de un dispositivo 26 que puede ser operativo para implementar uno o más aspectos de esta divulgación. Los ejemplos del dispositivo 26 incluyen, sin limitarse a, dispositivos de vídeo, tales como reproductores de medios, descodificadores, teléfonos inalámbricos, tales como teléfonos móviles, asistentes personales digitales (PDA), ordenadores de escritorio, ordenadores portátiles, consolas de videojuegos, unidades de videoconferencia, dispositivos informáticos de tableta y similares. El dispositivo 26 puede incluir un procesador 28, una unidad de procesamiento de gráficos (GPU) 10, una memoria 30 de sistema, un módulo 32 de transceptor, una interfaz de usuario 34, una memoria intermedia 36 de visualización y una pantalla 38.
[070] La GPU 10 del dispositivo 26, ilustrada en la figura 2, puede ser idéntica o sustancialmente similar a la GPU 10 de la figura 1. Por ejemplo, la GPU 10 incluye un motor 20 de copia de memoria, que es idéntico o sustancialmente similar al motor 20 de copia de memoria de la figura 1. Por ejemplo, el motor 20 de copia de memoria puede realizar tareas que requieren acceder a la memoria 30 de sistema, así como, en algunos ejemplos, realizar tareas de formateo de datos. Para fines de brevedad, la funcionalidad de ejemplo de la GPU 10 y el motor 20 de copia de memoria no se analiza en mayor profundidad en el ejemplo de la figura 2.
[071] El procesador 28 puede ser la unidad central de procesamiento (CPU) del dispositivo 26, y puede realizar las funciones de la CPU descritas anteriormente en la figura 1. Los ejemplos de procesador 28 incluyen, sin limitarse a, un DSP, un microprocesador de propósito general, un ASIC, una FPGA u otros circuitos lógicos integrados o discretos equivalentes. Aunque el procesador 28 y la GPU 10 se ilustran como unidades separadas, los aspectos de esta divulgación no se limitan a ello. En algunos ejemplos, el procesador 28 y la GPU 10 pueden estar formados en un circuito integrado común (IC). El procesador 28 y la GPU 10 pueden incluir cada uno un núcleo de procesador único o múltiples núcleos de procesadores.
[072] El dispositivo 26 puede incluir módulos o unidades adicionales que no se muestran en la figura 2 por propósitos de claridad. Por ejemplo, el dispositivo 26 puede incluir un altavoz y un micrófono, ninguno de los cuales
5
10
15
20
25
30
35
40
45
50
55
60
65
se muestra en la figura 2, para efectuar comunicaciones telefónicas en ejemplos donde el dispositivo 26 es un teléfono móvil inalámbrico, o un altavoz donde el dispositivo 26 es un reproductor multimedia. Además, los diversos módulos y unidades que se muestran en el dispositivo 26 pueden no ser necesarios en cada ejemplo del dispositivo 26. Por ejemplo, la interfaz de usuario 34 y la pantalla 38 pueden ser externas al dispositivo 26 en ejemplos en los que el dispositivo 26 es un ordenador de escritorio u otro dispositivo que está equipado para interconectarse con una interfaz de usuario o pantalla externos.
[073] La memoria 30 de sistema puede ser la memoria global para el dispositivo 26, pero no la memoria local
para la GPU 10 (por ejemplo, la memoria local 18). Por ejemplo, la memoria 30 de sistema puede almacenar datos producidos por la GPU 10, que pueden denominarse datos de resultados porque los datos de resultados pueden ser el resultado de las tareas realizadas por el procesador 16 de sombreado de la GPU 10. De manera similar, la memoria 30 de sistema puede almacenar datos que la GPU 10 va a utilizar, que pueden denominarse datos de
origen porque los datos de origen pueden ser los datos que el procesador 16 de sombreado de la GPU 10 utiliza
para realizar tareas. La memoria 30 de sistema también puede almacenar un código precompilado y/o compilado
para los programas de sombreado que el procesador 16 de sombreado de la GPU 10 ejecuta. Los diversos
componentes del dispositivo 26, tales como el procesador 28 y la GPU 10, pueden acceder a la memoria 30 de sistema a través del bus 24 de sistema.
[074] Los ejemplos de memoria 30 de sistema incluyen, sin limitarse a, una memoria de acceso aleatorio (RAM), una memoria de solo lectura (ROM), una memoria de solo lectura programable y borrable eléctricamente (EEPROM), una CD-ROM u otro almacenamiento en disco óptico, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético, memoria flash u otro medio que pueda utilizarse para almacenar un código de programa deseado en forma de instrucciones o estructuras de datos y al que se pueda acceder mediante un ordenador, un procesador o una GPU. En algún ejemplo, la memoria 30 de sistema puede comprender uno o más medios de almacenamiento legibles por ordenador, tales como un dispositivo de almacenamiento legible por ordenador. Por ejemplo, en algunas implementaciones de ejemplo, la memoria 30 de sistema puede incluir instrucciones que hacen que el procesador 28 y/o la GPU 10 realicen las funciones atribuidas al procesador 28 y la GPU 10 en esta divulgación.
[075] En algunos ejemplos, la memoria 30 de sistema puede considerarse un medio de almacenamiento no transitorio. La expresión «no transitorio» puede indicar que el medio de almacenamiento no está incorporado en una onda portadora o una señal propagada. Sin embargo, no debe interpretarse que la expresión «no transitorio» significa que la memoria 30 de sistema es no móvil. En un ejemplo, la memoria 30 de sistema puede retirarse del dispositivo 26, y trasladarse a otro dispositivo. En otro ejemplo, un dispositivo de almacenamiento, sustancialmente similar a la memoria 32 de sistema, puede insertarse en el dispositivo 26. En ciertos ejemplos, un medio de almacenamiento no transitorio puede almacenar datos que, con el tiempo, pueden cambiar (por ejemplo, en una RAM).
[076] Los ejemplos de interfaz 34 de usuario incluyen, sin limitarse a, una rueda de seguimiento, un ratón, un teclado y otros tipos de dispositivos de entrada. La interfaz 34 de usuario también puede ser una pantalla táctil y puede estar incorporada como parte de la pantalla 38. El módulo 32 de transceptor puede incluir circuitos para permitir la comunicación inalámbrica o alámbrica entre el dispositivo 26 y otro dispositivo o una red. El módulo 32 de transceptor puede incluir moduladores, desmoduladores, amplificadores y otros de dichos circuitos para comunicación alámbrica o inalámbrica.
[077] La GPU 10 puede facilitar los valores de píxel para una imagen que se va a mostrar en la pantalla 38. En algunos ejemplos, la GPU 10 puede facilitar los valores de píxel directamente a la pantalla 38. En algunos ejemplos alternativos, la GPU 10 puede facilitar los valores de píxel de la imagen a la memoria intermedia 36 de visualización. La memoria intermedia 36 de visualización puede almacenar temporalmente los valores de píxel de la imagen hasta que se renderiza toda la imagen. La memoria intermedia 36 de visualización se puede considerar una memoria intermedia de tramas de imagen. La memoria intermedia 36 de visualización puede a continuación transmitir la imagen renderizada que se va a mostrar en la pantalla 38. La pantalla 38 puede comprender una pantalla de cristal líquido (LCD), una pantalla de diodo orgánico emisor de luz (OLED), una pantalla de tubo de rayos catódicos (CRT), una pantalla de plasma, u otro tipo de dispositivo de pantalla.
[078] La figura 3 es un diagrama de flujo que ilustra una operación de ejemplo de la GPU 10 de acuerdo con uno o más aspectos de esta divulgación. Para fines de ilustración solo, se hace referencia a las figuras 1 y 2.
[079] El motor 20 de copia de memoria de la GPU 10 puede recuperar unos primeros datos de la memoria 30 de sistema que es externa a la GPU 10 a través del bus 24 (40) de sistema. Los primeros datos pueden ser datos de origen, que se refieren a datos almacenados en la memoria 30 de sistema. El motor 20 de copia de memoria puede almacenar los primeros datos en la memoria local 18 (42). El motor 20 de copia de memoria puede no necesitar acceder al bus 24 de sistema para almacenar los primeros datos en la memoria local 18. En algunos ejemplos, el motor 20 de copia de memoria puede modificar los primeros datos y almacenar los primeros datos modificados en la memoria local.
5
10
15
20
25
30
35
40
45
50
[080] El procesador 16 de sombreado de la GPU 10 puede recuperar los primeros datos de la memoria local 18 (44), y puede hacerlo sin acceder al bus 24 de sistema. El procesador 16 de sombreado puede procesar los primeros datos para generar los segundos datos (46). Por ejemplo, el procesador 16 de sombreado puede ejecutar instrucciones de programas de sombreado que realizan operaciones aritméticas en los primeros datos para generar los segundos datos. Los segundos datos pueden considerarse datos de resultados para indicar que son los datos resultantes de las operaciones del procesador 16 de sombreado. El procesador 16 de sombreado puede almacenar los segundos datos en la memoria local 18 (48). En algunos ejemplos, el procesador 16 de sombreado puede no ser capaz de acceder a la memoria 30 de sistema, y solo el motor 20 de copia de memoria puede ser capaz de acceder a la memoria 30 de sistema, aunque los aspectos de esta divulgación no se limitan a ello. Además, en algunos ejemplos, el motor 20 de copia de memoria puede modificar los segundos datos y almacenar los segundos datos modificados en la memoria de sistema.
[081] El motor 20 de copia de memoria puede recuperar los segundos datos de la memoria local 18 (50). El motor 20 de copia de memoria puede almacenar los segundos datos en la memoria 30 de sistema a través del bus 24 (52) de sistema. En algunos ejemplos, descritos anteriormente, el motor de copia de memoria también puede ser operativo para modificar datos. Por ejemplo, el motor 20 de copia de memoria puede modificar los primeros datos almacenados en la memoria local 18 en datos utilizables por un programa de sombreado que se ejecuta en el procesador 16 de sombreado. En otro ejemplo, el motor 20 de copia de memoria puede modificar los segundos datos almacenados en la memoria local 18 en datos utilizables por un programa de sombreado que se ejecuta en el procesador 16 de sombreado.
[082] En uno o más ejemplos, las funciones descritas pueden implementarse en hardware, software, firmware o cualquier combinación de estos. Si se implementan en software, las funciones pueden almacenarse como una o más instrucciones o como código en un medio legible por ordenador. Los medios legibles por ordenador pueden incluir medios de almacenamiento de datos informáticos. Los medios de almacenamiento de datos pueden ser medios disponibles cualesquiera a los que se puede acceder desde uno o más ordenadores o uno o más procesadores para recuperar instrucciones, código y/o estructuras de datos para la implementación de las técnicas descritas en esta divulgación. A modo de ejemplo y no de limitación, dichos medios legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otros dispositivos de almacenamiento en disco óptico, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético, o cualquier otro medio que pueda utilizarse para transportar o almacenar un código de programa deseado en forma de instrucciones o estructuras de datos y al que pueda accederse mediante un ordenador. Los discos, tal como se utilizan en el presente documento, incluyen un disco compacto (CD), un disco láser, un disco óptico, un disco versátil digital (DVD), un disco flexible y un disco Blu- ray, de los cuales los discos flexibles habitualmente reproducen datos magnéticamente, mientras que el resto de los discos reproducen datos ópticamente con láseres. Las combinaciones de los anteriores deberían incluirse también dentro del alcance de los medios legibles por ordenador.
[083] El código puede ser ejecutado por uno o más procesadores, tales como uno o más procesadores de señales digitales (DSP), microprocesadores de propósito general, circuitos integrados específicos de la de aplicación (ASIC), matrices lógicas programables in situ (FPGA) u otros circuitos lógicos integrados o discretos equivalentes. Por consiguiente, el término «procesador», como se utiliza en el presente documento, puede referirse a cualquiera de las estructuras anteriores o a cualquier otra estructura adecuada para la implementación de las técnicas descritas en el presente documento. Asimismo, las técnicas podrían implementarse por completo en uno o más circuitos o elementos lógicos.
[084] Las técnicas de esta divulgación se pueden implementar en una gran diversidad de dispositivos o aparatos, incluidos un teléfono inalámbrico, un circuito integrado (IC) o un conjunto de IC (es decir, un conjunto de chips). En esta divulgación se describen diversos componentes, módulos o unidades para destacar los aspectos funcionales de los dispositivos configurados para realizar las técnicas divulgadas, pero no requieren necesariamente la realización mediante diferentes unidades de hardware. En su lugar, como se ha descrito anteriormente, diversas unidades pueden combinarse en una unidad de hardware o proporcionarse mediante un grupo de unidades de hardware interoperativas, incluidos uno o más procesadores como los descritos anteriormente, junto con software y/o firmware adecuado.
Claims (15)
- REIVINDICACIONES1.1015202530
- 2.35
- 3.
- 4.40
- 5.45Un aparato que comprende:una memoria (30) de sistema que es accesible a través de un bus (24) de sistema; yuna unidad de procesamiento de gráficos (GPU) que comprende:una memoria local (18); un motor (20) de copia de memoria configurado para recuperar unos primeros datos de la memoria de sistema a través del bus de sistema, realizar una o más tareas de modificación en los primeros datos, y almacenar los primeros datos modificados en la memoria local; y,un procesador (16) de sombreado configurado para recuperar los primeros datos modificados de la memoria local, procesar los primeros datos modificados para generar segundos datos y almacenar los segundos datos en la memoria local,en el que el motor de copia de memoria está configurado además para:recuperar los segundos datos de la memoria local, realizar una o más tareas de modificación en los segundos datos, y almacenar los segundos datos modificados en la memoria de sistema a través del bus de sistema,; eindicar al procesador de sombreado que el motor de copia de memoria ha terminado al menos una de almacenamiento de los primeros datos modificados en la memoria local, y almacenamiento de los segundos datos modificados en la memoria de sistema,estando el aparato caracterizado por que las tareas de modificación comprenden al menos una de recopilación y compactación de datos, conversión de color de datos, compresión de datos, descompresión de datos, o conversión de datos generados por un programa de sombreado en una forma de datos utilizable por otro programa de sombreado.El aparato de la reivindicación 1, en el que el motor de copia de memoria, el procesador de sombreado, y la memoria local están separados entre sí y en un chip de la GPU.El aparato de la reivindicación 1, en el que los primeros datos modificados comprenden datos de origen y los segundos datos comprenden datos de resultados resultantes del procesamiento de los datos de origen.El aparato de la reivindicación 1, en el que el motor de copia de memoria está implementado como hardware o software que se ejecuta en hardware, y en el que el hardware está separado del procesador de sombreado y en un chip de la GPU.El aparato de la reivindicación 1, en el que el procesador de sombreado es al menos uno de no configurado para recuperar los primeros datos de la memoria de sistema, y no configurado para almacenar los segundos datos en la memoria de sistema.
- 6. El aparato de la reivindicación 1, en el que el procesador de sombreado está configurado para ejecutar instrucciones para operaciones aritméticas para procesar los primeros datos modificados para generar los segundos datos.50
- 7. El aparato de la reivindicación 1, en el que el aparato comprende al menos uno de un reproductor multimedia, un descodificador, un teléfono inalámbrico, un asistente digital personal (PDA), un ordenador de escritorio, un ordenador portátil, una consola de juegos, una unidad de videoconferencia, y un dispositivo informático de tableta.55
- 8. El aparato de la reivindicación 1, en el que el motor de copia de memoria está configurado para recuperar unos terceros datos de o almacenar los terceros datos en la memoria de sistema simultáneamente con el procesador de sombreado recuperando unos cuartos datos de la memoria local, procesando los cuatros datos o almacenando los cuartos datos en la memoria local.60
- 9. Un procedimiento que comprende:recuperar, (40) con un motor de copia de memoria de una unidad de procesamiento de gráficos (GPU), primeros datos de una memoria de sistema que es externa a la GPU a través de un bus de sistema;realizar, con el motor de copia de memoria de la GPU, una o más tareas de modificación en los primeros510152025303540455055datos;almacenar, (42) con el motor de copia de memoria de la GPU, los primeros datos modificados en una memoria local de la GPU;recuperar, (44) con un procesador de sombreado de la GPU, los primeros datos modificados de la memoria local;procesar, (46) con el procesador de sombreado de la GPU, los primeros datos modificados para generar unos segundos datos;almacenar, (48) con el procesador de sombreado de la GPU, los segundos datos en la memoria local;recuperar, (50) con el motor de copia de memoria de la GPU, los segundos datos de la memoria local;realizar, con el motor de copia de memoria de la GPU, una o más de las tareas de modificación en los segundos datos;almacenar, (52) con el motor de copia de memoria de la GPU, los segundos datos modificados en la memoria de sistema a través del bus de sistema; eindicar, con el motor de copia de memoria al procesador de sombreado, que el motor de copia de memoria ha terminado al menos una de almacenamiento de los primeros datos modificados en la memoria local, y almacenamiento de los segundos datos modificados en la memoria de sistema,caracterizado por que las tareas de modificación comprenden al menos una de recopilación y compactación de datos, conversión de color de datos, compresión de datos, descompresión de datos o conversión de datos generados por un programa de sombreado en un formato de datos utilizable por otro programa de sombreado.
- 10. El procedimiento de la reivindicación 9, en el que el motor de copia de memoria, el procesador de sombreado, y la memoria local están separados entre sí y en un chip de la GPU.
- 11. El procedimiento de la reivindicación 9, en el que los primeros datos modificados comprenden datos de origen y los segundos datos comprenden datos de resultados resultantes del procesamiento de los datos de origen.
- 12. El procedimiento de la reivindicación 9, en el que el procesador de sombreado es al menos uno de no configurado para recuperar los primeros datos de la memoria de sistema, y no configurado para almacenar los segundos datos en la memoria de sistema.
- 13. El procedimiento de la reivindicación 9, en el que procesar los primeros datos modificados para generar los segundos datos comprende ejecutar instrucciones para operaciones aritméticas para procesar los primeros datos modificados para generar los segundos datos.
- 14. El procedimiento de la reivindicación 9, que comprende además:recuperar, con el motor de copia de memoria, unos terceros datos de o almacenar los terceros datos en la memoria de sistema; ysimultáneamente, con el procesador de sombreado, recuperar unos cuartos datos de la memoria local, procesar los cuartos datos o almacenar los cuartos datos en la memoria local.
- 15. Un medio de almacenamiento no transitorio legible por ordenador que comprende instrucciones que hacen que una unidad de procesamiento de gráficos (GPU) realice el procedimiento de acuerdo con una cualquiera de las reivindicaciones 9 a 14.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201113227363 | 2011-09-07 | ||
US13/227,363 US8941655B2 (en) | 2011-09-07 | 2011-09-07 | Memory copy engine for graphics processing |
PCT/US2012/050613 WO2013036358A1 (en) | 2011-09-07 | 2012-08-13 | Memory copy engine for graphics processing |
Publications (1)
Publication Number | Publication Date |
---|---|
ES2688353T3 true ES2688353T3 (es) | 2018-11-02 |
Family
ID=46705060
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES12748636.3T Active ES2688353T3 (es) | 2011-09-07 | 2012-08-13 | Motor de copia de memoria para procesamiento de gráficos |
Country Status (8)
Country | Link |
---|---|
US (1) | US8941655B2 (es) |
EP (1) | EP2754055B1 (es) |
JP (1) | JP5792391B2 (es) |
KR (1) | KR101564859B1 (es) |
CN (1) | CN103782280B (es) |
ES (1) | ES2688353T3 (es) |
HU (1) | HUE040473T2 (es) |
WO (1) | WO2013036358A1 (es) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8924752B1 (en) | 2011-04-20 | 2014-12-30 | Apple Inc. | Power management for a graphics processing unit or other circuit |
US9378560B2 (en) | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
US9390461B1 (en) | 2012-05-08 | 2016-07-12 | Apple Inc. | Graphics hardware mode controls |
US10176621B2 (en) | 2013-06-10 | 2019-01-08 | Sony Interactive Entertainment Inc. | Using compute shaders as front end for vertex shaders |
US10096079B2 (en) | 2013-06-10 | 2018-10-09 | Sony Interactive Entertainment Inc. | Fragment shaders perform vertex shader computations |
US10102603B2 (en) | 2013-06-10 | 2018-10-16 | Sony Interactive Entertainment Inc. | Scheme for compressing vertex shader output parameters |
US10062135B2 (en) * | 2013-07-31 | 2018-08-28 | National Technology & Engineering Solutions Of Sandia, Llc | Graphics processing unit management system for computed tomography |
US20150109315A1 (en) * | 2013-10-23 | 2015-04-23 | Nvidia Corporation | System, method, and computer program product for mapping tiles to physical memory locations |
US9612884B2 (en) * | 2014-12-04 | 2017-04-04 | Advanced Micro Devices, Inc. | Memory management in graphics and compute application programming interfaces |
US9779469B2 (en) * | 2015-08-17 | 2017-10-03 | Qualcomm Incorporated | Register spill management for general purpose registers (GPRs) |
US20170371797A1 (en) * | 2016-06-24 | 2017-12-28 | Qualcomm Incorporated | Pre-fetch mechanism for compressed memory lines in a processor-based system |
US10223822B2 (en) * | 2016-12-22 | 2019-03-05 | Apple Inc. | Mid-render compute for graphics processing |
US10331532B2 (en) * | 2017-01-19 | 2019-06-25 | Qualcomm Incorporated | Periodic non-intrusive diagnosis of lockstep systems |
US10467796B2 (en) | 2017-04-17 | 2019-11-05 | Intel Corporation | Graphics system with additional context |
JP7080698B2 (ja) * | 2018-03-30 | 2022-06-06 | 株式会社デンソー | 情報処理装置 |
US11734873B2 (en) | 2019-12-13 | 2023-08-22 | Sony Group Corporation | Real-time volumetric visualization of 2-D images |
KR20230138777A (ko) * | 2022-03-24 | 2023-10-05 | 삼성전자주식회사 | 데이터 재구성가능한 스토리지 장치, 전자 시스템 및 그 동작방법 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7068272B1 (en) * | 2000-05-31 | 2006-06-27 | Nvidia Corporation | System, method and article of manufacture for Z-value and stencil culling prior to rendering in a computer graphics processing pipeline |
US7053901B2 (en) | 2003-12-11 | 2006-05-30 | Nvidia Corporation | System and method for accelerating a special purpose processor |
US7821520B1 (en) | 2004-12-10 | 2010-10-26 | Nvidia Corporation | Fragment processor having dual mode register file |
US8427496B1 (en) * | 2005-05-13 | 2013-04-23 | Nvidia Corporation | Method and system for implementing compression across a graphics bus interconnect |
CN101156176A (zh) * | 2005-10-25 | 2008-04-02 | 三菱电机株式会社 | 图像处理装置 |
JP4439491B2 (ja) | 2006-05-24 | 2010-03-24 | 株式会社ソニー・コンピュータエンタテインメント | マルチグラフィックスプロセッサシステム、グラフィックスプロセッサおよびデータ転送方法 |
US8736626B2 (en) | 2008-08-26 | 2014-05-27 | Matrox Graphics Inc. | Method and system for cryptographically securing a graphics system |
US20100315421A1 (en) * | 2009-06-16 | 2010-12-16 | Disney Enterprises, Inc. | Generating fog effects in a simulated environment |
US20100332792A1 (en) * | 2009-06-30 | 2010-12-30 | Advanced Micro Devices, Inc. | Integrated Vector-Scalar Processor |
US8484647B2 (en) | 2009-07-24 | 2013-07-09 | Apple Inc. | Selectively adjusting CPU wait mode based on estimation of remaining work before task completion on GPU |
US8675003B2 (en) | 2009-09-09 | 2014-03-18 | Advanced Micro Devices, Inc. | Efficient data access for unified pixel interpolation |
US8780122B2 (en) | 2009-09-16 | 2014-07-15 | Nvidia Corporation | Techniques for transferring graphics data from system memory to a discrete GPU |
-
2011
- 2011-09-07 US US13/227,363 patent/US8941655B2/en active Active
-
2012
- 2012-08-13 EP EP12748636.3A patent/EP2754055B1/en active Active
- 2012-08-13 ES ES12748636.3T patent/ES2688353T3/es active Active
- 2012-08-13 WO PCT/US2012/050613 patent/WO2013036358A1/en active Application Filing
- 2012-08-13 CN CN201280043520.XA patent/CN103782280B/zh active Active
- 2012-08-13 KR KR1020147007769A patent/KR101564859B1/ko active IP Right Grant
- 2012-08-13 HU HUE12748636A patent/HUE040473T2/hu unknown
- 2012-08-13 JP JP2014529730A patent/JP5792391B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2014529831A (ja) | 2014-11-13 |
KR101564859B1 (ko) | 2015-10-30 |
EP2754055A1 (en) | 2014-07-16 |
WO2013036358A1 (en) | 2013-03-14 |
US8941655B2 (en) | 2015-01-27 |
CN103782280A (zh) | 2014-05-07 |
EP2754055B1 (en) | 2018-06-27 |
US20130057562A1 (en) | 2013-03-07 |
CN103782280B (zh) | 2016-04-06 |
KR20140053370A (ko) | 2014-05-07 |
HUE040473T2 (hu) | 2019-03-28 |
JP5792391B2 (ja) | 2015-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2688353T3 (es) | Motor de copia de memoria para procesamiento de gráficos | |
KR102695571B1 (ko) | 머신 러닝 워크로드들에서 텐서 오브젝트 지원을 위한 방법들 및 장치 | |
US9384522B2 (en) | Reordering of command streams for graphical processing units (GPUs) | |
US9087410B2 (en) | Rendering graphics data using visibility information | |
US10297003B2 (en) | Efficient saving and restoring of context information for context switches | |
KR102003655B1 (ko) | 그래픽 프로세싱에서 셰도우 레이들에 대한 트리 횡단을 위한 시작 노드 결정 | |
US10242481B2 (en) | Visibility-based state updates in graphical processing units | |
KR20140109431A (ko) | 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛 | |
EP3350766B1 (en) | Storing bandwidth-compressed graphics data | |
CN107038740B (zh) | 图形处理设备和执行图形管线的方法 | |
CN107408311A (zh) | 混合2d/3d图形呈现 | |
US11037271B2 (en) | Dynamic rendering for foveated rendering | |
US11829439B2 (en) | Methods and apparatus to perform matrix multiplication in a streaming processor | |
US20140354660A1 (en) | Command instruction management | |
US20200051214A1 (en) | Dynamic rendering for foveated rendering | |
US9779471B2 (en) | Transparent pixel format converter | |
US9207936B2 (en) | Graphic processor unit and method of operating the same | |
WO2023051590A1 (zh) | 一种渲染格式选择方法及其相关设备 |