BR102013015262A2 - Empacotamento de buffer de laço - Google Patents

Empacotamento de buffer de laço Download PDF

Info

Publication number
BR102013015262A2
BR102013015262A2 BRBR102013015262-5A BR102013015262A BR102013015262A2 BR 102013015262 A2 BR102013015262 A2 BR 102013015262A2 BR 102013015262 A BR102013015262 A BR 102013015262A BR 102013015262 A2 BR102013015262 A2 BR 102013015262A2
Authority
BR
Brazil
Prior art keywords
loop
buffer
loop buffer
iteration
written
Prior art date
Application number
BRBR102013015262-5A
Other languages
English (en)
Inventor
Conrado Blasco-Allue
Ian D Kountanis
Original Assignee
Apple Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Apple Inc filed Critical Apple Inc
Publication of BR102013015262A2 publication Critical patent/BR102013015262A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

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)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Empacotamento de buffer de laço. A presente invenção refere-se a métodos, aparelhos e processadores para empacotar iterações múltiplas de um laço em um buffer de laço. Um candidato de laço que atende aos critérios para armazenamento em buffer é detectado no fluxo de instrução sendo executado por um processador. Quando o laço está sendo escrito no buffer de laço e o final do laço é detectado, outra iteração do laço é escrita no buffer de laço se o bufferr de laço ainda não está cheio até a metade. Desse modo, laços curtos são escritos para o buffer de laço várias vezes para maximizar as operações de instrução por ciclo de taxa de transferência do buffer de laço quando o processador está no modo de buffer de laço.

Description

Relatório Descritivo da Patente de Invenção para "EMPACOTAMENTO DE BUFFER DE LAÇO". ANTECEDENTES Campo da Invenção A presente invenção refere-se geralmente a processadores, e em particular a métodos e mecanismos para empacotamento de múltiplas iterações de laço em um buffer de laço.
Descrição da Técnica Relacionada Sistemas de processador modernos tendem a ser estruturados em múltiplos estágios em um modo canalizado. Canalizações típicas incluem unidades separadas para buscar instruções, decodificar instruções, mapear instruções, executar instruções e, então, escrever resultados para outra unidade, tal como um registrador. Uma unidade de busca de instrução de um microprocessador é responsável por fornecer um fluxo constante de instruções para o próximo estágio do encadeamento de processador. Tipicamente, unidades de busca utilizam um cachê de instrução a fim de manter o resto do encadeamento continuamente suprido com instruções. A unidade de busca e o cachê de instrução tendem a consumir uma quantidade significan-te de energia enquanto realizam suas funções requeridas. É um objetivo dos microprocessadores modernos reduzir o consumo de energia tanto quanto possível, especialmente para microprocessadores que são utilizados em dispositivos móveis energizados por bateria.
Em muitas aplicações de software, as mesmas etapas de Software podem ser repetidas muitas vezes para realizar uma função específica ou tarefa. Nessas situações, a unidade de busca irá continuar a buscar instruções e consumir energia, embora o mesmo laço de instruções esteja sendo continuamente executado. Se o laço pode ser detectado e armazenado em cache em um buffer de laço, então a unidade de busca pode ser suspensa para reduzir o consumo de energia enquanto o laço é executado. No entanto, pode ser desafiador maximizar taxa de rendimento de instrução no encadeamento de processador enquanto o buffer de laço está sendo usado. Isso pode resultar no processador funcionando abaixo da eficiência completa.
SUMÁRIO
Aparelhos, processadores e métodos para maximizar instruções por ciclo de taxa de rendimento de um bufferde laço são descritos. A fim de maximizar as instruções por ciclo de taxa de rendimento, o buffer de laço pode ser empacotado com múltiplas iterações de um laço. Em uma modalidade, a extremidade frontal de um encadeamento de processador pode incluir uma unidade de busca, buffer de laço e uma unidade de controle de bufferde laço. A unidade de controle de bufferde laço pode monitorar e ras-trear candidatos de laço e determinar quais candidatos de laço devem ser armazenados em cache no bufferde laço.
Em uma modalidade, quando um candidato de laço atende aos critérios para armazenar em cache, a unidade de controle de buffer de laço pode sinalizar de volta para a unidade de busca que o início do laço precisa ser escrito na primeira abertura do buffer de laço. Na unidade de busca, o desvio para trás tomado do candidato de laço pode ser identificado e marcado. Então, a próxima instrução pode ser identificada e marcada como o início do laço. Quando a unidade de busca recebe o sinal da unidade de controle de buffer de laço de que o candidato de laço deve ser armazenado em cache no bufferde laço, a unidade de busca deve parar artificialmente após o desvio para trás tomado. Então, no próximo ciclo de relógio, a unidade de busca pode emitir a instrução identificada como o início do laço na primeira abertura do buffer de laço. Também, na extremidade da última iteração do laço sendo escrito no buffer de laço, quando o desvio para trás tomado é encontrado, a unidade de busca pode parar artificialmente após o desvio para trás tomado ser escrito no buffer de laço.
Em uma modalidade, quando o desvio para trás tomado de uma iteração de laço é escrito no buffer de laço, pode ser determinado se o buffer de laço está pelo menos cheio até a metade. Se o buffer de laço não está cheio até a metade, então outra iteração de laço pode ser escrita no buffer de laço. Se o buffer de laço está cheio até a metade, então escrever no buffer de laço pode ser terminado. Após a escrita no buffer de laço ser completa, a(s) iteração(ões) do laço pode(m) ser enviada(s) do buffer de laço para o próximo estágio do encadeamento de processador.
Essas e outras características e vantagens se tornarão aparentes para aqueles versados na técnica em vista das descrições detalhadas a seguir da abordagem apresentada aqui.
BREVE DESCRIÇÃO DAS FIGURAS
As vantagens adicionais acima dos métodos e mecanismos podem ser melhor entendidas referindo-se à seguinte descrição em conjunto com as figuras anexas, nos quais: A figura 1 ilustra uma modalidade de uma porção de um laço integrado. A figura 2 é um diagrama de bloco que ilustra uma modalidade de um núcleo de processador. A figura 3 é um diagrama de bloco ilustrando uma modalidade de uma extremidade frontal de um encadeamento de processador. A figura 4 ilustra um diagrama de bloco de outra modalidade de um buffer de laço dentro de uma unidade de busca e decodificação. A figura 5 é uma modalidade de um alinhador. A figura 6 ilustra uma modalidade de um laço armazenado em cache em um buffer de laço. A figura 7 ilustra uma modalidade de múltiplas iterações de um laço armazenado em cache em um buffer de laço. A figura 8 ilustra outra modalidade de múltiplas iterações de um laço armazenado em cache em um buffer de laço. A figura 9 é um diagrama de fluxo generalizado ilustrando uma modalidade de um método para rastrear um candidato de laço. A figura 10 é um diagrama de bloco de uma modalidade de um sistema. A figura 11 é um diagrama de bloco de uma modalidade de um meio legível por computador.
DESCRIÇÃO DETALHADA DAS MODALIDADES
Na descrição a seguir, diversos detalhes específicos são apresentados para fornecer um entendimento completo dos métodos e meca- nismos apresentados aqui. No entanto, uma pessoa sendo versada na técnica deve reconhecer que as várias modalidades podem ser praticadas sem esses detalhes específicos. Em alguns exemplos, estruturas, componentes, sinais, instruções de programa de computador e técnicas bem conhecidas não foram mostradas em detalhes para evitar encobrir as abordagens descritas aqui. Será apreciado que, para simplicidade e clareza da ilustração, elementos mostrados nas figuras não foram necessariamente desenhados em escala. Por exemplo, as dimensões de alguns dos elementos podem ser e-xageradas em relação a outros elementos.
Esse relatório descritivo inclui referências a "uma modalidade". O aparecimento da frase "em uma modalidade" em diferentes contextos não se refere necessariamente à mesma modalidade. Características, estruturas e atributos particulares podem ser combinados de qualquer maneira adequada, de acordo com essa descrição. Além disso, como usado por todo esse pedido, a palavra "pode" é usada em um sentido permissivo (isto é, significa ter o potencial para), ao invés de um sentido obrigatório (isto é, significando dever). Similarmente, as palavras "incluem", "incluindo" e "inclui" significam incluindo, mas não limitadas a.
Terminologia. Os parágrafos a seguir fornecem definições e /ou contexto para os termos encontrados nessa descrição (incluindo as reivindicações anexas): "Compreendendo." Esse termo é ilimitado. Tal como usado nas reivindicações anexas, esse termo não exclui estrutura ou etapas adicionais. Considere uma reivindicação que cita: "Processador compreendendo uma unidade de controle de buffer de laço...". Tal reivindicação não exclui o processador de incluir componentes adicionais (por exemplo, um cache, uma unidade de busca, uma unidade de despacho). "Configurado(a) para." Diversas unidades, laços ou outros componentes podem ser descritos ou reivindicados como "configurados para" realizar uma tarefa ou tarefas. Em tais contextos, "configurado(a) para" é usado para conotar estrutura indicando que as unida-des/circuitos/componentes incluem estrutura "por exemplo, conjunto de cir- cuitos" que realiza a tarefa ou tarefas durante a operação. Como tal, a uni-dade/circuito/componente pode ser dita para ser configurada para realizar a tarefa mesmo quando a unidade/circuito/componente especificada não estiver funcionando no momento (por exemplo, não estiver ligada). As unida-des/circuitos/componentes usadas com linguagem "configurado(a) para" incluem hardware - por exemplo, circuitos, memória armazenando instruções de programa executáveis para implementar a operação, etc. Relatando que uma unidade/circuito/componente é "configurada para" realizar uma ou mais tarefas é destinada expressamente a não dirigir-se a 35 U.S.C. §112, sexto parágrafo, para aquela unidade/circuito/componente. Adicionalmente, "configurado para" pode incluir estrutura genérica (por exemplo, circuito genérico) que é manipulada por software e/ou firmware (por exemplo, um FPGA ou um processador de propósito geral executando um software) para funcionar de uma maneira que é capaz de realizar a(s) tarefa(s) em questão. "Configurado para" também pode incluir adaptar um processo de fabricação (por e-xemplo, uma instalação de fabricação de semicondutor) para fabricar dispositivos (por exemplo, circuitos integrados) que são adaptados para implementar ou realizar uma ou mais tarefas. "Baseado em." Como usado aqui, esse termo é usado para descrever um ou mais fatores que afetam uma determinação. Esse termo não exclui fatores adicionais que podem afetar uma determinação. Ou seja, uma determinação pode ser somente baseada naqueles fatores ou baseada, pelo menos em parte, naqueles fatores. Considere a frase "determinar A baseado em B". Enquanto B pode ser um fator que afeta a determinação de A, tal frase não exclui a determinação de A de ser também baseada em C. Em outros exemplos, A pode ser determinada baseada somente em B.
Referindo-se agora à figura 1, um diagrama de bloco ilustrando uma modalidade de uma porção de um circuito integrado (IC) é mostrado. Na modalidade ilustrada, IC 10 inclui um complexo de processador 12, controlador de memória 22 e laços de interface física de memória (PHYs) 24 e 26. Nota-se que IC 10 pode também incluir muitos outros componentes não mostrados na figura 1. Em várias modalidades, IC 10 pode também ser refe- rido como um sistema em um chip (SoC), um laço integrado de aplicação específica (ASIC) ou um aparelho.
Complexo de processador 12 pode incluir unidades de processamento central (CPUs) 14 e 16, cache de nível dois (L2) 18 e unidade de interface de barramento (BIU) 20. Em outras modalidades, o complexo de processador 12 pode incluir outros números de CPUs. CPUs 14 e 16 também podem ser referidas como processadores ou núcleos. Nota-se que o complexo de processador 12 pode incluir outros componentes não mostrados na figura 1.
As CPUs 14 e 16 podem incluir conjunto de circuitos para executar instruções definidas em uma arquitetura de conjunto de instruções. Especificamente, um ou mais programas compreendendo as instruções pode ser executado pelas CPUs 14 e 16. Qualquer arquitetura de conjunto de instruções pode ser implementadas em várias modalidades. Por exemplo, em uma modalidade, a arquitetura de conjunto de instruções (ISA) ARM® pode ser implementada. O conjunto de instruções ARM pode incluir instruções de 16 bits (ou Thumb) e 32 bits. Outra ISA exemplar pode incluir a instrução PowerPC®, o conjunto de instrução MIPS®, o conjunto de instrução SPARC®, o conjunto de instrução x86 (também referido como IA-32), o conjunto de instrução IA-64, etc.
Em uma modalidade, cada instrução executada pelas CPUs 14 e 16 pode ser associada a um valor de contador de programa (PC). Também, um ou mais registros arquiteturais podem ser especificados dentro de algumas instruções para leituras e escritas. Esses registros arquiteturais podem ser mapeados para registros físicos reais por uma unidade de renomeação de registro. Além disso, algumas instruções (por exemplo, instruções de ARM Thumb) podem ser separadas em uma sequência de operações de instrução (ou micro-ops), e cada operação de instrução da sequência pode ser referida por um número de micro-op (ou uop) único.
Cada uma das CPUs 14 e 16 pode também incluir um cache de nível um (L1) (não mostrado), e cada cache L1 pode ser acoplado ao cache L2 18. Outras modalidades podem incluir níveis adicionais de cache (por exemplo, cache de nível três (L3)). Em uma modalidade, cache L2 18 pode ser configurado para armazenar em cache instruções e dados para acesso de baixa latência pelas CPUs 14 e 16. O cache L2 18 pode compreender qualquer capacidade e configuração (por exemplo, mapeamento direto, associativa por conjunto). O cache L2 18 pode ser acoplado ao controlador de memória 22 através do BIU 20. O BIU 20 pode também incluir várias outras estruturas de lógica para acoplar as CPUs 14 e 16 e cache L2 18 a vários outros dispositivos e blocos. O controlador de memória 22 pode incluir qualquer número de portas de memória e pode incluir conjunto de circuitos configurado para fazer interface com a memória. Por exemplo, o controlador de memória 22 pode ser configurado para fazer interface com memória de acesso randômico dinâmico (DRAM) tal como DRAM síncrono (SDRAM), taxa de transferência dobrada (DDR) SDRAM, DDR2 SDRAM, DRAM Rambus (RDRAM), etc. O controlador de memória 22 também pode ser acoplado aos laços de interface física de memória (PHYs) 24 e 26. PHYs de memória 24 e 26 são representativos de qualquer número de PHYs de memória que pode ser acoplado ao controlador de memória 22. PHYs de memória 24 e 26 podem ser configurados para fazer interface com dispositivos de memória (não mostrados).
Nota-se que outras modalidades podem incluir outras combinações de componentes, incluindo subconjuntos ou superconjuntos dos componentes mostrados na figura 1 e/ou outros componentes. Enquanto um e-xemplo de um componente dado pode ser mostrado na figura 1, outras modalidades podem incluir dois ou mais exemplos de um dado componente. Similarmente, ao longo dessa descrição detalhada, dois ou mais exemplos de um componente dado podem ser inclusos mesmo se apenas um é mostrado, e/ou modalidades que incluem apenas um exemplo podem ser usadas mesmo se diversos exemplos são mostrados.
Referindo-se agora à figura 2, uma modalidade de um núcleo de processador é mostrada. O núcleo 30 é um exemplo de um núcleo de processador, e o núcleo 30 pode ser utilizado dentro de um complexo de processador, tal como o complexo de processador 12 da figura 1. Em uma mo- dalidade, cada uma das CPUs 14 e 16 da figura 1 pode incluir os componentes e a funcionalidade do núcleo 30. O núcleo 30 pode incluir unidade de busca e decodificação (FED) 32, unidade de despacho e mapeamento 36, unidade de gerenciamento de memória (MMU) 40, unidade de interface de núcleo (CIF) 42, unidades de execução 44 e unidade de carga e armazenamento (LSU) 46. Nota-se que o núcleo 30 pode incluir outros componentes e interfaces não mostrados na figura 2. A unidade de FED 32 pode incluir um conjunto de circuitos configurado para ler as instruções da memória e colocá-las em cache de instrução 33 de nível um (L1). O cache de instruções 33 L1 pode ser uma memória cache para armazenar instruções a serem executadas pelo núcleo 30. O cache de instruções 33 L1 pode ter qualquer capacidade e construção (por exemplo, mapeamento direto, associativa por conjunto, totalmente associativa, etc.) Além disso, o cache de instruções 33 L1 pode ter qualquer tamanho da linha de cache. A unidade de FED 32 pode também incluir hardware de previsão de desvio configurado para prever instruções de desvio e para buscar o caminho previsto. A unidade de FED 32 pode também ser redirecionada (por exemplo, através má predição, exceção, interrupção, descarregar, etc.).
Em uma modalidade, a unidade de FED 32 pode ser configurada para decodificar as instruções em operações de instrução em várias etapas. Além disso, a unidade de FED 32 pode também ser configurada para decodificar instruções múltiplas em paralelo. Mais especificamente, as instruções podem ser extraídas do cache de instruções 33 L1 e decodificadas em instruções pré-decodificadas, e o alinhador 34 pode ser configurado para fornecer as instruções pré-decodificadas às faixas adequadas de buffer de laço 35 e/ou unidades de decodificador (não mostradas). As unidades do decodi-ficador podem ser configuradas para realizar o restante da decodificação para converter as instruções pré-decodificadas em operações de instrução.
Geralmente, a operação de instrução pode ser uma operação em que o hardware incluso nas unidades de execução 44 e LSU 46 é capaz de executar. Cada instrução pode traduzir a uma ou mais operações de ins- truções que, quando executadas, resultam no desempenho das operações definidas para aquela instrução de acordo com a arquitetura do conjunto de instruções. Nota-se que os termos "opéração da instrução" e "uop" podem ser utilizados alternadamente ao longo desta descrição. Em outras modalidades, a funcionalidade incluída dentro da unidade de FED 32 pode ser dividida em duas ou mais unidades separadas, tais como uma unidade de busca, uma unidade de decodificação, e/ou outras unidades.
Em várias ISAs, algumas instruções podem decodificar em um único uop. A unidade de FED 32 pode ser configurada para identificar o tipo de instrução, operandos-fonte, etc., e cada operação da instrução decodificada pode compreender a instrução, juntamente com algumas das informações de decodificação. Em outras modalidades nas quais cada instrução traduz em um único uop, cada uop pode simplesmente ser a instrução correspondente ou uma porção da mesma (por exemplo, o campo de código de operação ou campos da instrução). Em algumas modalidades, a unidade de FED 32 pode incluir qualquer combinação de conjunto de circuitos e/ou mi-crocódigo para gerar uops para instruções. Por exemplo, as gerações de uop relativamente simples (por exemplo, uma ou duas uops por instrução) podem ser tratadas em hardware enquanto mais gerações de uop mais extensas (por exemplo, mais de três uops para uma instrução) podem ser tratadas em microcódigo.
Uops decodificados podem ser fornecidos para a unidade de mapeamento/despacho 36. A unidade de mapeamento/despacho 36 pode ser configurada para uops de mapas e registros arquiteturais para registros físicos do núcleo 30. A unidade de mapeamento/despacho 36 pode implementar registro renomeando para mapear endereços de registro de fonte das uops aos números de operando-fonte identificando os registros de fonte renomeados. A unidade de mapeamento/despacho 36 também pode ser configurada para despachar uops para as estações de reserva (não mostradas) dentro de unidades de execução 44 e LSU 46.
Em uma modalidade, a unidade de mapeamento/despacho 36 pode incluir um buffer de reordenamento (ROB) 38. Em outras modalidades, ROB 38 pode estar localizado em outro local. Antes de serem despachadas, as uops podem ser escritas para o ROB 38. O ROB 38 pode ser configurado para conter uops até que elas possam ser restabelecidas em ordem. Cada uop pode ser atribuída a um índice de ROB (REM UM) correspondente a uma entrada específica no ROB 38. REM UMs podem ser usadas para manter o controle das operações de voo no núcleo 30. A unidade de mapeamen-to/despacho 36 também pode incluir outros componentes (por exemplo, arranjo mapeador, a unidade de despacho, buffer de despacho) não mostrados na figura 2. Além disso, em outras modalidades, a funcionalidade incluída dentro da unidade de mapeamento/despacho 36 pode ser dividida em duas ou mais unidades separadas, tais como uma unidade de mapeamento, uma unidade de despacho e/ou de outras unidades.
Unidades de execução 44 podem incluir qualquer número e tipo de unidades de execução (por exemplo, inteiro, ponto flutuante, vetores). Cada uma das unidades de execução 44 pode também incluir uma ou mais estações de reserva (não mostradas). CIF 42 pode ser acoplado ao LSU 46, unidade de FED 32, MMU 40, e um cache L2 (não mostrado). CIF 42 pode ser configurado para gerenciar a interface entre o núcleo 30 e o cache 12. MMU 40 pode ser configurado para realizar a tradução de endereço e funções de gerenciamento de memória. LSU 46 pode incluir cache de dados 48 L1, fila de armazenamento 50 e fila de carga 52. Operações de carga e armazenamento podem ser despachadas a partir da unidade de mapeamento/despacho 36 para estações de reserva dentro do LSU 46. A fila de armazenamento 50 pode armazenar dados correspondentes a operações de armazenamento, e uma fila de carga 52 pode armazenar dados associados às operações de carga. LSU 46 também pode ser acoplado ao cache L2 via do CIF 42. Nota-se que LSU 46 também pode incluir outros componentes (por exemplo, as estações de reserva, arquivo de registro, unidade de pré-busca, buffer lateral de tradução) não mostrados na figura 2.
Deve ser entendido que a distribuição da funcionalidade ilustrada na figura 2 não é a única microarquitetura possível que pode ser utilizada para um núcleo de processador. Outros núcleos de processador podem incluir outros componentes, omitir um ou mais dos componentes mostrados e/ou incluir um arranjo diferente de funcionalidade entre os componentes.
Referindo-se agora à figura 3, um diagrama de bloco de uma modalidade de uma extremidade frontal de um encadeamento de processador é mostrado. Em uma modalidade, a lógica de extremidade frontal mostrada na figura 3 pode ser localizada dentro de uma unidade de busca e de-codificação, tal como a unidade de FED 32 (da figura 2). Deve-se entender que a distribuição de funcionalidade ilustrada na figura 3 é apenas uma estrutura possível para implementar um buffer de laço dentro de um encadeamento de processador. Outras distribuições adequadas de lógica para implementar um buffer de laço são possíveis e estão contempladas. A extremidade frontal de busca 60 pode ser configurada para buscar e pré-decodificar instruções e, em seguida, transmitir uops pré-decodificadas para o buffer de laço 62 e os decodificadores 70A-F (através de multiplexador 68). Em uma modalidade, a extremidade frontal de busca 60 pode ser configurada para emitir seis uops pré-decodificados por ciclo. Em outras modalidades, a extremidade frontal de busca 60 pode ser configurada para emitir outros números de uops pré-decodificadas por ciclo.
Buffer de laço 62, multiplexador 68 e decodificador 70A-F podem ter seis faixas para o processamento e/ou armazenamento de seis uops por ciclo. Cada faixa pode incluir um bit válido para indicar se a faixa contém um uop válido. Nota-se que as "faixas" de buffer de laço 62, multiplexador 68 e decodificador 70A-F também podem ser referidos como "aberturas" ou "entradas". Em outras modalidades, o buffer de laço 62, multiplexador 68 e decodificador 70A-F podem incluir mais ou menos do que seis faixas, e a extremidade frontal de busca 60 pode ser configurada para emitir quantas uops por ciclo possam ser acomodadas pela fase seguinte do encadeamento. A extremidade frontal de busca 60 pode pegar os dados de instrução brutos do cache de instruções (não mostrado), detectar os limites de instrução nos dados, armazenar temporariamente as instruções em um buffer de cache de instruções (não mostrado) e/ou alinhador (não mostrado), expandir instruções em conjuntos de até seis uops e gerar a carga útil apropriada para essas uops. Cada conjunto de seis uops pode ser referido como um "grupo de decodificação". Em outras modalidades, um grupo de decodifi-cação pode incluir outros números de uops. Um grupo de decodificação pode ser entregue às faixas do buffer de laço 62 e multiplexador 68 em cada ciclo de relógio. Tal como aqui utilizado, uma "faixa" pode ser definida como um caminho que inclui a lógica que é configurada para processar e/ou armazenar uma uop em cada ciclo de relógio. A extremidade frontal de busca 60 pode expandir instruções em uops e alimentar essas uops a um buffer de laço 62 e multiplexador 68. Em uma modalidade, as instruções buscadas pela extremidade frontal de busca 60 e decodificadas em uops pré-decodificados podem basear-se no ARM ISA. Cada uop pré-decodifícada pode incluir bits de código de operação de instrução, bits de pré-decodificação de instrução, e um número de uop. Os bits de código de operação de instrução especificam a operação que deve ser realizada. Os bits de pré-decodificação indicam o número de uops que a instrução mapeia. O número de uop representa qual uop em uma sequência de instruções de multi-uop deve ser gerada. Em outras modalidades, outras ISAs podem ser utilizadas, e as instfuções podem ser decodificadas e formatadas em uma variedade de maneiras.
Quando o processador não está no modo de buffer de laço, então as uops pré-decodificadas geradas pela extremidade frontal de busca 60 podem ser encaminhadas para decodificadores 70A-F através de multiplexador 68. Um sinal de seleção da unidade de controle de buffer de laço 64 pode ser acoplado ao multiplexador 68 para determinar qual caminho é acoplado através do multiplexador 68 às entradas dos decodificadores 70A-F. Quando o processador está no modo de buffer de laço, as uops pré-decodificadas podem ser lidas fora do buffer de laço 62 e transportadas para decodificadores 70A-F. As uops pré-decodificadas podem ser decodificadas e depois transportadas a partir das saídas de decodificadores 70A-F para o próximo estágio do encadeamento de processador. Em uma modalidade, o próximo estágio do encadeamento de processador pode ser uma unidade de mapeamento/despacho, tal como a unidade de mapeamento/despacho 36 da figura 2. A unidade de controle de buffer de laço 64 pode ser configurada para identificar um laço dentro das instruções buscadas e pré-decodificadas. Uma vez que um laço foi identificado com algum grau de certeza, então a unidade de controle de buffer de laço 64 pode fazer com que o laço seja armazenado em cache em buffer de laço 62, a extremidade frontal de busca 60 pode ser interrompida, e depois o resto do encadeamento do processador pode ser alimentado a partir do buffer de laço 62. Múltiplas iterações do laço podem ser armazenadas em cache em buffer de laço 62, e essas interações em cache podem ser despachadas repetidamente pelo encadeamento. Ao escrever iterações do laço para o buffer de laço 62, a unidade de controle de buffer de laço 64 pode utilizar um ponteiro de escrita para determinar qual linha está sendo escrita no buffer de laço 62. Da mesma forma, quando a leitura da do buffer de laço 62, um ponteiro de leitura pode ser utilizado para apontar a linha atual que está sendo lida.
Para identificar um laço para armazenamento em cache, primeiro um desvio para trás tomado podem ser detectado entre as instruções buscadas. Um "desvio para trás tomado" pode ser definido como um desvio tomado que se desvia para uma instrução anterior na sequência de instruções. A instrução para a qual o desvio para trás tomado vai pode ser considerada o início do laço. Em uma modalidade, apenas certos tipos de laços podem ser considerados como candidatos para o armazenamento temporário. Por exemplo, em uma modalidade, para um candidato de laço ser considerado para armazenamento temporário, todas as iterações do laço devem ser invariantes. A unidade de controle de buffer de laço 64 pode monitorar o fluxo de instruções para obter instruções que formam laços que atendem aos critérios para o armazenamento temporário de laço. A unidade de controle de buffer de laço 64 pode capturar toda a informação do que um determinado candidato de laço se assemelha. Durante um certo período de tempo, o candidato de laço pode ser rastreado ao longo de múltiplas iterações para se certificar de que o candidato de laço permanece o mesmo. Por exemplo, as distâncias a partir do início do laço para uma ou mais instruções dentro do laço podem ser registradas em uma primeira iteração e monitoradas em iterações subsequentes para determinar se estas distâncias permanecem as mesmas.
Em algumas modalidades, mesmo se o candidato de laço for in-variante e satisfizer os outros critérios enumerados acima, outras características do candidato de laço podem desqualificá-lo de ser armazenado em cache no buffer de laço 62. Por exemplo, se o tamanho do candidato de laço é grande demais para caber em buffer de laço 62, então o candidato de laço pode ser desclassificado. Além disso, pode haver um número máximo permitido de desvios tomados dentro do laço, igual ao tamanho da tabela de ras-treamento de desvio 66. Se o número de desvios tomados exceder esse número, então o laço pode ser excluído da consideração como um candidato para armazenamento em cache no buffer de laço 62. Em uma modalidade, a tabela de rastreamento de desvio 66 pode incluir oito entradas para desvios tomados dentro de um laço. Em outras modalidades, a tabela de rastreamento de desvio 66 pode ter mais ou menos do que oito entradas para desvios tomados dentro de um laço.
Em uma modalidade, uma vez que o mesmo desvio para trás tomado foi detectado mais do que uma vez, então uma máquina de estado para capturar a informação para esse laço pode ser iniciada pela unidade de controle de buffer de laço 64. Por exempio, a unidade de controle de buffer de laço 64 pode utilizar a tabela de rastreamento de desvio 66 para rastrear os desvios tomados de um candidato de laço. A tabela de rastreamento de desvio 66 pode acompanhar a distância a partir do início do laço para cada desvio feito.
Se cada iteração do laço é executada, de tal modo que há o mesmo número de uops desde o início do laço para cada desvio, então o candidato de laço pode ser considerado invariável. A distância a cada desvio na tabela 66 pode ser rastreada por um determinado número de iterações, antes de determinar que o candidato de laço é invariante e deve ser arma- zenado em cache. A quantidade de tempo alocada para rastrear a invariân-cia do candidato de laço pode ser baseada em um número de iterações de laço e/ou em um certo número de desvios encontrados.
Referindo-se agora para à figura 4, outra modalidade de um buffer ôe laço dentro de uma unidade de busca e decodificação é mostrada. Em uma modalidade, o buffer de laço 84 pode estar localizado a jusante dos de-codificadores 82A-F no encadeamento de processador, como mostrado na figura 4. Isto está em contraste com buffer de laço 62 (da figura 3) que está localizado no encadeamento de processador a montante dos decodificado-res 70A-F. Em uma modalidade, o buffer de laço 84 pode ser orgànizado em linhas e colunas (ou faixas). Em uma modalidade, o buffer de laço 84 pode ter 16 linhas e 6 colunas. Em outras modalidades, o buffer de laço 84 pode incluir outros números de linhas e colunas.
Extremidade frontal de busca 80 pode buscar instruções e pré-decodificar as instruções buscadas em uops pré-decodificados. Em seguida, os pré-uops decodificados podem ser transmitidos aos decodificadores 82A-F. Em uma modalidade, a extremidade frontal de busca 80 pode ser configurada para gerar e transmitir seis uops pré-decodificadas por ciclo para as seis faixas de decodificadores 82A-F. Decodificadores 82A-F podem decodificar as uops pré-decodificadas em uops decodificados. Em seguida, os decodificadores 82A-F podem transmitir as uops decodificadas para a próxima etapa do encadeamento de processador através do multiplexador 90. Além disso, decodificadores 82A-F podem transmitir uops para o buffer de laço 84 quando um candidato de laço foi identificado e cumpriu os critérios para ser armazenado em cache no buffer de laço 84. As saídas do multiplexador 90 podem ser acopladas ao estágio seguinte do encadeamento de processador. Em uma modalidade, o estágio seguinte do encadeamento de processador pode ser uma unidade de mapeamento/despacho.
Buffer de laço 84, unidade de controle de buffer de laço 86 e tabela de rastreamento de desvio 88 podem ser configurados para realizar funções similares àquelas descritas em relação à extremidade frontal de processador mostrado na figura 3. Uma diferença fundamental na figura 4 é que o buffer de laço 84 pode armazenar uops decodificadas em oposição ao buffer de laço 62 armazenando uops pré-decodificadas na figura 3. Portanto, o buffer de laço 84 pode ser de tamanho maior do que o buffer de laço 62 para acomodar a maior quantidade de dados, uma vez que uops decodificadas têm tipicamente mais informação do que as uops pré- decodificadas. Nota-se que o buffer de laço 84 podem também estar localizado em outras localizações dentro de um encadeamento de processador, adicionalmente aos dois locais mostrados na figura 3 e 4. Por exemplo, o buffer de laço 84 pode estar localizado dentro de uma extremidade frontal de busca ou, alternativamente, o buffer de laço 84 pode ser localizado dentro de uma unidade de mapeamento/despacho. Dependendo de onde o buffer de laço localiza-se no encadeamento, os conteúdos do laço que são armazenados no buffer de laço podem variar de acordo com a quantidade de processamento de instruções que tem sido realizada nesse ponto no encadeamento.
Em uma modalidade, em uma iteração inicial de um candidato de laço, a unidade de controle de buffer de laço 86 pode preencher a tabela de rastreamento de desvio 88 com a distância a partir do início do laço a cada desvio tomado do laço. Em iterações subsequentes do laço, a unidade de controle 86 pode determinar se cada desvio é a mesma distância a partir do início do laço que a distância correspondente armazenada na tabela 88. Depois de um candidato de laço ser invariante por um certo número de iterações, então o candidato de laço pode ser armazenado em cache no buffer de laço 84 e alimentado para o resto do encadeamento de buffer de laço 84. A extremidade frontal de busca 80 é decodificadores 82A-F podem ser desligados, enquanto o laço está sendo despachado para fora do buffer de laço 84 para o resto do encadeamento de processador.
Referindo-se agora à figura 5, uma modalidade de um alinhador é mostrada. O alinhador 100 pode ser parte de uma unidade de busca, e o alinhador 100 pode incluir fila de instruções 102 e barra horizontal de instrução 104. Os limites de instrução podem ser detectados dentro do dados de instrução no cache de instruções (não mostrado) e, então, as instruções podem ser transmitidas para a fila de instruções 102. A fila de instruções 102 pode ter qualquer capacidade e construção. O alinhador 100 pode ser configurado para manter as unidades de decodificação fornecidas com o número apropriado de instruções pré-decodificadas a cada ciclo de relógio, em que o número apropriado é baseado na arquitetura de processador. Por exemplo, em uma modalidade, poderá haver seis decodificadores, e assim o alinhador 100 pode ser configurado para gerar e transmitir até seis uops pré-decodificadas por ciclo de relógio para os seis decodificadores. Em outras modalidades, o alinhador 100 pode ser configurado para gerar outros números de uops pré-decodificadas por ciclo de relógio. A cada ciclo de relógio, o alinhador 100 pode consultar as instruções na fila de instruções 102 que correspondem às próximas seis uops na sequência de instruções. O alinhador 100 pode atribuir essas instruções para as aberturas de decodificador apropriadas através de uma barra horizontal de instrução 104. O alinhador 100 também pode ser configurado para identificar os limites de iterações de laço (por exemplo, o limite de iteração 103). Por exemplo, quando um candidato de laço atende aos critérios para o armazenamento em cache, então o desvio para trás tomado (BTB), a instrução C, da iteração mais recente pode ser identificado.
No exemplo mostrado na figura 5, as instruções mostradas na fila de instruções 102 incluem as instruções A, B, C (BTB), D, E e F. Uma vez que a instrução D segue o BTB, então D pode ser marcada como o início do laço. Cada instrução pode ser quebrada em uma ou mais uops, e o número de uops que uma instrução mapeia pode ser pré-decodificado quando as instruções são preenchidas no cache de instruções. Quando for determinado que o laço deve ser armazenado em cache no buffer de laço (não mostrado), a unidade de controle de buffer de laço (não mostrado) pode enviar um sinal para o alinhador 100 para parar após o BTB do laço.
Como mostrado na figura 5, o alinhador 100 pode escrever apenas três uops às aberturas de decodificação no ciclo de relógio 'Ν'. Essas três uops são A, B e C (o BTB). Cada uma das instruções A, B e C são instruções de uop única neste exemplo. Como pode ser visto no ciclo de relógio "N", aberturas 3 a 5 são vazias uma vez que o BTB (instrução C) é atribuído à abertura 2. O alinhador 100 para após o BTB ser atribuído a uma abertura de decodificação, e então o restante das aberturas não estão preenchidas para o ciclo de relógio 'Ν'. No ciclo de relógio seguinte, o alinhador 100 atribui o início do laço para a abertura 0. A instrução D é o início do laço e a instrução D é uma instrução de três uop nesse exemplo, de modo que as três uops correspondentes (D-0, D-1 e D-2) são atribuídas às aberturas de decodificação 0-2 no ciclo de relógio 'N+1’. As duas uops correspondentes à instrução E tomam as aberturas 3 e 4, e a uop correspondente à instrução F pode ser atribuída à abertura 5 no ciclo de relógio 'N +1'.
As uops mostradas nos ciclos de relógio 'Ν' e 'N +1 podem ser transmitidas tanto handoff às unidades de decodificador quanto ao buffer de laço. Enquanto o laço está sendo escrito no buffer de laço, o laço pode continuar a ser alimentado para o próximo estágio (por exemplo, decodificado-res) do encadeamento. Depois de uma ou mais iterações do laço serem escritas no buffer de laço, então a infraestrutura do encadeamento pode ser alimentada pelo buffer de laço e a extremidade frontal poderá ser desligada. O alinhador 100 também pode parar de um modo similar no final da última iteração do laço que é escrito no buffer de laço. Seja qual for a a-bertura à qual o BTB é atribuído, será a última abertura escrita dentro dessa linha no buffer de laço. Por exemplo, se o BTB é escrito na abertura 1 no último ciclo de relógio de escrita da iteração de laço final no buffer de laço, então o restante das aberturas (aberturas 2 a 5) pode ser deixado vazio. Deste modo, pode haver um limpo no ciclo de relógio seguinte, quando o laço é lida do buffer de laço começando com a primeira uop da primeira iteração do laço localizado na abertura 0 da primeira linha do buffer de laço.
Referindo-se agora à figura 6, uma modalidade de uma única iteração de um laço embalado em um buffer de laço é mostrada. O laço pode ser um laço de sete uops neste exemplo, com cada uop rotulado "Laçol" no buffer de laço 110. Nota-se que este é meramente um exemplo de um laço, e outros laços poderão incluir outros números de uops. Nota-se também que o buffer de laço 110 pode estar localizado em qualquer um dos vários locais dentro de um encadeamento de processador, com dois exemplos de locais mostrados na figura 3 e a figura 4. Enquanto buffer de laço 110 é mostrado como incluindo seis faixas (rotuladas 0 a 5), nota-se que outros buffers de laço podem ter outros números de faixas. Nota-se também que as "faixas" de buffer de laço 110 podem também ser referidas como "aberturas" ou "colunas".
As seis primeiras uops de Laçol podem ser escritas na primeira linha de buffer de laço 110. A última uop, que corresponde ao desvio para trás tomado, pode preencher a primeira entrada da segunda linha de buffer de laço 110. Para este laço, levará dois ciclos para despachar o laço para o próximo estágio de encadeamento de processador, e as uops médias por ciclo de emissão será 3,5 (sete uops em dois ciclos de relógio). Isto é muito menos do que as uops máximas possíveis por ciclo de taxa de rendimento por seis uops por ciclo. Para melhorar as uops por ciclo de taxa de rendimento, mais do que uma iteração do laço pode ser escrita no buffer de laço 110, o qual será descrito em mais detalhe abaixo.
Em outras modalidades, o buffer de laço 110 pode incluir outros números de faixas além de seis. Por exemplo, em outra modalidade, o buffer de laço 110 pode ter oito faixas. Nesta modalidade, um laço de nove uops teria uops ineficientes por ciclo de taxa de rendimento, quando esse laço de nove uops fosse despachado do buffer de laço 110. As instruções por ciclo seria em média 4,5 neste exemplo, com nove uops sendo despachados a cada dois ciclos de relógio. Isto seria muito abaixo de um máximo de uops possíveis por ciclo de taxa de rendimento de oito para esta modalidade.
Em várias modalidades, os diferentes formatos de instruções podem ser armazenados em buffer de laço 110. Os diferentes formatos que são utilizados podem incluir instruções, operações de instrução, uops pré-decodificadas, uops decodificadas, uops, ops, ou outros formatos. Os termos "instruções por ciclo", "operações de instrução por ciclo" e "uops por ciclo" podem ser usados para descrever a taxa de rendimento em geral, e deve ser entendido que esses termos podem se referir a qualquer um de uma variedade de formatos de instrução.
Referindo-se agora à figura 7, uma modalidade de múltiplas ite- rações de um laço embalado em um buffer de laço é mostrada. Em uma modalidade, um laço pode ter sete uops de comprimento. A primeira iteração do laço escrita no buffer de laço 110 é rotulada como "Laçol" para cada uop do laço e é mostrada na primeira linha e faixa 0 da segunda linha dentro do buffer de laço 110. A segunda iteração do laço, rotulada como "Laço2", pode ser escrita para o buffer de laço 110 começando onde a primeira iteração do laço terminou. A primeira uop de "Laço2" pode ser colocada em uma entrada adjacente na mesma linha na última uop de "Laçol". Além disso, as cinco primeiras uops da segunda iteração do laço podem ser escritas para faixas 1 a 5 da segunda linha de buffer de laço 110 e as duas últimas uops da segunda iteração podem ser escritas para a terceira fila do buffer de laço 110. Esse padrão pode continuar para as próximas cinco iterações do laço que são escritas no buffer de laço 110. Cada iteração de laço escrita no buffer de laço 110 é idêntica às outras iterações de laço. Em outras palavras, cada iteração de laço contém exatamente as mesmas uops que as outras iterações de laço escritas no buffer de laço 110 e é indistinguível de qualquer outra iteração de laço.
Como mostrado na figura 7, o buffer de laço 110 tem 16 linhas de entradas, e o ponto médio 112 está após a oitava linha. Em uma modalidade, quando uma iteração do laço está sendo escrita no buffer de laço 110, quando o último uop do laço (isto é, o desvio para trás tomado) foi escrito no buffer de laço 110, então a unidade de controle de buffer de laço pode verificar para ver se o ponto médio 112 foi atingido. Se o ponto médio 112 foi alcançado, então iterações de laço não podem mais ser escritas no buffer de laço 110. Se o ponto médio 112 não foi alcançado, então outra iteração de laço pode ser escrita no buffer de laço 110.
No exemplo mostrado na figura 7, as uops médias por ciclo de produção de buffer de laço 110 quando o processador está no modo de buffer de laço serão de aproximadamente 5,4 uops por ciclo de taxa de rendimento (49 uops em 9 ciclos). Esta é uma melhoria em comparação com as uops médias por ciclo de taxa de rendimento de 3,5 uops para o exemplo mostrado na figura 6.
Referindo-se agora à figura 8, outra modalidade de escrever múltiplas iterações de um laço em um bufferde laço é mostrada. Nessa modalidade, similar ao exemplo mostrado na figura 7, múltiplas iterações de laço podem ser escritas no bufferáe laço 110. No entanto, nessa modalidade, uma condição separada pode ser verificada quando o fim de uma iteração de laço é atingido. A condição que pode ser verificada pode ser se a uop final da iteração de laço foi escrita para a faixa final (isto é, faixa 5) do buffer de laço 110. Se esta condição for satisfeita, então a escrita das iterações do laço no bufferáe laço 110 pode ser interrompida. Se esta condição não for satisfeita, então pode ser determinado se o ponto médio 112 foi atingido. Se o ponto médio 112 foi atingido, então a escrita no bufferáe laço 110 pode parar. Se o ponto médio 112 não foi alcançado, então outra iteração do laço pode ser escrita no bufferáe laço 110.
Com base nessas condições, seis iterações de laço de sete u-ops podem ser escritas no bufferáe laço 110. Após a sexta iteração do laço ser escrita no laço, a última uop da sexta iteração é escrita na faixa 5 da sétima linha. Portanto, as uops por saída ciclo de bufferáe laço 110 serão maximizadas, e por isso nenhuma iteração a mais precisa ser escrita no buffer de laço 110. A escrita pode parar mesmo que o ponto médio 112 ainda não tenha sido alcançado.
Nota-se que em outras modalidades, o número de iterações a serem escritas no buffer de laço pode ser determinado antes de escrever as iterações no buffer de laço. Por exemplo, a detecção de um laço e monitoramento das instruções podem incluir contar um número de instruções ou uops inclusos em uma iteração do laço. Além disso, o espaço disponível no buffer de laço pode ser conhecido ou determinado. Com base no tamanho da iteração de laço e armazenamento de buffer disponível, um cálculo pode ser feito quanto ao número de iterações que são escritas no buffer de laço. Em várias modalidades, o número de iterações a serem escritas pode ser escolhido de modo que a taxa de rendimento máxima de instruções a partir do buffer é atingido. Em outras modalidades, as restrições adicionais podem ser colocadas em quantas iterações do laço são escritas no buffer de laço.
Por exemplo, não mais do que uma dada porção (por exemplo, metade) do buffer pode ser escrita. Várias alternativas são possíveis e estão contempladas.
Utilizando estas condições, pode-se atingir um uops altos por ciclo de taxa de rendimento de buffer de laço 110 quando o processador está no modo de buffer de laço. Em outras modalidades, para outros tamanhos de laços, estas condições podem ser usadas. Por exemplo, um laço com um tamanho de nove uops resultaria em duas iterações sendo escritas no buffer de laço 110. As três primeiras linhas de buffer de laço 110 seriam preenchidas, e depois nenhuma iteração a mais do laço de nove uops seria escrita no buffer de laço 110. Isso iria atingir uma taxa de rendimento máxima possível de seis uops por ciclo.
Em outras modalidades, outras condições podem ser usadas para determinar se deve ou não escrever outra iteração de laço no buffer de laço 110. Por exemplo, em outra modalidade, se a última uop de uma iteração é escrita em qualquer uma das duas aberturas mais à direita de uma linha, então a escrita no buffer de laço 110 pode ser encerrada. Em outra modalidade, a taxa de rendimento pode ser calculada após uma iteração de laço ser escrita no buffer de laço 110, e então a taxa de rendimento pode ser comparada com um limiar. Se a taxa de rendimento estiver acima do limite, então a escrita no buffer de laço 110 pode ser encerrada. Se o rendimento está abaixo do limite, então outra iteração do laço pode ser escrita no buffer de laço 110. Estas e outras condições podem ser utilizadas de forma independente ou combinadas, de qualquer maneira adequada em outras modalidades.
Referindo-se agora à figura 9, uma modalidade de um método 120 para empacotamento de múltiplas iterações de um laço em um buffer de laço é mostrada. Para fins de descrição, as etapas dessa modalidade são mostradas em uma ordem sequencial. Deve-se notar que em várias modalidades do método descrito abaixo, um ou mais dos elementos descritos podem ser realizados simultaneamente, em uma ordem diferente da mostrada, ou podem ser inteiramente omitidos. Outros elementos adicionais podem também ser realizados como desejado.
Em uma modalidade, um candidato de laço pode ser detectado no fluxo de instruções (bloco 122). Em seguida, uma unidade de controle de buffer de laço pode determinar que o candidato de laço atende aos critérios para armazenamento temporário de laço (bloco 124). A unidade de controle de buffer de laço pode, então, iniciar o modo de buffer de laço para o candidato de laço (bloco 126). Quando o modo de buffer de laço é iniciado, a uop do desvio de terminação de laço pode ser marcada de modo a que ela possa ser identificada como o fim do ciclo. Um desvio de terminação de laço pode ser definido como um desvio para trás tomado direto excluindo chamadas de sub-rotinas. Também, a primeira uop do laço, que é a próxima uop após o desvio de terminação de laço, pode ser marcada como o início do laço. O alinhador da unidade de busca pode parar após o desvio de terminação de laço, de modo que a primeira uop no laço está escrita na abertura 0 da primeira linha do buffer de laço (bloco 128).
Em seguida, uma única iteração do laço pode ser escrita para o buffer de laço (bloco 130). Como a iteração do laço está sendo escrita para o buffer de laço, o desvio de terminação de laço pode ser detectado no fim da iteração (bloco 132). Em resposta à detecção do desvio de terminação do laço, a unidade de controle do buffer de laço pode verificar para ver se o buffer de laço já está cheio até a metade (bloco condicional 134). Em uma modalidade, a unidade de controle de buffer de laço pode monitorar o ponteiro de escrita para o buffer de laço e ver se o ponteiro de escrita passou o ponto médio do buffer de laço.
Se o buffer de laço está cheio mais do que a metade (bloco condicional 134), então outra iteração do laço pode ser escrita no buffer de laço (bloco 130). Para essa iteração, a primeira uop (isto é, início do laço) do laço pode ser escrita para a próxima abertura adjacente após o desvio de terminação de laço da iteração anterior do laço, que pode ser a mesma linha do buffer de laço se o desvio de terminação de laço localiza-se em qualquer outra abertura que não seja a abertura mais à direita da linha.Para essa iteração, a primeira uop (isto é, início do laço) do laço pode ser escrita para a próxima abertura adjacente após o desvio de terminação de laço da iteração anterior do laço, que pode ser a mesma linha do buffer de laço se o desvio de terminação de laço localiza-se em qualquer outra abertura que não seja a abertura mais à direita da linha. Isto está em contraste com a forma como a primeira iteração do laço é escrita para a memória intermédia circular. Para a primeira iteração, o alinhador pode parar após o desvio de terminação de laço da iteração anterior, de forma que a primeira uop da primeira iteração se escrita na primeira abertura (ou mais à esquerda) da primeira linha do buffer de laço.
Se o buffer de laço é mais do que meio cheio (bloco condicional 134), então a unidade de controle do buffer de laço pode sinalizar para extremidade frontal para parar de escrever mais iterações do laço para o buffer de laço (bloco 136). Para a última iteração do laço, o alinhador da unidade de busca pode ser obstruído depois de despachar o desvio de terminação de laço. Desse modo, pode haver um handoff puro para despachar uops fora do buffer de laço quando o processador entra em modo de buffer de laço. Além disso, quando o processador entra em modo de buffer de laço, as uops na fila de instruções e instruções ainda mais a montante na extremidade frontal do encadeamento de processador podem ser descarregadas. Depois do bloco 136, o buffer de laço pode enviar uma ou mais iterações do laço para o próximo estágio do encadeamento de processador (bloco 138). A extremidade frontal do processador pode ser encerrada enquanto o laço está sendo despachado para fora do buffer de laço.
Em uma modalidade, o número de linhas que foram escritas no buffer de laço pode ser armazenado. A unidade de controle de buffer de laço pode usar o número armazenado de linhas válidas para determinar quando não existem mais linhas válidas para serem lidas fora do buffer de laço. Por exemplo, quando as linhas de uops são despachadas para o próximo estágio do encadeamento do processador, um ponteiro de leitura pode percorrer as linhas do buffer de laço, e o ponteiro de leitura pode ser reajustado de volta ao topo do buffer de laço quando não há mais linhas válidas no buffer de laço, tal como indicado pelo número armazenado de linhas válidas.
Depois de bloco 138, o método 120 pode acabar quando o laço termina. Após o laço terminar, a extremidade dianteira pode ser ligada novamente, e a unidade de busca pode fornecer instruções para o resto do encadeamento de processador.
Referindo-se a seguir à figura 10, um diagrama de blocos de uma modalidade de um sistema 140 é mostrado. Como mostrado, o sistema 140 pode representar chip, conjunto de circuitos, componentes, etc., de um computador de mesa 150, computador portátil 160, tablet PC 170, celular 180, ou outros. Na modalidade ilustrada, o sistema 140 inclui pelo menos um exemplo de IC 10 (da figura 1) acoplado a uma memória externa 142. O IC 10 é acoplado a um ou mais periféricos 144 e a memória externa 142. Uma fonte de alimentação 146 é também fornecida, a qual fornece as tensões de alimentação para IC 10, bem como uma ou mais fontes de alimentação para a memória 142 e/ou os periféricos 144. Em várias modalidades, a fonte de alimentação 146 pode representar uma bateria (por exemplo, uma bateria recarregável em um smartphone, laptop ou tablet PC). Em algumas modalidades, mais do que um exemplo de IC 10 pode ser incluído (e mais do que uma memória externa 142 pode também ser incluída). A memória 142 pode ser qualquer tipo de memória, tal como memória de acesso aleatório dinâmica (DRAM), DRAM síncrona (SDRAM), a taxa de dados dupla (DDR, DDR2, DDR3, etc.), SDRAM (incluindo versões móveis dos SDRAMs tais como mDDR3, etc., e/ou versões de baixa potência da SDRAMs como LPDDR2, etc.), RAMBUS DRAM (RDRAM), RAM estática (SRAM), etc. Um ou mais dispositivos de memória podem ser acoplados a uma placa de circuito para formar módulos de memória em linha, tais como módulos de memória em linha única (SIMMs), módulos de memória em linha dupla (DIMMs), etc.
Os periféricos 144 podem incluir qualquer conjunto de circuito desejado, dependendo do tipo de sistema 140. Por exemplo, em uma modalidade, os periféricos 144 podem incluir dispositivos para vários tipos de comunicação sem fio, tais como Wi-Fi, Bluetooth, celular, sistema de posicionamento global, etc. Os periféricos 144 também podem incluir armazena- mento adicional, incluindo armazenamento de RAM, armazenamento em estado sólido ou armazenamento em disco. Os periféricos 144 podem incluir dispositivos de interface do usuário, como uma tela de exibição, inclusive telas de exibição sensíveis ao toque ou telas de exibição multitoque, teclado ou outros dispositivos de entrada, microfones, alto-falantes, etc.
Referindo-se agora à figura 11, uma modalidade de um diagrama de blocos de um meio legível por computador 190 incluindo uma ou mais estruturas de dados representativos do conjunto de circuitos inclusos no IC 10 (da figura 1) é mostrada. De um modo geral, o meio legível por computador 190 pode incluir qualquer mídia de armazenamento não transitória, tais como meios magnéticos ou ópticos, por exemplo, disco, CD-ROM ou DVD-ROM, meios de memória volátil ou não volátil, como RAM (por exemplo, SDRAM, RDRAM, SRAM, etc.), ROM, etc., bem como meios acessíveis a-través de meios de transmissão ou sinais, tais como sinais elétricos, eletromagnéticos ou digitais transmitidos através de um meio de comunicação, tal como uma rede e/ou uma ligação sem fios.
Geralmente, a(s) estrutura(s) de dados do conjunto de circuito no meio legível por computador 190 pode(m) ser lida(s) por um programa e usada(s), direta ou indiretamente, para fabricar o hardware compreendendo o conjunto de circuito. Por exemplo, a(s) estrutura(s) de dados pode(m) incluir uma ou mais descrições de nível comportamental ou descrições de nível (RTL) de transferência-registro (RTL) da funcionalidade de hardware em uma linguagem de design de alto nível (HDL), como Verilog ou VHDL. A(s) descrição(ões) pode(m) ser lida(s) por uma ferramenta de síntese que pode sintetizar a descrição para a produção de uma ou mais listagens (ne-tlists) compreendendo listas de portas a partir de uma biblioteca de síntese. A(s) listagem(ns) compreende(m) um conjunto de portas, que também representam a funcionalidade do hardware compreendendo o conjunto de circuito. A(s) listagem(ns) pode(m) então ser colocada(s) e encaminhada(s) para produzir um ou mais conjuntos de dados descrevendo as formas geométricas a serem aplicadas às máscaras. As máscaras podem, então, ser utilizadas em várias etapas de fabricação de semicondutores para produzir um circuito de semicondutor ou conjunto de circuitos correspondentes ao conjunto de circuito. Alternativamente, a(s) estrutura(s) de dados em um meio legível por computador 230 pode(m) ser a(s) listagem(ns) (com ou sem a biblioteca de síntese), ou o(s) conjunto(s) de dados, conforme desejado. Ainda em uma outra alternativa, as estruturas de dados podem compreender a produção de um programa esquemático, ou listagem(ns) ou conjunto(s) de dados derivados das mesmas.
Enquanto um meio legível por computador 190 inclui uma representação de IC 10, outras modalidades podem incluir uma representação de qualquer porção ou combinação de porções do IC 10 (por exemplo, buffer de laço, unidade de controle de buffer de laço, alinhador).
Deve-se ressaltar que as modalidades acima descritas são a-penas exemplos não limitativos das implementações. Numerosas variações e modificações se tornarão evidentes para aqueles versados na técnica uma vez que a descrição acima é totalmente apreciada. Pretende-se qúe as seguintes reivindicações sejam interpretadas para englobar todas essas variações e modificações.

Claims (20)

1. Aparelho compreendendo: um buffer de laço; e uma unidade de controle de buffer de laço acoplada ao buffer de laço, em que a unidade de controle de buffer de laço é configurada para: detectar um laço em um fluxo de instrução; e fazer com que duas ou mais iterações do laço sejam escritas no buffer de laço.
2. Aparelho, de acordo com a reivindicação 1, em que a unidade de controle de buffer de laço é ainda configurada para: fazer com que outra iteração do laço seja escrita no buffer de laço responsivo para determinar que o buffer de laço não está pelo menos cheio até a metade; e prevenir que iterações adicionais do laço sejam escritas no buffer de laço responsivo para determinar que o buffer de laço está pelo menos cheio até a metade.
3. Aparelho, de acordo com a reivindicação 2, em que a unidade de controle de buffer de laço é configurada para determinar se o buffer de laço está cheio até a metade com base em uma posição de um apontador para escrita do buffer de laço.
4. Aparelho, de acordo com a reivindicação 1, em que a unidade de controle de buffer de laço é ainda configurada para: fazer com que outra iteração do laço seja escrita no buffer de laço responsivo a determinar que um desvio para trás tomado em uma iteração dada que não foi escrita a uma entrada mais à direita de uma linha no buffer de laço, e impedir que iterações adicionais do laço sejam escritas para o buffer de laço responsivo para determinar um desvio para trás tomado em uma iteração dada que não foi escrita a uma entrada mais à direita de uma linha no buffer de laço.
5. Aparelho, de acordo com a reivindicação 1, em que um número de iterações do laço escrito no buffer de laço é determinado com base na maximização de operações de instrução por ciclo de taxa de transferência do buffer de laço quando o aparelho está em modo de buffer de laço.
6. Aparelho, de acordo com a reivindicação 1, ainda compreendendo um alinhador configurado para escrever uma primeira operação de instrução de uma primeira iteração do laço para uma abertura em uma primeira linha do buffer de laço.
7. Aparelho, de acordo com a reivindicação 1, em que o buffer de laço é configurado para enviar operações de instrução das duas ou mais iterações do laço responsivo ao aparelho entrando no modo de buffer de laço.
8. Processador compreendendo: um buffer de laço; e uma unidade de controle de buffer de laço acoplada ao buffer de laço, em que a unidade de controle de buffer de laço é configurada para detectar um laço em um fluxo de instrução; em que o buffer de laço é configurado para: armazenar iterações múltiplas do laço; e enviar instruções das iterações múltiplas do laço responsivo ao processador entrando no modo de buffer de laço.
9. Processador, de acordo com a reivindicação 8, em que cada iteração das iterações múltiplas do laço é idêntica.
10. Processador, de acordo com a reivindicação 8, ainda compreendendo uma unidade de busca que é configurada para identificar e marcar o início do laço.
11. Processador, de acordo com a reivindicação 10, em que a unidade de busca compreende um alinhador configurado para identificar limites de iteração de laço.
12. Processador, de acordo com a reivindicação 11, em que o a-linhador é ainda configurado para fazer uma parada após detectar um desvio para trás tomado de uma iteração anterior do laço responsivo ao processador entrando no modo de buffer de laço.
13. Processador, de acordo com a reivindicação 12, em que o a- linhador é ainda configurado para fazer uma parada após detectar um desvio para trás tomado de uma iteração final do laço sendo escrito no buffer de laço.
14. Processador, de acordo com a reivindicação 13, em que o a-linhador é ainda configurado para: atribuir um desvio para trás tomado de uma primeira iteração do laço a uma primeira abertura um primeiro ciclo de relógio; e atribuir uma primeira operação de instrução de uma segunda iteração do laço a uma segunda abertura no primeiro ciclo de relógio, em que a segunda abertura é adjacente à primeira abertura.
15. Método compreendendo: detectar um primeiro candidato de laço em um fluxo de instrução; determinar se o candidato de laço atende aos critérios para armazenamento em buffer em um laço de buffer, escrever uma primeira iteração do candidato de laço para o buffer de laço; determinar se o buffer de laço está pelo menos cheio até a metade, responsivo a detectar um desvio de terminação de laço da primeira iteração do candidato de laço; e escrever uma segunda iteração do candidato de laço para o buffer de laço, responsivo a determinar que o buffer de laço não está pelo menos cheio até a metade.
16. Método, de acordo com a reivindicação 15, o método ainda compreendendo: determinar se o buffer de laço está cheio até a metade, responsivo a detectar um desvio de terminação de laço da segunda iteração do candidato de laço; e enviar uma primeira e uma segunda iterações do candidato de laço para o buffer de laço, responsivo a determinar se o buffer de laço está pelo menos cheio até a metade.
17. Método, de acordo com a reivindicação 16, o método ainda compreendendo a suspensão de uma unidade de busca responsiva a executar a primeira e a segunda iterações do candidato de laço para o buffer de laço.
18. Método, de acordo com a reivindicação 17, ainda compreendendo armazenar um primeiro valor igual a um número de linhas válidas armazenadas no buffer de laço.
19. Método, de acordo com a reivindicação 18, em que executar a primeira e a segunda iterações do candidato de laço para o buffer de laço compreende mover um apontador para leitura através de um número de linhas do buffer de laço igual ao primeiro valor.
20. Método, de acordo com a reivindicação 19, ainda compreendendo redefinir o apontador para leitura em uma primeira linha do buffer de laço responsivo ao apontador para leitura movendo-se através de um numero de linhas do buffer áe laço igual ao primeiro valor.
BRBR102013015262-5A 2012-06-15 2013-06-17 Empacotamento de buffer de laço BR102013015262A2 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/524,478 US9753733B2 (en) 2012-06-15 2012-06-15 Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer

Publications (1)

Publication Number Publication Date
BR102013015262A2 true BR102013015262A2 (pt) 2015-07-14

Family

ID=48607066

Family Applications (1)

Application Number Title Priority Date Filing Date
BRBR102013015262-5A BR102013015262A2 (pt) 2012-06-15 2013-06-17 Empacotamento de buffer de laço

Country Status (8)

Country Link
US (1) US9753733B2 (pt)
EP (1) EP2674857B1 (pt)
JP (1) JP5748800B2 (pt)
KR (1) KR101496009B1 (pt)
CN (1) CN103513964B (pt)
BR (1) BR102013015262A2 (pt)
TW (1) TWI503744B (pt)
WO (1) WO2013188123A2 (pt)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9557999B2 (en) 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9710276B2 (en) * 2012-11-09 2017-07-18 Advanced Micro Devices, Inc. Execution of instruction loops using an instruction buffer
US9459871B2 (en) * 2012-12-31 2016-10-04 Intel Corporation System of improved loop detection and execution
US9632791B2 (en) 2014-01-21 2017-04-25 Apple Inc. Cache for patterns of instructions with multiple forward control transfers
US9471322B2 (en) * 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
US9524011B2 (en) 2014-04-11 2016-12-20 Apple Inc. Instruction loop buffer with tiered power savings
CN104317572B (zh) * 2014-09-30 2017-05-24 南京大学 一种实时系统的循环边界内向分析方法
CN104461933B (zh) * 2014-11-07 2017-10-03 珠海全志科技股份有限公司 内存管理方法及其装置
US9830152B2 (en) * 2015-12-22 2017-11-28 Qualcomm Incorporated Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor
JP2018005488A (ja) * 2016-06-30 2018-01-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20180018999A1 (en) * 2016-07-12 2018-01-18 Mediatek Inc. Video processing system using ring buffer and racing-mode ring buffer access control scheme
US10348329B2 (en) * 2017-02-13 2019-07-09 Qualcomm Incorporated Low density parity check (LDPC) circular buffer rate matching
CN108897700A (zh) * 2018-06-26 2018-11-27 青岛海信宽带多媒体技术有限公司 一种环形缓存器的数据处理方法、装置及机顶盒
US10915322B2 (en) * 2018-09-18 2021-02-09 Advanced Micro Devices, Inc. Using loop exit prediction to accelerate or suppress loop mode of a processor
CN111414199B (zh) * 2020-04-03 2022-11-08 中国人民解放军国防科技大学 一种指令融合的实现方法及装置
US20240028339A1 (en) * 2022-07-25 2024-01-25 Apple Inc. Using a Next Fetch Predictor Circuit with Short Branches and Return Fetch Groups

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63314644A (ja) 1987-06-17 1988-12-22 Nec Corp デ−タ処理装置
EP0449369B1 (en) 1990-03-27 1998-07-29 Koninklijke Philips Electronics N.V. A data processing system provided with a performance enhancing instruction cache
JP3032030B2 (ja) 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
JP3032031B2 (ja) 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
MX9306994A (es) 1992-12-15 1994-06-30 Ericsson Telefon Ab L M Sistema de control de flujo para interruptores de paquete.
US5493556A (en) * 1993-02-16 1996-02-20 Sanyo Electric Co., Ltd. Multi-disk player/recorder with biased locking means for disk cassettes
JPH0991136A (ja) 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
JPH10124315A (ja) 1996-10-18 1998-05-15 Hitachi Ltd 分岐処理方法およびそのための情報処理装置
JPH10177482A (ja) 1996-10-31 1998-06-30 Texas Instr Inc <Ti> マイクロプロセッサおよび動作方法
US5893142A (en) 1996-11-14 1999-04-06 Motorola Inc. Data processing system having a cache and method therefor
US6076159A (en) 1997-09-12 2000-06-13 Siemens Aktiengesellschaft Execution of a loop instructing in a loop pipeline after detection of a first occurrence of the loop instruction in an integer pipeline
US6125440A (en) 1998-05-21 2000-09-26 Tellabs Operations, Inc. Storing executing instruction sequence for re-execution upon backward branch to reduce power consuming memory fetch
US6269440B1 (en) * 1999-02-05 2001-07-31 Agere Systems Guardian Corp. Accelerating vector processing using plural sequencers to process multiple loop iterations simultaneously
JP2000298587A (ja) 1999-03-08 2000-10-24 Texas Instr Inc <Ti> 命令反復中に指定先にブランチする装置を持つ処理装置
EP1050804A1 (en) * 1999-05-03 2000-11-08 STMicroelectronics SA Execution of instruction loops
US6598155B1 (en) 2000-01-31 2003-07-22 Intel Corporation Method and apparatus for loop buffering digital signal processing instructions
US6963965B1 (en) 1999-11-30 2005-11-08 Texas Instruments Incorporated Instruction-programmable processor with instruction loop cache
EP1107110B1 (en) 1999-11-30 2006-04-19 Texas Instruments Incorporated Instruction loop buffer
US7302557B1 (en) * 1999-12-27 2007-11-27 Impact Technologies, Inc. Method and apparatus for modulo scheduled loop execution in a processor architecture
US6578138B1 (en) * 1999-12-30 2003-06-10 Intel Corporation System and method for unrolling loops in a trace cache
US6757817B1 (en) 2000-05-19 2004-06-29 Intel Corporation Apparatus having a cache and a loop buffer
US6671799B1 (en) 2000-08-31 2003-12-30 Stmicroelectronics, Inc. System and method for dynamically sizing hardware loops and executing nested loops in a digital signal processor
US6748523B1 (en) 2000-11-02 2004-06-08 Intel Corporation Hardware loops
US6898693B1 (en) * 2000-11-02 2005-05-24 Intel Corporation Hardware loops
US6950929B2 (en) 2001-05-24 2005-09-27 Samsung Electronics Co., Ltd. Loop instruction processing using loop buffer in a data processing device having a coprocessor
KR100464406B1 (ko) * 2002-02-08 2005-01-03 삼성전자주식회사 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법
JP2004038601A (ja) 2002-07-04 2004-02-05 Matsushita Electric Ind Co Ltd キャッシュメモリ装置
US20060107028A1 (en) 2002-11-28 2006-05-18 Koninklijke Philips Electronics N.V. Loop control circuit for a data processor
US20040123075A1 (en) 2002-12-19 2004-06-24 Yoav Almog Extended loop prediction techniques
US7159103B2 (en) 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
US7130963B2 (en) 2003-07-16 2006-10-31 International Business Machines Corp. System and method for instruction memory storage and processing based on backwards branch control information
US7752426B2 (en) 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
JP2006309337A (ja) 2005-04-26 2006-11-09 Toshiba Corp プロセッサ及びプロセッサの命令バッファ動作方法
US7330964B2 (en) * 2005-11-14 2008-02-12 Texas Instruments Incorporated Microprocessor with independent SIMD loop buffer
US7475231B2 (en) 2005-11-14 2009-01-06 Texas Instruments Incorporated Loop detection and capture in the instruction queue
US7873820B2 (en) 2005-11-15 2011-01-18 Mips Technologies, Inc. Processor utilizing a loop buffer to reduce power consumption
TW200723094A (en) 2005-12-01 2007-06-16 Ind Tech Res Inst Dynamic branch prediction system and method
US9052910B2 (en) 2007-10-25 2015-06-09 International Business Machines Corporation Efficiency of short loop instruction fetch
US20090217017A1 (en) 2008-02-26 2009-08-27 International Business Machines Corporation Method, system and computer program product for minimizing branch prediction latency
TWI362001B (en) 2008-07-16 2012-04-11 Faraday Tech Corp Recovery apparatus for solving branch mis-prediction and method and central processing unit thereof
JP2010066892A (ja) 2008-09-09 2010-03-25 Renesas Technology Corp データプロセッサ及びデータ処理システム
US9952869B2 (en) * 2009-11-04 2018-04-24 Ceva D.S.P. Ltd. System and method for using a branch mis-prediction buffer
CN102238179B (zh) * 2010-04-07 2014-12-10 苹果公司 实时或准实时流传输
US8446186B2 (en) 2010-06-07 2013-05-21 Silicon Laboratories Inc. Time-shared latency locked loop circuit for driving a buffer circuit
US20120079303A1 (en) 2010-09-24 2012-03-29 Madduri Venkateswara R Method and apparatus for reducing power consumption in a processor by powering down an instruction fetch unit
US20120185714A1 (en) 2011-12-15 2012-07-19 Jaewoong Chung Method, apparatus, and system for energy efficiency and energy conservation including code recirculation techniques
US9557999B2 (en) 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold

Also Published As

Publication number Publication date
KR101496009B1 (ko) 2015-02-25
WO2013188123A3 (en) 2014-02-13
CN103513964B (zh) 2015-12-02
EP2674857A1 (en) 2013-12-18
US9753733B2 (en) 2017-09-05
TW201411486A (zh) 2014-03-16
KR20130141396A (ko) 2013-12-26
EP2674857B1 (en) 2019-07-24
TWI503744B (zh) 2015-10-11
JP2014002736A (ja) 2014-01-09
JP5748800B2 (ja) 2015-07-15
US20130339699A1 (en) 2013-12-19
CN103513964A (zh) 2014-01-15
WO2013188123A2 (en) 2013-12-19

Similar Documents

Publication Publication Date Title
BR102013015262A2 (pt) Empacotamento de buffer de laço
US11221762B2 (en) Common platform for one-level memory architecture and two-level memory architecture
TWI545435B (zh) 於階層式快取處理器中之協調預取
US9710268B2 (en) Reducing latency for pointer chasing loads
BR102013015049B1 (pt) aparelho e método
US9471322B2 (en) Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
US9582276B2 (en) Processor and method for implementing barrier operation using speculative and architectural color values
US9600289B2 (en) Load-store dependency predictor PC hashing
BR102013010877A2 (pt) Gerenciamento de conteúdo de preditor de dependência de carregamento-armazenamento
US20170024275A1 (en) Apparatus and method to manage high capacity storage devices

Legal Events

Date Code Title Description
B03A Publication of a patent application or of a certificate of addition of invention [chapter 3.1 patent gazette]
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B06A Patent application procedure suspended [chapter 6.1 patent gazette]
B06A Patent application procedure suspended [chapter 6.1 patent gazette]
B11B Dismissal acc. art. 36, par 1 of ipl - no reply within 90 days to fullfil the necessary requirements