ES2691957T3 - Salto de almacenamiento de datos - Google Patents

Salto de almacenamiento de datos Download PDF

Info

Publication number
ES2691957T3
ES2691957T3 ES15751211.2T ES15751211T ES2691957T3 ES 2691957 T3 ES2691957 T3 ES 2691957T3 ES 15751211 T ES15751211 T ES 15751211T ES 2691957 T3 ES2691957 T3 ES 2691957T3
Authority
ES
Spain
Prior art keywords
intermediate value
gpr
sub
instructions
stored
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
ES15751211.2T
Other languages
English (en)
Inventor
Yun Du
Lin Chen
Andrew Evan Gruber
Chihong Zhang
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 ES2691957T3 publication Critical patent/ES2691957T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

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

Abstract

Un procedimiento para procesar valores en un sistema de procesamiento de datos, comprendiendo el procedimiento: recibir una pluralidad de sub-instrucciones de una instrucción de un programa, en la que la instrucción define una pluralidad de operaciones y en el que cada una de las sub-instrucciones define una operación constituyente de la pluralidad de operaciones; recibir una indicación para al menos un valor intermedio generado por la ejecución de una de las sub-10 instrucciones que indica si el valor intermedio debe almacenarse en un registro de uso general (GPR); determinar si el valor intermedio se reenvía a una etapa de ejecución anterior desde otra etapa de ejecución que ejecutó la sub-instrucción que generó el valor intermedio, en el que la etapa de ejecución anterior y la otra etapa de ejecución que generó el valor intermedio están dispuestas en una estructura de canal; determinar si el valor intermedio debe almacenarse en el GPR en base al menos en parte a la indicación recibida y a la determinación de si el valor intermedio se reenvía a la etapa de ejecución anterior; y uno de: evitar el almacenamiento del valor intermedio en el GPR si la indicación recibida indica que el valor intermedio no debe almacenarse en el GPR y se determina que el valor intermedio se reenvía a la etapa de ejecución anterior, almacenar el valor intermedio en el GPR si la indicación recibida indica que el valor intermedio no debe almacenarse en el GPR y se determina que el valor intermedio no se reenvía a la etapa de ejecución anterior, o almacenar el valor intermedio en el GPR si la indicación recibida indica que el valor intermedio debe almacenarse en el GPR.

Description

5
10
15
20
25
30
35
40
45
50
55
60
65
DESCRIPCION
Salto de almacenamiento de datos CAMPO TECNICO
[0001] Esta divulgacion se refiere al almacenamiento de datos, y mas particularmente, a tecnicas de almacenamiento de datos en registros de uso general (GPR).
ANTECEDENTES
[0002] Las unidades de procesamiento, tales como las unidades de procesamiento de graficos (GPU), incluyen nucleos de procesamiento que tienen registros de uso general (GPR) que almacenan datos que resultan de la ejecucion de una instruccion o de datos necesarios para la ejecucion de una instruccion. Por ejemplo, un elemento de procesamiento del nucleo de procesamiento incluye una unidad de logica aritmetica (ALU) que realiza una pluralidad de operaciones aritmeticas. El GPR puede almacenar los resultados de las operaciones aritmeticas y/o almacenar operandos de las operaciones aritmeticas.
[0003] El GPR puede ser local al nucleo de procesador de la unidad de procesamiento. En consecuencia, acceder a un GPR puede requerir menos energfa que acceder a la memoria cache local o a la memoria de sistema externo. Aunque es mas eficiente que la memoria cache local o que la memoria de sistema externo, el almacenamiento de datos en el GPR consume energfa. El documento EP 1 119 629 divulga un procesador enrutado que comprende una senal de inhibicion de escritura para que los operandos con longitud de vida reducida puedan recuperarse solamente desde una red de reenvfo y no tengan que escribirse en el archivo de registro.
RESUMEN
[0004] En general, la divulgacion describe tecnicas para saltar el acceso a un registro de uso general (GPR) para que los datos a los que no haya que accederse nuevamente no se almacenen en el GPR. Un compilador puede determinar si los datos no son necesarios para ejecutar instrucciones posteriores de un programa. Si los datos no son necesarios para ejecutar instrucciones posteriores, el compilador puede indicar que los datos no son necesarios para ejecutar instrucciones posteriores. Una unidad de procesamiento puede determinar que los datos no son necesarios para ejecutar instrucciones posteriores en base a la indicacion y, en respuesta, evitar almacenar los datos en el GPR (es decir, saltar el almacenamiento de los datos en el gPr). De esta manera, el consumo de energfa puede reducirse al evitar el acceso innecesario al GPR para almacenar datos que posteriormente no se necesiten.
[0005] En un ejemplo, la divulgacion describe un procedimiento para procesar valores en un sistema de procesamiento de datos, comprendiendo el procedimiento recibir una pluralidad de sub-instrucciones de una instruccion de un programa, en el que la instruccion define una pluralidad de operaciones y en el que cada una de las sub-instrucciones define una operacion constitutiva de la pluralidad de operaciones, recibir una indicacion de al menos un valor intermedio generado por la ejecucion de una de las sub-instrucciones que indica si el valor intermedio debe almacenarse en un registro de uso general (GPR), determinar si el valor intermedio debe almacenarse en el GPR en base al menos en parte a la indicacion recibida y evitar el almacenamiento del valor intermedio en el GPR si se determina que el valor intermedio no debe almacenarse en el GPR.
[0006] En un ejemplo, la divulgacion describe un dispositivo para procesar datos, comprendiendo el dispositivo una unidad de procesamiento que comprende un nucleo, comprendiendo el nucleo una memoria de instrucciones, un registro de uso general (GPR) y al menos un elemento de procesamiento, comprendiendo el al menos un elemento de procesamiento un controlador y una estructura de canal que tiene una pluralidad de etapas de ejecucion, en el que el controlador esta configurado para recibir una pluralidad de sub-instrucciones de una instruccion de un programa desde la memoria de instrucciones del nucleo, en el que la instruccion define una pluralidad de operaciones, en el que cada una de las sub-instrucciones define una operacion constitutiva de la pluralidad de operaciones, y en el que las sub-instrucciones se ejecutan por la pluralidad de etapas de ejecucion de la estructura de canal, reciben una indicacion de al menos un valor intermedio generado por la ejecucion de una de las sub- instrucciones en una de la pluralidad de etapas de ejecucion que indica si el valor intermedio debe almacenarse en el GPR, determinan si el valor intermedio debe almacenarse en el GPR en base al menos en parte a la indicacion recibida y evitan el almacenamiento del valor intermedio en el GPR si se determina que el valor intermedio no debe almacenarse en el GPR.
[0007] En un ejemplo, la divulgacion describe un medio de almacenamiento legible por ordenador que tiene instrucciones almacenadas en el mismo que, cuando se ejecuta por una o mas unidades de procesamiento, causa que la una o mas unidades de procesamiento reciban una pluralidad de sub-instrucciones de una instruccion de un programa, en el que la instruccion define una pluralidad de operaciones y en el que cada una de las sub- instrucciones define una operacion constitutiva de la pluralidad de operaciones, reciban una indicacion de al menos un valor intermedio generado por la ejecucion de una de las sub-instrucciones que indique si el valor intermedio
5
10
15
20
25
30
35
40
45
50
55
60
65
debe almacenarse en un registro de uso general (GPR), determinen si el valor intermedio debe almacenarse en el GPR en base al menos en parte a la indicacion recibida y eviten el almacenamiento del valor intermedio en el GPR si se determina que el valor intermedio no debe almacenarse en el GPR.
[0008] En un ejemplo, la divulgacion describe un dispositivo para procesar datos, comprendiendo el dispositivo medios para recibir una pluralidad de sub-instrucciones de una instruccion de un programa, en el que la instruccion define una pluralidad de operaciones y en el que cada una de las sub-instrucciones define una operacion constitutiva de la pluralidad de operaciones, medios para recibir una indicacion de al menos un valor intermedio generado por la ejecucion de una de las sub-instrucciones que indique si el valor intermedio debe almacenarse en un registro de uso general (GPR), medios para determinar si el valor intermedio debe almacenarse en el GPR en base al menos en parte a la indicacion recibida y medios para evitar el almacenamiento del valor intermedio en el GPR si se determina que el valor intermedio no debe almacenarse en el GPR.
[0009] En un ejemplo, la divulgacion describe un procedimiento de compilacion, comprendiendo el procedimiento determinar una pluralidad de sub-instrucciones a partir de una instruccion de un programa, en el que la instruccion define una pluralidad de operaciones y en el que cada una de las sub-instrucciones define una operacion constitutiva de la pluralidad de operaciones, determinar un ultimo uso para al menos un valor intermedio que se generara mediante la ejecucion de una de las sub-instrucciones, en el que determinar el ultimo uso comprende determinar que el valor intermedio ya no es necesario por la pluralidad de sub-instrucciones para generar un valor final a partir de la pluralidad de operaciones definidas por la instruccion, e indicar el ultimo uso del al menos un valor intermedio en base a la determinacion.
[0010] Los detalles de uno o mas ejemplos se exponen en los dibujos adjuntos y en la siguiente descripcion. Otras caracterfsticas, objetivos y ventajas resultaran evidentes a partir de la descripcion, de los dibujos y de las reivindicaciones.
BREVE DESCRIPCION DE LOS DIBUJOS
[0011]
La FIG. 1 es un diagrama de bloques que ilustra un dispositivo de ejemplo para procesar datos de acuerdo con una o mas tecnicas de ejemplo descritas en esta divulgacion.
La FIG. 2 es un diagrama de bloques que ilustra los componentes del dispositivo ilustrado en la FIG. 1 en mayor detalle.
La FIG. 3 es un diagrama de bloques que ilustra un ejemplo de un nucleo de sombreado de una unidad de procesamiento de graficos (GPU) de la FIG. 2 en mayor detalle.
La FIG. 4 es un diagrama de bloques que ilustra un ejemplo de un elemento de procesamiento de un nucleo de sombreado de la FIG. 3 en mayor detalle.
La FIG. 5 es un diagrama de flujo que ilustra una tecnica de ejemplo de valores de procesamiento.
La FIG. 6 es un diagrama de flujo que ilustra una tecnica de ejemplo de compilacion.
DESCRIPCION DETALLADA
[0012] Las unidades de procesamiento paralelo, tales como la unidad de procesamiento de graficos (GPU), que estan configuradas para realizar muchas operaciones en paralelo (por ejemplo, al mismo tiempo), incluyen uno o mas nucleos de procesador (por ejemplo, nucleos de sombreado para una GPU) que ejecutan instrucciones de uno o mas programas. Para facilitar la descripcion, las tecnicas descritas en la divulgacion se describen con respecto a una GPU o a una GPU de uso general (GPGPU). Sin embargo, las tecnicas descritas en esta divulgacion se pueden extender a unidades de procesamiento paralelo que no sean necesariamente GPU ni GPGPU, asf como unidades de procesamiento no paralelo (por ejemplo, las que no esten configuradas especfficamente para el procesamiento paralelo).
[0013] La GPU puede disenarse con una estructura de una sola instruccion, de datos multiples (SIMD). En la estructura SIMD, un nucleo de sombreado incluye una pluralidad de elementos de procesamiento SIMD, donde cada elemento de procesamiento SIMD ejecuta instrucciones del mismo programa, pero en datos diferentes. Una instruccion particular que se ejecuta en un elemento de procesamiento SIMD en particular se denomina subproceso. Se puede considerar que cada elemento de procesamiento SIMD ejecuta un subproceso diferente porque los datos para un subproceso dado pueden ser diferentes; sin embargo, el subproceso que se ejecuta en un elemento de procesamiento es la misma instruccion, del mismo programa, que la instruccion que se ejecuta en los otros elementos de procesamiento. De esta manera, la estructura SIMD permite que la GPU realice muchas tareas en paralelo (por ejemplo, al mismo tiempo).
5
10
15
20
25
30
35
40
45
50
55
60
65
[0014] Como ejemplo, para el procesamiento de vertices, la GPU puede realizar las mismas tareas para cada vertice, pero los datos de vertice para cada vertice pueden ser diferentes (por ejemplo, diferentes coordenadas, diferentes valores de color, etc.). La estructura SIMD permite que la GPU procese muchos vertices en paralelo ejecutando la misma instancia de un sombreador de vertices en diferentes elementos de procesamiento SIMD. En este ejemplo, cada elemento de procesamiento SIMD puede ejecutar un subproceso del sombreador de vertices, donde cada subproceso es una instancia del sombreador de vertices.
[0015] Un elemento de procesamiento SIMD incluye una o mas unidades logicas aritmeticas (ALU), y el elemento de procesamiento SIMD almacena el resultado en un GPR. Un GPR es un registro dedicado para almacenar los datos resultantes de uno o mas elementos de procesamiento SIMD. El GPR solamente puede ser accesible por el nucleo de procesamiento que incluye los elementos de procesamiento, y no por otras unidades de la GPU, tales como unidades de hardware de un canal de graficos. En este sentido, un GPR no deberfa confundirse con el cache local o con la memoria local de la GPU, que esta disponible para todas las unidades de la GPU.
[0016] Las ALU realizan funciones aritmeticas tales como sumar, restar, multiplicar, dividir, etc., en base a la operacion aritmetica definida en el subproceso. En algunos ejemplos, para realizar las operaciones aritmeticas definidas en el subproceso, las ALU producen valores intermedios que pueden usarse para realizar las operaciones aritmeticas. Por ejemplo, el subproceso puede definir que se deben sumar tres valores. En este caso, una ALU puede anadir los dos primeros valores para generar un valor intermedio y agregar el valor intermedio al tercer valor. La ALU puede almacenar entonces el valor final resultante en el GPR.
[0017] En algunas tecnicas, las ALU siempre almacenan los valores intermedios en el GPR y entonces sobrescriben los valores intermedios en el GPR con el valor final. Sin embargo, dicho almacenamiento de los valores intermedios en el GPR no siempre es necesario. Al almacenar innecesariamente valores intermedios en el GPR, la GPU consume energfa innecesariamente.
[0018] Como se describe con mas detalle a continuacion, las tecnicas descritas en esta divulgacion determinan si ya no se necesitan valores intermedios para completar la operacion aritmetica definida en el subproceso. Si los valores intermedios ya no son necesarios, las tecnicas se indican como tales, y la GPU puede evitar de ese modo el almacenamiento (por ejemplo, saltar el almacenamiento) de los valores intermedios en el GPR en base a dicha indicacion. De esta manera, las tecnicas descritas en esta divulgacion reducen el numero de veces que se necesita acceder al GPR, ahorrando de ese modo energfa.
[0019] Por ejemplo, un procesador, tal como una unidad de procesamiento central (CPU), compila el programa que se va a ejecutar en la GPU a traves de un compilador. Como parte de la compilacion, el compilador puede dividir una operacion aritmetica definida por un subproceso en operaciones constituyentes. El compilador puede escanear a traves de las operaciones constituyentes para determinar si ya no es necesario que alguno de los valores intermedios, generados por las operaciones constituyentes, complete la operacion aritmetica definida por el subproceso. Para cualquiera de los valores intermedios que se determine que ya no son necesarios, el compilador puede indicar a la GPU que estos valores intermedios ya no son necesarios. En respuesta, la GPU puede saltar el almacenamiento de valores intermedios en el GPR que se indican como que ya no se necesitan para la operacion aritmetica definida por el subproceso.
[0020] La FIG. 1 es un diagrama de bloques que ilustra un dispositivo de ejemplo para procesar datos de acuerdo con una o mas tecnicas de ejemplo descritas en esta divulgacion. La FIG. 1 ilustra el dispositivo 10, cuyos ejemplos incluyen, pero no se limitan a, dispositivos de video tales como reproductores de medios, decodificadores, telefonos inalambricos tales como telefonos moviles, asistentes digitales personales (PDA), ordenadores de escritorio, ordenadores portatiles, consolas de videojuegos, unidades de videoconferencia, dispositivos informaticos de tablets y similares.
[0021] En el ejemplo de la FIG. 1, el dispositivo 10 incluye el procesador 12, la unidad de procesamiento de graficos (GPU) 14 y la memoria de sistema 16. En algunos ejemplos, tales como ejemplos en los que el dispositivo 10 sea un dispositivo movil, el procesador 12 y la GPU 14 pueden formarse como un circuito integrado (IC). Por ejemplo, el IC puede considerarse como un chip de procesamiento dentro de un paquete de chips. En algunos ejemplos, el procesador 12 y la GPU 14 pueden estar alojados en diferentes circuitos integrados (es decir, diferentes paquetes de chips) tales como ejemplos en los que el dispositivo 10 sea un ordenador de escritorio o portatil. Sin embargo, puede ser posible que el procesador 12 y la GPU 14 esten alojados en diferentes circuitos integrados en ejemplos en los que el dispositivo 10 sea un dispositivo movil.
[0022] Los ejemplos del procesador 12 y del GPU 14 incluyen, pero no se limitan a, uno o mas procesadores de senales digitales (DSP), microprocesadores de uso general, circuitos integrados especfficos de la aplicacion (ASIC), matrices logicas programables de campo (FPGA) u otra circuiterfa logica integrada equivalente o logica discreta. El procesador 12 puede ser la unidad de procesamiento central (CPU) del dispositivo 10. En algunos ejemplos, la GPU 14 puede ser hardware especializado que incluya circuiterfa logica integrada y/o discreta que proporcione la GPU 14 con capacidades de procesamiento paralelo masivas adecuadas para el procesamiento de graficos. En algunos
5
10
15
20
25
30
35
40
45
50
55
60
65
casos, la GPU 14 tambien puede incluir capacidades de procesamiento de uso general, y se puede referir a una GPU de uso general (GPGPU) cuando se implementen tareas de procesamiento de uso general (es decir, tareas no relacionadas con graficos).
[0023] Para los propositos de ilustracion, las tecnicas descritas en esta divulgacion se describen con la GPU 14. Sin embargo, las tecnicas descritas en esta divulgacion no estan limitadas a esto. Las tecnicas descritas en esta divulgacion pueden extenderse a otros tipos de unidades de procesamiento en paralelo (por ejemplo, unidades de procesamiento que proporcionen capacidades de procesamiento paralelo masivo, incluso si no es para el procesamiento de graficos). Ademas, las tecnicas descritas en esta divulgacion pueden extenderse a unidades de procesamiento no configuradas especfficamente para el procesamiento paralelo.
[0024] El procesador 12 puede ejecutar diversos tipos de aplicaciones. Los ejemplos de las aplicaciones incluyen navegadores web, aplicaciones de correo electronico, hojas de calculo, videojuegos u otras aplicaciones que generan objetos visibles para su visualizacion. La memoria de sistema 16 puede almacenar instrucciones para la ejecucion de una o mas aplicaciones. La ejecucion de una aplicacion en el procesador 12 causa que el procesador 12 produzca datos graficos para el contenido de la imagen que se vaya a visualizar. El procesador 12 puede transmitir datos graficos del contenido de la imagen a la GPU 14 para un procesamiento posterior.
[0025] En algunos ejemplos no relacionados con graficos, el procesador 12 puede generar datos que sean adecuados para procesarse por la GPU 14. Dichos datos no necesitan necesariamente ser necesarios para los propositos de graficos o de visualizacion. Por ejemplo, el procesador 12 puede emitir datos sobre que operaciones de matriz deben realizarse en la GPU 14, y la GPU 14 puede a su vez realizar las operaciones de la matriz.
[0026] En general, el procesador 12 puede descargar tareas de procesamiento a la GPU 14, tales como las tareas que requieran operaciones paralelas masivas. Como ejemplo, el procesamiento de graficos requiere operaciones paralelas masivas, y el procesador 12 puede descargar dichas tareas de procesamiento de graficos a la GPU 14. Sin embargo, otras operaciones tales como las operaciones de matriz tambien pueden beneficiarse de las capacidades de procesamiento paralelo de la GPU 14. En estos ejemplos, el procesador 12 puede aprovechar las capacidades de procesamiento paralelo de la GPU 14 para causar que la gPu 14 realice operaciones no relacionadas con los graficos.
[0027] El procesador 12 puede comunicarse con la GPU 14 de acuerdo con una interfaz de procesamiento de aplicaciones (API) particular. Entre los ejemplos de dichas API se incluyen DirectX® API de Microsoft®, OpenGL® u OpenGL ES® del grupo Khronos y OpenCL™; sin embargo, los aspectos de esta divulgacion no es tan limitados a las API de DirectX, OpenGL o OpenCL, y pueden extenderse a otros tipos de API. Ademas, las tecnicas descritas en esta divulgacion no requieren funcionar de acuerdo con una API, y el procesador 12 y la GPU 14 pueden utilizar cualquier tecnica de comunicacion.
[0028] La memoria de sistema 16 puede ser la memoria para el dispositivo 10. La memoria de sistema 16 puede comprender uno o mas medios de almacenamiento legibles por ordenador. Los ejemplos de memoria de sistema 16 incluyen, pero no estan limitados a, una memoria de acceso aleatorio (RAM), una memoria de solo lectura programable y borrable electricamente (EEPROM), una memoria flash u otro medio que pueda usarse para transportar o almacenar el codigo de programa deseado en forma de instrucciones y/o estructuras de datos y al que se pueda acceder por un ordenador o por un procesador.
[0029] En algunos aspectos, la memoria de sistema 16 puede incluir instrucciones que causen que el procesador 12 y/o la GPU 14 realicen las funciones atribuidas en esta divulgacion al procesador 12 y a la GPU 14. En consecuencia, la memoria de sistema 16 puede ser un medio de almacenamiento legible por ordenador que tenga instrucciones almacenadas en el mismo que, cuando se ejecute, cause que uno o mas procesadores (por ejemplo, el procesador 12 y la GPU 14) realicen diversas funciones.
[0030] Por ejemplo, como se describe con mas detalle en otra parte de esta divulgacion, un compilador que se ejecute en el procesador 12 puede determinar si los valores intermedios generados por instrucciones de un programa de sombreado que se ejecuta en la GPU 14 no se almacenan en un registro de uso general (GPR) de un nucleo de sombreado de GPU 14 para que el elemento de procesamiento no necesite innecesariamente almacenar valores en el GPR. La memoria de sistema 16 puede almacenar el codigo de compilador y el codigo del programa de sombreado que se ejecuta en la GPU 14. Como otro ejemplo, una aplicacion que se ejecuta en el procesador 12 causa que la GPU 14 ejecute el programa de sombreado, y la memoria de sistema 16 puede almacenar las instrucciones de la aplicacion que se ejecute en el procesador 12.
[0031] En algunos ejemplos, la memoria de sistema 16 puede ser un medio de almacenamiento no transitorio. La expresion «no transitorio» puede indicar que el medio de almacenamiento no esta incorporado ni en una onda portadora ni en una senal propagada. Sin embargo, el termino "no transitorio" no deberfa interpretarse en el sentido de que la memoria de sistema 16 es no movil o que sus contenidos son estaticos. Como ejemplo, la memoria de sistema 16 puede retirarse del dispositivo 10 y trasladarse a otro dispositivo. Como otro ejemplo, la memoria, sustancialmente similar a la memoria de sistema 16, puede insertarse en el dispositivo 10. En ciertos ejemplos, un
5
10
15
20
25
30
35
40
45
50
55
60
65
medio de almacenamiento no transitorio puede almacenar datos que, con el tiempo, pueden cambiar (por ejemplo, en una RAM).
[0032] El dispositivo 10 tambien puede incluir la pantalla 18, la interfaz de usuario 20 y el modulo transceptor 22. El dispositivo 10 puede incluir modulos o unidades adicionales que no se muestran en la FIG. 1 para los propositos de claridad. Por ejemplo, el dispositivo 10 puede incluir un altavoz y un microfono, ninguno de los cuales se muestra en la FIG. 1, para efectuar comunicaciones telefonicas en ejemplos donde el dispositivo 10 es un telefono inalambrico movil. Ademas, los diversos modulos y unidades mostrados en el dispositivo 10 pueden no ser necesarios en cada ejemplo del dispositivo 10. Por ejemplo, la interfaz de usuario 20 y la pantalla 18 pueden ser externas al dispositivo 10 en ejemplos donde el dispositivo 10 sea un ordenador de escritorio. Como otro ejemplo, la interfaz de usuario 20 puede ser parte de la pantalla 18 en ejemplos donde la pantalla 18 sea una pantalla sensible al tacto o sensible a la presencia de un dispositivo movil.
[0033] La pantalla 18 puede comprender una pantalla de cristal lfquido (LCD), una pantalla de tubo de rayos catodicos (CRT), una pantalla de plasma, una pantalla sensible al tacto, una pantalla sensible a la presencia u otro tipo de dispositivo de visualizacion. Los ejemplos de la interfaz de usuario 20 incluyen, sin limitarse a, una rueda de desplazamiento, un raton, un teclado y otros tipos de dispositivos de entrada. La interfaz de usuario 20 tambien puede ser una pantalla tactil y puede incorporarse como parte de la pantalla 18. El modulo de transceptor 22 puede incluir circuiterfa para permitir la comunicacion inalambrica o alambrica entre el dispositivo 10 y otro dispositivo o una red. El modulo de transceptor 22 puede incluir moduladores, demoduladores, amplificadores y otra dicha circuiterfa para comunicacion alambrica o inalambrica.
[0034] Como se describio anteriormente, la GPU 14 proporciona capacidades masivas de procesamiento paralelo. Una forma en que la GPU 14 proporciona dichas capacidades de procesamiento paralelo es a traves de una estructura de una sola instruccion, de datos multiples (SIMD). En la estructura SIMD, la GPU 14 ejecuta una pluralidad de instancias del mismo programa. Por ejemplo, el procesamiento de graficos y algunos procesos no relacionados con graficos requieren que se realicen las mismas operaciones, pero con datos diferentes.
[0035] Por ejemplo, la GPU 14 puede ejecutar programas de sombreado (a los que se hace referencia simplemente como sombreadores) que realicen tareas relacionadas con graficos o tareas no relacionadas con graficos. La GPU 14 incluye al menos un nucleo de sombreado, y los programas de sombreado se ejecutan en el nucleo de sombreado. Para mayor brevedad y facilidad de descripcion, la GPU 14 se describe como la realizacion de tareas relacionadas con graficos, pero puede realizar de manera similar tareas no relacionadas con graficos. La GPU 14 puede ejecutar multiples instancias del programa de sombreado para procesar multiples valores de datos de graficos a la vez. Un ejemplo de un programa de sombreado es un sombreador de vertices. La GPU 14 puede ejecutar multiples instancias del sombreador de vertices para procesar multiples vertices a la vez. En general, las operaciones que se deben realizar para un vertice son las mismas que las operaciones que se deben realizar para otros vertices; sin embargo, los valores de vertice especfficos de cada uno de los vertices pueden ser diferentes.
[0036] Para ejecutar las multiples instancias de un programa de sombreado, el nucleo de sombreado de la GPU 14 incluye una pluralidad de elementos de procesamiento, y cada elemento de procesamiento puede ejecutar una instruccion de una instancia del programa de sombreado. Por ejemplo, cada elemento de procesamiento puede ejecutar una primera instruccion del programa de sombreado. Aunque la instruccion que ejecutan los elementos de procesamiento sea la misma, los valores sobre los que funciona la instruccion en cada elemento de procesamiento pueden ser diferentes. En este sentido, cada elemento de procesamiento puede considerarse como la ejecucion de un subproceso del programa de sombreado, donde el subproceso es una instruccion del programa de sombreado para un dato dado. En consecuencia, cada elemento de procesamiento puede ejecutar un subproceso diferente porque los datos para cada subproceso pueden ser diferentes, pero la instruccion subyacente para cada subproceso puede ser la misma.
[0037] Como ejemplo basico, una instruccion de un programa de sombreado puede definir una operacion de suma de tres valores. En este ejemplo, cada uno de los elementos de procesamiento puede sumar tres valores, pero los valores especfficos que se suman por cada elemento de procesamiento pueden ser diferentes. En consecuencia, cada elemento de procesamiento puede ejecutar un subproceso del programa de sombreado, donde el subproceso defina una operacion de suma de tres valores. Por lo tanto, la instruccion puede ser la misma (es decir, agregar tres valores), pero el uno o mas de los tres valores para cada elemento de procesamiento puede ser diferente. Al ejecutar la instruccion para agregar tres valores en cada uno de los elementos de procesamiento al mismo tiempo, la GPU 14 puede proporcionar el calculo paralelo de la suma de tres valores, en este ejemplo.
[0038] En algunos casos, como parte de la realizacion de las operaciones definidas por una instruccion, el elemento de procesamiento puede producir un valor intermedio. Por ejemplo, la instruccion puede definir una pluralidad de operaciones (por ejemplo, una combinacion de sumas, restas, multiplicaciones y/o divisiones). En este caso, cada operacion de la pluralidad de operaciones puede ser una operacion constituyente. El resultado de una operacion constitutiva puede ser un valor intermedio. Por ejemplo, el valor intermedio no es el valor final de la pluralidad de operaciones, sino el resultado de una de las operaciones constituyentes de la pluralidad de operaciones.
5
10
15
20
25
30
35
40
45
50
55
60
65
[0039] Cada uno de los elementos de procesamiento puede almacenar el valor final resultante de las operaciones realizadas por el elemento de procesamiento en un registro de uso general (GPR) de un nucleo de sombreado. En algunos ejemplos, el almacenamiento de los valores intermedios generados a partir del elemento de procesamiento que realiza una operacion constituyente en el GPR puede no ser necesario. Por ejemplo, el elemento de procesamiento puede retroalimentar un valor intermedio para el procesamiento adicional (por ejemplo, el valor intermedio se usa como un valor de entrada para realizar operaciones constituyentes adicionales definidas en la instruccion). Sin embargo, este valor intermedio puede no ser necesario nuevamente y, por lo tanto, puede que no haya necesidad de almacenar el valor intermedio en el GPR.
[0040] Si un valor intermedio se retroalimenta y ya no es necesario, el ciclo de vida del valor intermedio puede considerarse como final (por ejemplo, ultimo uso del valor intermedio). Para dichos valores intermedios (por ejemplo, aquellos cuyo ciclo de vida ha finalizado), la eficiencia de energfa puede obtenerse al no almacenar (por ejemplo, saltar el almacenamiento) los valores intermedios en el GPR.
[0041] Por ejemplo, en un sistema de sombreado con la estructura SIMD (por ejemplo, dicha GPU 14 que incluye un nucleo de sombreado en la estructura SIMD), la estructura GPR es normalmente profunda y ancha para una mejor densidad para que el coste por bit sea pequeno. En otras palabras, el GPR de un elemento de procesamiento puede configurarse para almacenar mas de un solo valor. Como ejemplo, supongamos que los valores producidos por el elemento de procesamiento son 8 bits. En este ejemplo, el GPR puede almacenar muchos valores de 32 bits (por ejemplo, mas ancho porque 32 bits es mas de 8 bits y mas profundo porque se puede almacenar mas de un valor en el GPR).
[0042] Aunque tener GPR profundos y amplios puede ser beneficioso, tambien puede haber algunos inconvenientes potenciales. Por ejemplo, para un GPR de mayor tamano, el tiempo necesario para acceder a los valores (por ejemplo, datos) puede ser mayor, causando canales de lectura de datos adicionales en el elemento de procesamiento (por ejemplo, el elemento de procesamiento esta inactivo mientras se leen los datos). Ademas, acceder al GPR requiere que el elemento de procesamiento y, por lo tanto, la GPU 14 consuman energfa.
[0043] Por ejemplo, puede haber diversas unidades en las que la GPU 14 puede almacenar datos (por ejemplo, valores). La GPU 14 puede almacenar datos en la memoria de sistema 16 o puede almacenar datos en la memoria local (por ejemplo, cache). El GPR de un nucleo de sombreado es distinto tanto de la memoria de sistema 16 como de la memoria local de la GPU 14. Por ejemplo, la memoria de sistema 16 es accesible por diversos componentes del dispositivo 10, y estos componentes usan la memoria de sistema 16 para almacenar datos. La memoria local de la GPU 14 es accesible por diversos componentes de la GPU 14, y estos componentes usan la memoria local de la GPU 14 para almacenar datos. Sin embargo, un GPR solamente puede ser accesible por los elementos de procesamiento del nucleo de sombreado o por otras unidades del sombreador, y puede que no sea accesible por unidades externas al nucleo de sombreado.
[0044] Como se describio anteriormente, si es el final del ciclo de vida para un valor intermedio, dicho valor intermedio no puede almacenarse en el GPR. Dicha tecnica de ejemplo se describio anteriormente con respecto a una estructura SIMD de la GPU 14. Sin embargo, las tecnicas descritas en esta divulgacion no estan limitadas a una estructura SIMD. En general, las tecnicas descritas en esta divulgacion pueden ser aplicables a ejemplos de un elemento de procesamiento y de un combo GPR, donde los elementos de procesamiento implementan un esquema de ejecucion canalizado para las operaciones aritmeticas, como se describe con mas detalle. Para facilitar la descripcion, las tecnicas se describen con respecto a una estructura SIMD, y tambien porque la estructura SIMD tiende a usar un tamano de GPR mas grande.
[0045] De acuerdo con las tecnicas descritas en esta divulgacion, si es el ultimo uso de un valor intermedio, el elemento de procesamiento puede evitar almacenar el valor intermedio en el GPR. Por ejemplo, el elemento de procesamiento puede saltar el almacenamiento del valor intermedio en el GPR. En algunos ejemplos, el elemento de procesamiento puede retroalimentar solamente el valor intermedio como un operando para las otras operaciones constituyentes de las operaciones definidas por la instruccion. Si no es el ultimo uso del valor intermedio o si el valor intermedio no esta recibiendo retroalimentacion, incluso si es el ultimo uso del valor intermedio, el elemento de procesamiento puede almacenar el valor intermedio en el GPR.
[0046] Puede haber diversas formas de determinar si un valor intermedio esta al final de su ciclo de vida. Por ejemplo, el procesador 12 puede ejecutar un compilador que compile el programa de sombreado (por ejemplo, un programa de sombreado de graficos) que se ejecutara en el nucleo de sombreado de la GPU 14. Como parte de la compilacion, el compilador puede separar la pluralidad de operaciones definidas en la instruccion del programa de sombreado en operaciones constituyentes. El compilador puede determinar entonces cuando un valor intermedio esta al final de su vida util (es decir, cuando se produce el ultimo uso del valor intermedio) al explorar las operaciones constituyentes.
[0047] Cuando el compilador, que se ejecuta en el procesador 12, determina el ultimo uso de un valor intermedio particular, el compilador puede incluir una indicacion que indique el ultimo uso de un valor intermedio particular. Por
5
10
15
20
25
30
35
40
45
50
55
60
65
ejemplo, el compilador puede incluir un indicador asociado con el valor intermedio que indique si es el ultimo uso del valor intermedio (por ejemplo, un valor de 1 para el indicador indica que es el ultimo uso y un valor de 0 para el indicador indica que no es el ultimo uso, o viceversa).
[0048] En dichos ejemplos, un controlador de un elemento de procesamiento puede leer el valor del indicador asociado con el valor intermedio y, en base al valor del indicador, determinar si el valor intermedio debe almacenarse o no almacenarse (por ejemplo, evitar o saltar el almacenamiento del valor intermedio). Si no se va a almacenar el valor intermedio, el controlador del elemento de procesamiento puede saltar el almacenamiento del valor intermedio (o bloquear el almacenamiento del valor intermedio) en el GPR y, si el valor intermedio debe almacenarse, el controlador del elemento de procesamiento almacena el valor intermedio en el GPR.
[0049] De esta manera, las tecnicas pueden reducir la cantidad de veces que los datos se almacenan en el GPR, promoviendo de ese modo el ahorro de energfa. Por ejemplo, cada almacenamiento en el GPR puede consumir relativamente poca energfa. Sin embargo, dado que la GPU 14 proporciona capacidades masivas de procesamiento paralelo, hay muchas escrituras en cada GPR. Al usar un esquema que evite (por ejemplo, salte) almacenar datos en el GPR si no se necesita almacenamiento, puede haber una reduccion general en el uso de energfa por la GPU 14 en comparacion con algunas otras tecnicas.
[0050] En algunas otras tecnicas, el elemento de procesamiento siempre almacena un valor intermedio en el GPR. Por ejemplo, estas otras tecnicas no lograron reconocer si un valor intermedio esta al final de su ciclo de vida, que no puede haber un beneficio apreciable de almacenar el valor intermedio en el GPR y que puede haber un impacto negativo en el almacenamiento del valor intermedio que esta al final de su ciclo de vida. Ademas, estas otras tecnicas fallaron al reconocer que un compilador puede aprovecharse para determinar el final del ciclo de vida de un valor intermedio y que el compilador puede usarse para identificar cuando fue el ultimo uso del valor intermedio (por ejemplo, identificar cuando el final del ciclo de vida del valor intermedio se producira tal como con un indicador, como ejemplo). Estas otras tecnicas no pueden usar un controlador de un elemento de procesamiento en un nucleo de sombreado de la GPU 14 para determinar cuando se identifica el ultimo uso de un valor intermedio y evitar el almacenamiento del valor intermedio en dichos casos.
[0051] La FIG. 2 es un diagrama de bloques que ilustra los componentes del dispositivo ilustrado en la FIG. 1 en mayor detalle. Como se ilustra en la FIG. 2, la GPU 14 incluye el nucleo de sombreado 28 y el canal de funcion fija 30. El nucleo de sombreado 28 y el canal de funcion fija 30 pueden formar juntos un canal de procesamiento usado para realizar funciones relacionadas con graficos o no relacionadas con graficos. El canal de procesamiento realiza las funciones definidas por el software o el firmware que se ejecutan en la GPU 14 y realiza funciones mediante unidades de funcion fija que estan cableadas para realizar funciones especfficas.
[0052] Como se describio anteriormente, el software o el firmware que se ejecuta en la GPU 14 se puede denominar programas de sombreado (o simplemente sombreadores), y los programas de sombreado se pueden ejecutar en el nucleo de sombreado 28 de la GPU 14. Aunque se ilustra solamente un nucleo de sombreado 28, en algunos ejemplos, la GPU 14 puede incluir uno o mas nucleos de sombreado similares al nucleo de sombreado 28. El canal de funcion fija 30 incluye las unidades de funcion fija. El nucleo de sombreado 28 y el canal de funcion fija 30 pueden transmitir y recibir datos entre sf. Por ejemplo, el canal de procesamiento puede incluir programas de sombreado que se ejecuten en el nucleo de sombreado 28 que reciban datos de una unidad de funcion fija del canal de funcion fija 30 y emitan datos procesados a otra unidad de funcion fija del canal de funcion fija 30.
[0053] Los programas de sombreado proporcionan a los usuarios flexibilidad funcional porque un usuario puede disenar el programa de sombreado para realizar las tareas deseadas de cualquier manera concebible. Sin embargo, las unidades de funcion fija estan cableadas por la manera en que las unidades de funcion fija realizan tareas. En consecuencia, las unidades de funcion fija pueden no proporcionar mucha flexibilidad funcional.
[0054] Los ejemplos de los programas de sombreado incluyen el sombreador de vertices 32, el sombreador de fragmentos 34 y el sombreador de calculo 36. El sombreador de vertices 32 y el sombreador de fragmentos 34 pueden ser programas de sombreado para tareas relacionadas con graficos, y el sombreador de calculo 36 puede ser un programa de sombreado para una tarea no relacionada con graficos. En algunos ejemplos, solo se pueden usar programas de sombreado relacionados con graficos como el sombreador de vertices 32 y el sombreador de fragmentos 34. En algunos ejemplos, solo se pueden usar programas de sombreado no relacionados con graficos como el sombreador de calculo 36. Hay ejemplos adicionales de programas de sombreado tales como sombreadores de geometrfa, que no se describen para los propositos de brevedad.
[0055] Como se describe a continuacion, el controlador de graficos 26 que se ejecuta en el procesador 12 puede configurarse para implementar una interfaz de programacion de aplicaciones (API). En dichos ejemplos, los programas de sombreado (por ejemplo, el sombreador de vertices 32, el sombreador de fragmentos 34 y el sombreador de calculo 36) se pueden configurar de acuerdo con la misma API que el controlador de graficos 26. Aunque no se ilustra, la memoria de sistema 16 puede almacenar el codigo para el controlador de graficos 26 que el procesador 12 recupera de la memoria de sistema 16 para su ejecucion. El controlador de graficos 26 se ilustra en una casilla discontinua para indicar que el controlador de graficos 26 es un software, que se ejecuta en hardware
5
10
15
20
25
30
35
40
45
50
55
60
65
(por ejemplo, el procesador 12), en este ejemplo. Sin embargo, parte o la totalidad de la funcionalidad del controlador de graficos 26 puede implementarse como hardware en el procesador 12.
[0056] En algunos ejemplos, la memoria de sistema 16 puede almacenar el codigo fuente para uno o mas del sombreador de vertices 32, del sombreador de fragmentos 34 y del sombreador de calculo 36. En estos ejemplos, el compilador 24 que se ejecuta en el procesador 12 puede compilar el codigo fuente de estos programas de sombreado para crear un codigo objeto o intermedio ejecutable por el nucleo de sombreado 28 de la GPU 14 durante el tiempo de ejecucion (por ejemplo, en el momento en que estos programas de sombreado necesiten ejecutarse en el nucleo de sombreado 28). En algunos ejemplos, el compilador 24 puede compilar previamente los programas de sombreado y almacenar el objeto o codigo intermedio de los programas de sombreado en la memoria de sistema 16.
[0057] De manera similar al controlador de graficos 26, aunque no se ilustra, la memoria de sistema 16 puede almacenar el codigo para el compilador 24 que el procesador 12 recupere de la memoria de sistema 16 para su ejecucion. El compilador 24 se ilustra en una casilla discontinua para indicar que el compilador 24 es un software, que se ejecuta en hardware (por ejemplo, el procesador 12), en este ejemplo. Sin embargo, alguna funcionalidad del compilador 24 puede implementarse como hardware en el procesador 12, en algunos ejemplos.
[0058] El controlador de graficos 26 puede configurarse para permitir que el procesador 12 y la GPU 14 se comuniquen entre si. Por ejemplo, cuando el procesador 12 descarga tareas de procesamiento de graficos o sin graficos a la GPU 14, el procesador 12 descarga dichas tareas de procesamiento a la GPU 14 a traves del controlador de graficos 26.
[0059] Como ejemplo, el procesador 12 puede ejecutar una aplicacion de juegos que produzca datos graficos, y el procesador 12 puede descargar el procesamiento de estos datos graficos a la GPU 14. En este ejemplo, el procesador 12 puede almacenar los datos graficos en la memoria de sistema 16, y el controlador de graficos 26 puede indicar a la GPU 14 cuando recuperar los datos graficos, desde donde recuperar los datos graficos en la memoria de sistema 16 y cuando procesar los graficos datos. Ademas, la aplicacion de juegos puede requerir que la GPU 14 ejecute uno o mas programas de sombreado. Por ejemplo, la aplicacion de juegos puede requerir que el nucleo de sombreado 28 ejecute el sombreador de vertices 32 y el sombreador de fragmentos 34 para generar imagenes que se vayan a visualizar (por ejemplo, en la pantalla 18 de la FIG. 1). El controlador de graficos 26 puede ordenar a la GPU 14 cuando ejecutar los programas de sombreado y ordenar a la GPU 14 donde recuperar los datos de graficos necesarios para los programas de sombreado. De esta forma, el controlador de graficos 26 puede formar un enlace entre el procesador 12 y la GPU 14.
[0060] El controlador de graficos 26 se puede configurar de acuerdo con una API; aunque el controlador de graficos 26 no necesite limitarse a configurarse de acuerdo con una API particular. En un ejemplo en el que el dispositivo 10 es un dispositivo movil, el controlador de graficos 26 puede configurarse de acuerdo con la API de OpenGL ES. La API de OpenGL ES esta especfficamente disenada para dispositivos moviles. En un ejemplo en el que el dispositivo 10 es un dispositivo no movil, el controlador de graficos 26 puede configurarse de acuerdo con la API de OpenGL.
[0061] En las tecnicas descritas en esta divulgacion, el nucleo de sombreado 28 puede configurarse para ejecutar muchas instancias de la misma instruccion del mismo programa de sombreado en paralelo. Por ejemplo, el controlador de graficos 26 puede ordenar a la GPU 14 que recupere valores de vertice para una pluralidad de vertices y ordenar a la GPU 14 que ejecute el sombreador de vertice 32 para procesar los valores de vertices de los vertices. En este ejemplo, el nucleo de sombreado 28 puede ejecutar multiples instancias del sombreador de vertices 32 y hacerlo ejecutando una instancia del sombreador de vertices 32 en un elemento de procesamiento del nucleo de sombreado 28 para cada uno de los vertices.
[0062] Cada elemento de procesamiento del nucleo de sombreado 28 puede ejecutar la misma instruccion del sombreador de vertices 32 en la misma instancia; sin embargo, los valores de vertice particulares pueden ser diferentes porque cada elemento de procesamiento procesa un vertice diferente. Como se describio anteriormente, cada elemento de procesamiento puede considerarse como la ejecucion de un subproceso del sombreador de vertices 32, donde un subproceso se refiere a una instruccion del sombreador de vertices 32 que esta procesando un vertice particular. De esta manera, el nucleo de sombreado 28 puede ejecutar muchas instancias del sombreador de vertices 32 para procesar valores de vertice de una pluralidad de vertices en paralelo (por ejemplo, al mismo tiempo).
[0063] El nucleo de sombreado 28 puede ejecutar de manera similar muchas instancias del sombreador de fragmentos 34 para procesar valores de pfxeles de una pluralidad de pfxeles en paralelo o ejecutar muchas instancias del sombreador de calculo 36 para procesar muchos datos no relacionados con graficos en paralelo. De esta manera, el nucleo de sombreado 28 puede configurarse en una estructura de una sola instruccion, de datos multiples (SIMD). Para facilitar la descripcion, se describe lo siguiente con respecto a un programa de sombreado generico, cuyos ejemplos incluyen el sombreador de vertices 32, el sombreador de fragmentos 34, el sombreador de calculo 36 y otros tipos de sombreadores tales como los sombreadores de geometrfa.
5
10
15
20
25
30
35
40
45
50
55
60
65
[0064] Como tambien se describio anteriormente, el nucleo de sombreado 28 incluye un registro de uso general (GPR) para almacenar datos (por ejemplo, valores) generados por los elementos de procesamiento. Por ejemplo, un elemento de procesamiento puede incluir una pluralidad de etapas de ejecucion. Estas etapas de ejecucion pueden formarse en forma de canal (por ejemplo, una etapa de ejecucion alimenta datos a la siguiente etapa de ejecucion para el procesamiento). El resultado de la ultima etapa de ejecucion puede enviarse al GPR para el almacenamiento de datos.
[0065] En algunos ejemplos, al procesar una instruccion de un programa de sombreado, las etapas de ejecucion pueden producir un valor intermedio. Este valor intermedio puede ser necesario solamente temporalmente y, por lo tanto, puede que no sea necesario almacenar dicho valor intermedio en el GPR. Sin embargo, debido a la configuracion de canal del elemento de procesamiento, algunas tecnicas requieren el almacenamiento de un valor intermedio en el GPR, incluso si dicho almacenamiento no es necesario. Dicho almacenamiento puede consumir energfa innecesariamente al almacenar valores en el GPR, cuando dicho almacenamiento no sea necesario.
[0066] En las tecnicas descritas en esta divulgacion, el procesador 12, a traves del compilador 24, puede determinar si un valor intermedio necesita almacenarse en el GPR o no necesita almacenarse en el GPR. Si no es necesario almacenar el valor intermedio en el GPR, el procesador 12, a traves del compilador 24, puede indicarlo como tal. Como ejemplo, el procesador 12, a traves del compilador 24, puede incluir un indicador asociado con el valor intermedio. El indicador indica si el valor intermedio debe almacenarse en el GPR o no almacenarse. Un controlador dentro de un elemento de procesamiento del nucleo de sombreado 28 puede determinar si el valor intermedio debe almacenarse o no en base al indicador y si puede almacenar o no almacenar el valor intermedio en el GPR en base al indicador. En otras palabras, el controlador puede determinar si el valor intermedio debe almacenarse en el GPR en base, al menos en parte, a una indicacion recibida (por ejemplo, el indicador). El controlador puede evitar el almacenamiento del valor intermedio en el GPR si se determina que el valor intermedio no se almacena en el GPR. El controlador puede almacenar el valor intermedio en el GPR si se determina que el valor intermedio debe almacenarse en el GPR.
[0067] Por ejemplo, una instruccion de un programa de sombreado puede definir una pluralidad de operaciones (por ejemplo, variables que se multipliquen, se dividan, se sumen, se resten, o una combinacion). Durante la compilacion del programa de sombreado, el compilador 24 puede separar la pluralidad de operaciones en operaciones constituyentes y crear sub-instrucciones para procesar cada una de las operaciones constituyentes.
[0068] Como ejemplo, una instruccion de un programa de sombreado (denominada instruccion DP4) puede definir las siguientes operaciones: DP4 = X0*X1 + Y0*Y1 + Z0*Z1 + W0*W1. En este ejemplo, X0*X1, Y0*Y1, Z0*Z1 y W0*W1 pueden considerarse operaciones constitutivas para la pluralidad de operaciones definidas por la instruccion DP4 porque cada una de estas operaciones forma parte de la pluralidad de operaciones definidas por la instruccion DP4.
[0069] En este ejemplo ilustrativo, el compilador 24 puede separar la instruccion DP4 en las siguientes sub- instrucciones:
Sub-instruccion 1: R0 = X0*X1;
Sub-instruccion 2: R1 = Y0*Y1;
Sub-instruccion 3: R2 = Z0*Z1 + R0;
Sub-instruccion 4: R3 = W0*W1 + R1;
Sub-instruccion 5: R4 = R2 + R3.
[0070] En este ejemplo, R4 es igual al valor final de la instruccion DP4, que se produce ejecutando una pluralidad de sub-instrucciones. Por ejemplo, las etapas de ejecucion de un elemento de procesamiento pueden ejecutar las sub-instrucciones de ejemplo anteriores en forma de canal, donde cada sub-instruccion produzca un valor intermedio a partir de una operacion constituyente que se use para generar el valor final. Por ejemplo, en el ejemplo anterior, R0, R1, R2 y R3 son todos valores intermedios que se calculan como parte de la determinacion del valor final R4, pero no son el valor final en si mismos. En el ejemplo anterior, el GPR puede almacenar el valor R4 como resultado de la instruccion DP4.
[0071] Como se puede ver en las sub-instrucciones anteriores, despues de la sub-instruccion 3, el valor intermedio R0 ya no es necesario, despues de la sub-instruccion 4, el valor intermedio R1 ya no es necesario y, despues de la sub-instruccion 5, los valores intermedios R2 y R3 ya no son necesarios. Sin embargo, en algunas tecnicas, debido a la estructura de canal de los elementos de procesamiento del nucleo de sombreado 28, los valores intermedios R0, R1, R2 y R3 se almacenan en el GPR incluso despues de que ya no se necesiten.
[0072] En las tecnicas descritas en la divulgacion, el compilador 24 puede escanear las sub-instrucciones para determinar si algun valor intermedio no necesita almacenarse en el GPR y puede indicar como tal cualquier valor intermedio que no sea necesario para el almacenamiento en el GPR. Por ejemplo, en el ejemplo anterior, el compilador 24 puede determinar que el valor intermedio R0 ya no es necesario despues de la sub-instruccion 3, que
5
10
15
20
25
30
35
40
45
50
55
60
65
el valor intermedio R1 ya no es necesario despues de la sub-instruccion 4 y que los valores intermedios R2 y R3 ya no son necesarios despues de la sub-instruccion 5.
[0073] En algunos ejemplos, el procesador 12, a traves del compilador 24, puede incluir una indicacion con un valor intermedio que indique que el valor intermedio ya no es necesario para realizar las operaciones definidas por la instruccion del programa de sombreado. Por ejemplo, cuando ya no se necesite un valor intermedio, el compilador 24 puede indicar que es el ultimo uso (LU) del valor intermedio, lo que significa el final del ciclo de vida del valor intermedio. Como ejemplo, el compilador 24 puede incluir un indicador LU que indique el ultimo uso del valor intermedio en las sub-instrucciones. Por ejemplo, las siguientes sub-instrucciones incluyen el indicador LU que indica el final del ciclo de vida de los valores intermedios.
Sub-instruccion 1': R0 = X0*X1;
Sub-instruccion 2': R1 = Y0*Y1;
Sub-instruccion 3': R2 = Z0*Z1 + (LU) R0;
Sub-instruccion 4': R3 = W0*W1 + (LU) R1;
Sub-instruccion 5': R4 = (LU) R2 + (LU) R3.
[0074] En las tecnicas descritas en esta divulgacion, un controlador dentro de un elemento de procesamiento puede leer los indicadores de LU para determinar que un valor intermedio no debe almacenarse en el GPR. En estos ejemplos, el controlador puede saltar el almacenamiento (por ejemplo, evitar el almacenamiento) de los valores intermedios en el GPR, lo que a su vez puede reducir la cantidad de energfa consumida por la GPU 14. Sin embargo, si el indicador LU no se afirma para ciertos valores intermedios, el controlador puede determinar que el valor intermedio debe almacenarse en el GPR, y puede almacenar el valor intermedio en el GPR.
[0075] La FIG. 3 es un diagrama de bloques que ilustra un ejemplo de un nucleo de sombreado de una GPU de la FIG. 2 en mayor detalle. Por ejemplo, la FIG. 3 ilustra un ejemplo del nucleo de sombreado 28 de la GPU 14. El nucleo de sombreado 28 puede incluir la unidad de control 38, la memoria de instrucciones 40, uno o mas elementos de procesamiento 42A-42H (denominados colectivamente como "elementos de procesamiento 42") y el registro de uso general (GPR) 44. El GPR 44 puede almacenar datos y, por lo tanto, tambien puede denominarse memoria de datos. Aunque la FIG. 3 ilustre ocho elementos de procesamiento 42, puede haber mas o menos de ocho elementos de procesamiento 42 en otros ejemplos. Los elementos de procesamiento 42 son ejemplos de elementos de procesamiento en cuyas instancias del programa de sombreado se ejecutan en paralelo.
[0076] La unidad de control 38 puede controlar la funcionalidad del sombreador 28. Por ejemplo, la unidad de control 38 puede recuperar las instrucciones que se vayan a ejecutar procesando los elementos 42 y almacenar las instrucciones en la memoria de instrucciones 40. Ademas, la unidad de control 38 puede recuperar los valores (por ejemplo, datos) de los elementos de procesamiento 42 para procesar y almacenar los valores en la memoria de datos 44.
[0077] La memoria de instrucciones 40 puede ser cualquier tipo de memoria capaz de almacenar instrucciones tales como, pero no limitadas a, memoria volatil, memoria no volatil, memoria cache, memoria de acceso aleatorio (RAM), RAM estatica (SRAM), RAM dinamica (DRAM), etc. La unidad de control 38 puede ser una circuiterfa cableada del nucleo de sombreado 28 que controle los componentes del nucleo de sombreado 28. Sin embargo, puede ser posible que la unidad de control 38 sea software o firmware, que se ejecute en hardware, del nucleo de sombreado 28.
[0078] Los elementos de procesamiento 42 estan configurados para ejecutar subprocesos de un programa de sombreado. Cada uno de los elementos de procesamiento 42 puede ejecutar un subproceso diferente. Por ejemplo, cada uno de los elementos de procesamiento 42 puede ejecutar una instancia de una instruccion de un programa de sombreado con respecto a elementos de datos potencialmente diferentes. Los elementos de procesamiento 42 pueden ser elementos de procesamiento de una sola instruccion, de datos multiples (SIMD). Los elementos de procesamiento SIMD se refieren a elementos de procesamiento que, cuando se activan, estan configurados para ejecutar la misma instruccion al mismo tiempo con respecto a datos diferentes. Esto puede permitir que los elementos de procesamiento 42 ejecuten una pluralidad de subprocesos de un programa de sombreado en paralelo con respecto a diferentes elementos de datos. En algunos casos, cada uno de los elementos de procesamiento 42 puede ejecutar instrucciones de un programa de sombreado en base a un contador de programa comun que apunte a una instruccion contenida en la memoria de instrucciones 40.
[0079] Si uno o mas de los elementos de procesamiento 42 se desactivan por la unidad de control 38, dichos elementos de procesamiento 42 no ejecutan una instruccion de programa para un ciclo de instruccion dado. En algunos casos, la unidad de control 38 puede desactivar uno o mas de los elementos de procesamiento 42 para implementar instrucciones de ramificacion condicional donde la condicion de ramificacion se satisfaga para algunos subprocesos y no se satisfaga para otros subprocesos.
[0080] En algunos ejemplos, cada uno de los elementos de procesamiento 42 puede incluir y/o corresponder a una o mas unidades logicas aritmeticas (ALU). En ejemplos adicionales, cada uno de los elementos de procesamiento 42
5
10
15
20
25
30
35
40
45
50
55
60
65
puede implementar la funcionalidad ALU. La funcionalidad ALU puede incluir suma, resta, multiplicacion, etc.
[0081] De acuerdo con las tecnicas descritas en esta divulgacion, el compilador 24 puede separar una instruccion que defina una pluralidad de operaciones en sub-operaciones e indicar que valores intermedios no son necesarios para almacenarse en el GPR de los respectivos elementos de procesamiento 42. Por ejemplo, la memoria de instrucciones 40 puede almacenar una sub-instruccion con un valor de indicador asociado con un valor intermedio que indique si es el ultimo uso del valor intermedio, donde la sub-instruccion se derive de la instruccion que define una pluralidad de operaciones y que realiza una de las operaciones constituyentes. Un controlador dentro de los respectivos elementos de procesamiento 42 puede determinar si el valor intermedio debe almacenarse en el GPR o no, y saltar el almacenamiento (por ejemplo, evitar el almacenamiento) si no es necesario el almacenamiento del valor intermedio, como lo indica el valor de indicador, o almacenar si se necesita el almacenamiento.
[0082] La FIG. 4 es un diagrama de bloques que ilustra un ejemplo de un elemento de procesamiento de un nucleo de sombreado de la FIG. 3 en mayor detalle. Por ejemplo, la FIG. 4 ilustra el elemento de procesamiento 42A. Los elementos de procesamiento 42B-42H pueden incluir componentes similares a los descritos con respecto al elemento de procesamiento 42A. Como se ilustra, el elemento de procesamiento 42A incluye la estructura de canal 46, el controlador 48, la logica de reenvfo (FW) 54A y 54B y el reloj 56. La estructura de canal 46 incluye las etapas de ejecucion 50A-50C (denominadas colectivamente etapas de ejecucion 50). Como se ilustra, la estructura de canal 46 incluye tres etapas de ejecucion 50. Sin embargo, la estructura de canal 46 puede incluir mas o menos de tres etapas de ejecucion 50 en diferentes ejemplos.
[0083] Cada una de las etapas de ejecucion 50 realiza una funcion por ciclo de reloj desde el reloj 56. Por ejemplo, cada una de las etapas de ejecucion 50 puede configurarse para realizar una operacion aritmetica tal como una operacion constituyente de la pluralidad de operaciones definidas por una instruccion de un programa de sombreado. Cada una de las etapas de ejecucion 50 puede transmitir el resultado de la operacion aritmetica a la siguiente etapa de ejecucion 50 en un borde ascendente o descendente del reloj 56. De esta manera, las etapas de ejecucion 50 forman la estructura de canal 46 en la que las operaciones constituyentes de la pluralidad de operaciones definidas por una instruccion se llevan a cabo en forma de canal.
[0084] El controlador 48 puede estar configurado para transmitir las sub-instrucciones que deba realizar cada una de las etapas de ejecucion 50. Por ejemplo, como se describio anteriormente, la unidad de control 38 del nucleo de sombreado 28 puede cargar las instrucciones, incluidas las sub-instrucciones segun lo determine el compilador 24, de un programa de sombreado en la memoria de instrucciones 40. El controlador 48 del elemento de procesamiento 42A puede recuperar las sub-instrucciones de la memoria de instrucciones 40 y los valores de datos que formen los operandos para las operaciones constituyentes. El controlador 48 puede alimentar los operandos (por ejemplo, los valores de datos) a las respectivas etapas de ejecucion 50. Ademas, si una cualquiera de las etapas de ejecucion 50 es procesar los datos resultantes de otra de las etapas de ejecucion 50, entonces los datos de la otra de las etapas de ejecucion 50 tambien pueden ser un operando en la operacion constitutiva que se vaya a realizar.
[0085] Como tambien se ilustra, la estructura de canal 46 puede incluir logica de reenvfo tal como la logica de reenvfo 54A y la logica de reenvfo 54B. La logica de reenvfo 54A y 54B se puede considerar como logica interna de reenvfo ALU. Por ejemplo, en la estructura de canal 46, puede haber algun beneficio de poder transmitir resultados de retorno de una de las etapas de ejecucion 50 a una anterior de las etapas de ejecucion 50. Por ejemplo, una de las etapas de ejecucion 50 puede generar un valor intermedio que se forme como un operando para otra operacion constitutiva que este mas temprano en la estructura de canal 46. Con la logica de reenvfo 54A y 54B, una de las etapas de ejecucion 50 puede ser capaz de reenviar el valor a una etapa anterior de ejecucion 50 en la estructura de canal 46.
[0086] Ademas, aunque no se ilustra en la FIG. 4, en algunos ejemplos, el elemento de procesamiento 42A puede incluir una logica de reenvfo adicional para compensar la latencia asociada al acceso al GPR 44. Por ejemplo, dichas unidades logicas de reenvfo de compensacion de latencia pueden permitir que la salida de la etapa de ejecucion 50C retroalimente a la etapa de ejecucion 50A.
[0087] En algunas otras tecnicas, incluso en aquellas que inclufan la logica de reenvfo de compensacion de latencia, el GPR 44 almacenaba siempre la salida de la etapa de ejecucion 50C, incluso si dicho almacenamiento no era necesario. Por ejemplo, en la estructura de canal 46, todos los valores de una etapa anterior de ejecucion 50 pasan a la siguiente etapa de ejecucion 50. Esto puede ser cierto incluso si el valor se reenvfa. Por ejemplo, la salida de la etapa de ejecucion 50C puede retroalimentarse a la logica de reenvfo 54B y puede transmitirse a la GPR 44. Por lo tanto, todos los valores intermedios pueden desplazarse a traves de las etapas de ejecucion 50 y, en estas otras tecnicas, todos los valores intermedios se almacenaran en el GPR 44.
[0088] Como ilustracion, un ejemplo anterior de una instruccion fue X0*X1 + Y0*Y1 + Z0*Z1 + W0*W1, con las siguientes sub-instrucciones:
Sub-instruccion 1: R0 = X0*X1; Sub-instruccion 2: R1 = Y0*Y1;
5
10
15
20
25
30
35
40
45
50
55
Sub-instruccion 3: R2 = Z0*Z1 + R0;
Sub-instruccion 4: R3 = W0*W1 + R1;
Sub-instruccion 5: R4 = R2 + R3.
[0089] En el pseudocodigo, lo anterior se puede procesar de la siguiente manera mediante etapas de ejecucion 50, vistas desde la perspectiva de la etapa de ejecucion 50A:
Ciclo 0: R0 = X0*X1;
Ciclo 1: R1 = Y0*Y1;
Ciclo 2: R2 = Z0*Z1 + R0; //R0 se reenvfa en FW 54B
Ciclo 3: R3 = W0*W1 + R1; //R1 se reenvfa en FW54B
Ciclo 4: NOP; //R0 escribir al GPR 44
Ciclo 5: NOP; //R1 escribir al GPR 44, R2 se reenvfa en FW54A
Ciclo 6: R4 = R2 + R3; // R2 escribir al GPR 44, R3 se reenvfa en FW54B
Ciclo 7: NOP; //R3 escribir al GPR 44
[0090] En el ejemplo anterior, escribir R0, R1, R2 y R3 al GPR 44 en ciclos 4, 5, 6 y 7, respectivamente, es innecesario. Por ejemplo, despues del ciclo 2, R0 ya no es necesario, despues del ciclo 3, R1 ya no es necesario y, despues del ciclo 6, R2 y R3 ya no son necesarios. Sin embargo, en estas otras tecnicas, R0, R1 y R2 se escriben en el GPR 44 en los ciclos 4, 5 y 6, respectivamente, y despues de que estos valores ya no sean necesarios para determinar el valor final de la instruccion DP4, y se escribe R3 al GPR 44 en el ciclo 7, aunque ya no se necesite R3 para determinar el valor final de la instruccion DP4.
[0091] La siguiente tabla es un ejemplo que ilustra las funciones realizadas por cada una de las etapas de ejecucion 50 para el ejemplo anterior.
Tabla 1. Momento de las operaciones a traves de las etapas de ejecucion
T1 T2 T3 T4 T5 T6 T7 T8
Etapa 50A
X0, X1 Y0, Y1 Z0, Z1 W0, W1 R2
Etapa 50B
R0 = X0*X1 R1 = Y0*Y1 R2 = Z0*Z1 + R0 R3 = W0*W1 + R1 R4 = R2+R3
Etapa 50C
R0 R1 R2 R3 R4
[0092] Como se ilustra en la Tabla 1, en el tiempo T1, la etapa de ejecucion 50A recibe los valores de X0 y X1 de la memoria de datos 40 a traves del controlador 48. En el tiempo T2, el controlador 48 provee a la etapa de ejecucion 50B con la sub-instruccion que causa que la etapa de ejecucion 50B determine el valor intermedio R0 multiplicando X0 y X1 y, en el tiempo T2, la etapa de ejecucion 50A recibe los valores de Y0 e Y1 de la memoria de datos 40 a traves del controlador 48.
[0093] En el tiempo T3, la etapa de ejecucion 50C recibe el valor intermedio R0, y el controlador 48 provee a la etapa de ejecucion 50B con la sub-instruccion que causa que la etapa de ejecucion 50B determine el valor intermedio R1 multiplicando Y0 e Y1. Ademas, en el tiempo T3, la etapa de ejecucion 50A recibe los valores de Z0 y Z1 de la memoria de datos 40 a traves del controlador 48. Ademas, el valor intermedio R0 se reenvfa a la etapa de ejecucion 50B a traves de FW 54B. En este ejemplo, la etapa de ejecucion 50C escribe el valor intermedio R0 (innecesariamente) en el GPR 44.
[0094] En el tiempo T4, la etapa de ejecucion 50C recibe el valor intermedio R1, y la etapa de ejecucion 50C reenvfa R1 a la etapa de ejecucion 50B a traves de FW 54B. Tambien, en el tiempo T4, el controlador 48 provee a la etapa de ejecucion 50B con la sub-instruccion que causa que la etapa de ejecucion 50B determine el valor intermedio R2 multiplicando Z0 y Z1 y sumando el resultado a R0. Ademas, en el tiempo T4, la etapa de ejecucion 50A recibe los valores de W0 y W1 de la memoria de datos 40 a traves del controlador 48. En este ejemplo, la etapa de ejecucion 50C escribe el valor intermedio R1 (innecesariamente) en el GPR 44.
[0095] En el tiempo T5, la etapa de ejecucion 50C recibe el valor intermedio R2 y, en este ejemplo, la etapa de ejecucion 50C escribe el valor intermedio R2 (innecesariamente) en el GPR 44. El controlador 48 provee a la etapa de ejecucion 50B con la sub-instruccion que causa que la etapa de ejecucion 50B determine el valor intermedio R3 multiplicando W0 y W1 y sumando el resultado a R3.
[0096] En el tiempo T6, la etapa de ejecucion 50C escribe el valor intermedio R3 (innecesariamente) al GPR 44, reenvfa el valor intermedio R3 a la etapa de ejecucion 50B y la etapa de ejecucion 50A recibe el valor intermedio R2. En el tiempo T7, la etapa de ejecucion 50B calcula R4 sumando el valor intermedio R2 y el valor intermedio R3. En el tiempo T8, la etapa de ejecucion 50C almacena el valor R4 al GPR 44.
5
10
15
20
25
30
35
40
45
50
55
60
65
[0097] En el ejemplo anterior, el almacenamiento de los valores intermedios R0, R1, R2 y R3 al GPR 44 es innecesario porque estos valores no son necesarios despues del ultimo uso. Sin embargo, estos valores intermedios aun pasan a traves de las diversas etapas de ejecucion 50 para el almacenamiento eventual en el GPR 44. En las tecnicas descritas en esta divulgacion, el compilador 24 puede determinar el final del ciclo de vida (por ejemplo, el ultimo uso) de un valor intermedio e incluir una indicacion (por ejemplo, un indicador) asociada con el valor intermedio. En estos ejemplos, el valor intermedio, incluso si no se va a almacenar en el GPR 44, todavfa se desplaza por las etapas de ejecucion 50. Sin embargo, el controlador 48 lee el indicador asociado con el valor intermedio y, en base al valor del indicador, no almacena el valor intermedio en el GPR 44 (por ejemplo, salta el almacenamiento del valor intermedio).
[0098] Por ejemplo, el compilador 24 puede escanear a traves de las sub-instrucciones 1-5 de una instruccion de un programa de sombreado. Si se genera un operando (por ejemplo, entrada a una sub-instruccion) en una sub- instruccion anterior (por ejemplo, es un valor intermedio), el compilador 24 puede determinar cuando ya no se necesita ese valor intermedio para determinar el valor final de la instruccion. Por ejemplo, el compilador 24 puede determinar el ultimo uso del valor intermedio en las sub-instrucciones. En base al ultimo uso determinado, el compilador 24 puede incluir un indicador de ultimo uso (LU) con el valor intermedio. En otras palabras, el indicador LU indica que el ciclo de vida de los datos se finaliza despues que se usa (por ejemplo, se lee), independientemente de si se lee desde los canales hacia adelante, la logica de compensacion de latencia o el GPR 44.
[0099] El controlador 48 puede configurarse para leer el valor indicador asociado con el valor intermedio y determinar si el valor intermedio debe almacenarse en el GPR 44 o no. Por ejemplo, como se describio anteriormente, diversas etapas de ejecucion 50 pueden enviar datos a traves de la logica de reenvfo 54A o 54B y/o a traves de las unidades logicas de compensacion de latencia. En algunos ejemplos, el controlador 48 puede determinar que se estan reenviando valores intermedios. Si el controlador 48 determina que el indicador asociado con el valor intermedio indica el ultimo uso del valor intermedio y el controlador 48 determina que el valor intermedio se esta reenviando (por ejemplo, la logica de reenvfo 54A o 54B y la una o mas unidades logicas de compensacion de latencia estan "activas"), entonces el controlador 48 puede determinar que el valor intermedio no necesita almacenarse en el GPR 44. En estos ejemplos, el controlador 48 puede saltar el almacenamiento (por ejemplo, evitar el almacenamiento) del valor intermedio en el GPR 44.
[0100] Como se describio anteriormente, en algunos ejemplos, ademas de determinar si se afirma el indicador LU (por ejemplo, uno digital), el controlador 48 puede determinar si el valor intermedio asociado con el indicador LU se esta reenviando. En algunos ejemplos, el controlador 48 puede evitar almacenar el valor intermedio solamente si se afirma el indicador LU asociado y se reenvfa el valor intermedio. Por ejemplo, incluso si se afirma el indicador LU, pero el valor intermedio no se reenvfa, el controlador 48 aun puede almacenar el valor intermedio en el GPR 44. En otras palabras, si el controlador 38 determina que el valor intermedio no se reenvfa, entonces el controlador 48 puede almacenar el valor intermedio en el GPR incluso si se indica que el valor intermedio no se almacena en el GPR. Por ejemplo, en algunos ejemplos, debido a la latencia de busqueda de instrucciones o si el elemento de procesamiento 42A pierde el arbitraje a otro subproceso, entonces puede ser necesario almacenar el valor intermedio en el GPR 44, pero no reenviarlo. Por lo tanto, en algunos ejemplos, el controlador 48 puede evitar almacenar un valor intermedio tanto si se afirma el indicador de LU como si se determina que el valor intermedio se reenvfa.
[0101] Como ilustracion, la divulgacion describe un pseudocodigo para los valores que se procesan a traves de las etapas de ejecucion 50 en el ejemplo en el que los valores intermedios se almacenan innecesariamente en el GPR 44. El siguiente pseudocodigo ilustra el ultimo indicador de uso (LU), asf como tambien indica que el valor intermedio se esta reenviando para que el controlador 48 determine que no es necesario almacenar el valor intermedio. El siguiente pseudocodigo se basa en las sub-instrucciones que incluyen el indicador LU, que como se describio anteriormente fueron:
Sub-instruccion 1': R0 = X0*X1;
Sub-instruccion 2': R1 = Y0*Y1;
Sub-instruccion 3': R2 = Z0*Z1 + (LU) R0;
Sub-instruccion 4': R3 = W0*W1 + (LU) R1;
Sub-instruccion 5': R4 = (LU)R2 + (LU) R3.
[0102] El pseudo-codigo con el indicador LU es el siguiente:
Ciclo 0: R0 = X0*X1;
Ciclo 1: R1 = Y0*Y1;
Ciclo 2: R2 = Z0*Z1 + (LU) R0; //R0 se reenvfa en FW 54B
Ciclo 3: R3 = W0*W1 + (LU) R1; //R1 se reenvfa en FW54B
Ciclo 4: NOP; //saltar R0 y escribir al GPR 44 porque se produjo el reenvfo en FW 54B
Ciclo 5: NOP; //saltar R1 y escribir al GPR 44 porque se produjo un reenvfo en FW 54B
Ciclo 6: R4 = R2 + R3; //saltar R2 y escribir al GPR 44 porque la unidad logica de compensacion de latencia se
producira a continuacion
5
10
15
20
25
30
35
40
45
50
55
60
65
Ciclo 7: NOP; //saltar R3 y escribir al GPR 44, porque se reenvfa la unidad logica de compensacion de
latencia, R2 se reenvfa a traves de una primera de las unidades logicas de compensacion de latencia, R3 se reenvfa a traves de una segunda de las unidades logicas de compensacion de latencia.
[0103] Como se describio anteriormente, en algunos ejemplos, el controlador 48 puede determinar si se produce el reenvfo de un valor intermedio, como parte de la determinacion de si se debe evitar el almacenamiento del valor intermedio en el GPR 44. Como ejemplo, supongamos que, en el pseudocodigo anterior, hubo un retraso de tres ciclos al recuperar la parte de sub-instruccion de Z0*Z1 para el ciclo 2 de la memoria de instrucciones 40. Este retardo podrfa deberse a la latencia de busqueda de instrucciones o la unidad de control 38 determina que se deberfa ejecutar un subproceso de mayor prioridad en el elemento de procesamiento 42A, ya que son posibles dos ejemplos y otras razones para el retardo.
[0104] En este caso, aun se puede necesitar el valor intermedio R0, pero se afirma el indicador LU. Debido a que R0 no se habrfa reenviado, el controlador 48 puede determinar que el valor intermedio R0 se debe almacenar en el GPR 44, incluso aunque se afirme el indicador LU. En otras palabras, en este caso, incluso aunque se afirme el indicador LU, el controlador 48 puede no evitar el salto del almacenamiento del valor intermedio R0. Sin embargo, si no hubiera retardo, entonces se reenviarfa el valor intermedio R0 y se afirmarfa su indicador LU asociado (por ejemplo, se establece en 1 o 0, segun sea el caso, para indicar si es el ultimo uso de los datos); por lo tanto, el controlador 48 evitarfa almacenar el valor intermedio R0 en el GPR 44.
[0105] En la FIG. 4, se ilustran tres etapas de ejecucion 50 y dos conjuntos de logica de reenvfo 54A y 54B. En algunos ejemplos, las etapas de ejecucion 50 adicionales y la logica de reenvfo adicional pueden reducir ademas la cantidad de datos que deben escribirse en el GPR 44. Por ejemplo, el compilador 24 puede realizar un escaneo mas profundo de las sub-instrucciones (por ejemplo, escanear mas sub-instrucciones) porque hay mas posibilidades de reenviar valores intermedios. Como hay mas posibilidades de reenviar valores intermedios, el compilador 24 puede identificar mas casos en los que el controlador 48 pueda saltar el almacenamiento de valores intermedios en el GPR 44. Por ejemplo, el compilador 24 puede identificar mas valores intermedios con un ciclo de vida corto (que tiende a ser el caso para muchos programas de sombreado), o el compilador 24 puede optimizar el programa de sombreado para que haya mas casos con valores intermedios con ciclos de vida cortos.
[0106] Ademas, debido a que hay menos lecturas y escrituras en el GPR 44, las tecnicas no solo reducen el consumo de energfa, sino que las tecnicas descritas en esta divulgacion pueden mejorar el rendimiento de otras maneras. Por ejemplo, el elemento de procesamiento 42A puede estar disponible antes que en otras tecnicas para propositos tales como lecturas de textura, carga/almacenamiento de memoria, etc. Por ejemplo, en otras tecnicas, el elemento de procesamiento 42A puede almacenar datos innecesariamente en el GPR 44, lo que causa la cantidad de tiempo que el elemento de procesamiento 42A se asigna a un subproceso particular que se vaya a aumentar. Con las tecnicas descritas en esta divulgacion, el elemento de procesamiento 42A esta disponible antes para procesar el siguiente subproceso, tal como un subproceso para leer textura o cargar/almacenar memoria, antes porque el elemento de procesamiento 42A puede no almacenar datos que posteriormente no se necesiten. De esta manera, el aumento en el rendimiento tambien permite que el GPR 44 este disponible antes para escribir y leer en otros clientes de escritura/lectura para el acceso, ya que ocurren menos escrituras y lecturas y el GPR 44 se vuelve libre para dicho procesamiento antes.
[0107] La FIG. 5 es un diagrama de flujo que ilustra una tecnica de ejemplo de valores de procesamiento. En el ejemplo ilustrado en la FIG. 5, un elemento de procesamiento recibe una pluralidad de sub-instrucciones de una instruccion de un programa (por ejemplo, un programa de sombreado) (100). La instruccion define una pluralidad de operaciones, y cada una de las sub-instrucciones define una operacion constituyente de la pluralidad de operaciones. Por ejemplo, una unidad de procesamiento (por ejemplo, la GPU 14) incluye un nucleo (por ejemplo, el nucleo de sombreado 28). El nucleo incluye una memoria de instrucciones (por ejemplo, la memoria de instrucciones 40), un GPR (por ejemplo, el GPR 44) y al menos un elemento de procesamiento (por ejemplo, al menos uno de los elementos de procesamiento 42), y el al menos un elemento de procesamiento incluye una controlador (por ejemplo, el controlador 48) y una estructura de canal (por ejemplo, la estructura de canal 46) que tiene una pluralidad de etapas de ejecucion (por ejemplo, las etapas de ejecucion 50).
[0108] Como ejemplo, el controlador 48 esta configurado para recibir la pluralidad de sub-instrucciones (por ejemplo, las sub-instrucciones 1'-5') de la instruccion (por ejemplo, la instruccion DP4) de un programa de sombreado. Las sub-instrucciones 1'-5' definen cada una operacion constituyente de la pluralidad de operaciones definidas por la instruccion DP4. Ademas, en este ejemplo, cada uno de los elementos de procesamiento 42 puede configurarse para ejecutar las mismas sub-instrucciones 1'-5' de la misma instruccion al mismo tiempo (por ejemplo, en paralelo).
[0109] El elemento de procesamiento tambien puede recibir una indicacion de al menos un valor intermedio generado por la ejecucion de una de las sub-instrucciones que indica si el valor intermedio debe almacenarse en un GPR (102). Por ejemplo, la sub-instruccion 1' genero el valor intermedio R0. En este ejemplo, el controlador 48 recibio una indicacion (por ejemplo, el indicador LU) para el valor intermedio R0 en la sub-instruccion 3' que indica si el valor intermedio R0 debe almacenarse en el GPR 44. Lo mismo ocurre con los valores intermedios R1, R2 y R3,
5
10
15
20
25
30
35
40
45
50
55
60
65
pero con respecto a diferentes sub-instrucciones.
[0110] El controlador puede determinar si el valor intermedio debe almacenarse en el GPR en base al menos en parte a la indicacion recibida (104). Por ejemplo, cuando se este ejecutando la sub-instruccion 3' en una de las etapas de ejecucion 50, el controlador 48 puede determinar si el valor intermedio R0 debe almacenarse en el GPR 44 en base al indicador LU asociado con el valor intermedio R0. El controlador 48 puede determinar de manera similar si los valores intermedios R1, R2 y R3 deben almacenarse en el GPR 44. Por ejemplo, cuando la indicacion de que el controlador 48 indica que el valor intermedio no debe almacenarse en el GPR 44, la indicacion (por ejemplo, el indicador LU) tambien indica el ultimo uso del valor intermedio en la pluralidad de sub-instrucciones. Despues del ultimo uso, el valor intermedio ya no es necesario por ninguna de las otras sub-instrucciones para determinar el valor final de la pluralidad de operaciones definidas por la instruccion.
[0111] En algunos ejemplos, el controlador 48 tambien puede determinar si el valor intermedio se reenvfa a una etapa de ejecucion anterior desde una etapa de ejecucion que ejecuto la sub-instruccion que genero el valor intermedio. Por ejemplo, las etapas de ejecucion 50 estan dispuestas como un canal en la estructura de canal 46. El controlador 48 puede determinar que el valor intermedio R0 se reenvfa a traves de la logica de reenvfo 54B a una etapa de ejecucion anterior. Como otro ejemplo, el controlador 48 puede determinar que los valores intermedios R2 y R3 se estan reenviando a traves de unidades logicas de retardo de compensacion de latencia. En dichos ejemplos, el controlador 48 puede determinar si el valor intermedio debe almacenarse en el GPR 44 en base, al menos en parte, a la indicacion recibida y a la determinacion de si el valor intermedio se reenvfa. Por ejemplo, si se determina que el valor intermedio no se reenvfa a la etapa de ejecucion anterior, el controlador 48 puede almacenar el valor intermedio en el GPR 44 incluso si se indica que el valor intermedio no se debe almacenar en el GPR 44.
[0112] El controlador puede evitar el almacenamiento del valor intermedio si se determina que el valor intermedio no debe almacenarse en el GPR (106). Por ejemplo, el controlador 48 puede saltar el almacenamiento del valor intermedio en el GPR 44, en base a la determinacion de que el valor intermedio no debe almacenarse en el GPR en base a la indicacion, para evitar el almacenamiento innecesario de datos en el GPR 44. Sin embargo, si se determina que el valor intermedio debe almacenarse en el GPR 44 (por ejemplo, sin indicador LU), el controlador 48 puede almacenar el valor intermedio en el GPR 44. En las tecnicas descritas en la divulgacion, las etapas de ejecucion 50 ejecutan las sub-instrucciones para generar un valor final a partir de la pluralidad de operaciones definidas por la instruccion, donde el valor final se genera a partir del valor intermedio que funciona como un operando a una de las sub-instrucciones. Si bien el controlador 48 puede no almacenar valores intermedios en el GPR 44 que no necesitan almacenarse, el controlador 48 puede almacenar el valor final en el GPR 44 como se muestra en la etapa de ejecucion 50C al final de las sub-instrucciones.
[0113] La FIG. 6 es un diagrama de flujo que ilustra una tecnica de ejemplo de compilacion. En el ejemplo ilustrado en la FIG. 6, el compilador 24, que se ejecuta en el procesador 12, puede determinar una pluralidad de sub- instrucciones a partir de una instruccion de un programa (110). La instruccion define una pluralidad de operaciones, y cada sub-instruccion define una operacion constituyente de la pluralidad de operaciones. Por ejemplo, el compilador 24, que se ejecuta en el procesador 12, puede determinar las sub-instrucciones 1-5 de la instruccion DP4.
[0114] El compilador 24, que se ejecuta en el procesador 12, puede determinar un ultimo uso para al menos un valor intermedio que se generara mediante la ejecucion de una de las sub-instrucciones (112). Por ejemplo, el compilador 24 puede determinar que el valor intermedio ya no es necesario por la pluralidad de sub-instrucciones para generar un valor final a partir de la pluralidad de operaciones definidas por la instruccion. Por ejemplo, en la sub-instruccion 3, el compilador 24 puede determinar que el valor intermedio R0 ya no es necesario por la pluralidad de sub-instrucciones (por ejemplo, ningun ciclo necesitara el valor intermedio R0 de nuevo) para generar el valor final a partir de la pluralidad de operaciones definido por la instruccion DP4. Por ejemplo, para generar R4, ya no se necesita el valor intermedio R0 porque el valor intermedio R2 ya incluye el valor del valor intermedio R0 (por ejemplo, R2 se genera a partir del valor intermedio R0).
[0115] El compilador 24, a traves del procesador 12, puede indicar el ultimo uso del al menos un valor intermedio en base a la determinacion (114). Por ejemplo, el compilador 24 puede incluir un indicador que indique el ultimo uso del al menos un valor intermedio en una de las sub-instrucciones que usa el valor intermedio como un operando. Por ejemplo, en la sub-instruccion 3', el valor intermedio R0 es un operando. En este ejemplo, el compilador 24 puede incluir el indicador LU con el valor intermedio R0 para producir la sub-instruccion 3'. El indicador LU con el valor intermedio R0 en la sub-instruccion 3' indica el ultimo uso del valor intermedio R0. En otras palabras, la sub- instruccion 3' es la ultima instruccion para usar el valor intermedio R0 como un operando.
[0116] Ademas, como se describio anteriormente, indicar el ultimo uso del al menos un valor intermedio tambien indica que el al menos un valor intermedio no necesita almacenarse en un GPR. Por ejemplo, el controlador 48 puede leer el indicador LU y determinar que el valor intermedio asociado con el indicador LU no necesita almacenarse en el GPR 44 para procesar el elemento 42A, que ejecuta las sub-instrucciones, del nucleo de sombreado 28 de la GPU 14.
5
10
15
20
25
30
35
40
45
50
[0117] El procesador 12 puede almacenar las sub-instrucciones compiladas (por ejemplo, las sub-instrucciones 1'5') en la memoria de sistema 16 como el codigo de programa de sombreado. La GPU 14 puede recuperar las instrucciones del programa de sombreado, incluidas las sub-instrucciones 1'-5', desde la memoria de sistema 16, cuando asf lo ordene el controlador de graficos 28. Cada uno de los elementos de procesamiento 42 puede ejecutar las sub-instrucciones 1'-5' al mismo tiempo (por ejemplo, en paralelo).
[0118] En uno o mas ejemplos, las funciones descritas pueden implementarse en hardware, software, firmware o en cualquier combinacion de estos. Si se implementan en software, las funciones pueden almacenarse en o transmitirse a traves de, como una o mas instrucciones o codigo, un medio legible por ordenador o ejecutarse mediante una unidad de procesamiento basada en hardware. Los medios legibles por ordenador pueden incluir medios de almacenamiento legibles por ordenador, que correspondan a un medio tangible tal como medios de almacenamiento de datos. De esta manera, los medios legibles por ordenador pueden corresponder en general a medios de almacenamiento legibles por ordenador tangibles que no sean transitorios. Los medios de almacenamiento de datos pueden ser cualquier medio disponible a los que se puede acceder desde uno o mas ordenadores o uno o mas procesadores para recuperar instrucciones, codigo y/o estructuras de datos para la implementacion de las tecnicas descritas en esta divulgacion. Un producto de programa informatico puede incluir un medio legible por ordenador.
[0119] A modo de ejemplo, y no de manera limitativa, dichos medios de almacenamiento legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento de disco optico, almacenamiento de disco magnetico u otros dispositivos de almacenamiento magnetico, memoria flash o cualquier otro medio que pueda usarse para almacenar el codigo de programa deseado en forma de instrucciones o estructuras de datos y al que pueda accederse mediante un ordenador. Deberfa entenderse que los medios de almacenamiento legibles por ordenador y los medios de almacenamiento de datos no incluyen ondas portadoras, senales u otros medios transitorios, sino que, en cambio, se orientan a medios de almacenamiento tangibles no transitorios. El termino disco, como se usa en el presente documento, incluye un disco compacto (CD), un disco laser, un disco optico, un disco versatil digital (DVD), un disco flexible y un disco Blu-ray, donde algunos discos habitualmente reproducen datos magneticamente, mientras que otros discos emiten datos opticamente con laseres. Las combinaciones de lo anterior tambien deben incluirse dentro del alcance de los medios legibles por ordenador.
[0120] Las instrucciones pueden ejecutarse por uno o mas procesadores, tales como uno o mas procesadores de senales digitales (DSP), microprocesadores de uso general, circuitos integrados especfficos de la aplicacion (ASIC), matrices logicas programables de campo (FPGA) u otros circuitos logicos integrados o discretos equivalentes. En consecuencia, el termino «procesador», como se usa en el presente documento, puede referirse a cualquiera de las estructuras anteriores o a cualquier otra estructura adecuada para la implementacion de las tecnicas descritas en el presente documento. Ademas, en algunos aspectos, la funcionalidad descrita en el presente documento puede proporcionarse dentro de modulos de hardware y/o software dedicados configurados para la codificacion y la decodificacion, o incorporarse en un codec combinado. Ademas, las tecnicas podrfan implementarse por completo en uno o mas circuitos o elementos logicos.
[0121] Las tecnicas de esta divulgacion se pueden implementar en una amplia variedad de dispositivos o aparatos, incluidos un telefono inalambrico, un circuito integrado (IC) o un conjunto de IC (por ejemplo, un conjunto de chips). Diversos componentes, modulos o unidades se describen en esta divulgacion para enfatizar aspectos funcionales de dispositivos configurados para realizar las tecnicas divulgadas, pero no requieren necesariamente su realizacion mediante diferentes unidades de hardware. En cambio, como se ha descrito anteriormente, diversas unidades pueden combinarse en una unidad de hardware de codec o proporcionarse por medio de un grupo de unidades de hardware interoperativas, que incluyan uno o mas procesadores como los descritos anteriormente, conjuntamente con software y/o firmware adecuados.
[0122] Se han descrito diversos ejemplos. Estos y otros ejemplos estan dentro del alcance de las siguientes reivindicaciones.

Claims (13)

10
15
20
25
30
2.
35
3.
40
45
50
4.
55
5.
60
6.
REIVINDICACIONES
Un procedimiento para procesar valores en un sistema de procesamiento de datos, comprendiendo el procedimiento:
recibir una pluralidad de sub-instrucciones de una instruccion de un programa, en la que la instruccion define una pluralidad de operaciones y en el que cada una de las sub-instrucciones define una operacion constituyente de la pluralidad de operaciones;
recibir una indicacion para al menos un valor intermedio generado por la ejecucion de una de las sub- instrucciones que indica si el valor intermedio debe almacenarse en un registro de uso general (GPR);
determinar si el valor intermedio se reenvfa a una etapa de ejecucion anterior desde otra etapa de ejecucion que ejecuto la sub-instruccion que genero el valor intermedio, en el que la etapa de ejecucion anterior y la otra etapa de ejecucion que genero el valor intermedio estan dispuestas en una estructura de canal;
determinar si el valor intermedio debe almacenarse en el GPR en base al menos en parte a la indicacion recibida y a la determinacion de si el valor intermedio se reenvfa a la etapa de ejecucion anterior; y uno de:
evitar el almacenamiento del valor intermedio en el GPR si la indicacion recibida indica que el valor intermedio no debe almacenarse en el GPR y se determina que el valor intermedio se reenvfa a la etapa de ejecucion anterior,
almacenar el valor intermedio en el GPR si la indicacion recibida indica que el valor intermedio no debe almacenarse en el GPR y se determina que el valor intermedio no se reenvfa a la etapa de ejecucion anterior, o
almacenar el valor intermedio en el GPR si la indicacion recibida indica que el valor intermedio debe almacenarse en el GPR.
El procedimiento segun la reivindicacion 1, que comprende ademas:
ejecutar las sub-instrucciones para generar un valor final, en el que el valor final se genera a partir del valor intermedio; y
almacenar el valor final en el GPR.
El procedimiento segun la reivindicacion 1,
en el que el programa comprende un programa de sombreado,
en el que recibir la pluralidad de sub-instrucciones comprende recibir, con un controlador de un elemento de procesamiento de un nucleo de sombreado de una unidad de procesamiento de graficos (GPU), la pluralidad de sub-instrucciones,
en el que recibir la indicacion comprende recibir, con el controlador del elemento de procesamiento, la indicacion de al menos un valor intermedio generado por la ejecucion de una de las sub-instrucciones que indica si el valor intermedio debe almacenarse en el GPR;
en el que determinar si el valor intermedio se reenvfa a la etapa de ejecucion anterior comprende determinar, con el controlador del elemento de procesamiento, si el valor intermedio se reenvfa a la etapa de ejecucion anterior; y
en el que determinar si el valor intermedio debe almacenarse comprende determinar, con el controlador del elemento de procesamiento, si el valor intermedio debe almacenarse en el GPR.
El procedimiento segun la reivindicacion 1, en el que recibir la indicacion comprende recibir un indicador asociado con el valor intermedio que indica si el valor intermedio debe almacenarse en el GPR.
El procedimiento segun la reivindicacion 1, en el que, cuando la indicacion indica que el valor intermedio no debe almacenarse en el GPR, la indicacion indica el ultimo uso del valor intermedio en la pluralidad de sub- instrucciones.
Un dispositivo para procesar datos, comprendiendo el dispositivo:
una unidad de procesamiento que comprende un nucleo, comprendiendo el nucleo una memoria de instrucciones, un registro de uso general (GPR) y al menos un elemento de procesamiento, comprendiendo el al menos un elemento de procesamiento un controlador y una estructura de canal que tiene una pluralidad de etapas de ejecucion, en el que el controlador esta configurado para:
5
10
15
20
25
30
35
40
45
50
55
recibir una pluralidad de sub-instrucciones de una instruccion de un programa desde la memoria de instrucciones del nucleo, en la que la instruccion define una pluralidad de operaciones, en la que cada una de las sub-instrucciones define una operacion constituyente de la pluralidad de operaciones y en la que las sub-instrucciones se ejecutan mediante la pluralidad de etapas de ejecucion de la estructura de canal;
recibir una indicacion de al menos un valor intermedio generado por la ejecucion de una de las sub- instrucciones en una de la pluralidad de etapas de ejecucion que indica si el valor intermedio debe almacenarse en el GPR;
determinar si el valor intermedio se reenvfa a una etapa de ejecucion anterior desde otra etapa de ejecucion que ejecuto la sub-instruccion que genero el valor intermedio, en el que la etapa de ejecucion anterior y la otra etapa de ejecucion que genero el valor intermedio estan dispuestas en la estructura de canal;
determinar si el valor intermedio debe almacenarse en el GPR en base al menos en parte a la indicacion recibida y a la determinacion de si el valor intermedio se reenvfa a la etapa de ejecucion anterior; y uno de:
evitar el almacenamiento del valor intermedio en el GPR si la indicacion recibida indica que el valor intermedio no debe almacenarse en el GPR y se determina que el valor intermedio se reenvfa a la etapa de ejecucion anterior,
almacenar el valor intermedio en el GPR si la indicacion recibida indica que el valor intermedio no debe almacenarse en el GPR y se determina que el valor intermedio no se reenvfa a la etapa de ejecucion anterior, o
almacenar el valor intermedio en el GPR si la indicacion recibida indica que el valor intermedio debe almacenarse en el GPR.
7. El dispositivo segun la reivindicacion 6, en el que la unidad de procesamiento comprende una unidad de procesamiento de graficos, en el que el nucleo comprende un nucleo de sombreado y en el que el programa comprende un programa de sombreado.
8. El dispositivo segun la reivindicacion 6, en el que el nucleo incluye una pluralidad de elementos de procesamiento, que incluyen el al menos un elemento de procesamiento, y en el que cada uno de los elementos de procesamiento esta configurado para ejecutar las mismas sub-instrucciones de la misma instruccion al mismo tiempo.
9. El dispositivo segun la reivindicacion 6, en el que la pluralidad de etapas de ejecucion esta configurada para ejecutar las sub-instrucciones para generar un valor final, en el que el valor final se genera a partir del valor intermedio y en el que el controlador esta configurado para almacenar el valor final en el GPR.
10. El dispositivo segun la reivindicacion 6, en el que, para recibir la indicacion, el controlador esta configurado para recibir un indicador asociado con el valor intermedio que indica si el valor intermedio debe almacenarse en el GPR.
11. El dispositivo segun la reivindicacion 6, en el que, cuando la indicacion indica que el valor intermedio no se almacena en el GPR, la indicacion indica el ultimo uso del valor intermedio en la pluralidad de sub- instrucciones.
12. El dispositivo segun la reivindicacion 6, en el que el dispositivo comprende un dispositivo de comunicacion inalambrica.
13. Un medio de almacenamiento legible por ordenador que tiene instrucciones almacenadas en el mismo que, cuando se ejecutan por el dispositivo de cualquiera de las reivindicaciones 6 a 12, hacen que el dispositivo realice el procedimiento de acuerdo con una cualquiera de las reivindicaciones 1 a 5.
ES15751211.2T 2014-08-19 2015-08-04 Salto de almacenamiento de datos Active ES2691957T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201414462932 2014-08-19
US14/462,932 US9665370B2 (en) 2014-08-19 2014-08-19 Skipping of data storage
PCT/US2015/043649 WO2016028487A1 (en) 2014-08-19 2015-08-04 Skipping of data storage

Publications (1)

Publication Number Publication Date
ES2691957T3 true ES2691957T3 (es) 2018-11-29

Family

ID=53879805

Family Applications (1)

Application Number Title Priority Date Filing Date
ES15751211.2T Active ES2691957T3 (es) 2014-08-19 2015-08-04 Salto de almacenamiento de datos

Country Status (6)

Country Link
US (1) US9665370B2 (es)
EP (1) EP3183646B1 (es)
CN (1) CN106662997B (es)
ES (1) ES2691957T3 (es)
HU (1) HUE039533T2 (es)
WO (1) WO2016028487A1 (es)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10180825B2 (en) * 2015-09-30 2019-01-15 Apple Inc. System and method for using ubershader variants without preprocessing macros
US9799089B1 (en) * 2016-05-23 2017-10-24 Qualcomm Incorporated Per-shader preamble for graphics processing
US11094103B2 (en) * 2019-03-26 2021-08-17 Qualcomm Incorporated General purpose register and wave slot allocation in graphics processing

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6771264B1 (en) * 1998-08-20 2004-08-03 Apple Computer, Inc. Method and apparatus for performing tangent space lighting and bump mapping in a deferred shading graphics processor
EP1199629A1 (en) 2000-10-17 2002-04-24 STMicroelectronics S.r.l. Processor architecture with variable-stage pipeline
US6922760B2 (en) * 2002-12-05 2005-07-26 Lsi Logic Corporation Distributed result system for high-performance wide-issue superscalar processor
JP2006522398A (ja) * 2003-03-19 2006-09-28 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ パイプライン型命令プロセッサにおけるバイパスの使用
US20070136562A1 (en) 2005-12-09 2007-06-14 Paul Caprioli Decoupling register bypassing from pipeline depth
JP4482052B2 (ja) 2006-02-14 2010-06-16 富士通株式会社 演算装置および演算方法
US7725687B2 (en) 2006-06-27 2010-05-25 Texas Instruments Incorporated Register file bypass with optional results storage and separate predication register file in a VLIW processor
US8775777B2 (en) * 2007-08-15 2014-07-08 Nvidia Corporation Techniques for sourcing immediate values from a VLIW
US8738860B1 (en) * 2010-10-25 2014-05-27 Tilera Corporation Computing in parallel processing environments
US9286072B2 (en) * 2011-10-03 2016-03-15 International Business Machines Corporation Using register last use infomation to perform decode-time computer instruction optimization
US9081608B2 (en) 2012-05-19 2015-07-14 Digital System Research Inc. Residue number arithmetic logic unit
US9182992B2 (en) 2012-06-08 2015-11-10 Esencia Technologies Inc Method for improving performance of a pipelined microprocessor by utilizing pipeline virtual registers
JP2014016894A (ja) 2012-07-10 2014-01-30 Renesas Electronics Corp 並列演算装置、並列演算装置を備えたデータ処理システム、及び、データ処理プログラム

Also Published As

Publication number Publication date
US9665370B2 (en) 2017-05-30
CN106662997B (zh) 2018-05-25
CN106662997A (zh) 2017-05-10
WO2016028487A1 (en) 2016-02-25
HUE039533T2 (hu) 2019-01-28
EP3183646A1 (en) 2017-06-28
EP3183646B1 (en) 2018-07-25
US20160054998A1 (en) 2016-02-25

Similar Documents

Publication Publication Date Title
US8633936B2 (en) Programmable streaming processor with mixed precision instruction execution
KR101630996B1 (ko) 셰이더 동작의 동기화
US9430807B2 (en) Execution model for heterogeneous computing
CN107710150B (zh) 从包含层次子例程信息的中间代码产生目标代码
ES2791883T3 (es) Esquema de carga para registro compartido en GPU
ES2777827T3 (es) Predicados uniformes en sombreadores para unidades de procesamiento de gráficos
US9880851B2 (en) System, method, and computer program product for implementing large integer operations on a graphics processing unit
US9632783B2 (en) Operand conflict resolution for reduced port general purpose register
ES2691957T3 (es) Salto de almacenamiento de datos
CN109074625B (zh) 用于图形处理的每个着色器的前置码
US9207936B2 (en) Graphic processor unit and method of operating the same