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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, 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)
- 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.
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)
| 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)
| 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 | 中国人民解放军国防科学技术大学 | 超长指令字微处理器中的指令控制流水线方法 |
-
2005
- 2005-02-18 US US11/061,981 patent/US7152155B2/en not_active Expired - Lifetime
-
2006
- 2006-02-17 KR KR1020077021439A patent/KR100938367B1/ko not_active Expired - Fee Related
- 2006-02-17 MX MX2007010048A patent/MX2007010048A/es active IP Right Grant
- 2006-02-17 JP JP2007556350A patent/JP4763727B2/ja not_active Expired - Fee Related
- 2006-02-17 CN CNB2006800115780A patent/CN100538629C/zh not_active Expired - Fee Related
- 2006-02-17 EP EP06735438.1A patent/EP1849063B1/en not_active Not-in-force
- 2006-02-17 WO PCT/US2006/005776 patent/WO2006089189A2/en not_active Ceased
-
2007
- 2007-08-15 IL IL185301A patent/IL185301A0/en unknown
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 |