PROCEDIMIENTO Y APARATO PARA RECONOCER UNA LLAMADA A UNA SUBRUTINA.

Un procedimiento (500) de reconocimiento de una llamada a una subrutina, que comprende: la detección

(510) de un cambio no secuencial en el flujo de un programa; la recuperación (520) de la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa; la comparación (530) de la siguiente dirección secuencial con el contenido de un registro de enlaces para determinar si el cambio no secuencial es una llamada a una subrutina y si se encuentra que la siguiente dirección secuencial es igual que el contenido del registro de enlaces, se empuja (550) la siguiente dirección secuencial o el contenido del registro de enlaces hasta una estructura (134) de pila de enlaces como una dirección de retorno

Tipo: Patente Internacional (Tratado de Cooperación de Patentes). Resumen de patente/invención. Número de Solicitud: PCT/US2007/085574.

Solicitante: QUALCOMM INCORPORATED.

Nacionalidad solicitante: Estados Unidos de América.

Dirección: ATTN: INTERNATIONAL IP ADMINISTRATION 5775 MOREHOUSE DRIVE SAN DIEGO, CALIFORNIA 92121 ESTADOS UNIDOS DE AMERICA.

Inventor/es: MORROW,MICHEAL WILLIAM.

Fecha de Publicación: .

Fecha Solicitud PCT: 27 de Noviembre de 2007.

Fecha Concesión Europea: 13 de Octubre de 2010.

Clasificación Internacional de Patentes:

  • G06F9/38F2B
  • G06F9/32B2

Clasificación PCT:

  • SECCION G — FISICA > COMPUTO; CALCULO; CONTEO > TRATAMIENTO DE DATOS DIGITALES ELECTRICOS (computadores... > Disposiciones para el control por programa, p. ej.... > G06F9/38 (Ejecución simultánea de instrucciones, p. ej. segmentación, anticipación)

Países PCT: Austria, Bélgica, Suiza, Alemania, Dinamarca, España, Francia, Reino Unido, Grecia, Italia, Liechtensein, Luxemburgo, Países Bajos, Suecia, Mónaco, Portugal, Irlanda, Eslovenia, Finlandia, Rumania, Chipre, Lituania, Letonia.

google+ twitter facebookPin it
PROCEDIMIENTO Y APARATO PARA RECONOCER UNA LLAMADA A UNA SUBRUTINA.

Fragmento de la descripción:

Campo de la invención

La presente invención se refiere generalmente al campo de los procesadores canalizados y, en particular, a un procedimiento de reconocimiento de una llamada a una subrutina para reducir la energía y aumentar la utilización del procesador canalizado.

Antecedentes

Los microprocesadores realizan tareas computacionales en una amplia variedad de aplicaciones. Casi siempre es deseable un rendimiento mejorado del procesador, para permitir un funcionamiento más rápido y/o una mayor funcionalidad a través de los cambios en el software. En muchas aplicaciones incrustadas, tales como los dispositivos electrónicos portátiles, la conservación de la energía es también un objetivo importante en el diseño e implementación del procesador.

Muchos procesadores de módem emplean una arquitectura canalizada, en la que las instrucciones secuenciales se superponen durante la ejecución para aumentar el rendimiento total del procesador. Con el mantenimiento de una ejecución nivelada a través de ayudas canalizadas se logra un alto rendimiento. La mayoría de los procesadores de módem utilizan también una memoria jerárquica con memorias rápidas de caché en chip que almacenan copias locales de los datos e instrucciones recientemente accedidos.

Los programas del mundo real incluyen instrucciones de bifurcación indirecta, cuyo comportamiento de bifurcación real no se conoce hasta que la instrucción se evalúa en profundidad en la pipeline de ejecución. La mayoría de los procesadores de módem emplean alguna forma de predicción de bifurcación, en la que el comportamiento de bifurcación de instrucciones de bifurcación indirecta se predice anticipadamente en la pipeline, tal como durante una etapa de tubería de búsqueda y carga o de descodificación. Utilizando una técnica de predicción de bifurcación, el procesador de forma especulativa busca y carga la diana de la instrucción de bifurcación indirecta y redirige la pipeline para iniciar el procesamiento de las instrucciones especulativamente cargadas. Cuando se determina la diana de bifurcación real en una etapa de tubería posterior, tal como una etapa de tubería de ejecución, si la bifurcación se predijo erróneamente, las instrucciones especulativamente cargadas deben de eliminarse de la pipeline y cargarse nuevas instrucciones de la dirección de la diana correcta. Las instrucciones de precarga en respuesta a una predicción de diana de bifurcación errónea impactan de forma adversa en el rendimiento del procesador y en el consumo de energía.

Un ejemplo de instrucciones de bifurcación indirecta incluye las instrucciones de bifurcación utilizadas para volver de una subrutina. Por ejemplo, una llamada de retorno desde una subrutina puede incluir una instrucción de bifurcación cuya dirección de retorno esté definida por el contexto de un registro. Una dirección de retorno define la siguiente instrucción a cargar después de que se complete la subrutina y es habitualmente la instrucción después de una instrucción de bifurcación desde la cual se llamó originalmente a la subrutina. Muchas arquitecturas de alto rendimiento designan un registro de propósito general particular para su uso en los retornos de subrutinas, habitualmente denominado registro de enlaces.

Para mayor facilidad, una llamada de retorno también puede denominarse instrucción de retorno de bifurcación. Para que un procesador canalizado utilice predicción de bifurcación para una instrucción de retorno de bifurcación, el software convencional incluye una llamada a subrutina explícita tal como una bifurcación y una instrucción de enlace para grabar la dirección de retorno dentro del registro de enlaces. Muchas implementaciones de alto rendimiento incluyen una estructura de pila de enlaces en la etapa de descodificación del procesamiento de la instrucción de bifurcación y enlace. Los valores de retorno de enlace son empujados dentro de esta pila, para permitir una predicción de bifurcación exacta cuando retornan las subrutinas correspondientes. Las estructuras convencionales de pila de enlaces contienen una lista de direcciones de retorno para soportar múltiples llamadas a subrutinas que fluyen a través de una pipeline y para soportar el anidamiento de múltiples niveles de llamadas a subrutinas. Subsiguientemente, cuando la instrucción de retorno de bifurcación dentro de la subrutina está siendo descodificada, se lee la dirección de retorno de la estructura de pila de enlaces para ser utilizada en la predicción para predecir la dirección diana si otro hardware de predicción de bifurcación dicta que el procesador debe redirigir la pipeline. Si el resultado predicho indica el redireccionamiento de la pipeline, la pipeline inicia la carga de instrucciones de la dirección de retorno que se leyó de la estructura de la pila de enlaces.

Sin embargo, existen muchos compiladores y código heredado que no generan o incorporan

instrucciones convencionales de bifurcación y enlace cuando llaman a una subrutina. Por lo tanto, en esas situaciones, no se utiliza la estructura de la pila de enlaces dando como resultado que la integridad de la estructura de la pila de enlaces quede comprometida. Por ejemplo, la canalización convencional de una dirección de retorno de una estructura de pila 5 de enlaces puede que no esté correlacionada con la instrucción de retorno que estimuló el despliegue de la dirección de retorno en primer lugar. Un efecto de una estructura de pila de enlaces comprometida incluye mayores predicciones erróneas en las instrucciones de retorno. Además, en aquellas situaciones en las que no se reconoce una llamada a una subrutina en un segmento de programa, el problema se acrecienta ya que el hardware de predicción de bifurcación no puede utilizarse para poblar las instrucciones de la pila de enlaces en las subsiguientes llamadas a subrutinas no reconocibles. A modo de ejemplo, remítase a la siguiente tabla que contiene un segmento de código que podría ejecutarse sobre un procesador compatible ARM Ltd.:

0x00899808 LDR LR, 0X00899818

0X008998C ADD

0X0089981 0 SUB

0X0089981 4 BR 0X00990000

0X0089981 8 INSTRA

0X0089981 C INSTRB

0X00990000 ADD

0X00990004 SUB

0X00990008 MOV

0X0099000C BX LR

15 El flujo del programa del segmento de código de la tabla 1 incluye el procesamiento de las instrucciones en orden secuencial empezando en la dirección 0x00899808 y hasta la dirección 0x00899814, En la dirección 0x00899814, una instrucción de bifurcación cambia el flujo del programa de forma que la siguiente instrucción procesada se sitúa en la dirección 0x00990000, el inicio de una subrutina.

La combinación de la configuración del registro de enlaces (es decir, LDR LR 0x00899818) y de la instrucción de bifurcación (es decir BR) prepara al procesador para una bifurcación subsiguiente hacia una subrutina. En este ejemplo, la subrutina real a la cual se efectúa la llamada empieza en la dirección 0x00990000 y termina en la dirección 0x009900. La instrucción LDR LR, 0x00899818 indica que la dirección 0x00899818 debe copiarse dentro del registro de enlaces (LR) dando como resultado el almacenamiento de la dirección de retorno, la dirección 0x00899818, dentro del registro de enlaces. Al final de la subrutina, se recupera la dirección de retorno del registro de enlaces. Más específicamente, la dirección de retorno se recupera cuando se ejecuta BX LR, la instrucción de retorno de bifurcación. Existen otros segmentos...

 


Reivindicaciones:

1. Un procedimiento (500) de reconocimiento de una llamada a una subrutina, que comprende:

la detección (510) de un cambio no secuencial en el flujo de un programa; la recuperación (520) de la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa; la comparación (530) de la siguiente dirección secuencial con el contenido de un registro de enlaces para determinar si el cambio no secuencial es una llamada a una subrutina y si se encuentra que la siguiente dirección secuencial es igual que el contenido del registro de enlaces, se empuja (550) la siguiente dirección secuencial o el contenido del registro de enlaces hasta una estructura (134) de pila de enlaces como una dirección de retorno.

2. El procedimiento de la reivindicación 1, en el que el cambio no secuencial en el flujo del programa es una instrucción de bifurcación.

3. El procedimiento de la reivindicación 1, que comprende además:

la indicación (540) de que el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

4. El procedimiento de la reivindicación 3, en el que la indicación (540) de que el cambio no secuencial en el flujo del programa es una subrutina comprende:

el almacenamiento de un marcador en un circuito (132) de predicción de bifurcación asociado con el cambio no secuencial en el flujo del programa.

5. Un aparato (114) para reconocer una llamada a una subrutina que comprende:

medios para detectar (510) un cambio no secuencial en el flujo de un programa; medios para recuperar (520) la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa y medios para comparar(530) la siguiente dirección secuencial con el contenido de un registro de enlaces para determinar si el cambio no secuencial es una llamada a una subrutina y si se encuentra que la siguiente dirección secuencial es igual al contenido del registro de enlaces, medios para empujar (550) la siguiente dirección secuencial o el contenido del registro de enlaces hasta una estructura (134) de pila de enlaces como la dirección de retorno.

6. El aparato de la reivindicación 5, en el que el cambio no secuencial en el flujo del programa es una instrucción de bifurcación.

7. El aparato de la reivindicación 5, que comprende además:

medios para indicar (540) que el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

8. El aparato de la reivindicación 5, en el que los medios para indicar (540) que el cambio no secuencial en el flujo del programa es una subrutina comprenden:

medios para almacenar un marcador en un circuito de predicción de bifurcación asociado con el cambio no secuencial en el flujo del programa.

9. Un aparato para reconocer una llamada a una subrutina, que comprende:

un procesador canalizado para procesar instrucciones y un aparato como el reivindicado en cualquiera de las reivindicaciones 5, 7 y 8.