ES2655852T3 - Procedimientos y aparatos para cancelar solicitudes de captura previa de datos para un bucle - Google Patents
Procedimientos y aparatos para cancelar solicitudes de captura previa de datos para un bucle Download PDFInfo
- Publication number
- ES2655852T3 ES2655852T3 ES14704714.6T ES14704714T ES2655852T3 ES 2655852 T3 ES2655852 T3 ES 2655852T3 ES 14704714 T ES14704714 T ES 14704714T ES 2655852 T3 ES2655852 T3 ES 2655852T3
- Authority
- ES
- Spain
- Prior art keywords
- loop
- capture
- data
- instruction
- requests
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- 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/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- 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/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
Un procedimiento (200) para cancelar solicitudes de captura previa de memoria caché de datos no de demanda, en un sistema procesador (100) que comprende un procesador (110) que tiene un sistema de memoria caché (112) que comprende una memoria caché de datos (124) y que tiene un conducto de instrucciones (120), comprendiendo el procedimiento: determinar un paso de acceso a datos basado en la ejecución repetida de una instrucción de acceso a memoria en un bucle de programa; emitir especulativamente solicitudes de captura previa de la memoria caché de datos de acuerdo al paso de acceso a los datos; identificar (210) una salida de bucle basándose en una evaluación de información de flujo de programa; y caracterizado por: cancelar (214) las solicitudes de captura previa de memoria caché de datos que son solicitudes pendientes de captura previa de memoria caché de datos no de demanda en respuesta a la salida de bucle identificada.
Description
DESCRIPCIÓN
Procedimientos y aparatos para cancelar solicitudes de captura previa de datos para un bucle
Campo de la divulgación 5
[0001] La presente descripción se refiere en general a los aspectos de los sistemas de procesamiento y, en particular, a procedimientos y aparatos para reducir la contaminación de memoria caché causada por la captura previa de datos.
10
Antecedentes
[0002] Muchos productos portátiles, tales como teléfonos móviles, ordenadores portátiles, asistentes de datos personales (PDA) y similares, utilizan un sistema de procesamiento que ejecuta programas, tales como programas de comunicación y multimedios. Un sistema de procesamiento para tales productos puede incluir múltiples 15 procesadores, sistemas de memoria complejos que incluyen niveles múltiples de memorias caché para almacenar instrucciones y datos, controladores, dispositivos periféricos tales como interfaces de comunicación y bloques lógicos de función fija configurados, por ejemplo, en un único chip. Al mismo tiempo, los productos portátiles tienen una fuente de energía limitada en forma de baterías a las que a menudo se requiere que presten soporte a operaciones de alto rendimiento por parte del sistema de procesamiento. Para aumentar la duración de la batería, es 20 deseable realizar estas operaciones de la manera más eficaz posible. Muchos ordenadores personales también se están desarrollando con diseños eficaces para funcionar con un consumo de energía total reducido.
[0003] Con el fin de proporcionar un alto rendimiento en la ejecución de los programas, puede utilizarse la captura previa de datos que se basa en el concepto de localidad espacial de referencias a memoria y que se usa 25 generalmente para mejorar el rendimiento del procesador. Al capturar previamente múltiples elementos de datos desde una memoria caché en direcciones que están cerca de un elemento de datos capturados o que están relacionados por un delta de dirección de paso o un puntero indirecto, y que probablemente se utilizarán en futuros accesos, las tasas de error de caché pueden reducirse. Los diseños de memoria caché generalmente implementan una forma de captura previa capturando una línea de datos de memoria caché para una captura de elemento 30 individual de datos. Los capturadores previos de datos de hardware pueden ampliar esto capturando de forma especulativa una o más líneas adicionales de datos de memoria caché, donde las direcciones de captura previa puede formarse basándose en información secuencial, de paso o de puntero. Tal operación de captura previa de hardware para cargas de trabajo intensivas en memoria, tales como el procesamiento de una gran formación de datos, puede reducir significativamente la latencia de la memoria. Sin embargo, la captura previa de datos no está 35 exenta de inconvenientes. Por ejemplo, en un bucle de software utilizado para procesar una formación de datos, un circuito de captura previa de datos captura previamente los datos que se utilizarán en futuras iteraciones del bucle, incluida la última iteración del bucle. Sin embargo, los datos previamente capturados para la última iteración del bucle no se utilizarán y la contaminación de la memoria caché se produce al almacenar estos datos que no se usarán en la memoria caché. El problema de la contaminación de memoria caché se agrava cuando se desenrollan 40 bucles.
[0004] La patente estadounidense Nº 6.775.765 se refiere a un sistema de procesamiento de datos que tiene plegado de instrucciones y un procedimiento del mismo. La patente estadounidense Nº US 6,260,116 se refiere a un sistema y procedimiento para la captura previa de datos. El artículo "Una arquitectura eficaz para la precarga de 45 datos basada en bucles", de Chen et al., Propone un almacén temporal de precarga como soporte arquitectónico para la precarga.
RESUMEN
50
[0005] Entre sus diversos aspectos, la presente divulgación reconoce que la provisión de procedimientos y aparatos más eficaces para la captura previa puede mejorar el rendimiento y reducir los requisitos de potencia en un sistema procesador. Para tales fines, una realización de la invención aborda un procedimiento para cancelar solicitudes de captura previa. Se identifica una situación de salida de bucle basándose en una evaluación de información de flujo de programa. Las solicitudes pendientes de captura previa de memoria caché se cancelan en respuesta a la 55 situación de salida de bucle identificada.
[0006] Otra realización aborda un procedimiento para cancelar solicitudes de captura previa. Los datos se capturan previamente de manera especulativa de acuerdo a una función llamada. Las solicitudes pendientes de captura previa de datos se cancelan en respuesta a una salida de función desde la función llamada. 60
[0007] Otra forma de realización aborda un aparato para la cancelación de las solicitudes de captura previa. Un monitor de direcciones de datos de bucle está configurado para determinar un paso de acceso a datos basado en la ejecución repetida de una instrucción de acceso a memoria en un bucle de programa. La lógica de captura previa de datos está configurada para emitir especulativamente solicitudes de captura previa de acuerdo al paso de acceso a 65 los datos. Un circuito de detención de captura previa está configurado para cancelar solicitudes pendientes de
captura previa en respuesta a una salida de bucle identificada.
[0008] Otra forma de realización aborda un medio no transitorio legible por ordenador, codificado con datos y código de programa legibles por ordenador. Se identifica una situación de salida de bucle basándose en una evaluación de información de flujo de programa. Las solicitudes pendientes de captura previa de memoria caché se cancelan en 5 respuesta a la situación de salida de bucle identificada.
[0009] Una realización adicional aborda un aparato para la cancelación de las solicitudes de captura previa. El medio se utiliza para determinar un paso de acceso a datos basado en la ejecución repetida de una instrucción de acceso a memoria en un bucle de programa. El medio se utiliza para emitir especulativamente solicitudes de captura 10 previa de acuerdo al paso de acceso a los datos. El medio también se utiliza para cancelar solicitudes pendientes de captura previa en respuesta a una salida de bucle identificada.
[0010] Debe entenderse que otros modos de realización de la presente divulgación resultarán inmediatamente evidentes para los expertos en la técnica a partir de la siguiente descripción detallada, en la que se muestran y se 15 describen a modo de ilustración diversos modos de realización de la invención. Como se comprobará, la invención es capaz de otros modos de realización diferentes y sus diversos detalles son capaces de modificarse en otros diversos aspectos, todo sin apartarse del alcance de la presente invención. Por consiguiente, debe considerarse que los dibujos y la descripción detallada tienen naturaleza ilustrativa y no restrictiva.
20
BREVE DESCRIPCIÓN DE LOS DIBUJOS
[0011] Diversos aspectos de la presente invención se ilustran a modo de ejemplo, y no de manera limitativa, en los dibujos adjuntos, en los que:
25
la FIG. 1 ilustra un sistema procesador ejemplar en el que se puede emplear ventajosamente una realización de la invención;
la FIG. 2A ilustra un proceso para cancelar solicitudes pendientes de captura previa de datos no de demanda al detectar una bifurcación de finalización de bucle; y 30
la FIG. 2B ilustra un proceso para cancelar solicitudes pendientes de captura previa de datos no de demanda al detectar un retorno de función; y
la FIG. 3 ilustra una realización particular de un dispositivo portátil que tiene un complejo de procesadores que 35 está configurado para cancelar solicitudes pendientes de captura previa de datos, seleccionadas para reducir la contaminación de la memoria caché.
DESCRIPCIÓN DETALLADA
40
[0012] La descripción detallada expuesta a continuación en relación con los dibujos adjuntos está concebida como una descripción de varios modos de realización a modo de ejemplo de la presente invención y no está concebida para representar los únicos modos de realización en los cuales la presente invención pueda practicarse. La descripción detallada incluye detalles específicos con el objeto de proporcionar una comprensión exhaustiva de la presente invención. Sin embargo, a los expertos en la técnica les resultará evidente que la presente invención puede 45 llevarse a la práctica sin estos detalles específicos. En algunos casos, estructuras y dispositivos ampliamente conocidos se muestran en forma de diagrama de bloques para no oscurecer los conceptos de la presente invención.
[0013] La FIG. 1 ilustra un sistema procesador ejemplar 100 en el que se emplea ventajosamente una realización de la invención. El sistema procesador 100 incluye un procesador 110, un sistema de memoria caché 112, una memoria 50 de sistema 114 y un sistema de entrada y salida (I/O) 116. El sistema de memoria caché 112, por ejemplo, comprende una memoria caché de instrucciones de nivel 1 (Icache) 124, un controlador de memoria 126 y una memoria caché de datos de nivel 1 (Dcache) 128. El sistema de memoria caché 112 también puede incluir una memoria caché unificada de nivel 2 (no mostrada) u otros componentes de memoria caché según se desee para un entorno de implementación particular. La memoria del sistema 114 proporciona acceso para las instrucciones y 55 datos que no se encuentran en Icache 124 o Dcache 128. Se observa que el sistema de memoria caché 112 se puede integrar con el procesador 110 y también puede incluir múltiples niveles de memoria caché en una organización jerárquica. El sistema de I/O 116 comprende una pluralidad de dispositivos de I/O, tales como dispositivos de I/O 140 y 142, que interactúan con el procesador 110.
60
[0014] Las realizaciones de la invención pueden emplearse adecuadamente en un procesador que tiene instrucciones de bifurcación condicional. El procesador 110 comprende, por ejemplo, un conducto de instrucciones 120, lógica de captura previa de datos 121, lógica de predicción 122 y un circuito lógico de pila 123. El conducto de instrucciones 120 está compuesto de una serie de etapas, tales como una etapa de captura y captura previa 130, una etapa de decodificación 131, una etapa de emisión de instrucciones 132, una etapa de captura de operandos 65 133, una etapa de ejecución 134, tal como para la ejecución de instrucciones de carga (Ld) y de almacenamiento
(St), y la etapa de finalización 135. Los expertos en la materia reconocerán que cada etapa 130 a 135 en el conducto de instrucciones 120 puede comprender una serie de etapas adicionales de conducto en función de la frecuencia operativa del procesador y la complejidad de las operaciones requeridas en cada etapa. Por ejemplo, la etapa de ejecución 134 puede incluir una o más etapas de conducto correspondientes a uno o más circuitos de etapas de ejecución de instrucciones, tales como un sumador, un multiplicador, operaciones lógicas, operaciones de carga y 5 almacenamiento, operaciones de desplazamiento y rotación, y otros circuitos funcionales de mayor o menor complejidad. Por ejemplo, cuando se ejecuta una instrucción de carga, solicita datos de Dcache 128 y, si los datos solicitados no están presentes en Dcache, se emite una solicitud de captura al siguiente nivel de la memoria caché o del sistema. Dicha solicitud de captura se considera una solicitud de demanda ya que es una respuesta directa a la ejecución de una instrucción, en este caso, una instrucción de carga. 10
[0015] Una solicitud de captura previa es una solicitud que se hace en respuesta a la información del flujo del programa, tal como la detección de un bucle de programa que tiene una o más instrucciones de carga en el bucle con direcciones de carga basadas en un paso, por ejemplo. La lógica de captura previa de datos 121 utiliza dicha información de flujo de programa, que puede basarse en un número de iteraciones del bucle detectado, para 15 identificar con mayor precisión un patrón de uso de demanda de las direcciones de operandos de las instrucciones de carga antes de emitir una solicitud de captura previa. Las solicitudes de relleno se insertan cuando se detecta un patrón. El procesador 110 puede operar para diferenciar una solicitud de demanda de una solicitud de captura previa mediante el uso de un indicador adicional asociado a la solicitud que se rastrea en el conducto del procesador. Este indicador también podría propagarse con la solicitud a la memoria caché, donde cada relleno pendiente de línea de 20 memoria caché podría identificarse como una captura previa o un relleno de demanda. Cada una de las etapas del conducto puede tener implementaciones variadas sin apartarse de los procedimientos y aparatos de cancelación de solicitud de captura previa, descritos en este documento.
[0016] Con el fin de minimizar los retrasos que podrían ocurrir si los datos requeridos por un programa no estuvieran 25 en la memoria Dcache de nivel 1 asociada 128, la etapa de captura y captura previa 130 registra la información de flujo de programa asociada a una o más instrucciones de acceso a memoria que se ejecutan en un bucle de programa detectado. La información de programa puede incluir una indicación desde la etapa de decodificación 131 en cuanto a que se ha recibido una instrucción de carga y la información de dirección de operandos para la instrucción de carga puede estar disponible en una etapa del conducto antes de la ejecución, tal como la etapa de 30 captura de operandos 133 o en la etapa de ejecución 134. La lógica de captura previa de datos 121 supervisa las direcciones de carga a medida que quedan disponibles para detectar un patrón. Después de que el patrón se determina con un nivel de confianza aceptable, tal como al monitorizar instrucciones de carga mediante tres o más iteraciones de un bucle, se emite una solicitud de captura previa de datos esperados antes de que la instrucción de carga se encuentre nuevamente en el bucle. Esta solicitud de captura previa especulativa garantiza que los datos 35 requeridos estén disponibles en la Dcache de nivel 1 cuando los necesite la etapa de ejecución 134. Entonces es más probable que la etapa de ejecución de carga y almacenamiento 134 acceda a los datos requeridos directamente desde la Dcache de nivel 1 sin tener que esperar para acceder a los datos de niveles superiores en la jerarquía de memoria.
40
[0017] La lógica de captura previa de datos 121 también puede incluir un monitor de direcciones de datos de bucle de memoria caché de datos para determinar un paso de acceso a datos. La lógica de captura previa de datos 121 luego emite especulativamente solicitudes de captura previa con direcciones de operandos establecidas de acuerdo al paso de acceso a los datos. Por ejemplo, la lógica de captura previa de datos 121 puede incluir un circuito de paso 119 que está configurado para supervisar ejecuciones repetidas de una instrucción de carga para determinar 45 una diferencia entre la dirección de operandos de cada ejecución de la instrucción de carga que representa un valor de paso. El circuito de paso 119 también puede incluir una función de adición que está configurada para agregar el valor del paso determinado a la dirección de operando de la instrucción de carga ejecutada más recientemente, para generar la siguiente dirección de operando. A diferencia del valor del paso como una dirección predicha, una instrucción de bifurcación condicional capturada usa una lógica de predicción de bifurcación, tal como la contenida 50 en el circuito lógico de predicción 122, para predecir si se tomará la bifurcación condicional y la dirección de bifurcación. Una instrucción capturada no de bifurcación avanza a la etapa de decodificación 131 para ser decodificada, emitida para su ejecución en la etapa de emisión de instrucciones 132, ejecutada en la etapa de ejecución 134 y retirada en la etapa de finalización 135.
55
[0018] El circuito de lógica de predicción 122 comprende un circuito de lógica de detección 146 para supervisar sucesos, un filtro 150 y una tabla de historia condicional 152. En una realización, se supone que una mayoría de las instrucciones de bifurcación condicional generalmente tienen sus condiciones resueltas en el mismo valor para la mayoría de las iteraciones de un bucle de software.
60
[0019] El circuito de lógica de detección 146, en una realización, actúa como un detector de bucle de software que funciona basándose en las características dinámicas de instrucciones de bifurcación condicional utilizadas en los bucles de software, tal como se describe con respecto a la FIG. 2A. El circuito lógico de detección 146 también puede detectar salidas de funciones de software llamadas, tal como se describe con respecto a la FIG. 2B.
65
[0020] En bucles de software con una sola entrada y una sola salida, una bifurcación de final de bucle es
generalmente una instrucción de bifurcación condicional que bifurca de vuelta al inicio del bucle de software para todas las iteraciones del bucle, a excepción de la última iteración, que sale del bucle de software. El circuito lógico de detección 146 puede tener múltiples realizaciones para la detección de bucles de software, tal como se describe con más detalle a continuación y en la solicitud de patente estadounidense 11 / 066.508, cedida al cesionario de la presente solicitud, titulada "Supresión de actualización de un registro de historia de bifurcación por bifurcaciones de 5 fin de bucle".
[0021] Según una realización, el circuito de lógica de detección 146 identifica las instrucciones de bifurcación condicional con una dirección de destino de bifurcación inferior a la dirección de instrucción de bifurcación condicional y, por lo tanto, consideradas como una bifurcación inversa, y se supone que marcan el final de un bucle 10 de software. Dado que no todas las bifurcaciones inversas son bifurcaciones de fin de bucle, existe un cierto nivel de imprecisión que puede necesitar ser tenido en cuenta por mecanismos de supervisión adicionales, por ejemplo.
[0022] Además, como se describe con respecto a la FIG. 2B, se puede detectar una instrucción de retorno de función (comúnmente denominada RET). De acuerdo a una realización, la detección de un retorno de función está 15 adaptada para desencadenar cancelaciones de captura previa de solicitudes cualesquiera de captura previa no de demanda. La cancelación de una solicitud de captura previa también se realiza en respuesta a información de flujo de programa, tal como la detección de una salida de bucle.
[0023] En otra realización, una bifurcación de fin de bucle puede ser detectada en bucles simples mediante el 20 reconocimiento de la ejecución repetida de la misma instrucción de bifurcación. Al almacenar el valor del contador de programa para la última instrucción de bifurcación inversa en un registro de propósito especial, y comparar este valor almacenado con la dirección de instrucción de la próxima instrucción de bifurcación inversa, se puede reconocer una bifurcación de fin de bucle cuando las dos direcciones de instrucción coinciden. Como el código puede incluir instrucciones de bifurcación condicional dentro de un bucle de software, la determinación de la instrucción de 25 bifurcación de fin de bucle puede volverse más complicada. En tal situación, múltiples registros de propósito especial pueden ser instanciados en hardware para almacenar las direcciones de instrucciones de cada instrucción de bifurcación condicional. Al comparar con todos los valores almacenados, se puede determinar una coincidencia para la bifurcación que termina el bucle. Habitualmente, las bifurcaciones de bucle son bifurcaciones directas inversas condicionales con un desplazamiento fijo a partir del contador de programa (PC). Este tipo de bifurcaciones no 30 necesitaría comparaciones de direcciones para la detección de una salida de bucle. En cambio, una vez que se detecta un bucle de programa basándose en una bifurcación directa inversa condicional, la salida del bucle se determina a partir de la resolución del predicado de la bifurcación. Por ejemplo, si el predicado se resuelve en una condición verdadera para regresar al bucle, se indicaría la salida del bucle cuando el predicado se resuelva en una condición falsa. Para que haya capturas previas pendientes, un ciclo de programa ya se habría ejecutado unas 35 pocas veces para activar el hardware de captura previa. La lógica de captura previa de datos 121 requiere unas pocas cargas de demanda de calentamiento para reconocer un patrón antes de que comience la captura previa.
[0024] Además, una bifurcación de final de bucle puede estar marcada estáticamente por un compilador o ensamblador. Por ejemplo, en una realización, un compilador genera un tipo particular de instrucción de bifurcación, 40 mediante el uso de un código de operación único, o mediante la configuración de un campo de bits de formato especial, que solo se usa para bifurcaciones de fin de bucle. La bifurcación por fin de bucle puede detectarse luego fácilmente durante la ejecución del conducto, tal como durante una etapa de descodificación en el conducto.
[0025] El circuito de lógica de predicción 122 comprende un filtro 150, una tabla de historia condicional (CHT) 152 y 45 la lógica de monitorización asociada. En una realización, un proceso de supervisión guarda información de estado de sucesos de condición pre-especificados que se han producido en una o más ejecuciones previas de un bucle de software que tiene una instrucción de bifurcación condicional que es elegible para predicción. En apoyo del circuito lógico de predicción 122, el filtro 150 determina si se ha recibido una instrucción de bifurcación condicional capturada y si está habilitada la CHT 152. Se selecciona una entrada en la CHT 152 para proporcionar información 50 de predicción que es rastreada, por ejemplo, por las etapas del conducto 132 a 135 a medida que las instrucciones se desplazan por el conducto.
[0026] La entrada de la CHT 152 registra la historia de la ejecución de la instrucción capturada, elegible para su ejecución predicha. Por ejemplo, cada entrada de la CHT puede comprender adecuadamente una combinación de 55 valores de recuento de contadores de estado de ejecución y bits de estado que son entradas para la lógica de predicción. La CHT 152 también puede comprender una lógica de índice para permitir que una instrucción de bifurcación condicional capturada sirva como índice para una entrada en la CHT 152 asociada a la instrucción capturada, ya que pueden existir múltiples instrucciones de bifurcación condicional en un bucle de software. Por ejemplo, al contar el número de instrucciones de bifurcación condicional desde el extremo superior de un bucle de 60 software, el recuento puede usarse como un índice para la CHT 152. El circuito lógico de predicción 122 incluye contadores de bucle para contar iteraciones de bucles de software y garantizar que los contadores de estado de ejecución hayan tenido la oportunidad de saturarse en un valor de recuento especificado que represente, por ejemplo, un estado sumamente no ejecutado. Si un contador de estado de ejecución se ha saturado, la lógica de predicción está habilitada para realizar una predicción de la dirección de bifurcación de la instrucción asociada de 65 bifurcación condicional capturada en la siguiente iteración del bucle.
[0027] El circuito de lógica de predicción 122 genera información de predicción que se rastrea en la etapa de emisión de instrucciones 132, la etapa de captura de operandos 133, la etapa de ejecución 134 y la etapa de terminación 135 en la emisión de registro de rastreo (TRI) 162, la captura de operandos de registro de rastreo 163, la ejecución de registro de rastreo (TrE) 164 y la completitud del registro de rastreo (TrC) 165, respectivamente. 5 Cuando se detecta una bifurcación condicional inversa con un predicado fallido que indica el final del bucle, o un retorno de función, tal como durante la etapa de ejecución 134 en el conducto procesador, se genera una señal de cancelación de solicitudes pendientes de captura previa 155. En otra realización, las solicitudes pendientes de captura previa se cancelan basándose en una predicción de bifurcación condicional generada por la lógica de predicción de bifurcación. Cada bifurcación condicional generalmente es predicha por la lógica de predicción de 10 bifurcación. para tomar o no la bifurcación condicional. Por ejemplo, cuando la información de predicción indica que se toma la bifurcación condicional que, en este ejemplo, continúa un bucle de programa, el capturador de instrucciones captura especulativamente instrucciones en el bucle de programa indicado por la predicción. La información de predicción también está acoplada a un circuito lógico de cancelación de solicitud pendiente de captura previa 141 que puede residir en el circuito de captura y captura previa 130. El circuito lógico de cancelación 15 de solicitud pendiente de captura previa 141 puede cancelar entonces especulativamente las solicitudes pendientes de captura previa, basándose en la información de flujo de programa que indica que las solicitudes pendientes de captura previa no son necesarias. Por ejemplo, el procesador puede configurarse para que no cancele las solicitudes pendientes de captura previa basándose en una salida de bucle predicha débilmente. Al cancelar una o más solicitudes pendientes de captura previa de datos, se reduce la contaminación de la memoria caché de datos y se 20 reduce la potencia utilizada para abordar dicha contaminación en el procesador 110. La señal de cancelación de solicitud pendiente de captura previa 155 está acoplada al conducto de instrucciones del procesador 120, como se muestra en la FIG. 1, y es aceptada por el circuito lógico de cancelación de solicitud pendiente de captura previa 141, que provoca que se cancelen las solicitudes de captura previa que estén pendientes, excepto las solicitudes de captura previa de demanda. Además, el rendimiento del procesador se mejora al no almacenar datos innecesarios 25 en la memoria caché de datos, que puede haber desalojado datos que hubieran sido capturados y ahora, en cambio, se genera un error.
[0028] Al llegar a la etapa de ejecución 134, si la condición de ejecución especificada para la instrucción de bifurcación condicional de final de bucle ha sido evaluada como opuesta a su predicción, se corrige cualquier 30 ejecución especulativa del conducto de instrucciones en el trayecto erróneo de instrucciones, por ejemplo, mediante el vaciado del conducto, y tal corrección puede incluir la cancelación de capturas previas pendientes que están asociadas al trayecto erróneo de instrucciones. Por ejemplo, en una realización, una corrección para el conducto incluye vaciar las instrucciones en el conducto que comiencen en la etapa en la que se realizó la predicción. En una realización alternativa, el conducto se vacía desde la etapa de captura inicial, donde la instrucción de bifurcación 35 condicional del fin del bucle fue capturada inicialmente. Además, la entrada adecuada de la CHT también puede corregirse después de una predicción incorrecta.
[0029] El circuito de detección 146, que actúa como un detector de bucle, funciona para detectar una bifurcación de fin de bucle. Por ejemplo, una bifurcación de fin de bucle es generalmente una instrucción de bifurcación condicional 40 que bifurca inversamente al inicio del bucle para todas las iteraciones del bucle, excepto para la última iteración que sale del bucle. La información relativa a cada bucle identificado se pasa al circuito de filtro 150 y, en una situación de salida de bucle, un circuito lógico de cancelación de solicitud pendiente de captura previa 141 cancela solicitudes pendientes de captura previa no de demanda, en respuesta a cada salida de bucle identificada.
45
[0030] En una realización, el circuito de filtro 150, por ejemplo, es un contador de bucle que proporciona una indicación de que ha ocurrido un número determinado de iteraciones de un bucle de software, tal como tres iteraciones de un bucle particular. Para cada iteración del bucle, el filtro determina si una instrucción de bifurcación condicional es elegible para la predicción. Si una instrucción de bifurcación condicional (CB) elegible está en el bucle, el estado de ejecución de la instrucción de CB se registra en el circuito de la tabla de historia condicional 50 (CHT) 152. Por ejemplo, un contador de estado de ejecución se puede usar para registrar una historia de ejecución de ejecuciones anteriores intentadas de una instrucción de CB elegible. Un contador de estado de ejecución se actualiza en una dirección para indicar la instrucción de CB ejecutada condicionalmente y, en una dirección opuesta, para indicar que la instrucción de CB no se ejecutó condicionalmente. Por ejemplo, se puede usar un contador de estado de ejecución de dos bits donde un estado no ejecutado causa una disminución del contador y un estado 55 ejecutado causa un incremento del contador. A los estados de salida del contador de estado de ejecución se asignan, por ejemplo, una salida de "11" para indicar que se indica firmemente que las instrucciones de CB anteriores han sido ejecutadas, una salida de "10" para indicar que se indica inciertamente que las instrucciones de CB anteriores han sido ejecutadas, una salida de "01" para indicar que se indica inciertamente que las instrucciones de CB anteriores no hayan sido ejecutadas, y una salida de "00" para indicar que se indica firmemente que las 60 instrucciones de CB anteriores no hayan sido ejecutadas. La salida del contador "11" y la salida "00" del estado de ejecución serían valores de salida saturados. Un contador de estado de ejecución se asociaría a, o proporcionaría estado para, cada instrucción de CB en un bucle de software detectado. Sin embargo, una implementación particular puede limitar el número de contadores de estado de ejecución que se utilizan en la implementación y, por lo tanto, limitar el número de instrucciones de CB que se predicen. El circuito de detección 146 generalmente restablece los 65 contadores de estado de ejecución en la primera entrada a un bucle de software.
[0031] Alternativamente, un indicador de inhabilitación de predicción puede estar asociado a cada instrucción de CB a predecir, en lugar de un contador de estado de ejecución. El indicador de inhabilitación de predicción se activa para inhabilitar la predicción si se ha determinado previamente que se ha ejecutado una instrucción de CB asociada. La identificación de una instrucción de CB previa que se ha ejecutado implica que el nivel de confianza para predecir 5 una situación de no ejecución para la instrucción de CB sería inferior a un nivel aceptable.
[0032] Un contador de índice también se puede usar con la CHT 152 para determinar qué instrucción de CB se está contando o evaluando en el bucle de software. Por ejemplo, en un bucle que tenga cinco o más instrucciones de CB, la primera instrucción de CB podría tener un índice de "000" y la cuarta instrucción de bifurcación condicional 10 elegible podría tener un índice de "011". El índice representa una dirección dentro de la CHT 152, para acceder a los valores almacenados del contador de estado de ejecución, para la instrucción de CB correspondiente.
[0033] El circuito de predicción 122 recibe la información de predicción para una instrucción de CB en particular, tal como los valores de salida del contador de estado de ejecución, y predice, durante la etapa de decodificación 131 de 15 la FIG. 1, por ejemplo, que la instrucción de CB generalmente bifurcará de nuevo al inicio del bucle de software, y no predirá que se ha alcanzado una situación de salida del bucle. En una realización, el circuito de predicción 122 puede predecir que la condición especificada por la instrucción de CB se evalúa como un estado de no bifurcación, sale del código o atraviesa el bucle. El circuito de predicción 122 rastrea la instrucción de CB. Si se predice que una instrucción de CB se bifurca de nuevo al inicio del bucle, la información de predicción indica tal estado. Si se 20 determinó que una instrucción de CB no se bifurca inversamente, entonces un circuito de rastreo genera una señal de cancelación de solicitud pendiente de captura previa y se realiza una evaluación de condición para determinar si se realizó una predicción incorrecta. Si se realizó una predicción incorrecta, el conducto también se puede vaciar, los contadores adecuados de estado de ejecución en la CHT 152 se actualizan y, en una realización, la entrada asociada de la CHT se marca para indicar que esta instrucción de CB particular no se ha de predecir a partir de este 25 momento. En otra realización, el circuito de lógica de predicción 122 también puede cambiar el criterio de evaluación pre-especificado al determinar que la instrucción de CB fue mal predicha, por ejemplo, para hacer que el criterio de predicción sea más conservador a partir de este momento.
[0034] Además, se reconoce que no todos los bucles tienen características similares. Si un bucle particular 30 proporciona malos resultados de predicción, ese bucle se marca en el circuito de lógica de predicción 122 para desactivar la predicción. De manera similar, un bucle particular puede funcionar con buena predicción en un conjunto de escenarios operativos y puede funcionar con mala predicción en un conjunto diferente de escenarios operativos. En tal caso, el reconocimiento de los escenarios operativos permite que la predicción se habilite, deshabilite o habilite, pero con un diferente criterio de evaluación, adecuado para el escenario operativo. 35
[0035] La FIG. 2A ilustra un proceso 200 para cancelar solicitudes pendientes de captura previa de datos no de demanda, al detectar una bifurcación de finalización de bucle. En el bloque 202, la ejecución del código del procesador se supervisa para un bucle de software. En el bloque de decisión 204, se toma una determinación en cuanto a si se ha detectado un bucle de software. Se puede determinar un bucle de software, por ejemplo, 40 identificando una bifurcación inversa a una ubicación que representa el inicio del bucle de software en un primer paso a través del bucle de software, como se ha descrito anteriormente. Si no se ha identificado ningún bucle de software, el proceso 200 vuelve al bloque 202. Si se ha identificado un bucle de software, entonces el proceso 200 avanza hasta el bloque 206. En este punto en el código, ya se ha ejecutado un primer ciclo del bucle de software y el siguiente ciclo del bucle de software está listo para comenzar. 45
[0036] En el siguiente ciclo del bucle de software en el bloque 206, el código del procesador se monitoriza para una instrucción de CB. En la etapa de decisión 208 se toma una determinación en cuanto a si se ha detectado una instrucción de CB, por ejemplo, durante una etapa de decodificación del conducto, tal como la etapa de decodificación 131 de la FIG. 1. Si no se ha detectado ninguna instrucción de CB, el proceso 200 regresa al bloque 50 206. Si se ha detectado una instrucción de CB, el proceso 200 avanza al bloque de decisión 210. En el bloque de decisión 210, se toma una determinación en cuanto a si la instrucción de bifurcación condicional (CB) resolvió finalizar el bucle, basándose en una evaluación del predicado condicional, por ejemplo. Hay varios tipos de evaluaciones de instrucciones de CB que pueden haberse detectado. Por ejemplo, una primera evaluación de la instrucción de CB detectada podría resolverse en cuanto a que la instrucción de CB está al final del bucle de 55 software, pero se evalúa para continuar con el procesamiento del bucle. La instrucción de CB de bifurcación inversa que identificó el bucle de software en el primer paso por el bucle de software está etiquetada por su ubicación de dirección en el código del procesador, por ejemplo. Además, en el caso de que no se hayan completado una serie de iteraciones especificadas del bucle de software, la instrucción de CB resuelve volver a bifurcar el procesador al comienzo del bucle de software. Una segunda evaluación de la instrucción de CB detectada podría resolverse en 60 cuanto a que la instrucción de CB está al final del bucle de software y se evalúa para finalizar el bucle de software. Una tercera evaluación de la instrucción de CB detectada podría resolverse en cuanto a que la instrucción de CB está dentro del bucle de software, pero cuando se evalúa como adoptada o no adoptada, el código del procesador permanece en el bucle de software. Además, una cuarta evaluación de la instrucción CB podría resolverse en cuanto a que la instrucción de CB está dentro del bucle de software, pero, cuando se evalúa como adoptada o no 65 adoptada, el código del procesador sale del bucle de software. En la cuarta evaluación, se considera que una
instrucción de CB que está dentro del bucle de software, pero que se resuelve como una bifurcación directa más allá de la ubicación de dirección de la instrucción de CB de bifurcación inversa, ha salido del bucle de software.
[0037] Volviendo al bloque de decisión 210, si la instrucción de CB detectada no resolvió salir del bucle de software, como en las evaluaciones primera y tercera de la instrucción de CB, el proceso 200 avanza al bloque 212. En el 5 bloque 212, el proceso 200 continúa con el procesamiento de bifurcación normal y luego regresa al bloque 206. Si la instrucción de CB detectada resolvió salir del bucle de software, como en las evaluaciones segunda y cuarta de la instrucción de CB, el proceso 200 avanza al bloque 214. En el bloque 214, el proceso 200 cancela las solicitudes pendientes de captura previa de datos, excepto las solicitudes de captura previa de datos por demanda, procesa la instrucción de CB y vuelve al bloque 202 para comenzar a buscar el siguiente bucle de software. 10
[0038] La FIG. 2B ilustra un proceso 250 para cancelar solicitudes pendientes de captura previa de datos no de demanda al detectar un retorno de función. En el bloque 252, se supervisa la ejecución del código del procesador para una salida de función de software. Se observa que la función de software puede ejecutarse especulativamente. Por ejemplo, la ejecución especulativa puede ocurrir para una llamada de función en un bucle de software. En el 15 caso de ejecución especulativa de la función de software, la salida de la función de software, tal como la ejecución de una instrucción RET, también puede ejecutarse especulativamente. En el bloque de decisión 254, se toma una determinación en cuanto a si se ha detectado una salida de función de software, tal como al detectar una instrucción de retorno en el conducto de ejecución de un procesador. Si no se ha detectado ninguna salida de función de software, el proceso 250 vuelve al bloque 252. 20
[0039] Si se ha detectado una salida de función de software, el proceso 250 prosigue hasta el bloque de decisión 256. En el bloque de decisión 256, se toma una determinación en cuanto a si esta situación de salida detectada es un retorno desde una rutina de interrupción. Si la salida detectada es un retorno desde una rutina de interrupción, entonces el proceso 250 regresa al bloque 252. Si la salida detectada no es un retorno desde una rutina de 25 interrupción, el proceso 250 continúa al bloque 258. En el bloque 258, el proceso 250 cancela las solicitudes pendientes de captura previa de datos, a excepción de solicitudes de captura previa de datos demandados, procesa la instrucción de retorno y luego regresa al bloque 252 para continuar monitorizando el código del procesador con respecto a una salida de función de software.
30
[0040] Con frecuencia, ya sea a mano o por medio de optimizaciones del compilador, un bucle de software se desenrollará de manera que múltiples iteraciones del bucle se ejecuten secuencialmente. Esta ejecución secuencial de cada iteración desenrollada se convierte en un candidato de captura previa adicional. En la última iteración del bucle, cada candidato desenrollado puede generar entonces solicitudes de captura previa innecesarias que agravan el problema de la contaminación de la memoria caché de datos previamente capturados. Una realización de la 35 invención también se aplica al desenrollado del bucle detectando la salida del bucle, o el retorno desde una función, y cancelando todas las solicitudes de captura previa innecesarias procedentes de cada bucle desenrollado.
[0041] La FIG. 3 ilustra una realización particular de un dispositivo portátil 300 que tiene un complejo procesador que está configurado para cancelar solicitudes pendientes de captura previa de datos, seleccionadas para reducir la 40 contaminación de la memoria caché. El dispositivo 300 puede ser un dispositivo electrónico inalámbrico e incluir el complejo procesador 310 acoplado a una memoria de sistema 312 que tiene instrucciones de software 318. La memoria del sistema 312 puede incluir la memoria del sistema 114 de la FIG. 1. El complejo procesador 310 puede incluir un procesador 311, un subsistema de memoria integrado 314 que tiene una memoria caché de datos de nivel 1 (Dcache de L1) 222, una memoria caché de instrucciones de nivel 1 (Icache de L1) 326, un circuito controlador de 45 memoria caché 328 y lógica de predicción 316. El procesador 311 puede incluir el procesador 110 de la FIG. 1. El subsistema de memoria integrado 314 también puede incluir una memoria caché unificada de nivel 2 (no mostrada). La Icache de L1 326 puede incluir la Icache de L1 124 de la FIG. 1 y la Dcache de L1 322 puede incluir la memoria Dcache de L1 128 de la FIG. 1.
50
[0042] El subsistema de memoria integrado 314 puede estar incluido en el complejo procesador 310 o puede ser implementado como uno o más dispositivos o circuitos individuales (no mostrados) externos al complejo procesador 310. En un ejemplo ilustrativo, el complejo procesador 310 funciona de acuerdo a cualquiera de las realizaciones ilustradas en, o asociadas a, las FIGs. 1 y 2. Por ejemplo, como se muestra en la FIG. 3, la Icache de L1 326, la Dcache de L1 322 y el circuito controlador de memoria caché 328 son accesibles dentro del complejo procesador 55 310, y el procesador 311 está configurado para acceder a datos o instrucciones de programa almacenadas en las memorias del subsistema de memoria integrado 314 o en la memoria del sistema 312.
[0043] Una interfaz de cámara 334 está acoplado al complejo procesador 310 y también acoplada a una cámara, tal como una cámara de vídeo 336. Un controlador de visualización 340 está acoplado al complejo procesador 310 y a 60 un dispositivo de visualización 342. También se puede acoplar un codificador / decodificador (CÓDEC) 344 al complejo procesador 310. Un altavoz 346 y un micrófono 348 se pueden acoplar al CÓDEC 344. Una interfaz inalámbrica 350 puede estar acoplada al complejo procesador 310 y a una antena inalámbrica 352 de manera que los datos inalámbricos recibidos a través de la antena 352 y la interfaz inalámbrica 350 puedan proporcionarse al procesador 311. 65
[0044] El procesador 311 puede estar configurado para ejecutar instrucciones de software 318 almacenadas en un medio legible por ordenador no transitorio, tal como la memoria del sistema 312, que son ejecutables para hacer que un ordenador, tal como el procesador 311, ejecute un programa, tal como el proceso de programa 200 de la FIG. 2. Las instrucciones de software 318 son además ejecutables para hacer que el procesador 311 procese instrucciones que accedan a las memorias del subsistema de memoria integrado 314 y a la memoria del sistema 312. 5
[0045] En un modo de realización particular, el complejo procesador 310, el controlador de visualización 340, la memoria del sistema 312, el CÓDEC 344, la interfaz inalámbrica 350 y la interfaz de cámara 334 pueden estar incluidos en un dispositivo de sistema en un paquete o de sistema en un chip 304. En un modo de realización particular, un dispositivo de entrada 356 y una fuente de alimentación 358 están acoplados al dispositivo de sistema 10 en un chip 304. Además, en un modo de realización particular, como se ilustra en la FIG. 3, el dispositivo de visualización 342, el dispositivo de entrada 356, el altavoz 346, el micrófono 348, la antena inalámbrica 352, la cámara de vídeo 336 y la fuente de alimentación 358 son externos al dispositivo de sistema en un chip 304. Sin embargo, cada uno entre el dispositivo de visualización 342, el dispositivo de entrada 356, el altavoz 346, el micrófono 348, la antena inalámbrica 336 y la fuente de alimentación 358 se puede acoplar a un componente del 15 dispositivo de sistema en un chip 304, tal como una interfaz o un controlador.
[0046] El dispositivo 300, de acuerdo a formas de realización descritas en este documento, puede ser incorporado en varios dispositivos, tales como un equipo de sobremesa, una unidad de entretenimiento, un dispositivo de navegación, un dispositivo de comunicaciones, un asistente digital personal (PDA), una unidad de datos de 20 ubicación fija, una unidad de datos de ubicación móvil, un teléfono móvil, un teléfono celular, un ordenador, un ordenador portátil, tabletas, un monitor, un monitor de ordenador, un televisor, un sintonizador, una radio, una radio satelital, un reproductor de música, un reproductor de música digital, un reproductor de música portátil, un reproductor de vídeo, un reproductor de vídeo digital, un reproductor de discos de vídeo digitales (DVD), un reproductor de vídeo digital portátil, cualquier otro dispositivo que almacene o recupere datos o instrucciones de 25 ordenador, o cualquier combinación de los mismos.
[0047] Los diversos bloques lógicos, módulos, circuitos, elementos y/o componentes ilustrativos descritos en relación con los ejemplos divulgados en el presente documento pueden implementarse o realizarse con un procesador de uso general, con un procesador de señales digitales (DSP), con un circuito integrado específico de la 30 aplicación (ASIC), con una formación de compuertas programables en el terreno (FPGA) o con otros componentes de lógica programable, lógica de transistor o de compuertas discretas, componentes de hardware discretos, o con cualquier combinación de los mismos diseñada para realizar las funciones descritas en el presente documento. Un procesador de propósito general puede ser un microprocesador pero, de forma alternativa, el procesador puede ser cualquier procesador, controlador, micro-controlador o máquina de estados convencional. Un procesador también 35 puede implementarse como una combinación de componentes informáticos, por ejemplo, una combinación de un DSP y un microprocesador, una pluralidad de microprocesadores, uno o más microprocesadores junto con un núcleo de DSP o cualquier otra configuración de este tipo, adecuada para una aplicación deseada.
[0048] Los procedimientos o algoritmos descritos en relación con los modos de realización divulgados en el presente 40 documento pueden realizarse directamente en hardware, en un módulo de software ejecutado por un procesador o en una combinación de los dos. Un módulo de software puede residir en memoria RAM, memoria flash, memoria ROM, memoria EPROM, memoria EEPROM, registros, un disco duro, un disco extraíble, un CD-ROM o en cualquier otra forma de medio de almacenamiento no transitorio conocida en la técnica. Un medio de almacenamiento no transitorio puede estar acoplado al procesador de manera que el procesador pueda leer información de, y escribir 45 información en, el medio de almacenamiento. De forma alternativa, el medio de almacenamiento no transitorio puede estar integrado en el procesador.
[0049] El procesador 110 de la FIG. 1 o el procesador 311 de la FIG. 3, por ejemplo, pueden configurarse para ejecutar instrucciones que incluyen instrucciones condicionales no de bifurcación, bajo el control de un programa 50 almacenado en un medio de almacenamiento no transitorio legible por ordenador, directamente asociado localmente al procesador, tal como puede estar disponible mediante una memoria caché de instrucciones, o bien accesible a través de un dispositivo de I/O, tal como uno de los dispositivos de I/O 140 o 142 de la FIG. 1, por ejemplo. El dispositivo de I/O también puede acceder a datos que residen en un dispositivo de memoria, ya sea directamente asociados localmente a los procesadores, tales como la Dcache 128, o bien accesibles desde la memoria de otro 55 procesador. El medio de almacenamiento no transitorio legible por computadora puede incluir memoria de acceso aleatorio (RAM), memoria dinámica de acceso aleatorio (DRAM), memoria de acceso aleatorio dinámica síncrona (SDRAM), memoria flash, memoria de solo lectura (ROM), memoria programable de solo lectura (PROM), memoria de solo lectura programable borrable (EPROM), memoria de solo lectura programable y borrable eléctricamente (EEPROM), disco compacto (CD), disco de vídeo digital (DVD), otros tipos de discos extraíbles o cualquier otro 60 medio adecuado de almacenamiento no transitorio.
[0050] Si bien la invención se da a conocer en el contexto de realizaciones ilustrativas para su uso en sistemas procesadores, se reconocerá que una amplia variedad de implementaciones puede ser empleada por personas de medianamente expertas en la técnica, en consonancia con la exposición anterior y las reivindicaciones a 65 continuación. Por ejemplo, una implementación de función fija también puede utilizar varias realizaciones de la
presente invención.
Claims (13)
- REIVINDICACIONES1. Un procedimiento (200) para cancelar solicitudes de captura previa de memoria caché de datos no de demanda, en un sistema procesador (100) que comprende un procesador (110) que tiene un sistema de memoria caché (112) que comprende una memoria caché de datos (124) y que tiene un conducto de 5 instrucciones (120), comprendiendo el procedimiento:determinar un paso de acceso a datos basado en la ejecución repetida de una instrucción de acceso a memoria en un bucle de programa;10emitir especulativamente solicitudes de captura previa de la memoria caché de datos de acuerdo al paso de acceso a los datos;identificar (210) una salida de bucle basándose en una evaluación de información de flujo de programa; y caracterizado por: 15cancelar (214) las solicitudes de captura previa de memoria caché de datos que son solicitudes pendientes de captura previa de memoria caché de datos no de demanda en respuesta a la salida de bucle identificada.20
- 2. El procedimiento de la reivindicación 1, en el que la salida de bucle se basa en la identificación de una bifurcación de fin de bucle que evalúa salir del bucle de programa.
- 3. El procedimiento de la reivindicación 1, en el que la salida del bucle se basa en una predicción de bifurcación incorrecta que provocó que se cancelara la captura y ejecución especulativa de instrucciones. 25
- 4. El procedimiento de la reivindicación 1, en el que la identificación de la salida de bucle comprende detectar que una instrucción de bifurcación condicional ha resuelto finalizar el bucle de programa.
- 5. El procedimiento de la reivindicación 1 que comprende además: 30detectar que una instrucción de bifurcación condicional no ha resuelto finalizar el bucle del programa; ymonitorizar (202) con respecto a una salida de bucle.35
- 6. Un aparato (110) para cancelar solicitudes de captura previa de memoria caché de datos no de demanda, en un sistema procesador (100) que comprende un procesador (110) que tiene un sistema de memoria caché (112) que comprende una memoria caché de datos (124) y que tiene un conducto de instrucciones (120), comprendiendo el aparato:40un monitor de direcciones de datos de bucle configurado para determinar un paso de acceso a datos basado en la ejecución repetida de una instrucción de acceso a memoria en un bucle de programa;lógica de captura previa de datos (121) configurada para emitir especulativamente solicitudes de captura previa de memoria caché de datos de acuerdo al paso de acceso a los datos; 45medios para identificar (210) una salida de bucle basándose en una evaluación de información de flujo de programa; y caracterizado por:un circuito de detención de captura previa configurado para cancelar las solicitudes de captura previa 50 de memoria caché de datos que son solicitudes pendientes de captura previa de memoria caché de datos no de demanda en respuesta a la salida del bucle identificada.
- 7. El aparato de la reivindicación 6, en el que el monitor de direcciones de datos de bucle comprende:55un circuito de paso (119) configurado para supervisar la ejecución repetida de la instrucción de acceso a memoria para determinar una diferencia en una dirección de operando para cada ejecución de la instrucción de acceso a memoria, en donde la diferencia en la dirección de operando es un valor de dirección de paso; y60un circuito de función de suma configurado para agregar el valor de dirección de paso a la dirección de operando de la instrucción de acceso a memoria ejecutada más recientemente para determinar la siguiente dirección de operando.
- 8. El aparato de la reivindicación 6, en el que la salida de bucle identificada se basa en la identificación de una 65 bifurcación de final de bucle que evalúa salir del bucle de programa.
- 9. El aparato de la reivindicación 6, en el que la salida de bucle identificada se basa en una predicción de bifurcación incorrecta que cancela la captura y ejecución especulativa de instrucciones.
- 10. El aparato de la reivindicación 6, en el que la salida de bucle identificada se basa en la detección de una 5 instrucción de bifurcación condicional que ha resuelto finalizar el bucle de programa.
- 11. El aparato de la reivindicación 6, en el que el circuito de detención de captura previa está configurado además para detectar que una instrucción de bifurcación condicional no ha resuelto finalizar el bucle de programa y en el que el bucle de programa continúa hasta que se identifica la salida de bucle. 10
- 12. El aparato de la reivindicación 6, en el que el circuito de detención de captura previa está configurado además para no cancelar solicitudes pendientes de captura previa basadas en una salida de bucle inciertamente predicha.15
- 13. Un medio no transitorio legible por ordenador, codificado con datos y código de programa legibles por ordenador; los datos y código de programa, cuando son ejecutados por un procesador operable para realizar un procedimiento de acuerdo a cualquiera de las reivindicaciones 1 a 5.
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201313746000 | 2013-01-21 | ||
| US13/746,000 US9519586B2 (en) | 2013-01-21 | 2013-01-21 | Methods and apparatus to reduce cache pollution caused by data prefetching |
| PCT/US2014/012152 WO2014113741A1 (en) | 2013-01-21 | 2014-01-18 | Methods and apparatus for cancelling data prefetch requests for a loop |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2655852T3 true ES2655852T3 (es) | 2018-02-21 |
Family
ID=50113017
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES14704714.6T Active ES2655852T3 (es) | 2013-01-21 | 2014-01-18 | Procedimientos y aparatos para cancelar solicitudes de captura previa de datos para un bucle |
Country Status (10)
| Country | Link |
|---|---|
| US (1) | US9519586B2 (es) |
| EP (1) | EP2946286B1 (es) |
| JP (1) | JP6143886B2 (es) |
| KR (1) | KR101788683B1 (es) |
| CN (1) | CN105074655B (es) |
| BR (1) | BR112015017103B1 (es) |
| ES (1) | ES2655852T3 (es) |
| HU (1) | HUE035210T2 (es) |
| TW (1) | TWI521347B (es) |
| WO (1) | WO2014113741A1 (es) |
Families Citing this family (24)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9424046B2 (en) * | 2012-10-11 | 2016-08-23 | Soft Machines Inc. | Systems and methods for load canceling in a processor that is connected to an external interconnect fabric |
| US9348754B2 (en) | 2012-10-11 | 2016-05-24 | Soft Machines Inc. | Systems and methods for implementing weak stream software data and instruction prefetching using a hardware data prefetcher |
| US10963254B2 (en) * | 2013-07-15 | 2021-03-30 | Texas Instruments Incorporated | Mechanism to queue multiple streams to run on streaming engine |
| CN104133691B (zh) * | 2014-05-05 | 2016-08-31 | 腾讯科技(深圳)有限公司 | 加速启动的方法及装置 |
| US20160283243A1 (en) * | 2015-03-28 | 2016-09-29 | Yong-Kyu Jung | Branch look-ahead instruction disassembling, assembling, and delivering system apparatus and method for microprocessor system |
| EP3320428A4 (en) * | 2015-07-09 | 2019-07-17 | Centipede Semi Ltd. | PROCESSOR WITH EFFICIENT MEMORY ACCESS |
| US10275249B1 (en) * | 2015-10-15 | 2019-04-30 | Marvell International Ltd. | Method and apparatus for predicting end of loop |
| US10528352B2 (en) | 2016-03-08 | 2020-01-07 | International Business Machines Corporation | Blocking instruction fetching in a computer processor |
| US10175987B2 (en) | 2016-03-17 | 2019-01-08 | International Business Machines Corporation | Instruction prefetching in a computer processor using a prefetch prediction vector |
| US10474578B2 (en) * | 2017-08-30 | 2019-11-12 | Oracle International Corporation | Utilization-based throttling of hardware prefetchers |
| GB2572954B (en) * | 2018-04-16 | 2020-12-30 | Advanced Risc Mach Ltd | An apparatus and method for prefetching data items |
| US10649777B2 (en) * | 2018-05-14 | 2020-05-12 | International Business Machines Corporation | Hardware-based data prefetching based on loop-unrolled instructions |
| GB2574270B (en) * | 2018-06-01 | 2020-09-09 | Advanced Risc Mach Ltd | Speculation-restricted memory region type |
| US11216279B2 (en) * | 2018-11-26 | 2022-01-04 | Advanced Micro Devices, Inc. | Loop exit predictor |
| US10884749B2 (en) | 2019-03-26 | 2021-01-05 | International Business Machines Corporation | Control of speculative demand loads |
| US10963388B2 (en) * | 2019-06-24 | 2021-03-30 | Samsung Electronics Co., Ltd. | Prefetching in a lower level exclusive cache hierarchy |
| FR3098622A1 (fr) * | 2019-07-12 | 2021-01-15 | Stmicroelectronics (Grenoble 2) Sas | Procede de gestion d’instructions d’un programme contenues dans une memoire programme et circuit integre correspondant |
| CN110442382B (zh) * | 2019-07-31 | 2021-06-15 | 西安芯海微电子科技有限公司 | 预取缓存控制方法、装置、芯片以及计算机可读存储介质 |
| US11150812B2 (en) * | 2019-08-20 | 2021-10-19 | Micron Technology, Inc. | Predictive memory management |
| CN111541722B (zh) * | 2020-05-22 | 2022-03-18 | 哈尔滨工程大学 | 基于密度聚类的信息中心网络缓存污染攻击检测防御方法 |
| US11567776B2 (en) * | 2020-11-03 | 2023-01-31 | Centaur Technology, Inc. | Branch density detection for prefetcher |
| US11630654B2 (en) * | 2021-08-19 | 2023-04-18 | International Business Machines Corporation | Analysis for modeling data cache utilization |
| US20250130947A1 (en) * | 2023-10-20 | 2025-04-24 | International Business Machines Corporation | Clear prefetch stream on detection of pipeline flush |
| US12493556B2 (en) | 2024-04-26 | 2025-12-09 | Google Llc | Hardware control system to modulate prefetchers based on runtime telemetry |
Family Cites Families (24)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH02287828A (ja) * | 1989-04-28 | 1990-11-27 | Fujitsu Ltd | プリフェッチ制御方式 |
| JPH0439733A (ja) * | 1990-06-06 | 1992-02-10 | Fujitsu Ltd | 先行制御方式 |
| JPH04344935A (ja) * | 1991-05-23 | 1992-12-01 | Nec Corp | 情報処理装置 |
| JPH10232775A (ja) * | 1997-02-20 | 1998-09-02 | Hitachi Ltd | プリフェッチ機構 |
| US5996061A (en) * | 1997-06-25 | 1999-11-30 | Sun Microsystems, Inc. | Method for invalidating data identified by software compiler |
| US6430680B1 (en) | 1998-03-31 | 2002-08-06 | International Business Machines Corporation | Processor and method of prefetching data based upon a detected stride |
| US6260116B1 (en) | 1998-07-01 | 2001-07-10 | International Business Machines Corporation | System and method for prefetching data |
| US6611910B2 (en) * | 1998-10-12 | 2003-08-26 | Idea Corporation | Method for processing branch operations |
| US6446143B1 (en) * | 1998-11-25 | 2002-09-03 | Compaq Information Technologies Group, L.P. | Methods and apparatus for minimizing the impact of excessive instruction retrieval |
| US6321330B1 (en) | 1999-05-28 | 2001-11-20 | Intel Corporation | Each iteration array selective loop data prefetch in multiple data width prefetch system using rotating register and parameterization to avoid redundant prefetch |
| 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 |
| US6775765B1 (en) * | 2000-02-07 | 2004-08-10 | Freescale Semiconductor, Inc. | Data processing system having instruction folding and method thereof |
| US20020144054A1 (en) * | 2001-03-30 | 2002-10-03 | Fanning Blaise B. | Prefetch canceling based on most recent accesses |
| JP3683248B2 (ja) * | 2002-10-22 | 2005-08-17 | 富士通株式会社 | 情報処理装置及び情報処理方法 |
| US7194582B1 (en) | 2003-05-30 | 2007-03-20 | Mips Technologies, Inc. | Microprocessor with improved data stream prefetching |
| US7526604B1 (en) | 2004-08-09 | 2009-04-28 | Nvidia Corporation | Command queueing speculative write prefetch |
| US7587580B2 (en) * | 2005-02-03 | 2009-09-08 | Qualcomm Corporated | Power efficient instruction prefetch mechanism |
| US8589666B2 (en) | 2006-07-10 | 2013-11-19 | Src Computers, Inc. | Elimination of stream consumer loop overshoot effects |
| US7917701B2 (en) * | 2007-03-12 | 2011-03-29 | Arm Limited | Cache circuitry, data processing apparatus and method for prefetching data by selecting one of a first prefetch linefill operation and a second prefetch linefill operation |
| US7640420B2 (en) * | 2007-04-02 | 2009-12-29 | Intel Corporation | Pre-fetch apparatus |
| GB0722707D0 (en) | 2007-11-19 | 2007-12-27 | St Microelectronics Res & Dev | Cache memory |
| US8479053B2 (en) | 2010-07-28 | 2013-07-02 | Intel Corporation | Processor with last branch record register storing transaction indicator |
| US8661169B2 (en) | 2010-09-15 | 2014-02-25 | Lsi Corporation | Copying data to a cache using direct memory access |
| US8977819B2 (en) | 2010-09-21 | 2015-03-10 | Texas Instruments Incorporated | Prefetch stream filter with FIFO allocation and stream direction prediction |
-
2013
- 2013-01-21 US US13/746,000 patent/US9519586B2/en active Active
-
2014
- 2014-01-18 CN CN201480005173.0A patent/CN105074655B/zh active Active
- 2014-01-18 KR KR1020157021641A patent/KR101788683B1/ko active Active
- 2014-01-18 BR BR112015017103-6A patent/BR112015017103B1/pt active IP Right Grant
- 2014-01-18 JP JP2015553873A patent/JP6143886B2/ja active Active
- 2014-01-18 EP EP14704714.6A patent/EP2946286B1/en active Active
- 2014-01-18 HU HUE14704714A patent/HUE035210T2/hu unknown
- 2014-01-18 ES ES14704714.6T patent/ES2655852T3/es active Active
- 2014-01-18 WO PCT/US2014/012152 patent/WO2014113741A1/en not_active Ceased
- 2014-01-21 TW TW103102149A patent/TWI521347B/zh active
Also Published As
| Publication number | Publication date |
|---|---|
| KR20150110588A (ko) | 2015-10-02 |
| JP6143886B2 (ja) | 2017-06-07 |
| WO2014113741A1 (en) | 2014-07-24 |
| US20140208039A1 (en) | 2014-07-24 |
| TWI521347B (zh) | 2016-02-11 |
| BR112015017103A2 (pt) | 2017-07-11 |
| EP2946286A1 (en) | 2015-11-25 |
| EP2946286B1 (en) | 2017-10-25 |
| CN105074655A (zh) | 2015-11-18 |
| HUE035210T2 (hu) | 2018-05-02 |
| JP2016507836A (ja) | 2016-03-10 |
| KR101788683B1 (ko) | 2017-10-20 |
| BR112015017103B1 (pt) | 2022-01-11 |
| TW201443645A (zh) | 2014-11-16 |
| US9519586B2 (en) | 2016-12-13 |
| CN105074655B (zh) | 2018-04-06 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES2655852T3 (es) | Procedimientos y aparatos para cancelar solicitudes de captura previa de datos para un bucle | |
| ES2741998T3 (es) | Procedimientos y aparatos para predecir la no ejecución de instrucciones de no bifurcación condicional | |
| CN103513964B (zh) | 循环缓冲器打包 | |
| TWI564707B (zh) | 用於控制電流之設備、方法及系統 | |
| TWI520060B (zh) | 用於追蹤迴圈候選者之裝置及方法及處理器 | |
| US7975130B2 (en) | Method and system for early instruction text based operand store compare reject avoidance | |
| US8285937B2 (en) | Fused store exclusive/memory barrier operation | |
| US8572441B2 (en) | Maximizing encodings of version control bits for memory corruption detection | |
| US20130138931A1 (en) | Maintaining the integrity of an execution return address stack | |
| US9740557B2 (en) | Pipelined ECC-protected memory access | |
| US9372773B2 (en) | User-level hardware branch records | |
| US20190004806A1 (en) | Branch prediction for fixed direction branch instructions | |
| US20160179611A1 (en) | Low overhead error checking and correction apparatus and method | |
| CA2725906C (en) | System and method for processing interrupts in a computing system | |
| JP2009230479A (ja) | マイクロプロセッサ | |
| US12455799B2 (en) | Explicit lockstep for functional safety | |
| Shokouhinia | Enhancing performance in reliable Processing-In-Memory Systems using load value prediction | |
| WO2024258513A1 (en) | Explicit lockstep for functional safety |