[go: up one dir, main page]

MX2007010048A - Sistema y metodo para corregir un mal pronostico de ramificacion. - Google Patents

Sistema y metodo para corregir un mal pronostico de ramificacion.

Info

Publication number
MX2007010048A
MX2007010048A MX2007010048A MX2007010048A MX2007010048A MX 2007010048 A MX2007010048 A MX 2007010048A MX 2007010048 A MX2007010048 A MX 2007010048A MX 2007010048 A MX2007010048 A MX 2007010048A MX 2007010048 A MX2007010048 A MX 2007010048A
Authority
MX
Mexico
Prior art keywords
instruction
branching
instructions
branch
conduits
Prior art date
Application number
MX2007010048A
Other languages
English (en)
Inventor
James Norris Dieffenderfer
Thomas Andrew Sartorius
Michael Scott Mcilvaine
Jeffrey Todd Bridges
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
Publication of MX2007010048A publication Critical patent/MX2007010048A/es

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

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

Abstract

Cuando se descubre una mal pronostico de ramificacion en un procesador canalizado, si la instruccion de ramificacion mal pronosticada no es la ultima instruccion no programada en el conducto, instrucciones no programadas anteriores se revisan en busca de dependencia en una operacion de latencia larga; si se descubre una, todas las instrucciones no programadas son limpiadas de los conductos sin esperar que se resuelva la dependencia; el pronostico de ramificacion es corregido, y la instruccion de ramificacion y todas las instrucciones limpiadas mas antiguas que la instruccion de ramificacion son buscadas y cargadas nuevamente y ejecutadas.

Description

SISTEMA Y MÉTODO PARA CORREGIR UN MAL PRONOSTICO DE RAMIFICACIÓN CAMPO DE LA INVENCIÓN La presente invención se refiere, por lo general, al campo de procesadores y en particular a un método para desechar instrucciones no programadas de un conducto de ejecución de un procesador en respuesta al mal pronóstico de ramificación.
ANTECEDENTES DE LA INVENCIÓN Los microprocesadores llevan a cabo tareas computacionales en una amplia variedad de aplicaciones. El desempeño mejorado del procesador es casi siempre deseable para permitir la operación más rápida y/o aumentar la funcionalidad a través de los cambios de software. En muchas aplicaciones incorporadas, tales como dispositivos electrónicos portátiles, la conservación de la potencia también es una consideración importante en el diseño y ejecución del procesador. Los procesadores más modernos utilizan una arquitectura canalizada, en donde las instrucciones secuenciales, cada una con sus pasos múltiples de ejecución, están traslapadas en ejecución. Para el máximo desempeño, las instrucciones deben fluir de manera continua a través del conducto. Sin embargo, las instrucciones por lo general se obstruyen en el conducto debido a una variedad de razones, tales como las ramificaciones de datos entre instrucciones, retrasos relacionados con los accesos de memoria, una incapacidad para asignar suficientes recursos de conducto a instrucciones, y similares. El hecho de reducir al mínimo las obstrucciones del conducto y resolver esto de manera eficiente son factores importantes para lograr el desempeño mejorado del procesador. Los programas del mundo real incluyen instrucciones de ramificación condicional, cuyo comportamiento de ramificación real por lo regular no se conoce hasta que la instrucción es evaluada a profundidad en el conducto. Los procesadores comúnmente modernos utilizan diversas formas de pronóstico de ramificación, por lo que el comportamiento de ramificación de las instrucciones de ramificación condicional se pronostica en forma temprana en el conducto, y el procesador asigna, de manera especulativa, los recursos del conducto, y/o extrae y ejecuta instrucciones de manera especulativa, con base en el pronóstico de ramificación. Cuando se determina el comportamiento de ramificación real, en caso de que la ramificación fuera mal pronosticada, las instrucciones extraídas de manera especulativa deben ser desechadas del conducto y nuevas instrucciones deben ser extraídas a partir de la dirección objetivo de ramificación correcta. Las ramificaciones mal pronosticadas impactan de forma adversa el desempeño del procesador y el consumo de potencia . Por lo común, al manejar una instrucción de ramificación mal pronosticada, todas las instrucciones anteriores a la instrucción de ramificación, esto es, las instrucciones que ingresaron al conducto adelante de la instrucción de ramificación, pueden completar la ejecución antes de que las instrucciones extraídas de manera especulativa sean desechadas. En donde una o más de las instrucciones anteriores sean obstruidas en el conducto debido a una operación de larga latencia, la espera de la ramificación a resolver antes de desechar el conducto exacerba la sanción del desempeño de la ramificación mal pronosticada .
SUMARIO DE LA INVENCIÓN La presente invención se relaciona con un método de manejo de un mal pronóstico de ramificación en un procesador canalizado. Se detecta un mal pronóstico de ramificación, y por lo menos una instrucción anterior a la instrucción de ramificación es desechada del conducto, en respuesta a la detección del mal pronóstico. La presente invención también se relaciona con un procesador. El procesador incluye un conducto de ejecución de instrucción, y un mecanismo de predicción de ramificación predice la evaluación en el conducto de instrucciones de ramificación condicional. El procesador también incluye un administrador de orden de instrucción que rastrea el orden de, y dependencias entre, instrucciones en el conducto. El procesador incluye, de manera adicional, un controlador de conducto que desecha por lo menos una instrucción anterior a la instrucción de ramificación del conducto, en respuesta a la detección de que la instrucción de ramificación fue mal pronosticada. Además, la presente invención se relaciona con un método para corregir un mal pronóstico de ramificación en un procesador canalizado. Se detecta un mal pronóstico de la instrucción de ramificación. Se determina si la instrucción de ramificación es la última instrucción no programada en los conductos. En caso de que la instrucción sea la última instrucción no programada en los conductos, la instrucción de ramificación es programada y todas las instrucciones no programadas son desechadas de los conductos. En caso de que la instrucción de ramificación no sea la última instrucción no programada en los conductos, se determina si una instrucción anterior a la instrucción de ramificación es obstruida en un conducto debido a una operación de latencia larga. En caso de que una instrucción anterior a la instrucción de ramificación sea obstruida en un conducto debido a una operación de latencia larga, la instrucción de ramificación y todas las otras instrucciones no programada son desechadas de los conductos.
BREVE DESCRIPCIÓN DE LAS FIGURAS La figura 1 es un diagrama en bloques funcional de un procesador. La figura 2 es un diagrama en bloques funcional de una memoria caché de instrucciones y partes de dos conductos. La figura 3 es un diagrama de flujo de un método para manejar un mal pronóstico de ramificación.
DESCRIPCIÓN DETALLLADA DE LA INVENCIÓN La figura 1 representa un diagrama en bloques funcional de un procesador 10. El procesador 10 ejecuta instrucciones en un conducto de ejecución de instrucción 12 de acuerdo con la lógica de control 14. El conducto 12 puede ser un diseño superescalar, con múltiples conductos paralelos tales como 12a y 12b. La lógica de control de conducto 14 puede incluir un mecanismo de predicción de ramificación 13 y un administrador de orden de instrucción 15. Los conductos 12a, 12b incluyen diversos registros o cerrojos 16, organizados en etapas de conducto, y una o más Unidades Lógicas Aritméticas (ALU) 18. Un archivo de Registro para Fines Generales (GPR) 20 proporciona registros que comprenden la cima de la jerarquía de memoria. Los conductos 12a, 12b extraen instrucciones desde una memoria Caché de Instrucciones 22, con direccionamiento de memoria y permisos administrados por una Memoria Intermedia de Traducción Adelantada de Instrucciones (ITLB) 24. Los datos son accesados desde una memoria Caché de Datos 26, con direccionamiento de memoria y permisos administrados por una Memoria Intermedia de Traducción Adelantada (TLB) 28. En diversas modalidades, la ITLB puede comprender una copia de parte de la TLB. De manera alternativa, la ITLB y TLB pueden estar integrados. De forma similar, en diversas modalidades del procesador 10, la memoria caché-I 22 y la memoria caché-D 26 pueden estar integradas. Pérdidas en la memoria caché-I 22 y la memoria caché-D 26 provocan un acceso a la memoria principal (fuera de chip) 32, bajo el control de una interfaz de memoria 30. El procesador 10 puede incluir una interfaz de Entrada/Salida (I/O) 34, controlando el acceso a diversos dispositivos periféricos 36. Aquellos expertos en la técnica reconocerán que numerosas variaciones del procesador 10 son posibles. Por ejemplo, el procesador 10 puede incluir una memoria caché de segundo nivel (L2) para una o ambas de las memorias caché I y D. Además, uno o más de los bloques funcionales representados en el procesador 10 pueden ser omitidos de una modalidad particular. El conducto es una técnica de ejecución del procesador bien conocida en donde múltiples instrucciones son traslapados de manera simultánea en ejecución. Cada instrucción en una arquitectura típica es llevada a cabo en una pluralidad de pasos de ejecución, tal como Extracción, Decodificación, Ejecución, Acceso de Memoria, y Reintegración. Un conducto de procesador 12 consiste de una pluralidad de "etapas de conducto", cada una comprende lógica y un elemento de almacenamiento 16, la cual completa un paso de ejecución o parte de un paso de ejecución de una instrucción. Las etapas de conducto están conectadas juntas para formar un conducto 12. Las instrucciones ingresan al conducto 12 y son procesadas de manera sucesiva a través de las etapas. Las nuevas instrucciones ingresan al conducto 12 antes de que las instrucciones anteriores completen la ejecución; por lo tanto, múltiples instrucciones pueden ser procesadas dentro del conducto 12 en cualquier momento determinado. Esta capacidad para explotar el paralelismo entre las instrucciones en una corriente de instrucción secuencial contribuye, de manera significativa, al desempeño mejorado del procesador. Bajo condiciones ideales y en un procesador 10 que completa cada etapa de conducto en un ciclo, siguiendo el breve proceso inicial de llenado del conducto 12, una instrucción puede completar la ejecución cada ciclo. Dichas condiciones ideales nunca se llevan a cabo en la práctica, debido a una variedad de factores que incluyen dependencias de datos entre instrucciones (riesgos de datos), dependencias de control tales como ramificaciones (riesgos de control), conflictos de distribución de recursos de procesador (riesgos estructurales) , interrupciones, pérdidas de memoria caché, fallas de página y similares. Un riesgo de datos común es encontrado cuando una instrucción realiza una operación lógica o aritmética en dos operandos, en donde uno o más de los operandos es el resultado de una instrucción precedente que no ha completado la ejecución y; por lo tanto, no ha generado el operando requerido. La instrucción anterior puede ser otra operación aritmética o lógica, o puede ser un acceso de memoria, tal como una que falta en una memoria caché 22, 26, forzando a la interfaz de memoria 30 a llevar a cabo una operación de acceso de memoria fuera de chip. Un riesgo de datos fuerza al conducto 12 a obstruirse.
Un riesgo de control común, encontrado en procesadores canalizados 10 es una instrucción de ramificación mal pronosticada. Las instrucciones de ramificación condicional son, ya sea "tomadas", en donde la instrucción dirige el flujo de control a un punto de programa diferente, o "no tomadas" en donde la ejecución de la instrucción procede de manera secuencial. La evaluación de la condición de ramificación ocurre profundamente en un conducto 12, durante una etapa de conducto de ejecución. Hasta que la instrucción de ramificación es evaluada, el procesador 10 no sabe qué instrucción extraer y ejecutar a continuación (es decir, la siguiente instrucción secuencial o la instrucción en una dirección objetivo de ramificación) . El retraso en la espera hasta que la condición de ramificación es evaluada provoca una obstrucción en el conducto 12. Por consiguiente, muchos procesos predicen la manera en la que una condición de ramificación evaluará, por ejemplo, con base en la ejecución previa de la instrucción de ramificación condicional. El procesador 10 extrae instrucciones en el conducto 12 comenzando en la dirección pronosticada, ejecutando las instrucciones de manera especulativa. Cuando el pronóstico es correcto, se evita una obstrucción del conducto . Algunas instrucciones de ramificación evaluarán una condición de ramificación opuesta a la que fue pronosticada. Esto se denomina "mal pronóstico de ramificación" o una "ramificación mal pronosticada". Cuando se detecta un mal pronóstico de ramificación, toda la instrucción posterior a la instrucción de ramificación (es decir, todas las instrucciones extraídas con base en el pronóstico de ramificación) debe ser desechadas del conducto 12. En un conducto sencillo, determinar cuáles instrucciones son posteriores a la ramificación mal pronosticada es directo, todas las etapas de conducto "atrás" de la ramificación deben ser desechadas. La figura 2 representa una arquitectura de conducto superescalar, con dos conductos paralelos de ejecución 12a y 12b. En la situación representada en la figura 2, la instrucción A en el conducto 12a es obstruida debido a una dependencia en la instrucción X, tal como generación de operando, un acceso de memoria, o alguna otra operación de latencia larga. El riesgo de datos de la instrucción A ha obstruido también la instrucción B. Por consiguiente, las instrucciones C, D y E han sido extraídas de la memoria caché de instrucción 22 y cargadas en el conducto 12b. En un procesador superescalar 10, es necesario algún mecanismo para el rastreo del orden de ejecución de instrucción, así como el rastreo de dependencias entre instrucciones.
La mayoría de los procesadores superescalares 10 incluyen un administrador de orden 15 como parte de la lógica de control del conducto 14. El administrador de orden 15 rastrea el orden de ejecución de instrucción a través del conducto, esto es, cuáles instrucciones son anteriores o posteriores a la instrucción determinada. El administrador de orden 15 rastrea, de forma adicional, las dependencias de instrucción y es instrumental en el manejo de la excepción. Una excepción o interrupción ocurre siempre que una etapa de conducto no es capaz de completar su ejecución de un paso de instrucción. Por ejemplo, datos de escritura de instrucción de almacenamiento para memoria pueden provocar una excepción en caso de que un cuadro de búsqueda TLB 28 indique que la página de memoria es sólo de lectura. Otros tipos de excepciones son conocidos en la técnica. Al encontrar una excepción, el procesador 10 puede ejecutar todas las instrucciones previas o anteriores en el conducto 12 (o conductos 12a y 12b en una arquitectura superescalar) ; desechar la instrucción que ocasiona la excepción y todas las instrucciones posteriores de los conductos 12a y 12b; y después extraer y ejecutar el código de interrupción de manejo. El administrador de orden 15 ayuda en este proceso mediante el rastreo de las instrucciones que son "confirmadas" y las que son "obligatorias" . Una instrucción es confirmada cuando se determina que ningún riesgo de conducto impedirá su ejecución, esto es, la instrucción no se obstruirá. Por ejemplo, una instrucción que realiza una operación lógica o aritmética puede ser confirmada cuando ambos operandos han sido generados a partir de instrucciones previas, extraídos de la memoria, o, de lo contrario, disponibles. Una instrucción es realizada cuando dicha instrucción, y todas las otras instrucciones previas, son confirmadas. Se sabe que una instrucción realizada es capaz de completar la ejecución, ya que ningún riesgo de conducto impide ya sea esto (la instrucción en sí es confirmada) o cualquier instrucción delante de ésta (todas las instrucciones previas son confirmadas) . En cuanto a la figura 2, la instrucción A no está confirmada debido a su independencia en los resultados de la instrucción X. La instrucción B tiene pocas probabilidades de ser confirmada en esta etapa temprana en el conducto 12a. La instrucción C en el conducto 12b puede ser confirmada, lo cual significa que ningún riesgo evita que la instrucción C complete la ejecución. La instrucción C no puede ser realizada; sin embargo, hasta que todas las instrucciones anteriores a esta, es decir, las instrucciones A y B, sean confirmadas. La regla convencional durante el manejo de la excepción es que los conductos 12a y 12b son desechados cuando la instrucción causante de la excepción es "la última instrucción no programada". Por ejemplo, en caso de que la instrucción D fuera a generar una excepción, la dependencia de la instrucción A sobre la instrucción X debe ser resuelta, permitiendo que A confirme. Una vez que A confirma, en caso de que no existan instrucciones no confirmadas delante de A (asumir que la instrucción X se completa), ésta será también realizada. En caso de que la instrucción B también confirme y funcione como procede a través del conducto 12A, la instrucción C será entonces realizada, al tiempo que A, B y C son confirmadas. D es entonces la última instrucción no programada, y será desechada, junto con todas las instrucciones posteriores (por ejemplo, E) , de los conductos 12a y 12b. Las instrucciones de manejo de excepción son entonces extraídas y alimentadas en los conductos 12a y 12b, conforme las instrucciones realizadas A, B y C siguen su curso a través del conducto y completan la ejecución. Al forzar la instrucción causante de la excepción para que sea la última instrucción no programada en los conductos 12a y 12b, se asegura una interrupción limpia en la ejecución del programa. Esto es, una vez que las instrucciones de manejo de interrupción resuelven el error y restauran el estado del procesador 10, la ejecución del programa puede recomenzar, comenzando con la instrucción D, y generará resultados correctos . Un procedimiento similar parecería ser aplicable para manejar ramificaciones mal pronosticadas en un procesador superescalar 10. Por ejemplo, suponiendo que la instrucción C en la figura 2 es una instrucción de ramificación condicional que ha evaluado su condición de ramificación y descubierto que fue mal pronosticada. Las instrucciones D y E fueron extraídas con base en la predicción de ramificación errónea y deben ser desechadas del conducto 12b y reemplazadas con instrucciones extraídas de la dirección objetivo de ramificación correcta. Bajo la regla de manejo de excepción, la ramificación mal pronosticada C esperaría hasta que fuera la última instrucción no programada, esto es, hasta que la dependencia de A sobre X fuera resuelta y A y B confirmadas y realizadas antes de desechar D y E. Sin embargo, la dependencia de A sobre X puede requerir algo de tiempo para resolver, retrasando el tiempo hasta que la siguiente instrucción adecuada que sigue a la ramificación mal pronosticada C sea extraída y realizada. De manera adicional, en caso de que A y B fueran desechadas junto con D y E y re-extraídas, para el momento en el que A siguiera su curso de nuevo a través del conducto 12a, la dependencia puede ser resuelta, permitiendo que A confirme de manera inmediata. De acuerdo con una modalidad de la presente invención, y descrita con referencia a la figura 3, cuando una ramificación mal pronosticada es detectada (bloque 40), en caso de que la ramificación mal pronosticada no sea la instrucción más antigua no programada (bloque 42), las instrucciones anteriores no programadas son verificadas para obstrucción (bloque 44). En caso de que una instrucción obstruida sea detectada, debido al riesgo del conducto, acceso de memoria, u otra operación de latencia larga, entonces el controlador de conducto 14 inmediatamente desecha todas las instrucciones no programadas de los conductos 12a, 12b (bloque 46). Esto incluye la ramificación mal pronosticada, todas las instrucciones no programadas anteriores a la ramificación mal pronosticada, y todas las instrucciones posteriores a la ramificación (es decir, aquellas extraídas de manera especulativa con base en la ramificación mal pronosticada) . La predicción de ramificación se invierte (bloque 48), y luego desechada, las instrucciones no programadas son entonces re-extraídas y ejecutadas en orden (bloque 50). La operación de latencia larga que causa la obstrucción puede ser resuelta al momento en que la instrucción obstruida previamente es re-extraída y re-ejecutada. Aún cuando no lo sea; sin embargo, el procesador está extrayendo instrucciones a partir del objetivo de ramificación correcto, y no necesita esperar que la obstrucción sea resuelta antes de hacerlo, mejorando así el desempeño del procesador. En caso de que la instrucción de ramificación mal pronosticada sea la instrucción no programada más antigua (bloque 42), entonces el procesador realiza la instrucción de ramificación mal pronosticada (para no desecharla) , y desecha todas las instrucciones no programadas de los conductos 12a, 12b (bloque 52). Este desecha todas las instrucciones posteriores a la instrucción de ramificación mal pronosticada, es decir, aquellas en la ruta de ramificación pronosticado de manera errónea. La predicción de ramificación es entonces corregida (bloque 48) de modo que el mecanismo de predicción de ramificación refleje, de manera fiel, la evaluación de ramificación, y la extracción y ejecución de instrucciones continúe en la dirección objetivo de ramificación adecuada (bloque 50). Como lo indica la figura 3, si una ramificación mal pronosticada (bloque 40) no es la instrucción no programada más antigua (bloque 42), y ninguna instrucción no programada anterior es obstruida debido a la operación de latencia larga, el procesador puede simplemente esperar a realizar todas las instrucciones anteriores (bloque 42) antes de realizar la ramificación mal pronosticada y desechar todas las instrucciones posteriores (bloque 52). Este proceso puede tener la ventaja de la lógica de control que ya existe para las excepciones de manejo, como se describe anteriormente (con la excepción de realizar la ramificación, en lugar de desecharla) . De manera alternativa, el procesador puede simplemente desechar todas las instrucciones no programadas (bloque 46), incluyendo la ramificación mal pronosticada, y seguir su curso como en el caso en el que una instrucción no programada fue obstruida (bloques 48, 50) . La última opción (que no se muestra en la figura 3 pero en la que la ruta SI sería el único flujo de control que sale del bloque 44) puede optimizar el desempeño, al costo de la complejidad de control. En el caso de una instrucción obstruida (bloque 44), la realización de nuevas instrucciones es pausada, y la sincronización de tareas para realizar nuevas instrucciones y desechar instrucciones no programadas es simplificada. Aquellos expertos en la técnica fácilmente reconocerán que cualquier opción es posible, y generará el resultado correcto. La práctica de diseño del procesador convencional es realizar todas las instrucciones anteriores a la instrucción causante de la excepción, ramificación mal pronosticada, u otra instrucción que incite el desecho de un conducto. De acuerdo con una modalidad ejemplar de la presente invención, una o más instrucciones anteriores a la instrucción de ramificación mal pronosticada son desechadas del conducto, re-extraídas y ejecutadas. Esto puede mejorar el desempeño del procesador y el consumo de potencia al incitar la terminación de la extracción de instrucciones desde una dirección (mal pronosticada) incorrecta, y utilizando de manera constructiva la latencia de un riesgo de conducto para corregir el mal pronóstico. En donde el tiempo para resolver el riesgo de conducto es igual o mayor que el tiempo requerido para desechar y re-extraer la instrucción obstruida, la recuperación del mal pronóstico no incurre en sanción. Aunque la presente invención ha sido descrita con respecto a las modalidades, aspectos y características particulares, será aparente que numerosas variaciones, modificaciones, y otras modalidades son posibles dentro del amplio alcance de la presente invención y, por consiguiente, todas las variaciones, modificaciones y modalidades se deben considerar dentro del alcance de la invención. Por io tanto, las presentes modalidades van a ser interpretadas en todos los aspectos como ilustrativas y no como restrictivas y todos los cambios que vienen dentro del significado y rango de equivalencia de las reivindicaciones anexadas se pretende que sean incluidos aquí.

Claims (1)

  1. NOVEDAD DE LA INVENCIÓN Habiendo descrito el presente invento, se considera como una novedad y, por lo tanto, se reclama como prioridad lo contenido en las siguientes: REIVINDICACIONES 1.- Un método de manejo de un mal pronóstico de ramificación en un procesador canalizado, que comprende: detectar que una instrucción de ramificación fue mal pronosticada; y desechar por lo menos una instrucción anterior a dicha instrucción de ramificación de los conductos, en respuesta a la detección de dicho mal pronóstico. 2. - El método de conformidad con la reivindicación 1, caracterizado porque por lo menos dicha instrucción anterior a dicha instrucción de ramificación no es programada. 3. - El método de conformidad con la reivindicación 2, caracterizado porque por lo menos dicha instrucción no programada es obstruida en el conducto. 4.- El método de conformidad con la reivindicación 1, que además comprende: corregir dicho pronóstico de ramificación; y desechar dicha instrucción de ramificación de los conductos . 5.- El método de conformidad con la reivindicación 4, que además comprende la extracción, en el orden del programa, de dicha instrucción de ramificación y todas las instrucciones desechadas anteriores a dicha instrucción de ramificación. 6.- El método de conformidad con la reivindicación 1, caracterizado porque el desecho por lo menos de una instrucción anterior a dicha instrucción de ramificación de los conductos comprende desechar todas las instrucciones no programadas de los conductos. 1 . - Un procesador que comprende: por lo menos un conducto de ejecución de instrucción; un mecanismo de predicción de ramificación que pronostica la evaluación en los conductos de las instrucciones de ramificación condicional; un administrador de orden de instrucción que rastrea el orden de instrucciones en los conductos; y un controlador de conducto que desecha por lo menos una instrucción anterior a una instrucción de ramificación de los conductos, en respuesta a la detección de que dicha instrucción de ramificación fue mal pronosticada. 8.- El procesador de conformidad con la reivindicación 7, caracterizado porque dicho mecanismo de predicción de ramificación revierte el pronóstico de ramificación en respuesta a la detección de que dicha instrucción de ramificación fue mal pronosticada. 9.- El procesador de conformidad con la reivindicación 7, caracterizado porque el desecho por lo menos de una instrucción anterior a la instrucción de ramificación de los conductos comprende desechar todas las instrucciones no programadas de los conductos. 10.- El procesador de conformidad con la reivindicación 7, que además comprende desechar dicha instrucción de ramificación de los conductos, en respuesta a la detección de que dicha instrucción de ramificación fue mal pronosticada. 11.- El procesador de conformidad con la reivindicación 7, que además comprende la extracción, en el orden de programa, de dicha instrucción de ramificación y todas las instrucciones desechadas anteriores a dicha instrucción de ramificación. 12.- Un método de corrección de un mal pronóstico de ramificación en un procesador de conducto que comprende: detectar que una instrucción de ramificación fue mal pronosticada; detectar una dependencia de una primera instrucción anterior a dicha instrucción de ramificación en una operación de latencia larga; y desechar todas las instrucciones no programadas de los conductos. 13.- El método de conformidad con la reivindicación 12, que además comprende la corrección de dicho mal pronóstico de ramificación. 14.- El método de conformidad con la reivindicación 13, que además comprende la extracción, en un orden de programa, de dicha instrucción de ramificación y todas las instrucciones desechadas anteriores a dicha instrucción de ramificación. 15.- Un método de corrección de un mal pronóstico de ramificación en un procesador canalizado, que comprende: detectar que una instrucción de ramificación fue mal pronosticada; determinar si dicha instrucción de ramificación es la última instrucción no programada en los conductos; en caso de que dicha instrucción de ramificación sea la última instrucción no programada en los conductos, realizar dicha instrucción de ramificación y desechar todas las instrucciones no programadas de los conductos; en caso de que dicha instrucción de ramificación no sea la última instrucción no programada en los conductos, determinar si una instrucción anterior a dicha instrucción de ramificación es obstruida en un conducto debido a la operación de latencia larga; si una instrucción anterior a dicha instrucción de ramificación es obstruida en un conducto debido a una operación de latencia larga, desechar dicha instrucción de ramificación y todas las instrucciones no programadas de los conductos . 16.- El método de conformidad con la reivindicación 15, que además comprende la corrección de dicho mal pronóstico de ramificación. 17.- El método de conformidad con la reivindicación 15, que además comprende la extracción, en un orden de programa, de dicha instrucción de ramificación y todas las instrucciones desechadas anteriores a dicha instrucción de ramificación.
MX2007010048A 2005-02-18 2006-02-17 Sistema y metodo para corregir un mal pronostico de ramificacion. MX2007010048A (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/061,981 US7152155B2 (en) 2005-02-18 2005-02-18 System and method of correcting a branch misprediction
PCT/US2006/005776 WO2006089189A2 (en) 2005-02-18 2006-02-17 System and method of correcting a branch misprediction

Publications (1)

Publication Number Publication Date
MX2007010048A true MX2007010048A (es) 2007-11-06

Family

ID=36685580

Family Applications (1)

Application Number Title Priority Date Filing Date
MX2007010048A MX2007010048A (es) 2005-02-18 2006-02-17 Sistema y metodo para corregir un mal pronostico de ramificacion.

Country Status (8)

Country Link
US (1) US7152155B2 (es)
EP (1) EP1849063B1 (es)
JP (1) JP4763727B2 (es)
KR (1) KR100938367B1 (es)
CN (1) CN100538629C (es)
IL (1) IL185301A0 (es)
MX (1) MX2007010048A (es)
WO (1) WO2006089189A2 (es)

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7254700B2 (en) * 2005-02-11 2007-08-07 International Business Machines Corporation Fencing off instruction buffer until re-circulation of rejected preceding and branch instructions to avoid mispredict flush
US7949861B2 (en) 2005-06-10 2011-05-24 Qualcomm Incorporated Method and apparatus for managing instruction flushing in a microprocessor's instruction pipeline
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
US7624254B2 (en) * 2007-01-24 2009-11-24 Qualcomm Incorporated Segmented pipeline flushing for mispredicted branches
US8601234B2 (en) * 2007-11-07 2013-12-03 Qualcomm Incorporated Configurable translation lookaside buffer
US8261025B2 (en) 2007-11-12 2012-09-04 International Business Machines Corporation Software pipelining on a network on chip
US8874885B2 (en) * 2008-02-12 2014-10-28 International Business Machines Corporation Mitigating lookahead branch prediction latency by purposely stalling a branch instruction until a delayed branch prediction is received or a timeout occurs
US8443227B2 (en) * 2008-02-15 2013-05-14 International Business Machines Corporation Processor and method for workaround trigger activated exceptions
US7890739B2 (en) * 2008-02-19 2011-02-15 Oracle America, Inc. Method and apparatus for recovering from branch misprediction
US20090260013A1 (en) * 2008-04-14 2009-10-15 International Business Machines Corporation Computer Processors With Plural, Pipelined Hardware Threads Of Execution
US8423715B2 (en) 2008-05-01 2013-04-16 International Business Machines Corporation Memory management among levels of cache in a memory hierarchy
US8271765B2 (en) * 2009-04-08 2012-09-18 International Business Machines Corporation Managing instructions for more efficient load/store unit usage
WO2012037491A2 (en) 2010-09-17 2012-03-22 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
CN103282874B (zh) 2010-10-12 2017-03-29 索夫特机械公司 用于增强分支预测效率的指令序列缓冲器
EP3306466B1 (en) 2010-10-12 2020-05-13 INTEL Corporation An instruction sequence buffer to store branches having reliably predictable instruction sequences
KR101638225B1 (ko) 2011-03-25 2016-07-08 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 명령어 시퀀스 코드 블록의 실행
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
KR101620676B1 (ko) 2011-03-25 2016-05-23 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
US8886920B2 (en) 2011-05-13 2014-11-11 Oracle International Corporation Associating tag to branch instruction to access array storing predicted target addresses for page crossing targets for comparison with resolved address at execution stage
US8862861B2 (en) 2011-05-13 2014-10-14 Oracle International Corporation Suppressing branch prediction information update by branch instructions in incorrect speculative execution path
CN107729267B (zh) 2011-05-20 2022-01-25 英特尔公司 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
EP2783281B1 (en) 2011-11-22 2020-05-13 Intel Corporation A microprocessor accelerated code optimizer
WO2013077875A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. An accelerated code optimizer for a multiengine microprocessor
US8930674B2 (en) 2012-03-07 2015-01-06 Soft Machines, Inc. Systems and methods for accessing a unified translation lookaside buffer
US9740612B2 (en) 2012-07-30 2017-08-22 Intel Corporation Systems and methods for maintaining the coherency of a store coalescing cache and a load cache
US9916253B2 (en) 2012-07-30 2018-03-13 Intel Corporation Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9678882B2 (en) 2012-10-11 2017-06-13 Intel Corporation Systems and methods for non-blocking implementation of cache flush instructions
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
WO2014151043A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
US9672298B2 (en) * 2014-05-01 2017-06-06 Oracle International Corporation Precise excecution of versioned store instructions
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
CN112559048B (zh) * 2019-09-25 2023-12-12 阿里巴巴集团控股有限公司 一种指令处理装置、处理器及其处理方法
US11360773B2 (en) * 2020-06-22 2022-06-14 Microsoft Technology Licensing, Llc Reusing fetched, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-fetching
US11074077B1 (en) 2020-06-25 2021-07-27 Microsoft Technology Licensing, Llc Reusing executed, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-execution

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5584009A (en) 1993-10-18 1996-12-10 Cyrix Corporation System and method of retiring store data from a write buffer
DE69429612T2 (de) * 1993-10-18 2002-09-12 Via-Cyrix, Inc. Schreibpuffer für einen superskalaren Mikroprozessor mit Pipeline
ES2138051T3 (es) * 1994-01-03 2000-01-01 Intel Corp Metodo y aparato para la realizacion de un sistema de resolucion de bifurcaciones en cuatro etapas en un procesador informatico.
US5978909A (en) * 1997-11-26 1999-11-02 Intel Corporation System for speculative branch target prediction having a dynamic prediction history buffer and a static prediction history buffer
US6205542B1 (en) 1997-12-24 2001-03-20 Intel Corporation Processor pipeline including replay
US6163839A (en) 1998-09-30 2000-12-19 Intel Corporation Non-stalling circular counterflow pipeline processor with reorder buffer
US6799263B1 (en) * 1999-10-28 2004-09-28 Hewlett-Packard Development Company, L.P. Prefetch instruction for an unpredicted path including a flush field for indicating whether earlier prefetches are to be discarded and whether in-progress prefetches are to be aborted
CN1280712C (zh) * 2004-03-09 2006-10-18 中国人民解放军国防科学技术大学 超长指令字微处理器中的指令控制流水线方法

Also Published As

Publication number Publication date
IL185301A0 (en) 2008-02-09
CN101156136A (zh) 2008-04-02
US20060190707A1 (en) 2006-08-24
KR20070105366A (ko) 2007-10-30
EP1849063A2 (en) 2007-10-31
US7152155B2 (en) 2006-12-19
EP1849063B1 (en) 2018-08-01
WO2006089189A2 (en) 2006-08-24
CN100538629C (zh) 2009-09-09
WO2006089189A3 (en) 2006-10-12
JP2008530713A (ja) 2008-08-07
KR100938367B1 (ko) 2010-01-22
JP4763727B2 (ja) 2011-08-31

Similar Documents

Publication Publication Date Title
MX2007010048A (es) Sistema y metodo para corregir un mal pronostico de ramificacion.
JP2008530713A5 (es)
CN101601009B (zh) 处理器及在其中执行指令的方法
JP5255367B2 (ja) 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法
US8074060B2 (en) Out-of-order execution microprocessor that selectively initiates instruction retirement early
CA2659384C (en) Apparatus for generating return address predictions for implicit and explicit subroutine calls
EP1296229B1 (en) Scoreboarding mechanism in a pipeline that includes replays and redirects
CN101529378B (zh) 用于处理分支历史信息的方法及管线处理器
CN102934075A (zh) 用于使用预先通知技术改变程序的顺序流程的方法和设备
EP2087420A2 (en) Methods and apparatus for recognizing a subroutine call
US20080168260A1 (en) Symbolic Execution of Instructions on In-Order Processors
CN103019652A (zh) 滑动窗口、基于区块的分支目标地址高速缓冲存储器
US7711934B2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
JP7046087B2 (ja) キャッシュ・ミス・スレッド・バランシング
JP3683439B2 (ja) 分岐予測を抑止する情報処理装置および方法
EP1296228B1 (en) Instruction Issue and retirement in processor having mismatched pipeline depths
US6871275B1 (en) Microprocessor having a branch predictor using speculative branch registers
US20060200654A1 (en) Stop waiting for source operand when conditional instruction will not execute
US7734901B2 (en) Processor core and method for managing program counter redirection in an out-of-order processor pipeline
US6948055B1 (en) Accuracy of multiple branch prediction schemes
Shah et al. SPSIM: SuperScalar Processor SIMulater CS305 Project Report
Prémillieu Microarchitecture exploration of control flow reconvergence
HK1112982A (en) System and method of correcting a branch misprediction

Legal Events

Date Code Title Description
FG Grant or registration