ES2873896T3 - Canalización de recursos de cálculo en unidad de procesamiento de gráficos de propósito general - Google Patents

Canalización de recursos de cálculo en unidad de procesamiento de gráficos de propósito general Download PDF

Info

Publication number
ES2873896T3
ES2873896T3 ES19178559T ES19178559T ES2873896T3 ES 2873896 T3 ES2873896 T3 ES 2873896T3 ES 19178559 T ES19178559 T ES 19178559T ES 19178559 T ES19178559 T ES 19178559T ES 2873896 T3 ES2873896 T3 ES 2873896T3
Authority
ES
Spain
Prior art keywords
data
parallel processing
processing units
local memory
memory buffers
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
ES19178559T
Other languages
English (en)
Inventor
Alexei V Bourd
Andrew Gruber
Aleksandra L Krstic
Robert J Simpson
Colin Sharp
Chun Yu
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2873896T3 publication Critical patent/ES2873896T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Image Input (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

Una unidad de procesamiento de gráficos de propósito general, GPGPU, (6) que comprende: dos o más unidades de procesamiento en paralelo (42A-42D) configuradas para operar selectivamente como fases de una canalización de procesamiento (10); uno o más búferes de memoria local (44A-44C), estando conectado cada uno de los búferes entre al menos dos de las unidades de procesamiento en paralelo, configurados para contener datos para su transferencia entre las unidades de procesamiento en paralelo, en la que cada uno del uno o más búferes de memoria local está directamente conectado entre al menos dos de las unidades de procesamiento en paralelo en la canalización de procesamiento; y, una unidad de control (30) configurada para configurar las dos o más unidades de procesamiento en paralelo para operar selectivamente como fases de la canalización de procesamiento, configurar una o más de las unidades de procesamiento en paralelo para enviar datos a uno o más búferes de memoria local, y configurar una o más de las unidades de procesamiento en paralelo para recibir datos de uno o más búferes de memoria local, en la que la unidad de control conserva la secuencia de datos dentro de la canalización de procesamiento, y en la que la unidad de control está configurada para: ejecutar un contador de determinación de secuencia tras una entrada de un conjunto de datos en al menos una de las unidades de procesamiento en paralelo para registrar una secuencia de subprocesos de datos del conjunto de datos; y ejecutar una barrera de imposición de secuencia tras la salida del conjunto de datos de la al menos una de las unidades de procesamiento en paralelo para liberar los subprocesos de datos del conjunto de datos de la unidad de procesamiento en paralelo en la misma secuencia que la registrada por el contador de determinación de secuencia.

Description

DESCRIPCIÓN
Canalización de recursos de cálculo en unidad de procesamiento de gráficos de propósito general
CAMPO TÉCNICO
[0001] La presente divulgación se refiere al procesamiento de datos y, más en particular, al procesamiento de datos usando una unidad de procesamiento de gráficos de propósito general (GPGPU).
ANTECEDENTES
[0002] Las unidades de procesamiento de gráficos de propósito general (GPGPU) son versiones generalizadas de las unidades de procesamiento de gráficos diseñadas originalmente para procesar gráficos 2D y 3D. Las GPGPU extienden el procesamiento en paralelo de alta potencia de las GPU a las aplicaciones de procesamiento de datos de propósito general más allá del procesamiento de gráficos. Como ejemplo, una GPU puede estar configurada para procesar datos de acuerdo con la especificación OpenCL que da acceso a determinadas aplicaciones a la unidad de procesamiento de gráficos para cálculo no gráfico. La "especificación OpenCL, versión 1.1" se publicó en junio de 2010 y está disponible públicamente.
[0003] Las GPGPU incluyen unidades de procesamiento programables dispuestas en una estructura altamente paralela que no permite compartir ni sincronizar datos entre las unidades de procesamiento. En cambio, las unidades de procesamiento individuales solo intercambian conjuntos de datos con una memoria externa. Debido a esta estructura, las aplicaciones para las GPGPU están limitadas a las que son inherentemente paralelas. Las arquitecturas GPGPU pueden estar tan altamente paralelizadas que impiden la implementación eficaz de los cálculos basados en canalización. Esta limitación se extiende al procesamiento de gráficos 2D y 3D que usa el procesamiento en paralelo en cada fase de procesamiento, pero requiere la canalización de recursos de cálculo entre las fases.
[0004] El documento US 2008/109795 A1 describe una unidad de procesamiento de gráficos de propósito general, GPGPU, que comprende una pluralidad de motores de procesamiento en paralelo, cada motor de procesamiento puede incluir un conjunto idéntico de unidades funcionales que pueden ser canalizadas. Cada motor de procesamiento usa espacio en un archivo de registro local para almacenar sus datos de entrada locales, resultados intermedios y similares.
[0005] El documento US 5355508 A describe un sistema de procesamiento de datos en paralelo que combina una unidad SIMD con una unidad MIMD y comparte un bus común, memoria y controlador de sistema.
[0006] El documento US 2010/079454 A1 describe un procesador de gráficos que divide los recursos de procesamiento dentro de una GPU en conjuntos para realizar diferentes operaciones de teselación con parámetros de vértice y teselación que se encaminan directamente de un recurso de procesamiento a otro en lugar de almacenarse en memoria.
BREVE EXPLICACIÓN
[0007] La invención se define en las reivindicaciones independientes. Las características preferentes se definen en mayor detalle en las reivindicaciones dependientes. La presente divulgación describe técnicas para extender la arquitectura de una unidad de procesamiento de gráficos de propósito general (GPGPU) con unidades de procesamiento en paralelo para permitir un procesamiento eficaz de aplicaciones basadas en canalización. Por ejemplo, las técnicas pueden incluir configurar búferes de memoria local conectados a unidades de procesamiento en paralelo que operan como fases de una canalización de procesamiento para contener datos para su transferencia entre las unidades de procesamiento en paralelo. Los búferes de memoria local permiten una transferencia directa de datos en chip de baja potencia entre las unidades de procesamiento en paralelo. Los búferes de memoria local pueden incluir mecanismos de control de flujo de datos basados en hardware para permitir una transferencia de datos entre las unidades de procesamiento en paralelo. De esta forma, los datos se pueden pasar directamente de una unidad de procesamiento en paralelo a la siguiente unidad de procesamiento en paralelo en la canalización de procesamiento por medio de los búferes de memoria local, transformando de hecho las unidades de procesamiento en paralelo en una serie de fases de canalización. Los búferes de memoria local pueden reducir significativamente el uso de ancho de banda de memoria reduciendo o eliminando la necesidad de que cada una de las unidades de procesamiento en paralelo de la canalización de procesamiento realice llamadas a la memoria del sistema para recuperar y/o almacenar datos.
[0008] Las técnicas pueden incluir, en algunos ejemplos, configurar cada uno de los búferes de memoria local para que tengan una anchura requerida para que el búfer contenga datos emitidos desde una unidad de procesamiento en paralelo anterior. Por ejemplo, los búferes de memoria local pueden ser búferes basados en hardware que son configurables para intercambiar profundidad por anchura. Además, en algunos ejemplos, las técnicas pueden incluir la ejecución de barreras de secuenciación para mantener la secuencia de datos dentro de la canalización de procesamiento. Por ejemplo, una secuencia de los subprocesos de datos de un conjunto de datos se puede registrar tras la entrada del conjunto de datos en una unidad de procesamiento en paralelo y, después de que el conjunto de datos se haya procesado, los subprocesos de datos del conjunto de datos se pueden liberar de la unidad de procesamiento en paralelo en la misma secuencia que la registrada.
[0009] En un ejemplo, la presente divulgación está dirigida a una GPGPU que comprende dos o más unidades de procesamiento en paralelo configuradas para operar selectivamente como fases de una canalización de procesamiento, y uno o más búferes de memoria local, estando conectado cada uno de los búferes entre dos de las unidades de procesamiento en paralelo, configurados para contener datos para su transferencia entre las unidades de procesamiento en paralelo.
[0010] En otro ejemplo, la presente divulgación está dirigida a un procedimiento de procesamiento de datos con una GPGPU, que comprende configurar dos o más unidades de procesamiento en paralelo para operar selectivamente como fases de una canalización de procesamiento, y configurar uno o más búferes de memoria local, estando conectado cada uno de los búferes entre dos de las unidades de procesamiento en paralelo, para contener datos para su transferencia entre las unidades de procesamiento en paralelo.
[0011] En un ejemplo adicional, la presente divulgación está dirigida a una GPGPU que comprende medios para configurar dos o más unidades de procesamiento en paralelo para operar selectivamente como fases de una canalización de procesamiento, y medios para configurar uno o más búferes de memoria local, estando conectado cada uno de los búferes entre dos de las unidades de procesamiento en paralelo, para contener datos para su transferencia entre las unidades de procesamiento en paralelo.
[0012] Los detalles de uno o más ejemplos se exponen en los dibujos adjuntos y 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
[0013]
La FIG. 1 es un diagrama de bloques que ilustra un dispositivo que incluye una unidad de procesamiento de gráficos de propósito general (GPGPU) que es configurable para implementar una canalización de procesamiento.
La FIG. 2 es un diagrama de bloques que ilustra una GPGPU convencional que incluye unidades de procesamiento en paralelo configuradas para realizar procesamiento en paralelo.
La FIG. 3 es un diagrama de bloques que ilustra un ejemplo de la GPGPU de la FIG. 1 que incluye unidades de procesamiento en paralelo y búferes de memoria local configurados para implementar una canalización de procesamiento.
La FIG. 4 es un diagrama de flujo que ilustra un ejemplo de funcionamiento de la GPGPU que incluye búferes de memoria local conectados a unidades de procesamiento en paralelo para transferir datos entre las unidades de procesamiento en paralelo como fases de una canalización de procesamiento.
La FIG. 5 es un diagrama de flujo que ilustra un ejemplo de funcionamiento para mantener una secuencia de datos dentro de una canalización de procesamiento implementada por unidades de procesamiento en paralelo y búferes de memoria local de la GPGPU.
DESCRIPCIÓN DETALLADA
[0014] La presente divulgación describe técnicas para extender la arquitectura de una unidad de procesamiento de gráficos de propósito general (GPGPU) con unidades de procesamiento en paralelo para permitir un procesamiento eficaz de aplicaciones basadas en canalización. Específicamente, las técnicas incluyen configurar búferes de memoria local conectados a unidades de procesamiento en paralelo que funcionan como fases de una canalización de procesamiento para contener datos para transferencia entre las unidades de procesamiento en paralelo. Los búferes de memoria local permiten una transferencia directa de datos en chip de baja potencia entre las unidades de procesamiento en paralelo. Los búferes de memoria local pueden incluir mecanismos de control de flujo de datos basados en hardware para permitir una transferencia de datos entre las unidades de procesamiento en paralelo. De esta forma, los datos se pueden pasar directamente de una unidad de procesamiento en paralelo a la siguiente unidad de procesamiento en paralelo en la canalización de procesamiento por medio de los búferes de memoria local, transformando de hecho las unidades de procesamiento en paralelo en una serie de fases de canalización. Los búferes de memoria local pueden reducir significativamente el uso de ancho de banda de memoria reduciendo o eliminando la necesidad de que cada una de las unidades de procesamiento en paralelo de la canalización de procesamiento realice llamadas a la memoria del sistema para recuperar y/o almacenar datos.
[0015] La FIG. 1 es un diagrama de bloques que ilustra un dispositivo 2 que incluye una unidad de procesamiento de gráficos de propósito general (GPGPU) 6 que es configurable para implementar una canalización de procesamiento 10. Como se describe en más detalle a continuación, la canalización de procesamiento 10 de la GPGPU 6 incluye dos o más unidades de procesamiento en paralelo configuradas para funcionar como fases de la canalización de procesamiento 10 y uno o más búferes de memoria local configurados para contener datos para transferir entre las unidades de procesamiento en paralelo para implementar la canalización de procesamiento 10.
[0016] El dispositivo 2 es capaz de transmitir y recibir datos, admitiendo una variedad de aplicaciones de procesamiento de datos y facilitando datos procesados para su presentación a un usuario. Los ejemplos del dispositivo 2 incluyen, pero no se limitan a, teléfonos móviles inalámbricos, asistentes digitales personales (PDA), dispositivos de videojuegos, consolas de videojuegos, unidades de videoconferencia, ordenadores portátiles, ordenadores de escritorio, tabletas, descodificadores de televisión, dispositivos de grabación digital, reproductores de medios digitales y similares.
[0017] En el ejemplo ilustrado en la FIG. 1, el dispositivo 2 incluye un procesador principal 4, una GPGPU 6 con una canalización de procesamiento 10, una pantalla 8, un altavoz 10, una memoria de dispositivo 12, un módulo transceptor 14 y un dispositivo de entrada de usuario 16. En otros casos, por ejemplo, cuando el dispositivo 2 es un ordenador de escritorio, la pantalla 8, el altavoz 10 y/o la interfaz de usuario 16 pueden ser externos al dispositivo 2. El procesador principal 4 y la GPGPU 6 pueden comprender procesadores de señales digitales (DSP), microprocesadores de propósito general, circuitos integrados específicos de la aplicación (ASIC), matrices de puertas programables in situ (FPGA) u otros circuitos lógicos integrados o discretos equivalentes.
[0018] El procesador principal 4 puede ejecutar una o más aplicaciones. Los ejemplos de las aplicaciones incluyen navegadores web, aplicaciones de correo electrónico, hojas de cálculo, videojuegos, aplicaciones de edición de audio y vídeo, u otras aplicaciones que generan una salida visual y/o de audio para presentar a un usuario por medio de la pantalla 8 y/o el altavoz 10. La GPGPU 6 también puede ejecutar una o más aplicaciones. La GPGPU 6 puede ejecutar aplicaciones en apoyo de las aplicaciones ejecutadas por el procesador principal 4. Específicamente, la GPGPU 6 puede ejecutar aplicaciones para preparar datos para la presentación a un usuario por medio de la pantalla 8 y/o el altavoz 10.
[0019] La GPGPU 6 es una versión generalizada de una unidad de procesamiento de gráficos (GPU) que extiende el procesamiento en paralelo de alta potencia de la GPU a aplicaciones de procesamiento de datos de propósito general más allá del procesamiento de gráficos. Como ejemplo, la GPGPU 6 puede estar configurada para procesar datos de acuerdo con la especificación OpenCL que da a determinadas aplicaciones acceso a una GPU para cálculo no gráfico. Las GPGPU convencionales, descritas con más detalle a continuación con respecto a la FIG. 2, incluyen unidades de procesamiento programables dispuestas en una estructura altamente paralela que impide la implementación eficaz de aplicaciones basadas en canalización. Esta limitación se extiende a las aplicaciones de procesamiento de gráficos 2D y 3D que usan procesamiento en paralelo en cada fase de procesamiento, pero requieren canalización de recursos de cálculo entre las fases.
[0020] Las aplicaciones basadas en canalización requieren que se procese un conjunto de datos en fases, de modo que una primera fase está configurada para procesar un conjunto de datos original, una segunda fase está configurada para procesar la salida de la primera fase, una tercera etapa está configurada para procesar la salida de la tercera fase, y así sucesivamente para el número de fases requeridas para la aplicación. La implementación más eficaz de las aplicaciones basadas en canalización consiste en pasar los conjuntos de datos directamente de una fase a la siguiente fase en la canalización de procesamiento. Una implementación menos eficaz de las aplicaciones basadas en canalización consiste en que cada fase de la canalización de procesamiento recupere los datos procesados por una fase anterior desde una memoria fuera de chip y a continuación almacene nuevamente los datos procesados en la memoria fuera de chip para la siguiente fase. Esta implementación menos eficaz sigue requiriendo mecanismos de secuenciación para asegurar que cada fase de la canalización de procesamiento procesa el conjunto de datos en la secuencia correcta. Las GPGPU convencionales no se pueden configurar para implementar canalizaciones de procesamiento o incluso los mecanismos de secuenciación necesarios para realizar aplicaciones basadas en canalización.
[0021] De acuerdo con las técnicas de la presente divulgación, y a diferencia de las GPGPU convencionales, en algunos ejemplos, la GPGPU 6 es configurable para implementar la canalización de procesamiento 10 para ejecutar aplicaciones basadas en canalización, que incluyen las aplicaciones de procesamiento de gráficos 2D y 3D. Como se describe en más detalle a continuación con respecto a la FIG. 3, la canalización de procesamiento 10 de la GPGPU 6 incluye dos o más unidades de procesamiento en paralelo configuradas para funcionar como fases de la canalización de procesamiento 10 y uno o más búferes de memoria local configurados para contener datos para la transferencia entre las unidades de procesamiento en paralelo para implementar una canalización de procesamiento 10. Los búferes de memoria local incluidos en la canalización de procesamiento 10 permiten la transferencia directa de datos en chip de baja potencia entre las unidades de procesamiento en paralelo. De esta manera, los datos se pueden pasar directamente desde una unidad de procesamiento en paralelo a la siguiente unidad de procesamiento en paralelo de la canalización de procesamiento 10 por medio de los búferes de memoria local, transformando de hecho las unidades de procesamiento en paralelo en una serie de fases de canalización. La implementación de la canalización de procesamiento 10 puede reducir significativamente el uso del ancho de banda de memoria reduciendo o eliminando la necesidad de que cada una de las unidades de procesamiento en paralelo de la canalización de procesamiento 10 realice llamadas a la memoria del dispositivo 12, localizada fuera del chip de la GPGPU 6, para recuperar y/o almacenar datos.
[0022] Las técnicas de la presente divulgación pueden incluir configurar cada uno de los búferes de memoria local dentro de la canalización de procesamiento 10 para que tenga una anchura requerida para que el búfer contenga datos facilitados desde una unidad de procesamiento en paralelo anterior. Por ejemplo, los búferes de memoria local pueden ser búferes basados en hardware que son configurables para intercambiar profundidad por anchura. Además, las técnicas incluyen la ejecución de barreras de secuenciación para mantener una secuencia de datos dentro de la canalización de procesamiento 10. Por ejemplo, una secuencia de los subprocesos de datos de un conjunto de datos se puede registrar tras la entrada del conjunto de datos en una unidad de procesamiento en paralelo dentro de la canalización de procesamiento 10 y, después de que el conjunto de datos se haya procesado, los subprocesos de datos del conjunto de datos se pueden liberar de la unidad de procesamiento en paralelo en la misma secuencia que la registrada.
[0023] Por ejemplo, cuando la GPGPU 6 está configurada para implementar la canalización de procesamiento 10, la GPGPU 6 puede ejecutar aplicaciones de procesamiento de gráficos 2D y 3D basadas en canalización en apoyo del navegador web, correo electrónico, videojuegos y aplicaciones de edición de vídeo ejecutadas por el procesador principal 4. Como otro ejemplo, cuando la GPGPU 6 no está configurada para implementar la canalización de procesamiento 10, la GPGPU 6 puede ejecutar aplicaciones que funcionan eficazmente en una estructura altamente paralela, tales como aplicaciones de búsqueda basadas en imágenes, generación/extracción de descriptor de imágenes, ajustes radiométricos de imágenes, procesamiento de audio y otras operaciones realizadas típicamente por el procesador principal 4.
[0024] En algunos casos, la GPGPU 6 puede ejecutar aplicaciones en apoyo de aplicaciones de procesamiento de gráficos basadas en canalización. La propia GPGPU 6 puede ejecutar aplicaciones de procesamiento de gráficos basadas en canalización usando la canalización de procesamiento 10 o una GPU separada incluida en el dispositivo 2. Por ejemplo, la GPGPU 6 puede ejecutar aplicaciones de efectos especiales de imágenes, generación de vértices para una canalización de GPU y aplicaciones de posprocesamiento de gráficos usando un búfer de color de una canalización de GPU.
[0025] La pantalla 8 y el altavoz 10 comprenden dispositivos de salida para el dispositivo 2. En algunos casos, la pantalla 8 y el altavoz 10 se pueden usar conjuntamente para presentar una salida tanto visual como de audio a un usuario. En otros casos, la pantalla 8 y el altavoz 10 se pueden usar por separado para presentar la salida al usuario. Como ejemplo, la pantalla 8 puede comprender una pantalla de cristal líquido (LCD), una pantalla de tubo de rayos catódicos (CRT), una pantalla de plasma u otro tipo de dispositivo de visualización.
[0026] El dispositivo de entrada de usuario 16 comprende uno o más dispositivos de entrada de usuario para el dispositivo 2. Por ejemplo, el dispositivo de entrada de usuario 16 puede incluir una bola de seguimiento, un ratón, un teclado, un micrófono y/u otros tipos de dispositivos de entrada. En algunos ejemplos, el dispositivo de entrada de usuario 16 puede comprender una pantalla táctil y se puede incorporar como parte de la pantalla 8. Un usuario puede seleccionar la una o más aplicaciones que el procesador principal 4 y/o la GPGPU 6 van a ejecutar, por medio del dispositivo de entrada de usuario 16.
[0027] El procesador principal 4 puede descargar datos que el procesador principal 4 y/o la GPGPU 6 van a procesar, por medio del módulo transceptor 14. El procesador principal 4 también puede descargar la una o más aplicaciones ejecutadas por el procesador principal 4 y/o la GPGPU 6 por medio del módulo transceptor 14. El módulo de transceptor 14 puede incluir circuitos para permitir la comunicación inalámbrica o alámbrica entre el dispositivo 2 y otro dispositivo o una red. El módulo de transceptor 14 puede incluir moduladores, desmoduladores, amplificadores y otros de dichos circuitos para comunicación alámbrica o inalámbrica.
[0028] La memoria de dispositivo 12 puede almacenar datos que el procesador principal 4 y/o la GPGPU 6 van a procesar, y también puede almacenar datos procesados recibidos desde el procesador principal 4 y/o la GPGPU 6. Además, la memoria de dispositivo 12 puede almacenar la una o más aplicaciones ejecutadas por el procesador principal 4 y/o la GPGPU 6. La memoria de dispositivo 12 puede comprender uno o más medios de almacenamiento legibles por ordenador. Los ejemplos de memoria de dispositivo 12 incluyen, pero no se limitan 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 se pueda usar para transportar o almacenar un código de programa deseado en forma de instrucciones o estructuras de datos y al que se pueda acceder mediante un ordenador o un procesador.
[0029] La FIG. 2 es un diagrama de bloques que ilustra una GPGPU 18 convencional que incluye unidades de procesamiento en paralelo 22A-22D configuradas para realizar un procesamiento en paralelo. En algunos ejemplos, la GPGPU 18 puede estar incluida dentro de un dispositivo sustancialmente similar al dispositivo 2 descrito anteriormente con referencia a la FIG. 1. La GPGPU 18 incluye una unidad de distribución de datos 20, unas unidades de procesamiento en paralelo 22A-22D ("unidades de procesamiento en paralelo 22") y un bus 24 para conectar las unidades de procesamiento en paralelo 22 a la memoria de dispositivo 26 externa a la GPGPU 18.
[0030] La GPGPU convencional 18 es una versión generalizada de una GPU diseñada originalmente para procesar gráficos 2D y 3D. La GPGPU 18 es capaz de extender el procesamiento en paralelo de alta potencia de una GPU a aplicaciones de procesamiento de propósito general más allá del procesamiento de gráficos. Como ejemplo, la GPGPU 18 puede estar configurada para procesar datos de acuerdo con la especificación OpenCL. La especificación OpenCL da acceso a determinadas aplicaciones a una GPU para cálculo no gráfico. En terminología OpenCL, los subprocesos de datos se denominan elementos de trabajo, los conjuntos de datos se denominan grupos de trabajo, las unidades de procesamiento se denominan unidades de cálculo y una colección de unidades de procesamiento se denomina grupo de cálculo.
[0031] Una tarea típica de GPU es altamente paralela y no requiere intercambio de información entre subprocesos de datos de un conjunto de datos que se procesa dentro de una unidad de procesamiento dada. Por ejemplo, los valores calculados para un vértice son independientes de los valores calculados para un vértice diferente, y los valores calculados para un píxel son independientes de los valores calculados para un píxel diferente. A fin de imitar la naturaleza paralela de una GPU, la GPGPU 18 está diseñada para incluir unidades de procesamiento en paralelo 22 dispuestas en una estructura altamente paralela.
[0032] La arquitectura de la GPGPU 18 es tan altamente paralela que no permite compartir ni sincronizar datos entre unidades de procesamiento en paralelo 22. En funcionamiento, la unidad de distribución de datos 20 asigna un conjunto de datos almacenado en la memoria de dispositivo 26 a cada una de las unidades de procesamiento en paralelo 22. Durante el procesamiento, se pueden compartir y sincronizar, dentro de cada una de las unidades de procesamiento en paralelo 22, subprocesos de datos de un conjunto de datos asignado. Sin embargo, no se pueden compartir ni sincronizar subprocesos de datos de diferentes conjuntos de datos entre unidades de procesamiento en paralelo 22. En su lugar, cada una de las unidades de procesamiento en paralelo 22 solo intercambia los conjuntos de datos asignados con la memoria de dispositivo 26 por medio del bus 24. Más específicamente, cada una de las unidades de procesamiento en paralelo 22 recupera los conjuntos de datos asignados para el procesamiento desde la memoria de dispositivo 26 por medio del bus 24 y, después de procesar los conjuntos de datos, vuelve a almacenar los conjuntos de datos procesados en la memoria de dispositivo 26 por medio del bus 24.
[0033] La arquitectura paralela de la GPGPU 18 impide la implementación eficaz de aplicaciones basadas en canalización entre unidades de procesamiento en paralelo 22. En aplicaciones basadas en canalización, las unidades de procesamiento están conectadas como fases en una canalización para permitir que los datos se desplacen de una fase a otra fase para diferentes tareas de procesamiento. La limitación contra las aplicaciones basadas en canalización en la GPGPU 18 se extiende a las aplicaciones de procesamiento de gráficos 2D y 3D, que usan el procesamiento en paralelo en cada fase de procesamiento, pero requieren canalización entre las fases.
[0034] Las aplicaciones para la GPGPU 18 están, por lo tanto, limitadas a las que son inherentemente paralelas. Cada una de las unidades de procesamiento en paralelo 22 puede comprender una agrupación de unidades aritméticas lógicas (ALU) u otros elementos lógicos configurables. Las unidades de procesamiento en paralelo 22 son, por lo tanto, programables o configurables para realizar diferentes operaciones dependiendo de la aplicación ejecutada por la GPGPU 18. Las aplicaciones que funcionan eficazmente en la estructura altamente paralela de la GPGPU 18 pueden incluir aplicaciones de búsqueda basadas en imágenes, generación/extracción de descriptor de imagen, ajustes radiométricos de imágenes, procesamiento de audio, otras operaciones típicamente realizadas por un procesador de señales digitales (DSP) y similares. Además, las aplicaciones ejecutadas por la GPGPU 18 pueden requerir interacción con aplicaciones de procesamiento de gráficos basadas en canalización, tales como la generación de efectos especiales de imágenes, la generación de vértices para una canalización de GPU y operaciones de posprocesamiento de gráficos usando un búfer de color de una canalización de GPU.
[0035] La FIG. 3 es un diagrama de bloques que ilustra una GPGPU 6 ejemplar de la FIG. 1, que incluye las unidades de procesamiento en paralelo 42A-42D y los búferes de memoria local 44A-44C configurados para implementar una canalización de procesamiento 10. En otros ejemplos, la GPGPU 6 puede incluir más o menos unidades de procesamiento en paralelo y búferes de memoria local.
[0036] En el ejemplo de la FIG. 3, la GPGPU 6 incluye una unidad de distribución de datos 40, unas unidades de procesamiento en paralelo 42A-42D ("unidades de procesamiento en paralelo 42") y un bus 46 para conectar las unidades de procesamiento en paralelo 42 a la memoria de dispositivo 12 (de la FIG. 1) externa a la GPGPU 6. A diferencia de una GPGPU convencional, como la GPGPU 18 de la FIG. 3, la GPGPU 6 también incluye búferes de memoria local 44A-44C ("búferes de memoria local 44") conectados entre unidades de procesamiento en paralelo 42. La combinación de unidades de procesamiento en paralelo 42 y búferes de memoria local 44 conectados entre unidades de procesamiento en paralelo 42 se puede denominar canalización de procesamiento 10. La GPGPU 6 también incluye una unidad de control 30 y una memoria local 38. La memoria local 38 puede comprender un búfer similar a los búferes de memoria local 44, un registro o una memoria caché que almacena temporalmente datos para la GPGPU 6. La unidad de control 30 incluye interfaces de programación de aplicaciones (API) 32, un gestor de búfer 34 y gestor de secuencia 36.
[0037] Los búferes de memoria local 44 pueden incluir mecanismos de control de flujo de datos basados en hardware para permitir la transferencia de datos entre unidades de procesamiento en paralelo 42. Por ejemplo, los búferes de memoria local 44 pueden comprender búferes de primera entrada, primera salida (FIFO) basados en hardware u otros tipos de búferes basados en hardware, tales como búferes de última entrada, primera salida (LIFO) o búferes indexados. En el caso en que el búfer de memoria local 44A comprende una memoria FIFO basada en hardware, por ejemplo, el búfer de memoria local 44A incluye mecanismos de control de flujo de datos que permiten que la unidad de procesamiento en paralelo 42A envíe datos al búfer de memoria local 44A cuando hay espacio para escribir datos en el búfer, y de lo contrario detenga la petición de escritura. En ese caso, el búfer de memoria local 44A también incluye mecanismos de control de flujo de datos que permiten que la unidad de procesamiento en paralelo 42B reciba datos desde el búfer de memoria local 44A cuando hay datos disponibles para leer desde el búfer, y de lo contrario detenga la petición de lectura. Cuando los búferes de memoria local 44 incluyen mecanismos de control de flujo de datos basados en hardware, no son necesarios controles de flujo de datos basados en software menos eficaces para permitir la transferencia de datos entre unidades de procesamiento en paralelo 42.
[0038] Los búferes de memoria local 44 permiten la transferencia directa de datos en chip de baja potencia entre unidades de procesamiento en paralelo 42. Los búferes de memoria local 44 son "locales" porque están localizadas dentro de la GPGU 6 y en el mismo chip que las unidades de procesamiento 42. De esta manera, los datos se pueden pasar directamente desde una de las unidades de procesamiento en paralelo 42 a otra de las unidades de procesamiento en paralelo 42 en la canalización de procesamiento 10 por medio de búferes de memoria local 44. No se requiere que las unidades de procesamiento en paralelo 42 recuperen y almacenen datos repetidamente con la memoria del dispositivo 12, que es externa a o se encuentra fuera del chip de la GPGPU 6. Los búferes de memoria local 44, por lo tanto, transforman las unidades de procesamiento en paralelo 42 en una serie de fases de canalización e implementan la canalización de procesamiento 10 dentro de la GPGPU 6.
[0039] En el ejemplo ilustrado, cada uno de los búferes de memoria local 44 está conectado directamente entre dos de las unidades de procesamiento en paralelo 42 en orden sucesivo, de modo que la canalización de procesamiento 10 es una canalización puramente en serie. Los búferes de memoria local 44 están conectados "directamente" en la medida en que solo son accesibles por las dos unidades de procesamiento en paralelo 42 a las que están conectados y no son direccionables mediante bus por ninguna de las unidades de procesamiento en paralelo 42. Por ejemplo, el búfer de memoria local 44A está conectado directamente entre las unidades de procesamiento en paralelo 42A y 42B, el búfer de memoria local 44B está directamente conectado entre las unidades de procesamiento en paralelo 42B y 42C, y el búfer de memoria local 44C está directamente conectado entre las unidades de procesamiento en paralelo 42C y 42D.
[0040] En otros ejemplos, cada uno de los búferes de memoria local 44 también puede estar directamente conectado a una o más de las unidades de procesamiento en paralelo 42 que no están en orden sucesivo. En este caso, cada uno de los búferes de memoria local 44 puede estar directamente conectado a cualquiera de las unidades de procesamiento en paralelo 42 por medio de conexiones de barras cruzadas. Por ejemplo, el búfer de memoria local 44A puede estar directamente conectado a cada una de las unidades de procesamiento en paralelo 42 por medio de una conexión de barras cruzadas, de modo que la unidad de procesamiento en paralelo 42A puede transferir datos a cualquiera de las unidades de procesamiento en paralelo 42B-42D por medio del búfer de memoria local 44A. El uso de conexiones de barras cruzadas hace que los búferes de memoria local 44 sean más ampliamente accesibles para las unidades de procesamiento en paralelo 42 y permite la implementación de canalización de procesamiento que no son puramente en serie.
[0041] En el ejemplo ilustrado en el que la canalización de procesamiento 10 comprende una canalización puramente en serie, las unidades de procesamiento en paralelo 42 solo pueden tener permiso para escribir datos en una sucesiva de los búferes de memoria local 44, y pueden tener permiso solo para leer datos de uno anterior de los búferes de memoria local 44. Por ejemplo, la unidad de procesamiento en paralelo 42B puede ser solo capaz de leer datos del búfer de memoria local 44A y solo ser capaz de escribir datos en el búfer de memoria local 44B. En los casos en que la canalización de procesamiento puede incluir conexiones de barras cruzadas, la unidad de procesamiento en paralelo 42 puede tener permiso tanto para leer como para escribir en cualquiera de los búferes de memoria local 44. Por ejemplo, la unidad de procesamiento en paralelo 42B puede ser capaz de leer y escribir datos con el búfer de memoria local 44A y con el búfer de memoria local 44B.
[0042] Como se describe anteriormente, los búferes de memoria local 44 pueden comprender al menos uno de unos búferes FIFO, búferes LIFO o búferes indexados. El tipo de búfer usado para los búferes de memoria local 44 puede depender del tipo de mecanismos de control de flujo de datos basados en hardware requeridos en la canalización de procesamiento 10. El tipo de búfer usado para los búferes de memoria local 44 también puede depender de si los búferes de memoria local 44 están conectados a unidades de procesamiento en paralelo 42 por medio de conexiones de uno a uno o conexiones de barras cruzadas. Además, cuando se usan conexiones de barras cruzadas, el gestor de búfer 34 de la unidad de control 30 puede necesitar realizar determinado control de memoria para gestionar qué unidad de procesamiento en paralelo 42 tiene acceso y a qué búfer de memoria local 44 lo tiene en un momento dado.
[0043] Como se describe anteriormente, los búferes de memoria local 44 pueden estar directamente conectados entre al menos dos de las unidades de procesamiento en paralelo 42 por medio de conexiones de uno a uno o de barras cruzadas. Sin embargo, los búferes de memoria local 44 pueden no ser direccionables mediante bus por las unidades de procesamiento en paralelo 42. De esta manera, un controlador de memoria designado para los búferes de memoria local 44 puede no ser necesario. Específicamente, no es necesario un controlador de memoria para procesar mandatos de lectura y escritura en los búferes de memoria local 44 por medio de un bus.
[0044] Los búferes de memoria local 44 pueden reducir significativamente el uso de ancho de banda de memoria reduciendo o eliminando la necesidad de que cada una de las unidades de procesamiento en paralelo 42 realice llamadas a la memoria de dispositivo 12 por medio del bus 46 para recuperar y/o almacenar datos. En funcionamiento, la unidad de procesamiento en paralelo 42A, como primera unidad de procesamiento de la canalización de procesamiento 10, recupera un conjunto de datos original de la memoria de dispositivo 12 por medio del bus 46. La unidad de distribución de datos 40 puede asignar el conjunto de datos a la unidad de procesamiento en paralelo 42A. Además, la unidad de procesamiento en paralelo 42D, como unidad de procesamiento final de la canalización de procesamiento 10, almacena un conjunto de datos postcanalización en la memoria de dispositivo 12 por medio del bus 46. Las unidades de procesamiento en paralelo 42B y 42C, como unidades de procesamiento intermedias de la canalización de procesamiento 10, reciben el conjunto de datos de una anterior de las unidades de procesamiento en paralelo 42 por medio de uno de los búferes de memoria local 44, y envían el conjunto de datos a una posterior de las unidades procesamiento en paralelo 42 por medio de uno de los búferes de memoria local 44. Por lo tanto, no se requiere que las unidades de procesamiento intermedias interactúen con la memoria de dispositivo 12 para recuperar y/o almacenar datos. En algunos casos, las unidades de procesamiento intermedias pueden recuperar datos complementarios de la memoria de dispositivo a fin de realizar la fase particular de la canalización de procesamiento 10. El conjunto de datos principal para procesamiento, sin embargo, se pasa directamente a lo largo de la canalización de procesamiento 10 por medio de los búferes de memoria local 44.
[0045] Como se describe anteriormente, la GPGPU 6 es una versión generalizada de una GPU que extiende el procesamiento en paralelo de alta potencia de la GPU a aplicaciones de procesamiento de datos de propósito general más allá del procesamiento de gráficos. Como ejemplo, la GPGPU 6 puede estar configurada para procesar datos de acuerdo con la especificación OpenCL que da acceso a determinadas aplicaciones a una unidad de procesamiento de gráficos para cálculo no gráfico. En terminología OpenCL, los subprocesos de datos se denominan elementos de trabajo, los conjuntos de datos se denominan grupos de trabajo, las unidades de procesamiento se denominan unidades de cálculo y una colección de unidades de procesamiento se denomina grupo de cálculo.
[0046] De acuerdo con las técnicas de la presente divulgación, la GPGPU 6 es configurable para implementar la canalización de procesamiento 10 para ejecutar aplicaciones basadas en canalización, que incluyen las aplicaciones de procesamiento de gráficos 2D y 3D. Más específicamente, la unidad de control 30 de la GPGPU 6 configura las unidades de procesamiento en paralelo 42 para que funcionen como fases de una canalización de procesamiento. La unidad de control 30 también configura los búferes de memoria local 44 conectados entre las unidades de procesamiento en paralelo 42 para que almacenen datos para la transferencia entre las unidades de procesamiento en paralelo 42.
[0047] Las unidades de procesamiento en paralelo 42 pueden ser programables o configurables para realizar diferentes operaciones dependiendo de la aplicación ejecutada por la GPGPU 6. La unidad de control 30 puede configurar cada una de las unidades de procesamiento en paralelo 42 para que funcione de acuerdo con la aplicación. Por ejemplo, cada una de las unidades de procesamiento en paralelo 22 puede comprender una agrupación de unidades aritméticas lógicas (ALU) u otros elementos lógicos configurables.
[0048] Los búferes de memoria local 44 también pueden ser programables o configurables para contener diferentes tipos de datos facilitados por las unidades de procesamiento en paralelo 42 dependiendo de la aplicación ejecutada por la GPGPU 6. Por ejemplo, los búferes de memoria local 44 pueden comprender búferes basados en hardware, pero incluyen un conjunto de aspectos configurables. Uno de los aspectos configurables puede ser la anchura de los búferes de memoria local 44 a fin de adaptarse a los diferentes tipos de datos facilitados por las unidades de procesamiento en paralelo 42. Por ejemplo, los búferes de memoria local 44 pueden ser configurables para intercambiar profundidad por anchura. El gestor de búfer 34 de la unidad de control 30 puede determinar una anchura requerida para cada uno de los búferes de memoria local 44 para que almacene los datos facilitados por una anterior de las unidades de procesamiento en paralelo 42. El gestor de búfer 34 puede conocer el tipo de datos facilitado por cada una de las unidades de procesamiento en paralelo 42 y, por lo tanto, conocer las anchuras requeridas por cada uno de los búferes de memoria local 44 para contener los datos. A continuación, el gestor de búfer 34 puede configurar cada uno de los búferes de memoria local 44 para tener la anchura determinada.
[0049] Una vez que las unidades de procesamiento en paralelo 42 y los búferes de memoria local 44 están configurados para implementar la canalización de procesamiento 10 dentro de la GPGPU 6, las unidades de procesamiento en paralelo 42 pueden transferir datos por medio de los búferes de memoria local 44. La unidad de control 30 puede configurar una o más de las unidades de procesamiento en paralelo 42 para enviar datos a los búferes de memoria local 44, y configurar una o más de las unidades de procesamiento en paralelo 44 para recibir datos desde los búferes de memoria local 44. Por ejemplo, la unidad de control 30 puede configurar las unidades de procesamiento en paralelo 42A, 42B y 42C para que envíen datos a los búferes de memoria local 44A, 44B y 44C, respectivamente. La unidad de control 30 también puede configurar las unidades de procesamiento en paralelo 42B, 42C y 42D para que reciban datos desde los búferes de memoria local 44A, 44B y 44C, respectivamente.
[0050] Los búferes de memoria local 44 con mecanismos de control de flujo basados en hardware se pueden exponer usando un estándar GPGPU, como el estándar OpenCL, introduciendo nuevas API 32. Por ejemplo, la unidad de control 30 puede ejecutar una o más de las API 32 para determinar la anchura requerida para cada uno de los búferes de memoria local 44, configurar cada uno de los búferes de memoria local 44 con la anchura determinada y determinar una profundidad de cada uno de los búferes de memoria local 44. Además, la unidad de control 30 puede ejecutar una o más de las API 32 para configurar las unidades de procesamiento en paralelo 42 para que envíen datos a los búferes de memoria local 44 y recibir datos desde los búferes de memoria local 44. Los mecanismos de control de flujo de datos basados en hardware incluidos en los búferes de memoria local 44 permiten que las unidades de procesamiento en paralelo 42 envíen datos a y reciban datos desde los búferes de memoria local 44 sin ningún control adicional de flujo de datos basado en software.
[0051] Además, la unidad de control 30 de la GPGPU 6 puede mantener la secuencia de datos dentro de la canalización de procesamiento 10 manteniendo la secuencia de datos dentro de una o más de las unidades de procesamiento en paralelo 42. Las aplicaciones basadas en canalización ejecutadas por la GPGPU 6, específicamente las aplicaciones de gráficos 3D, pueden requerir que los datos se procesen en una secuencia determinada dentro de la canalización de procesamiento 10. Cuando los datos se procesan en cada fase de la canalización de procesamiento, los datos pueden cambiar la secuencia debido a problemas de ejecución, tales como condicionantes, resultados positivos o negativos de memoria caché y similares. El gestor de secuencia 36 de la unidad de control 30 puede ejecutar barreras de secuenciación para mantener la secuencia de datos dentro de al menos algunas de las unidades de procesamiento en paralelo 42. Las barreras de secuenciación pueden reducir la velocidad de procesamiento dentro de la canalización de procesamiento 10, por lo que el gestor de secuencia 36 solo podría ejecutar las barreras de secuenciación en las unidades de procesamiento en paralelo 42 que requieran que se mantenga la secuencia de datos para un procesamiento exacto.
[0052] Las barreras de secuenciación ejecutadas por el gestor de secuencia 36 pueden incluir un contador de determinación de secuencia (SDC) y una barrera de imposición de secuencia (SEB). Por ejemplo, las barreras de secuenciación se pueden exponer usando un estándar de GPGPU, tal como el estándar Open CL, añadiendo nuevas llamadas de función al lenguaje OpenCL C para el SDC y la SEB.
[0053] El gestor de secuencia 36 puede ejecutar el SDC tras la entrada de un conjunto de datos en cualquiera de las unidades de procesamiento en paralelo 42. A continuación, el gestor de secuencia 36 realiza la operación SDC registrando una secuencia de subprocesos de datos del conjunto de datos recibido dentro de la memoria local 38. Por ejemplo, el gestor de secuencia 36 puede registrar un índice de cada subproceso de datos del conjunto de datos en el orden en que se reciben los subprocesos de datos desde la memoria de dispositivo 12.
[0054] El gestor de secuencia 36 puede ejecutar la SEB tras la salida del conjunto de datos de la una de las unidades de procesamiento en paralelo 42. El gestor de secuencia 36 realiza a continuación la operación SEB liberando los subprocesos de datos del conjunto de datos de la una de las unidades de procesamiento en paralelo 42 en la misma secuencia que la registrada por el SDC. Por ejemplo, el gestor de secuencia 36 puede acceder a los índices de subproceso de datos registrados en la memoria local 38, y liberar cada subproceso de datos de acuerdo con el orden en que se ha registrado su índice. De esta manera, los subprocesos de datos del conjunto de datos entrarán en una posterior de las unidades de procesamiento en paralelo 42 en el mismo orden en que los subprocesos de datos del conjunto de datos entraron en la actual de las unidades de procesamiento en paralelo 42.
[0055] En un ejemplo, la unidad de control 30 puede configurar la GPGPU 6 para que ejecute una aplicación de procesamiento de gráficos 3D basada en canalización. En ese caso, la unidad de control 30 puede configurar las unidades de procesamiento en paralelo 42 para que funcionen como fases de una canalización de procesamiento de gráficos 3D. Por ejemplo, la unidad de control 30 puede configurar la unidad de procesamiento en paralelo 42A para que funcione como un sombreador de vértices, la unidad de procesamiento en paralelo 42B para que funcione como un rasterizador triangular, la unidad de procesamiento en paralelo 42C para que funcione como un sombreador de fragmentos, y la unidad de procesamiento en paralelo 42D para que funcione como un mezclador de píxeles.
[0056] La unidad de control 30 también puede configurar los búferes de memoria local 44 con mecanismos de control de flujo de datos basados en hardware para contener datos para la transferencia entre las unidades de procesamiento en paralelo 42 para implementar la canalización de procesamiento de gráficos 3D 10. Por ejemplo, la unidad de control 30 puede configurar el búfer de memoria local 44A para que contenga datos de vértice del sombreador posvértice para la transferencia entre la unidad de procesamiento en paralelo 42A que funciona como sombreador de vértice y la unidad de procesamiento en paralelo 42B que funciona como rasterizador triangular. La unidad de control 30 puede configurar el búfer de memoria local 44B para que contenga datos de píxeles del sombreador de prefragmentos para la transferencia entre la unidad de procesamiento en paralelo 42B que funciona como rasterizador triangular y la unidad de procesamiento en paralelo 42C que funciona como sombreador de fragmentos. Por último, la unidad de control 30 puede configurar el búfer de memoria local 44C para contener valores de píxeles del sombreador de posfragmentos para la transferencia entre la unidad de procesamiento en paralelo 42C que funciona como sombreador de fragmentos y la unidad de procesamiento en paralelo 42D que funciona como mezclador de píxeles.
[0057] Tras ejecutar las aplicaciones de procesamiento de gráficos 3D, la unidad de distribución de datos 40 puede asignar un conjunto de datos de vértice original a la unidad de procesamiento en paralelo 42A que funciona como sombreador de vértices. La unidad de procesamiento en paralelo 42A recupera el conjunto de datos de vértice original asignado de la memoria de dispositivo 12 por medio del bus 46. Tras la entrada del conjunto de datos, el gestor de secuencia 36 ejecuta el SDC para registrar una secuencia de los datos de vértice. La unidad de procesamiento en paralelo 42A realiza una operación de sombreado de vértices y envía los datos de vértice del sombreador de posvértices al búfer de memoria local 44A. Tras la salida del conjunto de datos de la unidad de procesamiento en paralelo 42A, el gestor de secuencia 36 ejecuta la SEB para liberar los datos de vértice en la misma secuencia que la registrada por el SDC. De esta manera, los datos de vértice llegarán a la unidad de procesamiento en paralelo 42B, que funciona como rasterizador triangular, en el mismo orden en que los datos de vértice entraron en la unidad de procesamiento en paralelo 42A, que funciona como sombreador de vértices.
[0058] La unidad de procesamiento en paralelo 42B, que funciona como rasterizador triangular, recibe los datos de vértice del sombreador de posvértices del búfer de memoria local 44A. En algunos casos, la unidad de procesamiento en paralelo 42B también puede recuperar datos complementarios de la memoria de dispositivo 12 por medio del bus 46 para realizar una operación de rasterización triangular. La unidad de procesamiento en paralelo 42B realiza a continuación la operación de rasterización triangular y envía los datos de píxel del sombreador de prefragmentos al búfer de memoria local 44B. En algunos ejemplos, el gestor de secuencia 36 puede ejecutar el SDC tras la entrada de los datos de vértice en la unidad de procesamiento en paralelo 42B, y ejecutar la SEB tras la salida de los datos de píxeles desde la unidad de procesamiento en paralelo 42B para mantener la secuencia de datos. En otros ejemplos, las barreras de secuenciación pueden no ser necesarias y, por lo tanto, no ejecutarse para la unidad de procesamiento en paralelo 42B.
[0059] La unidad de procesamiento en paralelo 42C, que hace funcionar el sombreador de fragmentos, recibe los datos de píxeles del sombreador de prefragmentos desde el búfer de memoria local 44B. Tras la entrada del conjunto de datos, el gestor de secuencia 36 ejecuta el SDC para registrar una secuencia de los datos de píxeles. En algunos casos, la unidad de procesamiento en paralelo 42C también puede recuperar datos complementarios de la memoria de dispositivo 12 por medio del bus 46 a fin de realizar una operación de sombreado de fragmentos. La unidad de procesamiento en paralelo 42C realiza a continuación la operación de sombreado de fragmentos y envía los valores de píxeles del sombreador de posfragmentos al búfer de memoria local 44C. Tras la salida del conjunto de datos de la unidad de procesamiento en paralelo 42C, el gestor de secuencia 36 ejecuta la SEB para liberar los datos de píxeles en la misma secuencia que la registrada por el SDC. De esta manera, los datos de píxeles llegarán a la unidad de procesamiento en paralelo 42D, que funciona como mezclador de píxeles, en el mismo orden en que los datos de píxeles entraron en la unidad de procesamiento en paralelo 42C, que funciona como sombreador de fragmentos.
[0060] La unidad de procesamiento en paralelo 42D, que funciona como mezclador de píxeles, recibe los valores de píxeles del sombreador de posfragmentos desde el búfer de memoria local 44C. La unidad de procesamiento en paralelo 44D realiza a continuación una operación de mezcla de píxeles y almacena el conjunto de datos postcanalización en la memoria de dispositivo 12 por medio del bus 46. En algunos ejemplos, el gestor de secuencia 36 puede ejecutar el SDC tras la entrada de los datos de píxeles en la unidad de procesamiento en paralelo 42D, y ejecutar la SEB tras la salida de los datos de imagen desde la unidad de procesamiento en paralelo 42D para mantener la secuencia de datos. En otros ejemplos, las barreras de secuenciación pueden no ser necesarias y, por lo tanto, no ejecutarse para la unidad de procesamiento en paralelo 42D. El ejemplo descrito anteriormente de una aplicación de procesamiento de gráficos 3D es meramente ejemplar, y las técnicas divulgadas se pueden usar para ejecutar una variedad de aplicaciones basadas en canalización en la GPGPU 6.
[0061] La FIG. 4 es un diagrama de flujo que ilustra un ejemplo de operación de la GPGPU 6 que incluye búferes de memoria local 44 conectados a unidades de procesamiento en paralelo 42 para transferir datos entre las unidades de procesamiento en paralelo como fases de la canalización de procesamiento 10. La operación ilustrada se describe con referencia a la GPGPU 6 de la FIG. 3.
[0062] La unidad de control 30 de la GPGPU 6 configura las unidades de procesamiento en paralelo 42 para que funcionen como fases de la canalización de procesamiento 10 (50). Por ejemplo, la unidad de control 30 puede configurar las unidades de procesamiento en paralelo 42 para que funcionen como una fase de una canalización de procesamiento de gráficos 3D. En ese ejemplo, la unidad de control 30 puede configurar la unidad de procesamiento en paralelo 42A para que funcione como un sombreador de vértices, la unidad de procesamiento en paralelo 42B para que funcione como un rasterizador triangular, la unidad de procesamiento en paralelo 42C para que funcione como un sombreador de fragmentos, y la unidad de procesamiento en paralelo 42D para que funcione como un mezclador de píxeles.
[0063] La unidad de control 30 también configura los búferes de memoria local 44 para que contengan datos para la transferencia entre las unidades de procesamiento en paralelo 42, transformando de hecho las unidades de procesamiento en paralelo 42 en la canalización de procesamiento 10 (52). Los búferes de memoria local 44 pueden incluir mecanismos de control de flujo de datos basados en hardware para permitir la transferencia de datos entre unidades de procesamiento en paralelo 42. Por ejemplo, los búferes de memoria local 44 pueden comprender búferes FIFO, LIFO o indexados basados en hardware. Los búferes de memoria local 44 pueden estar directamente conectados entre al menos dos de las unidades de procesamiento en paralelo 42. Por ejemplo, en el caso de una canalización de procesamiento de gráficos 3D, el búfer de memoria local 44A puede estar directamente conectado entre la unidad de procesamiento en paralelo 42A que funciona como sombreador de vértices y la unidad de procesamiento en paralelo 42B que funciona como rasterizador triangular, y configurada para contener datos de vértice del sombreador de posvértices. El búfer de memoria local 44B puede estar directamente conectado entre la unidad de procesamiento en paralelo 32B que funciona como rasterizador triangular y la unidad de procesamiento en paralelo 42C que funciona como sombreador de fragmentos, y configurada para contener datos de píxeles del sombreador de prefragmentos. Por último, el búfer de memoria local 44C puede estar directamente conectado entre la unidad de procesamiento en paralelo 42C que funciona como sombreador de fragmentos y la unidad de procesamiento en paralelo 42D que funciona como mezclador de píxeles, y configurada para contener valores de píxeles del sombreador de posfragmentos.
[0064] Además, el gestor de búfer 34 de la unidad de control 30 puede determinar una anchura requerida para cada uno de los búferes de memoria local 44 para contener los datos facilitados por una anterior de las unidades de procesamiento en paralelo 42 (54). El gestor de búfer 34 puede conocer el tipo de datos facilitado por cada una de las unidades de procesamiento en paralelo 42 y, por lo tanto, conocer las anchuras requeridas por cada uno de los búferes de memoria local 44 para contener los datos. El gestor de búfer 34 puede configurar a continuación cada uno de los búferes de memoria local 44 para que tengan la anchura determinada (56). En algunos casos, los búferes de memoria local 44 pueden estar basados en hardware, pero incluir un conjunto de aspectos configurables. Por ejemplo, los búferes de memoria local 44 pueden ser configurables para intercambiar profundidad por anchura.
[0065] Por ejemplo, el gestor de búfer 34 puede saber que la unidad de procesamiento en paralelo 42A que funciona como sombreador de vértices facilita datos de vértice del sombreador de posvértices, y configurar el búfer de memoria local 44A para que tenga la anchura requerida para contener los datos de vértice del sombreador de posvértices. El gestor de búfer 34 también puede saber que la unidad de procesamiento en paralelo 42B que funciona como rasterizador triangular facilita datos de píxeles del sombreador de prefragmentos, y configurar el búfer de memoria local 44B para que tenga la anchura requerida para contener los datos de píxeles del sombreador de prefragmentos. Además, el gestor de búfer 34 puede saber que la unidad de procesamiento en paralelo 42C que funciona como sombreador de fragmentos facilita valores de píxeles del sombreador de posfragmentos, y configurar el búfer de memoria local 44C para que tenga la anchura requerida para almacenar los valores de píxeles de sombreador de posfragmentos.
[0066] Una vez que las unidades de procesamiento en paralelo 42 y los búferes de memoria local 44 están configurados para implementar la canalización de procesamiento 10 dentro de la GPGPU 6, las unidades de procesamiento en paralelo 42 pueden transferir datos entre sí por medio de búferes de memoria local 44 (58). Más específicamente, la unidad de control 30 puede configurar una o más unidades de procesamiento en paralelo 42 para enviar datos a los búferes de memoria local 44, y configurar una o más de las unidades de procesamiento en paralelo 44 para recibir datos de los búferes de memoria local 44. Por ejemplo, la unidad de control 30 puede configurar las unidades de procesamiento en paralelo 42A, 42B y 42C para que envíen datos a los búferes de memoria local 44A, 44B y 44C, respectivamente. La unidad de control 30 también puede configurar las unidades de procesamiento en paralelo 42B, 42C y 42D para que reciban datos desde los búferes de memoria local 44A, 44B y 44C, respectivamente.
[0067] La FIG. 5 es un diagrama de flujo que ilustra un ejemplo de la operación de mantener una secuencia de datos dentro de la canalización de procesamiento implementada por las unidades de procesamiento en paralelo 42 y los búferes de memoria local 44 de la GPGPU 6. La unidad de control 30 de la GPGPU 6 puede mantener la secuencia de datos dentro de la canalización de procesamiento manteniendo la secuencia de datos dentro de una o más de las unidades de procesamiento en paralelo 42. La operación ilustrada se describe con referencia a la unidad de procesamiento en paralelo 42A de la GPGPU 6 de la FIG. 3. Se puede realizar una operación similar para cualquiera de las otras unidades de procesamiento en paralelo 42.
[0068] Como ejemplo, las unidades de procesamiento en paralelo 42 y los búferes de memoria local 44 pueden estar configurados para implementar una canalización de procesamiento de gráficos 3D. En ese ejemplo, la unidad de procesamiento en paralelo 42A puede estar configurada para funcionar como un sombreador de vértices, la unidad de procesamiento en paralelo 42B puede estar configurada para funcionar como un rasterizador triangular, la unidad de procesamiento en paralelo 42C puede estar configurada para funcionar como un sombreador de fragmentos, y la unidad de procesamiento en paralelo 42D puede estar configurada para funcionar como un mezclador de píxeles.
[0069] La unidad de procesamiento en paralelo 42A configurada para funcionar como una fase de la canalización de procesamiento 10, por ejemplo, el sombreador de vértice, recibe un conjunto de datos para procesar (62). Por ejemplo, la unidad de distribución de datos 40 puede asignar un conjunto de datos de datos de vértice a la unidad de procesamiento en paralelo 42A, y la unidad de procesamiento en paralelo 42A puede recibir el conjunto de datos asignado desde la memoria de dispositivo 12 por medio del bus 46. T ras la entrada del conjunto de datos en la unidad de procesamiento en paralelo 42A, el gestor de secuencia 36 de la unidad de control 30 ejecuta un contador de determinación de secuencia (SDC) (64). De acuerdo con el SDC, el gestor de secuencia 36 registra una secuencia de subprocesos de datos del conjunto de datos recibido dentro de la memoria local 38 (66). Por ejemplo, el gestor de secuencia 36 puede registrar un índice de cada subproceso de datos del conjunto de datos en el orden en que se reciben los subprocesos de datos desde la memoria de dispositivo 12.
[0070] La unidad de procesamiento en paralelo 42A configurada para funcionar como sombreador de vértices a continuación procesa el conjunto de datos para generar datos de vértice del sombreador de posvértices (68). Como se describe anteriormente, la unidad de procesamiento en paralelo 42A puede estar configurada para enviar los datos de vértice del sombreador de posvértices al búfer de memoria local 44A a fin de transferir el conjunto de datos a la unidad de procesamiento en paralelo 42B configurada para funcionar como rasterizador triangular. Tras la salida del conjunto de datos de la unidad de procesamiento en paralelo 42A, el gestor de secuencia 36 ejecuta una barrera de imposición de secuencia (SEB) (70). De acuerdo con la SEB, el gestor de secuencia 36 libera los subprocesos de datos del conjunto de datos de la unidad de procesamiento en paralelo 42A en la misma secuencia que la registrada por el SDC (72). Por ejemplo, el gestor de secuencia 36 puede acceder a los índices de subproceso de datos registrados en la memoria local 38, y liberar cada subproceso de datos de acuerdo con el orden en que se ha registrado su índice. De esta manera, los vértices entrarán en la unidad de procesamiento paralela 42B configurada para funcionar como rasterizador triangular en el mismo orden en que los vértices entraron en la unidad de procesamiento en paralelo 42A configurada para funcionar como sombreador de vértices.
[0071] En uno o más ejemplos, las funciones descritas se pueden implementar en hardware, software, firmware o cualquier combinación de los mismos. Si se implementan en software, las funciones u operaciones se pueden almacenar como una o más instrucciones o código en un medio no transitorio legible por ordenador, y ejecutar mediante una unidad de procesamiento basada en hardware. Los medios legibles por ordenador pueden incluir medios de almacenamiento legibles por ordenador, que corresponden a un medio tangible tal como unos medios de almacenamiento de datos, o medios de comunicación que incluyen cualquier medio que facilita la transferencia de un programa informático de un lugar a otro, por ejemplo, de acuerdo con un protocolo de comunicación. De esta manera, los medios legibles por ordenador pueden corresponder en general a (1) medios de almacenamiento tangibles legibles por ordenador que son no transitorios o (2) un medio de comunicación tal como una señal o una onda portadora. Los medios de almacenamiento de datos pueden ser unos 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 la presente divulgación. Un producto de programa informático puede incluir un medio legible por ordenador.
[0072] A modo de ejemplo, y no de limitación, dichos medios legibles por ordenador pueden comprender medios no transitorios tales como RAM, ROM, EEPROM, CD-ROM u otro almacenamiento de disco óptico, almacenamiento de disco magnético u otros dispositivos de almacenamiento magnético, memoria flash o cualquier otro medio que se pueda usar para transportar o almacenar un código de programa deseado en forma de instrucciones o estructuras de datos y al que se pueda acceder mediante un ordenador. Además, cualquier conexión recibe adecuadamente la denominación de medio legible por ordenador. Por ejemplo, si las instrucciones se transmiten desde un sitio web, un servidor u otro origen remoto usando un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de abonado digital (DSL) o unas tecnologías inalámbricas tales como infrarrojos, radio y microondas, entonces el cable coaxial, el cable de fibra óptica, el par trenzado, la DSL o las tecnologías inalámbricas tales como infrarrojos, radio y microondas están incluidas en la definición de medio. Sin embargo, debería entenderse que los medios de almacenamiento legibles por ordenador y los medios de almacenamiento de datos no incluyen conexiones, ondas portadoras, señales ni otros medios transitorios, sino que, en cambio, se orientan a medios de almacenamiento tangibles no transitorios. Los discos, como se usan en el presente documento, incluyen el disco compacto (CD), el disco láser, el disco óptico, el disco versátil digital (DVD), el disco flexible y el disco Blu-ray, de los cuales los discos flexibles habitualmente reproducen datos magnéticamente, mientras que los demás discos reproducen datos ópticamente con láseres. Las combinaciones de los anteriores deberían estar también incluidas dentro del alcance de los medios legibles por ordenador.
[0073] Las instrucciones se pueden ejecutar mediante uno o más procesadores, tales como uno o más DSP, microprocesadores de propósito general, ASIC, FPGA u otros circuitos lógicos integrados o discretos equivalentes. En consecuencia, el término "procesador", como se usa en el presente documento, se puede referir 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. Además, en algunos aspectos, la funcionalidad descrita en el presente documento se puede proporcionar dentro de módulos de hardware y/o software dedicados, configurados para codificar y descodificar, o incorporados en un códec combinado. Además, las técnicas se podrían implementar por completo en uno o más circuitos o elementos lógicos.
[0074] Las técnicas de la presente divulgación se pueden implementar en una amplia variedad de dispositivos o aparatos, que incluyen un microteléfono inalámbrico, un circuito integrado (IC) o un conjunto de IC (por ejemplo, un conjunto de chips). Diversos componentes, módulos o unidades se describen en la presente divulgación para resaltar aspectos funcionales de dispositivos configurados para realizar las técnicas divulgadas, pero no requieren necesariamente su realización mediante diferentes unidades de hardware. En cambio, como se describe anteriormente, diversas unidades se pueden combinar en una unidad de hardware de códec o proporcionar mediante una colección de unidades de hardware interoperativas, que incluyen uno o más procesadores como se describe anteriormente, conjuntamente con software y/o firmware adecuados.
[0075] Se han descrito diversos ejemplos. Estos y otros ejemplos están dentro del alcance de las siguientes reivindicaciones.

Claims (15)

REIVINDICACIONES
1. Una unidad de procesamiento de gráficos de propósito general, GPGPU, (6) que comprende:
dos o más unidades de procesamiento en paralelo (42A-42D) configuradas para operar selectivamente como fases de una canalización de procesamiento (10);
uno o más búferes de memoria local (44A-44C), estando conectado cada uno de los búferes entre al menos dos de las unidades de procesamiento en paralelo, configurados para contener datos para su transferencia entre las unidades de procesamiento en paralelo, en la que cada uno del uno o más búferes de memoria local está directamente conectado entre al menos dos de las unidades de procesamiento en paralelo en la canalización de procesamiento; y,
una unidad de control (30) configurada para configurar las dos o más unidades de procesamiento en paralelo para operar selectivamente como fases de la canalización de procesamiento, configurar una o más de las unidades de procesamiento en paralelo para enviar datos a uno o más búferes de memoria local, y configurar una o más de las unidades de procesamiento en paralelo para recibir datos de uno o más búferes de memoria local, en la que la unidad de control conserva la secuencia de datos dentro de la canalización de procesamiento, y en la que la unidad de control está configurada para:
ejecutar un contador de determinación de secuencia tras una entrada de un conjunto de datos en al menos una de las unidades de procesamiento en paralelo para registrar una secuencia de subprocesos de datos del conjunto de datos; y
ejecutar una barrera de imposición de secuencia tras la salida del conjunto de datos de la al menos una de las unidades de procesamiento en paralelo para liberar los subprocesos de datos del conjunto de datos de la unidad de procesamiento en paralelo en la misma secuencia que la registrada por el contador de determinación de secuencia.
2.
La GPGPU según la reivindicación 1, en la que el uno o más búferes de memoria local incluyen mecanismos de control de flujo de datos basados en hardware para permitir la transferencia de los datos entre las unidades de procesamiento en paralelo.
3.
La GPGPU según la reivindicación 1, en la que uno o más búferes de memoria local comprenden al menos uno de búferes primero en entrar, primero en salir (FIFO) basados en hardware, búferes último en entrar, primero en salir (LIFO) o búferes indexados.
4.
La GPGPU según la reivindicación 1, en la que la unidad de control está configurada para, para cada uno de los búferes de memoria local, configurar una unidad anterior de las unidades de procesamiento en paralelo en la canalización de procesamiento para enviar datos a uno respectivo de los búferes de memoria local a los que está conectado directamente, y configurar una unidad posterior de las unidades de procesamiento en paralelo en la canalización de procesamiento para recibir datos del respectivo búfer de memoria local al que está conectado directamente.
5.
La GPGPU según la reivindicación 4, en la que la unidad de control está configurada para ejecutar una o más interfaces de programación de aplicaciones (API) para configurar las unidades de procesamiento en paralelo para enviar datos a los búferes de memoria local y recibir datos de los búferes de memoria local.
6.
La GPGPU según la reivindicación 1, en la que la unidad de control está configurada para determinar un ancho necesario para que cada uno de los búferes de memoria local contenga la salida de datos de una unidad de procesamiento anterior en la canalización de procesamiento, y configurar cada uno de los búferes de memoria local para tener el ancho determinado.
7.
La GPGPU según la reivindicación 6, en la que la unidad de control está configurada para ejecutar una o más interfaces de programación de aplicaciones (API) para determinar el ancho de cada uno de los búferes de memoria local, configurar cada uno de los búferes de memoria local con el ancho determinado y determinar una profundidad de cada uno de los búferes de memoria local.
8.
La GPGPU según la reivindicación 6, en la que cada uno de los búferes de memoria local es configurable para intercambiar profundidad por anchura.
9.
La GPGPU según la reivindicación 1, en la que una de las unidades de procesamiento en paralelo está configurada para que opere como una primera fase de la canalización de procesamiento y recuperar un conjunto de datos original de una memoria del dispositivo.
10. La GPGPU según la reivindicación 1, en la que una de las unidades de procesamiento en paralelo está configurada para que opere como una fase final de la canalización de procesamiento y almacene un conjunto de datos de canalización procesados en una memoria de dispositivo.
11. La GPGPU según la reivindicación 1, en la que al menos una de las unidades de procesamiento en paralelo está configurada para que opere como una fase intermedia de la canalización de procesamiento, reciba un conjunto de datos de una unidad anterior de las unidades de procesamiento en paralelo en la canalización de procesamiento por medio de uno de los búferes de memoria local, y envíe el conjunto de datos a una unidad posterior de las unidades de procesamiento en paralelo en la canalización de procesamiento por medio de otro de los búferes de memoria local.
12. La GPGPU según la reivindicación 11, en la que la al menos una de las unidades de procesamiento en paralelo está configurada para recuperar datos complementarios de una memoria de dispositivo para procesar el conjunto de datos.
13. Un procedimiento de procesamiento de datos con una unidad de procesamiento de gráficos de propósito general, GPGPU, (6) que comprende dos o más unidades de procesamiento en paralelo (42A-42D), uno o más búferes de memoria local (44A-44C) y una unidad de control (30), comprendiendo el procedimiento:
configurar, mediante la unidad de control, dos o más unidades de procesamiento en paralelo para operar selectivamente como fase de una canalización de procesamiento;
configurar, mediante la unidad de control, uno o más búferes de memoria local, estando conectado cada uno de los búferes entre al menos dos de las unidades de procesamiento en paralelo, para contener datos para su transferencia entre las unidades de procesamiento en paralelo, en la que cada uno de los búferes de memoria local está conectado directamente entre al menos dos de las unidades de procesamiento en paralelo en la canalización de procesamiento;
configurar, mediante la unidad de control, una o más de las unidades de procesamiento en paralelo para enviar datos a uno o más búferes de memoria local; y
configurar, mediante la unidad de control, una o más de las unidades de procesamiento en paralelo para recibir datos de uno o más búferes de memoria local,
comprendiendo el procedimiento, además, mantener, mediante la unidad de control, la secuencia de datos dentro de la canalización de procesamiento, en donde mantener la secuencia de datos comprende, además:
ejecutar un contador de determinación de secuencia tras una entrada de un conjunto de datos en al menos una de las unidades de procesamiento en paralelo para registrar una secuencia de subprocesos de datos del conjunto de datos; y
ejecutar una barrera de imposición de secuencia tras la salida del conjunto de datos de la al menos una de las unidades de procesamiento en paralelo para liberar los subprocesos de datos del conjunto de datos de la unidad de procesamiento en paralelo en la misma secuencia que la registrada por el contador de determinación de secuencia.
14. El procedimiento según la reivindicación 13, en el que configurar una o más unidades de procesamiento en paralelo comprende ejecutar una o más interfaces de programación de aplicaciones (API) para configurar las unidades de procesamiento en paralelo para enviar datos a los búferes de memoria local y recibir datos de los búferes de memoria local.
15. El procedimiento según la reivindicación 13, en el que configurar uno o más búferes de memoria local comprende:
determinar un ancho necesario para que cada uno de los búferes de memoria local contenga la salida de datos de una unidad de procesamiento anterior en la canalización de procesamiento; y
configurar cada uno de los búferes de memoria local para que tenga el ancho determinado.
ES19178559T 2011-01-14 2012-01-13 Canalización de recursos de cálculo en unidad de procesamiento de gráficos de propósito general Active ES2873896T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/007,333 US9804995B2 (en) 2011-01-14 2011-01-14 Computational resource pipelining in general purpose graphics processing unit

Publications (1)

Publication Number Publication Date
ES2873896T3 true ES2873896T3 (es) 2021-11-04

Family

ID=45615047

Family Applications (2)

Application Number Title Priority Date Filing Date
ES19178559T Active ES2873896T3 (es) 2011-01-14 2012-01-13 Canalización de recursos de cálculo en unidad de procesamiento de gráficos de propósito general
ES12704456T Active ES2749883T3 (es) 2011-01-14 2012-01-13 Canalización de recursos de cálculo en unidad de procesamiento de gráficos de propósito general

Family Applications After (1)

Application Number Title Priority Date Filing Date
ES12704456T Active ES2749883T3 (es) 2011-01-14 2012-01-13 Canalización de recursos de cálculo en unidad de procesamiento de gráficos de propósito general

Country Status (8)

Country Link
US (1) US9804995B2 (es)
EP (2) EP3557434B1 (es)
JP (2) JP5996554B2 (es)
KR (1) KR101558069B1 (es)
CN (1) CN103348320B (es)
ES (2) ES2873896T3 (es)
HU (1) HUE045952T2 (es)
WO (1) WO2012097316A1 (es)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9336557B2 (en) * 2012-05-02 2016-05-10 Apple Inc. Apparatus and methods for processing of media signals
CN103064657B (zh) * 2012-12-26 2016-09-28 深圳中微电科技有限公司 单个处理器上实现多应用并行处理的方法及装置
US20140232733A1 (en) * 2013-02-19 2014-08-21 Jason Caulkins Graphics Processing Unit Pre-Caching
DE102013224702A1 (de) * 2013-12-03 2015-06-03 Robert Bosch Gmbh Steuergerät für ein Kraftfahrzeug
CN103888771A (zh) * 2013-12-30 2014-06-25 中山大学深圳研究院 基于gpgpu技术的并行视频图像处理方法
US9928564B2 (en) * 2014-06-26 2018-03-27 Intel Corporation Efficient hardware mechanism to ensure shared resource data coherency across draw calls
KR102222752B1 (ko) 2014-08-01 2021-03-04 삼성전자주식회사 프로세서의 동적 전압 주파수 스케일링 방법
US9697580B2 (en) * 2014-11-10 2017-07-04 Qualcomm Incorporated Dynamic pipeline for graphics processing
EP3065051A1 (en) 2015-03-05 2016-09-07 Ingo Josopait Flow control for language-embedded programming in general-purpose computing on graphics processing units
CN105653243B (zh) * 2015-12-23 2018-03-30 北京大学 一种通用图形处理器多任务并发执行的任务派发方法
CN108563519B (zh) * 2018-04-17 2023-06-09 长沙景美集成电路设计有限公司 基于gpgpu中的2d桌面块拷贝填充操作的实现
CN111881078B (zh) * 2020-07-17 2022-04-19 上海芷锐电子科技有限公司 基于gpgpu芯片的多用户通用计算处理方法和系统
EP4050479B1 (en) * 2021-02-25 2025-06-25 Imagination Technologies Limited Task repacking in a graphic pipeline
US20220334899A1 (en) * 2021-04-14 2022-10-20 Nvidia Corporation Application programming interface to monitor resource usage

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4751671A (en) * 1983-02-14 1988-06-14 Prime Computer, Inc. Size configurable data storage system
US4807183A (en) * 1985-09-27 1989-02-21 Carnegie-Mellon University Programmable interconnection chip for computer system functional modules
WO1991017507A1 (fr) * 1990-05-07 1991-11-14 Mitsubishi Denki Kabushiki Kaisha Systeme processeur de donnees en parallele
JPH0683578A (ja) 1992-03-13 1994-03-25 Internatl Business Mach Corp <Ibm> 処理システム、及びデータスループット制御方法
JPH06282447A (ja) 1993-03-29 1994-10-07 Mitsubishi Electric Corp 待ち行列管理方式
JPH11328100A (ja) 1998-05-13 1999-11-30 Sony Corp ディジタル信号処理装置
WO2002046917A1 (en) 2000-12-07 2002-06-13 Koninklijke Philips Electronics N.V. Digital signal processing apparatus
EP1271782B1 (en) * 2001-06-29 2005-05-18 STMicroelectronics Pvt. Ltd FPGA with at least two different and independently configurable memory structures
US6919736B1 (en) * 2002-07-12 2005-07-19 Lattice Semiconductor Corporation Field programmable gate array having embedded memory with configurable depth and width
US7389006B2 (en) 2004-05-14 2008-06-17 Nvidia Corporation Auto software configurable register address space for low power programmable processor
US7369078B2 (en) * 2004-08-16 2008-05-06 National Instruments Corporation Flexible converter interface for use in analog-to-digital and digital-to-analog systems
US7555607B2 (en) * 2005-11-10 2009-06-30 Hewlett-Packard Development Company, L.P. Program thread syncronization for instruction cachelines
JP4795138B2 (ja) 2006-06-29 2011-10-19 富士ゼロックス株式会社 画像処理装置及びプログラム
US7725688B1 (en) 2006-09-05 2010-05-25 Nvidia Corporation System and method for storing states used to configure a processing pipeline in a graphics processing unit
US20080109795A1 (en) * 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
US20100079454A1 (en) 2008-09-29 2010-04-01 Legakis Justin S Single Pass Tessellation
JP2010244096A (ja) 2009-04-01 2010-10-28 Seiko Epson Corp データ処理装置、印刷システムおよびプログラム
JP2010287110A (ja) 2009-06-12 2010-12-24 Nec Personal Products Co Ltd 情報処理装置、情報処理方法、プログラム及び記録媒体
US8817031B2 (en) * 2009-10-02 2014-08-26 Nvidia Corporation Distributed stream output in a parallel processing unit

Also Published As

Publication number Publication date
JP2014505946A (ja) 2014-03-06
JP6062506B2 (ja) 2017-01-18
EP3557434A1 (en) 2019-10-23
KR101558069B1 (ko) 2015-10-06
US9804995B2 (en) 2017-10-31
ES2749883T3 (es) 2020-03-24
WO2012097316A1 (en) 2012-07-19
CN103348320A (zh) 2013-10-09
HUE045952T2 (hu) 2020-02-28
US20120185671A1 (en) 2012-07-19
EP3557434B1 (en) 2021-02-17
CN103348320B (zh) 2017-06-23
EP2663921B1 (en) 2019-07-24
KR20130122657A (ko) 2013-11-07
JP5996554B2 (ja) 2016-09-21
EP2663921A1 (en) 2013-11-20
JP2016006657A (ja) 2016-01-14

Similar Documents

Publication Publication Date Title
ES2873896T3 (es) Canalización de recursos de cálculo en unidad de procesamiento de gráficos de propósito general
US9830197B2 (en) Cooperative thread array reduction and scan operations
US9710874B2 (en) Mid-primitive graphics execution preemption
US9495721B2 (en) Efficient super-sampling with per-pixel shader threads
US10437593B2 (en) Techniques for comprehensively synchronizing execution threads
US8619087B2 (en) Inter-shader attribute buffer optimization
US20130159628A1 (en) Methods and apparatus for source operand collector caching
US20130179662A1 (en) Method and System for Resolving Thread Divergences
US20190146817A1 (en) Binding constants at runtime for improved resource utilization
ES2777827T3 (es) Predicados uniformes en sombreadores para unidades de procesamiento de gráficos
US9207919B2 (en) System, method, and computer program product for bulk synchronous binary program translation and optimization
KR20130036213A (ko) 상태 정보의 손실 없이 복수의 프로세서들을 사용하여 비디오 및/또는 그래픽 데이터를 처리하기 위한 방법, 시스템 및 장치
US9471307B2 (en) System and processor that include an implementation of decoupled pipelines
US12271765B2 (en) Techniques for efficiently synchronizing multiple program threads
US9082212B2 (en) Programmable blending via multiple pixel shader dispatches
US9542192B1 (en) Tokenized streams for concurrent execution between asymmetric multiprocessors
US20240403048A1 (en) Categorized memory operations for selective memory flushing
US20200264873A1 (en) Scalar unit with high performance in crypto operation
US12487746B2 (en) Speculative remote memory operation tracking for efficient memory barrier
US20230267567A1 (en) Dynamic wave pairing
US9361105B2 (en) Technique for counting values in a register