BR102013015049B1 - aparelho e método - Google Patents

aparelho e método Download PDF

Info

Publication number
BR102013015049B1
BR102013015049B1 BR102013015049-5A BR102013015049A BR102013015049B1 BR 102013015049 B1 BR102013015049 B1 BR 102013015049B1 BR 102013015049 A BR102013015049 A BR 102013015049A BR 102013015049 B1 BR102013015049 B1 BR 102013015049B1
Authority
BR
Brazil
Prior art keywords
loop
candidate
branch
deviation
tracking
Prior art date
Application number
BR102013015049-5A
Other languages
English (en)
Other versions
BR102013015049A2 (pt
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 BR102013015049A2 publication Critical patent/BR102013015049A2/pt
Publication of BR102013015049B1 publication Critical patent/BR102013015049B1/pt

Links

Images

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
    • 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/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering

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)
  • Multi Processors (AREA)

Abstract

APRENDIZAGEM PARA ARMAZENADOR DE LAÇO. A presente invenção refere-se a métodos, aparelhos, e processadores para rastrear candidatos a laço em um fluxo de instrução. Uma unidade de controle de armazenamento de carga detecta um desvio para trás e começa a rastrear o candidato a laço. A unidade de controle rastreia os desvios do candidato a laço, e mantém um registro da distância até cada desvio tomado a partir do início do laço. Se a distância até cada desvio permanecer a mesma por múltiplas iterações do laço, o laço então será armazenado em um armazenador de laço. O laço a seguir é despachado do armazenador de laço, e a extremidade frontal do processador se desligará até que o laço termine.

Description

Campo da Invenção
[0001] A presente invenção refere-se a processadores, e em parti cular a métodos e mecanismos para identificar e aprender as características de um laço dentro de um fluxo de instrução.
Descrição da Técnica Relacionada
[0002] Os processadores dos dias de hoje são em geral estrutura dos em múltiplos estágios em uma forma de encadeamento. Encadeamentos típicos frequentemente incluem unidades separadas para buscar instruções, decodificar instruções, mapear instruções, executar instruções, e a seguir escrever resultados para outra unidade, tal como um registro. Uma unidade de busca de instruções de um microprocessador é responsável por proporcionar um fluxo constante de instruções para o próximo estágio do encadeamento do processador. Tipicamente, unidades de busca utilizam um cache de instruções para manter o resto do encadeamento continuamente abastecido de instruções. A unidade de busca e o cache de instruções tendem a consumir uma quantidade significativa de energia enquanto desempenham suas fun-ções. É um objetivo dos microprocessadores modernos reduzir o consumo de energia o máximo possível, especialmente para microprocessadores que são utilizados em dispositivos operados a bateria.
[0003] Em muitas aplicações em software, as mesmas etapas do software podem ser repetidas muitas vezes para se desempenhar uma função ou tarefa específica. Nessas situações, a unidade de busca vai continuar a buscar instruções e consumir energia mesmo que o mesmo laço de instruções esteja sendo executado continuamente. Se o laço pudesse ser detectado e colocado em cache em um armazenador de laço, então a unidade de busca poderia ser desligada para reduzir o consumo de energia enquanto o laço está em execução. Entretanto, é difícil detectar e aprender um laço de instruções dentro do código de programa quando o laço inclui múltiplos desvios. Também é um desafio determinar com exatidão se o laço é invariável antes de colocar o laço em cache no armazenador de laço.
SUMÁRIO
[0004] São divulgados aparelhos, processadores e métodos para detectar e rastrear laços dentro de um fluxo de instruções. Um encadeamento de processador inclui um armazenador de laço e uma unidade de controle de armazenador de laço. A unidade de controle de armazenador de laço pode detectar desvios de terminação de laço no fluxo de instruções. Em uma modalidade, quando a unidade de controle de armazenador de laço detecta um desvio de terminação de laço, a unidade de controle pode reter o endereço de instrução do desvio de terminação de laço, um indicador de detecção de laço pode ser acionado, e um contador de iteração de laço e um contador de uops (micro-operações) podem ser iniciados.
[0005] Na próxima vez em que o desvio de terminação de laço for detectado, a unidade de controle pode comparar o valor do contador de uops com o tamanho do armazenador de laço. Se o valor do contador de uops for maior que o tamanho do armazenador de laço, então esse candidato de laço não pode ser armazenado no armazenador de laço, e desta forma o rastreamento estará terminado. Se o contador de uops for menor que o tamanho do armazenador de laço, então o conteúdo do laço pode ser rastreado para múltiplas interações do laço. Para cada iteração do laço, se o conteúdo do laço permanecer o mesmo durante a iteração, então o contador de iteração de laço pode ser incrementado e o rastreamento de laço pode continuar.
[0006] Em uma modalidade, os desvios tomados do laço podem ser rastreados durante cada iteração do laço. A distância do início do laço até cada desvio tomado pode ser armazenada em uma tabela de rastreamento de desvio durante a primeira iteração do laço, e durante iterações subsequentes do laço, o valor do contador de uops quando um desvio é detectado pode ser comparado ao valor correspondente armazenado na tabela de rastreamento de desvio. Se as distâncias do começo do laço até os desvios do laço são invariáveis, então o rastre- amento do laço pode continuar. Quando o valor do contador de iteração de laço excede um limite pré-determinado, então o laço pode ser colocado em cache no armazenador de laço. O laço pode ser lido a partir do armazenador de laço e a unidade de busca pode ser desligada até que o laço termine.
[0007] Esses e outros aspectos e vantagens se tornarão evidentes para aqueles normalmente versados na técnica em vista da descrição detalhada a seguir das abordagens apresentadas aqui.
BREVE DESCRIÇÃO DOS DESENHOS
[0008] As vantagens acima e outras vantagens dos métodos e mecanismos podem ser melhor entendidas por referência à seguinte descrição em conjunto com os desenhos anexos, nos quais:
[0009] A Figura 1 ilustra uma modalidade de uma porção de um circuito integrado.
[00010] A Figura 2 é um diagrama de blocos que ilustra uma modalidade de um núcleo de processador.
[00011] A Figura 3 é um diagrama de blocos que ilustra uma modalidade de uma extremidade frontal de um encadeamento de processador.
[00012] A Figura 4 ilustra um diagrama de blocos de outra modalidade de um armazenador de laço dentro de uma unidade de busca e decodificação.
[00013] A Figura 5 é uma modalidade de um laço de amostra.
[00014] A Figura 6 ilustra uma modalidade de uma unidade de con trole de armazenador de laço.
[00015] A Figura 7 é um fluxograma geral ilustrando uma modalidade de um método para rastrear um candidato de laço.
[00016] A Figura 8 é um diagrama de blocos de uma modalidade de um sistema.
[00017] A Figura 9 é um diagrama de blocos de uma modalidade de um meio legível por computador.
DESCRIÇÃO DETALHADA DAS MODALIDADES
[00018] Na descrição a seguir, numerosos detalhes específicos são mostrados para proporcionar um entendimento completo dos métodos e mecanismos apresentados aqui. Entretanto, aquele normalmente versado na técnica deverá reconhecer que as várias modalidades podem ser postas em prática sem esses detalhes específicos. Em alguns casos, estruturas, componentes, sinais, instruções de programa de computador e técnicas amplamente conhecidos não foram mostrados em detalhe para evitar confusão com os procedimentos descritos aqui. Será apreciado que, com a finalidade de simplicidade e clareza de ilustração, elementos mostrados nas figuras não foram necessariamente desenhados em escala. Por exemplo, as dimensões de alguns dos elementos podem ser exageradas com relação a outros elementos.
[00019] Esse relatório inclui referências a "uma modalidade". O uso da frase "em uma modalidade" em contextos diferentes não se refere necessariamente à mesma modalidade. Aspectos, estruturas ou características particulares podem ser combinados de qualquer maneira consistente com essa divulgação. Além disso, como usado ao longo desse pedido, a palavra "pode" é usada em um sentido de permissão (isto é, significando que existe o potencial para) e não de obrigação (que significaria tem que). Da mesma forma, as palavras "incluir", "incluindo", e "inclui" significam incluindo, mas não limitado a.
[00020] Terminologia. Os parágrafos a seguir proporcionam definições e/ou contexto para os termos encontrados nessa divulgação (in- cluindo as reivindicações anexas):
[00021] "Compreendendo". Esse termo não é restritivo. Conforme usado nas reivindicações anexas, esse termo não exclui estruturas ou etapas adicionais. Considere-se uma reivindicação com a redação: "Um processador compreendendo uma unidade de controle de arma- zenador de laço...". Essa reivindicação não impede que o processador inclua componentes adicionais (por exemplo, um cache, uma unidade de busca, uma unidade de execução).
[00022] "Configurado(a) para". Várias unidades, circuitos, ou outros componentes podem ser descritos ou reivindicados como "configurados (as)" para executar uma tarefa ou tarefas. Nesses contextos, "configurados (as) para" é usado para significar estrutura ao indicar que as unidades/circuitos/componentes incluem estrutura (isto é, conjunto de circuitos) que executa a tarefa ou tarefas durante a operação. Sendo assim, pode-se dizer que a unidade/circuito/componente não está em operação no momento (isto é, não está ligada (o)). As unida- des/circuitos/componentes acompanhadas (os) da expressão "configurada (a) para" incluem hardware - por exemplo, circuitos, instruções para programas de armazenamento de memória executáveis para implementar a operação, etc. Indicar que uma unida- de/circuito/componente está "configurada (a) para" executar uma ou mais tarefas se destina expressamente a invocar o Código US 35 § 112, sexto parágrafo, para esta unidade/circuito/componente. Além disso, "configurada (a)para" pode incluir estrutura genérica (por exemplo, conjunto de circuitos genérico) que é manipulada por software e/ou firmware (por exemplo, um FPGA ou um processador com propósitos gerais que executa software) para operar de maneira a ser capaz de executar a(s) tarefas em questão. "Configurada (a)para" pode também incluir adaptar um processo de fabricação (por exemplo, uma instalação de fabricação de semicondutor) para fabricar dispositivos (por exemplo, circuitos integrados) que são adaptados para implementar ou desempenhar uma ou mais tarefas.
[00023] "Com base 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 possam afetar uma determinação. Isto é, uma determinação pode se basear somente naqueles fatores ou se basear, pelo menos em parte, naqueles fatores. Considere a frase "determinar A com base em B". Embora B possa ser um fator que afeta a determinação de A, essa frase não exclui a determinação de A também ser baseado em C. Em outros casos, A pode ser determinado com base somente em B.
[00024] Com referência agora à Figura 1, é mostrado um diagrama de blocos ilustrando uma modalidade de uma porção de um circuito integrado (IC). Na modalidade ilustrada, IC 10 inclui um complexo processador 12, um controlador de memória 22, e circuitos de interface física de memórias (PHYs) 24 e 26. Observa-se que o IC 10 pode incluir também muitos outros componentes não mostrados na Figura 1. Em várias modalidades, o IC 10 também pode ser chamado de sistema em chip (SoC), um circuito integrado específico para uma aplicação (ASIC), ou um aparelho.
[00025] O complexo processador 12 pode incluir unidades de processamento central (CPUs) 14 e 16, cache 18 nível 2 (L2), e unidade de interface de barramento (BIU) 20. Em outras modalidades, o complexo processador 12 pode incluir outros números de CPUs. As CPUs 14 e 16 também podem ser chamadas de processadores ou núcleos. É observado que o complexo processador 12 pode incluir outros componentes não ilustrados na Figura 1.
[00026] As CPUs 14 e 16 podem incluir um conjunto de circuitos para executar instruções definidas em uma montagem de conjunto de instruções. Especificamente, um ou mais programas compreendendo as instruções podem ser executados pelas CPUs 14 e 16. Qualquer montagem de conjunto de instruções pode ser implementado em várias modalidades. Por exemplo, em uma modalidade, a montagem de conjunto de instruções (ISA) ARMTM pode ser implementada. O conjunto de instruções ARM pode incluir instruções de 16 bits (ou Miniatura) e de 32 bits. Outras ISAs exemplificativas podem incluir o conjunto de instruções PowerPCTM, o conjunto de instruções MIPSTM, o conjunto de instruções SPARCTM, o conjunto de instruções x86 (também chamado IA-32), o conjunto de instruções IA-64, etc.
[00027] Em uma modalidade, cada instrução executada pelas CPUs 14 e 16 pode estar associada a um valor de PC. Além disso, um ou mais registros de montagem podem ser especificados entre algumas instruções para leitura e para escrita. Esses registros de montagem podem ser mapeados como registros físicos reais por uma unidade para renomear registro. Mais ainda, algumas instruções (por exemplo, instruções ARM Miniatura) podem ser divididas 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 indicada por um número de micro-op (ou uop) exclusivo.
[00028] Cada uma das CPUs 14 e 16 pode incluir também um cache nível 1 (L1) (não mostrado), e cada cache L1 pode estar acoplado ao cacheL2 18. Outras modalidades podem incluir níveis adicionais de cache (por exemplo, cache nível 3 (L3)). Em uma modalidade, o cache L2 18 pode ser configurado para colocar em cache instruções e dados para um acesso de baixa latência pelas CPUs 14 e 16. O cache L2 18 pode compreender qualquer capacidade e configuração (por exemplo, mapeado diretamente, associativo a um conjunto). O cache L2 18 pode estar acoplado ao controlador de memória 22 via BIU 20. A BIU 20 pode incluir também várias outras estruturas lógicas para acoplar CPUs 14 e 16 e e o cache L2 18 a vários outros dispositivos e blocos.
[00029] O controlador de memória 22 pode incluir um número qualquer de entrada para memória e pode incluir um conjunto de circuitos configurado para interfacear com a memória. Por exemplo, o controlador de memória 22 pode ser configurado para interfacear com a memória de acesso aleatório dinâmico (DRAM) tal como DRAM sincrôni- co (SDRAM), taxa de dados dupla (DDR) SDRAM, DDR2 SDRAM, Rambus DRAM (RDRAM), etc. O controlador de memória 22 também pode ser acoplado aos circuitos de interface física de memória (PHYs) 24 e 26. As memórias PHYs 24 e 26 são representativas de um número qualquer de memórias PHYs que possa ser acoplado ao controlador de memória 22. As memórias PHYs 24 e 26 podem ser configuradas para interfacear com dispositivos de memória (não mostrados).
[00030] Observa-se que outras modalidades podem incluir outras combinações de componentes, incluindo subconjuntos ou conjuntos principais dos componentes mostrados na Figura 1 e/ou outros componentes. Embora uma ocorrência de um dado componente possa ser mostrado na Figura 1, outras modalidades podem incluir duas ou mais ocorrências do dado componente. Da mesma forma, ao longo dessa descrição detalhada, duas ou mais ocorrências de um dado componente podem estar incluídas mesmo que apenas uma seja mostrada, e/ou modalidades que incluam apenas uma ocorrência podem ser usadas mesmo se forem mostradas múltiplas ocorrências.
[00031] Voltando-se agora para a 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 no interior de um complexo processador, tal como, um complexo processador 12 da Figura 1. Em uma modalidade, 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 mapeamento e despacho 36, unidade de gerenciamento de memória (MMU) 40, unidade de interface de núcleo (CIF) 42, unidades de execução 44, unidades de carregamento-armazenamento (LSU) 46. É observado que o núcleo 30 pode incluir outros componentes e interfaces não mostrados na Figura 2.
[00032] A unidade de FED 32 pode incluir um conjunto de circuitos configurado para ler instruções da memória e colocá-las no cache de instruções nível um (L1) 34. O cache de instrução L1 34 pode ser um cache de memória para armazenar instruções a serem executadas pelo núcleo 30. O cache de instrução L1 34 pode ter qualquer capacidade e tipo de construção (por exemplo, diretamente mapeada, associá- vel a um conjunto, totalmente associável, etc.). Além disso, o cache de instrução L1 34 pode ter qualquer tamanho de linha de cache. A unidade de FED 32 pode incluir também um hardware de predição de desvio configurado para prever instruções de desvio e para fazer a busca pela trajetória prevista. A unidade de FED 32 também pode ser redirecionada (por exemplo, via predição equivocada, exceção, inter-rupção, descarga, etc.).
[00033] A unidade de FED 32 pode ser configurada para decodificar as instruções em operações de instrução. Além disso, a unidade de FED 32 também pode ser configurada para decodificar múltiplas instruções em paralelo. Geralmente, uma operação de instrução pode ser uma operação que o hardware incluído nas unidades de execução 44 e LSU 46 é capaz de executar. Cada instrução pode trasladar para uma ou mais operações de instrução as quais , quando executadas, resultam na execução das operações definidas para aquela instrução de acordo com a montagem do conjunto de instruções. Observa-se que os termos "operação de instrução" e "uop" podem ser usados in- tercambiavelmente ao longo dessa divulgaçã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.
[00034] Em várias ISAS, algumas instruções podem se decodificar em uma só uop. A unidade de FED 32 pode ser configurada para identificar o tipo de instrução, operandos da fonte, etc., e cada operação de instrução decodificada pode compreender a instrução juntamente com uma parte da informação de decodificação. Em outras modalidades na qual cada instrução traslada para uma única uop, cada uop pode simplesmente ser a instrução correspondente ou uma porção da mesma (por exemplo, o campo ou campos de código de operação ou a instrução). Em algumas modalidades, a unidade de FED 32 pode incluir qualquer combinação de conjunto de circuitos e/ou microcódigo para gerar uops para instruções. Por exemplo, gerações de uop relativamente simples (por exemplo, uma ou duas uops por instrução) podem ser manejadas em hardware, ao passo que gerações de uop mais extensa (por exemplo, mais que três uops parar uma instrução) podem ser manejadas em microcódigo.
[00035] Uops decodificadas podem ser proporcionadas para a unidade de mapeamento/despacho 36. A unidade de mapeamen- to/despacho 36 pode ser configurada para mapear uops e registros de montagem em registros físicos de núcleo 30. A unidade de mapea- mento/despacho 36 pode implementar o registro renomeando para fonte de mapa endereços de registro das uops para os números ope- randos de fonte identificando os registros de fonte renomeados. A unidade de mapeamento/despacho 36 também pode ser configurada para despachar uops para estações de reserva (não mostradas) dentro das unidades de execução 44 e LSU 46.
[00036] Em uma modalidade, a unidade de mapeamento/despacho 36 pode incluir o armazenador de reordenação (ROB) 38. Em outras modalidades, o ROB 38 pode estar localizado em outro lugar. Antes de serem despachadas, as uops podem ser escritas para o ROB 38. O ROB 38 pode ser configurado para reter uops até que possam ser comprometidas em ordem. A cada uop pode ser atribuído um índice ROB (RNUM) que corresponde a uma entrada específica no ROB 38. RNUMs podem ser usados para manter um registro das operações em andamento no núcleo 30. A unidade de mapeamento/despacho 36 também pode incluir outros componentes (por exemplo, arranjo do mapeador, unidade de despacho, armazenador 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 mapa, uma unidade de despacho, e/ou outras unidades.
[00037] As unidades de execução 44 podem incluir qualquer número e tipo de unidades de execução (por exemplo, número inteiro, ponto flutuante, vetor). Cada uma das unidades de execução 44 pode incluir também uma ou mais estações de reserva (não ilustradas). A CIF 42 pode estar acoplada à LSU 46, unidade de FED 32, MMU 40, e a um cache L2 (não ilustrado). A CIF 42 pode ser configurada para gerenciar a interface entre o núcleo 30 e o cache L2. A MMU 40 pode ser configurada para executar o traslado do endereço e funções de gerenciamento de memória.
[00038] A LSU 46 pode incluir cache de dados L1 48, fila de armazenamento 50, e fila de carregamento 52. Operações de carregamento e armazenamento podem ser despachadas a partir da unidade de ma- peamento/despacho 36 para estações de reserva dentro da LSU 46. A fila de armazenamento 50 pode armazenar dados correspondentes a operações de armazenamento, e a fila de carregamento 52 pode armazenar dados associados a operações de carregamento. LSU 46 também pode ser acoplada ao cache L2 via CIF 42. É observado que LSU 46 também pode incluir outros componentes (por exemplo, estações de reserva, arquivo de registro, unidade de pré-busca, TLB) não mostrados na Figura 2.
[00039] Deve ser entendido que a distribuição de funcionalidade ilustrada na Figura 2 não é a única micromontagem 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.
[00040] Com referência agora à Figura 3, é mostrado um diagrama de blocos de uma modalidade de uma extremidade frontal de um encadeamento de processador. Em uma modalidade, a lógica de extremidade frontal mostrada na Figura 3 pode estar localizada dentro de uma unidade de busca e decodificação, tal como a Unidade de FED 32 (da Figura 2). Deve ser entendido que a distribuição de funcionalidade ilustrada na Figura 3 é apenas uma estrutura possível para implementar um armazenador de laço dentro de um encadeamento de processador. Outras distribuições adequadas de lógica para implementar um armazenador de laço são possíveis e consideradas.
[00041] A extremidade frontal de busca 60 pode ser configurada para buscar e pré-codificar instruções e então transportar uops pré- decodificadas para o armazenador de laço 62 e para os decodificado- res 70A-F (via multiplexador 68). Em uma modalidade, a extremidade frontal de busca 60 pode ser configurada para emitir seis uops pré- decodificadas por ciclo. Em outras modalidades, a extremidade frontal de busca 60 pode ser configurada para emitir outros números de uops pré-decodificados por ciclo.
[00042] O armazenador de laço 62, o multiplexador 68, e o decodi- ficador 70A-F podem ter seis pistas para processar e/ou armazenar seis uops por ciclo. Cada pista pode incluir um bit válido para indicar se a pista contém uma uop válida. É observado que as "pistas" do ar- mazenador de laço 62, multiplexador 68, e decodificador 70A-F podem também ser chamadas de "partições" ou "entradas". Em outras modalidades, o armazenador de laço 62, o multiplexador 68, e o decodifica- dor 70A-F podem incluir mais ou menos do que seis pistas, e a extremidade frontal de busca 60 pode ser configurada para emitir tantas uop por ciclo quanto possam ser acomodadas pelo próximo estágio do encadeamento.
[00043] A extremidade frontal de busca 60 pode expandir instruções em uops e alimentar essas uops para o armazenador 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é- decodificadas pode ser baseada no ARM ISA. Cada uop pré- decodificada pode incluir bits de código de operação de instrução, bits de pré-decodificação de instrução, e um número uop. Os bits de código de operação de instrução especificam a operação que deverá ser executada. Os bits de pré-decodificação indicam o número de uops para onde a instrução mapeia. O número de uops representa qual uop em uma sequência de instrução de multi-uops deve ser gerada. Em outras modalidades, outras ISAs podem ser utilizadas, e as instruções podem ser decodificadas e formatadas de diversas maneiras.
[00044] Quando o processador não está no modo de armazenador de laço, então as uops emitidas a partir da extremidade frontal de busca 60 podem ser transportadas para os decodificadores 70A-F via mul- tiplexador 68. Um sinal de seleção vindo da unidade de controle de armazenador de laço 64 pode ser acoplado ao multiplexador 68 para determinar qual trajetória está acoplada através do multiplexador 68 às entradas dos decodificadores 70A-F. Quando o processador está no modo de armazenador de laço, uops podem ser lidas a partir do arma- zenador de laço 62 e transportadas para os decodificadores 70A-F. As uops podem ser transportadas a partir das saídas dos decodificadores 70A-F para o próximo estágio do encadeamento do 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.
[00045] A unidade 64 de controle de armazenador de laço pode ser configurada para identificar um laço dentro das instruções buscadas e pré-decodificadas. Uma vez que um laço tenha sido identificado com algum grau de certeza, o laço então pode ser colocado em cache no armazenador de laço 62, a extremidade frontal de busca 60 pode ser desligada, e então o restante do encadeamento de processador pode ser alimentado a partir do armazenador de laço 62. Em uma modalidade, uma iteração do laço pode ser colocada em cache no armazenador de laço 62, e essa iteração colocada em cache pode ser repetidamente despachada encadeamento abaixo. Em outra modalidade, múltiplas iterações do laço podem ser colocadas em cache no armazenador de laço 62.
[00046] Para identificar um laço a se colocar em cache, primeiramente um desvio para trás pode ser detectado entre as instruções buscadas. Um "desvio para trás" pode ser definido como um desvio tomado que se dirige para uma instrução anterior na sequência de instruções. A instrução para a qual o desvio para trás se encaminha pode ser considerada o início do laço. Em uma modalidade, apenas determinados tipos de laços podem ser considerados candidatos a serem armazenados. Por exemplo, em uma modalidade, para um candidato de laço a ser considerado para armazenamento, todas as iterações do laço têm de ser invariáveis. Em outras palavras, o candidato de laço executa a mesma sequência de instruções em cada iteração. Além disso, laços com desvios indiretos (por exemplo, BX - troca de desvio, BLX - desvio com troca de link) na sequência de instruções do laço podem não ser levados em consideração para armazenamento. Mais ainda, só pode ser permitido um desvio para trás por laço. O restante dos desvios no laço devem ser desvios para frente. Em outras modalidades, todos os tipos de laços podem ser considerados, de modo que todos os tipos de laços sejam candidatos a laço, enquanto que o único critério que pode ser executado pode ser a invariabilidade do laço. Por exemplo, mais que um desvio para trás pode ser aceito candidato de laço, como, por exemplo, em um laço aninhado.
[00047] A unidade 64 de controle de armazenador de laço pode monitorar o fluxo de instruções que formam laços que atendem aos critérios de armazenamento de laço. A unidade 64 de controle de ar- mazenador de laço pode capturar toda a informação relativa a como se parece um determinado candidato de laço. Por um determinado período de tempo, o candidato de laço pode ser rastreado por múltiplas iterações para assegurar que o candidato de laço permaneça o mesmo. Por exemplo, as distâncias 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 essas distâncias continuam as mesmas.
[00048] Em algumas modalidades, mesmo se o candidato de laço é invariável e satisfaz os outros critérios listados acima, outras características do candidato de laço podem ser consideradas não qualificadas para serem colocadas em cache no armazenador de laço 62. Por exemplo, se o tamanho do candidato de laço for muito grande para encaixar no armazenador de laço 62, então o candidato de laço pode ser considerado sem qualificação. Além disso, pode haver um número máximo aceitável de desvios tomados dentro do laço, igual ao tamanho da tabela de rastreamento de desvio 66. Se o número de desvios tomados exceder esse número, então o laço pode ser excluído das considerações quanto a ser candidato a ser colocado em cache no armazenador de laço 62. Em uma modalidade, a tabela de rastrea- mento de desvio 66 pode incluir oito entradas paro desvios tomados dentro de um laço. Em outras modalidades, a tabela de rastreamento de desvio 66 pode ter mais ou menos que oito entradas para desvios tomados dentro de um laço. Uma vez que um candidato de laço foi desqualificado para ser colocado em cache no armazenador de laço 62, o endereço de instrução do desvio para trás para esse candidato de laço desqualificado pode ser registrado. Portanto, se esse desvio para trás for detectado novamente, a lógica de rastreamento de laço pode ignorar esse desvio e reiniciar apenas quando um novo desvio para trás for detectado.
[00049] Em uma modalidade, uma vez que o mesmo desvio para trás tenha sido detectado mais que uma vez, então uma máquina de estados finitos para capturar a informação para aquele laço pode ser iniciada pela unidade 64 de controle de armazenador de laço. Por exemplo, a unidade 64 de controle de armazenador de laço pode utilizar a tabela de rastreamento de desvio 66 para rastrear os desvios de um candidato de laço. A tabela de rastreamento de desvio 66 pode manter um registro da distância do início do laço até cada desvio tomado. Em uma modalidade, a distância pode ser medida em uops. Em outra modalidade, a distância pode ser medida em instruções. Em outras modalidades, a distância pode ser medida utilizando-se outras medidas, e/ou uma combinação de duas ou mais medidas. A medição da distância do início do laço até cada desvio tomado é uma maneira de determinar que a trajetória ao longo do código subjacente não mudou.
[00050] Se cada iteração do laço executa de modo que há o mesmo número de uops do início do laço até cada desvio, então o candidato de laço pode ser considerado invariável. A distância até cada desvio na tabela 66 pode ser rastreada para um determinado número de iterações antes de se determinar que o candidato de laço é invariável e deve ser colocado em cache. A quantidade de tempo alocada para rastrear a invariância do candidato de laço pode se basear em diversas iterações de laço e/ou em uma quantidade de desvios encontrados.
[00051] Em uma modalidade, os únicos desvios que são aceitáveis dentro de um candidato de laço podem ser desvios condicionais que têm o mesmo alvo. Nessa modalidade, desvios indiretos podem não ser suportados uma vez que um desvio indireto pode ter um alvo diferente em iterações diferentes do laço. É possível que um desvio indireto possa tomar duas trajetórias diferentes através do código em duas iterações separadas, mas o laço pode ainda ser considerado pela unidade 64 de controle de armazenador de laço como sendo invariável. Isso pode ocorrer porque é possível que as distâncias fossem as mesmas mesmo embora o laço tomasse duas trajetórias diferentes nas duas iterações separadas. Isso levaria à falsa determinação de que o laço é invariável. Para evitar esses positivos falsos, os desvios indiretos podem não ser suportados. Portanto, nessa modalidade, a unidade 64 de controle de armazenador de laço pode permitir desvios apenas dentro de um candidato de laço que tenha o mesmo alvo em cada iteração de laço.
[00052] Em outra modalidade, desvios indiretos podem ser suportados e podem ser permitidos dentro de candidatos a laço. Nessa modalidade, a tabela de rastreamento de desvio 66 também pode incluir informações indicando o alvo de cada desvio tomado, para assegurar que o laço seja invariável. Durante cada iteração do candidato de laço, o alvo de cada desvio no laço pode ser comparado ao valor armazenado na tabela 66 para assegurar que o alvo não mudou. Em outras modalidades, informações adicionais podem ser incluídas na tabela de rastreamento de desvio 66 para assegurar que o conteúdo do laço seja invariável.
[00053] Em uma modalidade, os decodificadores 70A-F podem de tectar um desvio e sinalizar isso para a unidade 64 de controle de ar- mazenador de laço. Em outra modalidade, a extremidade frontal de busca 60 pode deter um desvio e transportar uma indicação da detecção até a unidade 64. Alternativamente, em uma outra modalidade, a unidade 64 pode monitorar o fluxo de instruções para os desvios e detectar desvios independentemente dos decodificadores 70A-F ou da extremidade frontal de busca 60. A unidade 64 pode incluir um contador de uops (não mostrado) que conta o número de uops a partir do início do laço. Na primeira iteração do laço, a unidade 64 pode escrever o valor do contador de uops para a tabela de rastreamento de desvio 66 sempre que um desvio é detectado no laço. Um ponteiro para a tabela 66 pode também ser incrementado cada vez que um desvio é detectado, para mudar para a próxima entrada na tabela 66. Em iterações subsequentes do laço, sempre que um desvio é detectado, o valor do contador de uops pode ser comparado ao valor na entrada correspondente na tabela 66. Cada entrada da tabela 66 pode incluir um valor representando um número de uops a partir do início do laço para um desvio respectivo. Cada entrada pode incluir também um bit válido para indicar que esta entrada corresponde a um desvio tomado no laço. Em outras modalidades, cada entrada da tabela 66 pode incluir ou-tras informações, tal como um identificador ou etiqueta de desvio, um alvo do desvio, e/ou outra informação.
[00054] Em uma modalidade, sempre que um desvio previsto incorretamente é detectado, então um sinal de reinicialização pode ser transportado para a unidade 64 de controle de armazenador de laço. Além disso, a qualquer momento em que uma ocorrência é sinalizada a partir da extremidade traseira que redirecione a extremidade frontal de busca 60, a unidade 64 de controle de armazenador de laço pode descarregar e reiniciar a lógica de detecção de candidato. Essas situações vão tipicamente levar o programa a sair de qualquer fluxo de có- digo que esteja sendo rastreado pela unidade 64.
[00055] Após certo período pré-determinado de tempo, a unidade 64 pode determinar que o candidato de laço seja colocado em cache no armazenador de laço 62. A duração do período de tempo pré- determinado pode se basear em um ou mais dentre uma variedade de fatores. Por exemplo, em uma modalidade, o período pré-determinado de tempo pode ser medido por um determinado número de iterações do laço. Se o número de iterações enquanto o laço foi invariável está acima de um limite, então o laço pode ser colocado em cache no ar- mazenador de laço 62. Alternativamente, o período de tempo pode se basear em diversos desvios tomados que tenham sido detectados. Por exemplo, se o candidato de laço inclui 8 desvios tomados, então uma contagem de 40 desvios como esses pode ser usada para indicar a ocorrência de um número particular de iterações (5 nesse exemplo). Em uma modalidade, o período pré-determinado de tempo pode se basear no proporcionamento para o previsor de desvio de tempo suficiente para prever o fim do laço. Diversas maneiras de rastrear essas iterações são possíveis e são consideradas.
[00056] Voltando-se agora para a Figura 4, é mostrada outra modalidade de um armazenador de laço dentro de uma unidade de busca e decodificação. Em uma modalidade, o armazenador de laço 84 pode estar localizado a jusante dos decodificadores 82A-F no encadeamento de processador, como mostrado na Figura 4. Isso contrasta com o armazenador de laço 62 (da Figura 3) que está localizado no encadeamento do processador antes dos decodificadores 70A-F. A extremidade frontal de busca 80 pode buscar instruções e pré-decodificar as instruções buscadas em uops pré-decodificadas. A seguir, as uops pré-decodificadas podem ser transportadas para decodificadores 82A- F. Em uma modalidade, a extremidade frontal de busca 80 pode ser configurada para gerar e transportar seis uops pré-decodificadas por ciclo para as seis pistas dos decodificadores 82A-F.
[00057] Os decodificadores 82A-F podem decodificar as uops pré- decodificadas em uops decodificadas. A seguir, os decodificadores 82A-F podem transportar as uops decodificadas para o próximo estágio do encadeamento de processador via multiplexador 90. Além disso, decodificadores 82A-F podem transportar uops para o armazena- dor de laço 84 quando um candidato de laço foi identificado e atendeu os critérios para ser colocado em cache no armazenador de laço 84. As saídas do multiplexador 90 podem estar acopladas ao 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.
[00058] O armazenador de laço 84, a unidade 86 de controle de armazenamento de laço, e a tabela de rastreamento de desvio 88 podem ser configurados para executar funções similares àquelas descritas em relação à extremidade frontal do processador mostrada na Figura 3. Uma diferença chave na Figura 4 é que o armazenador de laço 84 pode armazenar uops decodificadas ao contrário do armazenador de laço 62 que armazena uops pré-decodificadas na Figura 3. Portanto, o armazenador de laço 84 pode ser de tamanho maior que o arma- zenador de laço 62 para acomodar a quantidade maior de dados, uma vez que as uops decodificadas tipicamente têm mais informação do que uops pré-decodificadas. Observe-se que o armazenador de laço 84 também pode estar localizado em outros locais dentro de um enca-deamento de processador, além dos dois locais mostrados nas Figuras 3 e 4. Por exemplo, o armazenador de laço 84 pode estar localizado dentro de uma extremidade frontal de busca, ou, alternativamente, o armazenador de laço 84 pode estar localizado dentro de uma unidade de mapeamento/despacho. Dependendo de onde o armazenador de laço está localizado no encadeamento, o conteúdo do laço que está armazenado no armazenador de laço pode variar com base na quantidade de processamento de instrução que foi executado naquele ponto no encadeamento.
[00059] Em uma modalidade, em uma iteração inicial de um candidato de laço, a unidade 86 de controle de armazenador de laço pode preencher a tabela de rastreamento de desvio 88 com a distância do início do laço até cada desvio do laço. Em iterações subsequentes do laço, a unidade de controle 86 pode determinar se cada desvio está à mesma distância do início do laço que a distância correspondente armazenada na tabela 88. Após um candidato de laço ter sido invariável para um determinado número de iterações, então o candidato de laço pode ser colocado em cache no armazenador de laço 84 e alimentado para o restante do encadeamento a partir do armazenador de laço 84. A extremidade frontal de busca 80 e os decodificadores 82A-F podem ser desligados enquanto o laço está sendo despachado para fora do armazenador de laço 84 para o restante do encadeamento do processador.
[00060] Com referência agora à Figura 5, é mostrada uma modalidade de um laço de amostra. Observa-se que o código de programa do laço 100 mostrado na Figura 5 é utilizado com propósitos ilustrativos. Outros laços podem ser estruturados diferentemente com outros números de instruções e desvios.
[00061] O laço 100 pode começar no endereço de instrução 0001 com a instrução 102. A instrução 102 é seguida pela instrução 104, e essas instruções podem ser qualquer tipo de instruções não desviantes que estão definidas na ISA. O desvio 106 pode seguir a instrução 104, e o desvio 106 pode ser um desvio para frente que se desvia para o endereço de instrução 0025.
[00062] Como mostrado na tabela 120, as instruções 102 e 104 e o desvio 106 podem, cada um deles ser quebrado em uma só uop. Isto é puramente por propósitos ilustrativos, e instruções dentro de um programa podem corresponder a um número qualquer de uops, e os exemplos mostrados na tabela 120 são apenas com propósitos ilustrativos. Observa-se que a tabela 120 mostrando as uops por instrução não é uma tabela utilizada ou armazenada pelo encadeamento de processador, mas é mostrada na Figura 5 para os propósitos desta discussão.
[00063] O desvio 106 é o primeiro desvio para frente encontrado no laço 100, e o número de uops a partir do início do laço 100 pode ser alimentado na tabela de rastreamento de desvio 130. Portanto, com base nas duas instruções, cada uma com apenas uma uop, o primeiro valor armazenado na tabela de rastreamento de desvio 130 pode ser dois. O desvio 106 pode pular para endereço de instrução 0025, que corresponde à instrução 108. A instrução 108 pode ser qualquer tipo de instrução não desviada. Então, após a instrução 108, outro desvio para frente pode ser executado, nesse caso a instrução de desvio 110. Como pode ser visto na tabela 120, a instrução 108 é quebrada em três uops. Portanto, o valor escrito para a segunda entrada da tabela de rastreamento de desvio 130 pode ser seis para o número de uops a partir do início do laço até o desvio 110.
[00064] O desvio 100 pode pular para a instrução 112 no endereço de instrução 0077. A instrução 112 pode ser seguida pela instrução 114 e a seguir para o desvio 116. O desvio 116 é um desvio para trás tal que ele se desvia para trás até um endereço anterior na sequência de instruções. A instrução 112 se parte em duas uops e a instrução 114 se parte em quatro uops, conforme mostrado na tabela 120. Portanto, a distância em uops do início do laço até o desvio 116 é 13, e esse valor pode ser armazenado na terceira entrada da tabela de ras- treamento de desvio 130.
[00065] Quando o desvio 116 é detectado pela primeira vez, isso pode disparar uma máquina de estados finitos dentro de uma unidade de controle de armazenador de laço para iniciar o rastreamento do laço 100 como candidato a armazenador de laço. A unidade de controle de armazenador de laço pode determinar o número de uops no laço 100 e o número de desvios no laço 100. Se ambos esses valores forem menores que os limites que são suportados pelo hardware do laço, então a tabela de rastreamento de desvio 130 pode ser preenchida na próxima iteração do laço 100. Alternativamente, a tabela de rastre- amento de desvio 130 pode ser preenchida na primeira iteração do laço 100 após a detecção do desvio 116. Se o laço 100 não atende todos os critérios requeridos pelo hardware de laço para candidatos a laço, então o rastreamento de laço pode ser abandonado. Se o laço 100 atende todos os critérios, então, em iterações subsequentes do laço 100, sempre que um desvio é encontrado, o valor correspondente na tabela 130 pode ser lido e comparado com a distância em uops a partir do início do laço.
[00066] Observa-se que para outros laços, a tabela 130 pode incluir outros números de entradas válidas dependendo do número de desvios no laço. Também é notado que em outras modalidades, a distância armazenada na tabela de rastreamento de desvio 130 pode ser medida em outros valores além de uops. Por exemplo, em outra, as distâncias armazenadas na tabela 130 podem ser medidas em instruções. Além disso, em outras modalidades, a tabela de rastreamento de desvio 130 pode incluir outros campos de informação em cada entrada. Por exemplo, pode haver um bit válido pra cada entrada para indicar se a entrada corresponde a um desvio no candidato de laço e contém uma distância válida. No exemplo mostrado na Figura 5 para a tabela 130 e laço 100, apenas as primeiras três entradas teriam um bit válido ajustado em '1' e o restante dos bits válidos nas outras entradas pode ser ajustado em '0'. Além disso, em outras modalidades, um endereço alvo do desvio pode ser armazenado em cada entrada.
[00067] Com relação agora à Figura 6, um diagrama de blocos de uma modalidade de uma unidade de controle de armazenador de laço 140 é mostrada. A unidade 140 pode incluir o comparador 142, que pode comparar um endereço de instrução de desvio para trás (BTB) de uma instrução de BTB corrente com um endereço de instrução do retentor 144. O retentor 144 pode manter o endereço de instrução de BTB encontrado mais recentemente, e este pode ser comparado ao endereço de instrução de BTB corrente. O retentor 144 e o compara- dor 142 podem receber um sinal indicando que um desvio para trás (BTB) foi detectado. O retentor 144 e o comparador 142 também po-dem receber o endereço de instrução do BTB detectado. O retentor 144 pode armazenar a instrução do desvio para trás (BTB) mais recente. Então, na próxima vez que um BTB é detectado, o endereço de instrução do BTB pode ser comparado ao endereço de instrução do BTB anterior armazenado no retentor 144. Alternativamente, em outra modalidade, o retentor 144 pode ser um registro ou outra unidade de memória. O comparador 142 proporciona uma indicação de que um laço pode ter sido detectado no fluxo de instruções.
[00068] Em uma modalidade, o comparador 142 pode ter duas saídas, uma primeira saída indicando igualdade e uma segunda saída indicando desigualdade. A primeira saída, indicando igualdade, pode ser acoplada ao indicador de início de detecção 146, porta OR 160, e contador de iteração 150. A saída de igualdade do comparador 142 pode ser um pulso para um ou mais ciclos de relógio que indica que um BTB foi detectado e que o BTB foi visto pelo menos duas vezes em uma linha. A saída de igualdade do comparador 142 pode incrementar o contador de iteração 150, e o contador de iteração 150 pode proporcionar uma contagem do número de iterações de laço que foram detectadas no fluxo de instrução. Para essa modalidade, se o mesmo BTB é encontrado duas vezes em uma linha, sem nenhum outro BTB entre eles, então isso indica que um candidato de laço foi encontrado. Portanto, o conjunto de circuitos de rastreamento de laço pode ser iniciado para aprender mais sobre o candidato de laço.
[00069] A segunda saída do comparador 142, indicando desigualdade, pode ser acoplada à porta OR 162. A saída da porta OR 162 pode estar acoplada para reinicializar o indicador de início de detecção 146. A segunda saída do comparador 142 pode ser alta quando o BTB detectado naquele momento é diferente do BTB detectado anteriormente. Isso indica que o BTB anterior não era parte de um candidato de laço para essa modalidade. Embora não mostrada na Figura 6, a segunda saída do comparador 142 também pode estar acoplada a outros locais para indicar que a detecção de laço foi reinicializada.
[00070] O contador de uops 148 pode ser configurado para manter um registro do número de uops que foram detectadas desde o início do candidato de laço. Um ou mais sinais podem ser acoplados ao contador de uops 148 indicando o número de uops que foram detectadas. Essa(s) entrada(s) para o contador de uops 148 pode(m) indicar um número de uops que foram buscadas e/ou decodificadas. Em uma modalidade, os(s) sinal(is) pode(m) vir de uma unidade de busca. Em uma modalidade, se a unidade de busca emite seis uops decodificadas por relógio, então uma entrada alta acoplada ao contador de uops 148 pode fazer com que o contador de uops 148 incremente sua con-tagem em seis. Em outra modalidade, esses sinais podem ser acoplados ao contador de uops 148 a partir das unidades de decodificador.
[00071] O contador de uops 148 pode incluir também outra lógica para determinar o número de uops para a uop específica que corresponde a um desvio. Quando um desvio é encontrado, o contador de uops 148 pode receber também uma entrada indicando a pista na qual a uop estava localizada. A seguir, o contador de uops 148 pode de- terminar quantas das uops do ciclo mais recente estavam em frente da uop do desvio. Dessa maneira, o contador de uops 148 pode gerar uma contagem exata do número de uops a partir do início do laço até a uop de desvio específica correspondente ao desvio que foi detectado. O contador de uops 148 pode ser reinicializado se o BTB for detectado (significando o fim do laço), se uma predição errada ou descarregamento for sinalizada(o) da extremidade traseira do processador, ou se o comparador 152 sinalizar que uma desigualdade foi detectada em à distância de um desvio.
[00072] O contador de iteração 150 pode ser configurado para manter um registro do número de iterações de laço que foram buscadas e/ou decodificadas. O contador de iteração 150 pode ser reinicializado se uma predição errada ou descarregamento for sinalizada (o) a partir da extremidade traseira do processador ou se a distância de um dos desvios do laço for diferente do valor armazenado na tabela de rastre- amento de desvio (não mostrada). Isso pode ser indicado pelo compa- rador 152, que pode gerar um sinal indicando desigualdade se o valor do contador de uops corrente para um desvio detectado não for igual ao valor correspondente armazenado na tabela de rastreamento de desvio (BTT). O comparador 152 pode receber um sinal detectado por desvio e o valor do BTT para o desvio corrente do laço. O comparador 152 pode comparar o valor BTT ao valor de contador de uops corrente e emitir o resultado dessa composição. Se a comparação leva a uma desigualdade, então a lógica de detecção de laço pode ser reinicializada.
[00073] Em uma modalidade, o comparador 154 pode ser configurado para comparar a saída do contador de iteração 150 com um limite 156. Quando o contador de iteração 150 iguala ou excede o limite 156, o comparador 154 pode emitir um sinal que inicia o modo de armaze- nador de laço para o processador. Nessa modalidade, o candidato de laço pode ser rastreado por múltiplas iterações antes que o modo de armazenador de laço seja iniciado, e o número de iterações exigidas para o rastreamento pode ser indicado pelo limite 156. Em várias modalidades, o limite 156 é um valor programável. Em uma modalidade, o valor do limite pode se basear no tempo ou no número de ciclos necessários para o mecanismo de predição de desvio de processador detectar o fim do laço. Em algumas modalidades, o mecanismo de predição de desvio pode ser desligado enquanto o processador está no modo de armazenamento de laço.
[00074] Em outra modalidade, o número de desvios pode ser contado, e quando o número de desvios atinge um limite, então o armaze- nador de laço pode ser iniciado. Por exemplo, se um laço tem cinco desvios, e o limite de desvios é 40, então o candidato de laço iria requerer oito iterações para alcançar o limite de desvios. Em outras modalidades, outras maneiras de determinar por quanto tempo rastrear um candidato de laço antes de iniciar um modo de armazenador de laço podem ser utilizadas. Por exemplo, em outra modalidade, se um determinado número de desvios ou um determinado número de iterações for conseguido, então o processador pode entrar no modo de ar- mazenador de laço.
[00075] Embora a unidade 140 seja mostrada como recebendo vários sinais, tal como o BTB detectado, número de uops detectadas, e desvio detectado, em outra modalidade a unidade 140 pode gerar esses sinais internamente monitorando as uops que estão atravessando o encadeamento do processador. Deve ser entendido também que a distribuição de funcionalidade ilustrada na Figura 6 não é a única distribuição de lógica possível para implementar uma unidade de controle de armazenador de laço dentro de um encadeamento de processador. Outras modalidades podem incluir outros componentes e lógica e terem qualquer distribuição adequada desses componentes e lógica. Além do mais, cada um dos componentes individuais pode ser substituído por um ou mais componentes similares que podem ser configurados diferentemente dependendo da modalidade. Por exemplo, na modalidade mostrada na Figura 6, apenas um desvio para trás é tolerável dentro de um candidato de laço. Entretanto, em outras modalidades, um candidato de laço pode incluir mais que um desvio para trás, e a lógica da unidade de controle de armazenamento de laço pode ser modificada de acordo.
[00076] Com referência agora à Figura 7, é mostrada uma modalidade de um método para rastrear um candidato de laço. Para o propósito de discussão, as etapas nessa modalidade são mostradas em ordem de sequência. Deve ser notado que em várias modalidades do método descrito abaixo, um ou mais dos elementos descritos pode ser executado ao mesmo tempo, em uma ordem diferente daquela mostrada, ou pode ser omitido inteiramente. Outros elementos adicionais também podem ser executados conforme desejado.
[00077] Em uma modalidade, um desvio de terminação de laço pode ser detectado em um encadeamento de processador (bloco 172). Em várias modalidades, um desvio de terminação de laço pode ser definido como um desvio para trás excluindo chamadas de subrotina. Em várias modalidades, o desvio de terminação de laço pode ser detectado em um estágio de busca, em um estágio decodificador, ou em outro estágio do encadeamento de processador. A uop do desvio de terminação de laço pode ser marcada de forma que possa ser identificada como o final de um possível candidato a armazenador de laço.
[00078] Em resposta à detecção do desvio de terminação de laço, o endereço da instrução do desvio de terminação de laço pode ser retido em uma unidade de controle de armazenador de laço, um indicador de detecção pode ser estabelecido, um contador de iteração pode ser iniciado, e um contador de uops pode ser iniciado (bloco 174). O conta dor de iteração pode ser utilizado para manter um registro do número de iterações do laço. Em algumas modalidades, também, um contador de desvio pode ser iniciado para manter um registro do número de desvios que foram detectados em todas as iterações do candidato de laço. O valor do contador de iteração e/ou o valor do contador de desvio pode ser utilizado para determinar quando iniciar o modo de arma- zenador de laço. Quando o modo de armazenador de laço é iniciado, o candidato de laço pode ser armazenado em cache no armazenador de laço e a extremidade frontal de busca pode ser desligada. O contador de uops pode ser utilizado para determinar a distância (em número de uops) para cada desvio que for detectado no limite do candidato de laço.
[00079] Note-se que em uma modalidade, o contador mantido pelo contador de uops pode incluir partições vazias que são geradas como parte das etapas de decodificação e busca. Nesta modalidade, pode se presumir para os fins desta discussão que a unidade de busca é configurada para emitir seis uops por ciclo. Para alguns ciclos de relógio, a unidade de busca talvez não gere uma emissão inteira de seis uops por uma variedade de razões. Portanto, uma linha de uops enviados às unidades decodificadoras talvez não inclua uma linha inteira de uops válidos. O contador de uops pode levar isto em consideração e contar seis para cada linha mesmo que a linha não contenha seis uops válidos. Por exemplo, um laço pode incluir seis linhas de uops, e o desvio de terminação de laço pode ser a última partição da última linha do sexto ciclo de uops gerado. O contador de uops pode contar que o laço tem 36 uops para os seis ciclos, mesmo se uma ou mais linha contivessem menos que seis uops válidas. Por exemplo, uma linha intermediária pode conter apenas duas uops válidas, e as quatro partições restantes da linha podem estar vazias. Portanto, o laço incluiria 32 uops válidos, mas o contador de laço contará que o laço in- clui 36 uops. De um modo geral, nesta modalidade, o contador de uops pode manter um registro de quantas partições serão necessárias no armazenador de laço para armazenar o candidato de laço mesmo se algumas destas partições não contiverem uops válidos.
[00080] Após configurar os contadores e qualquer outra lógica de rastreamento adicional, o candidato de laço pode ser executado e ras- treado (bloco 176). Em uma modalidade, o rastreamento do candidato de laço pode incluir a detecção dos desvios no candidato de laço e preenchimento de uma tabela de rastreamento de desvio com as distâncias do começo do laço para cada desvio detectado (bloco 178). Em seguida, um desvio de terminação de laço pode ser detectado no final do candidato de laço (bloco 180). Se o desvio de terminação de laço for o mesmo desvio detectado previamente (bloco condicional 182), então o contador de iteração pode ser incrementado (bloco 186).
[00081] Se o desvio de terminação de laço não for o mesmo desvio detectado previamente (bloco condicional 182), então o rastreamento do candidato de laço pode ser interrompido e os contadores, o retentor, o indicador de início de detecção e a tabela de rastreamento de desvio podem ser reinicializados (bloco 184). Além disso, o rastrea- mento do candidato de laço pode ser terminado se quaisquer instruções excluídas forem detectadas no laço. Após o bloco 184, o método 170 pode ser reinicializado e esperar por um desvio de terminação do laço ser detectado (bloco 172).
[00082] Após o bloco 186, o contador de uops pode ser comparado ao tamanho do armazenador de laço (bloco condicional 188) para determinar se o candidato de laço cabe no armazenador de laço. Alternativamente, em outra modalidade, estas etapas do método 170 podem ser reordenadas. Por exemplo, se for determinado que o contador de uops excede o tamanho do armazenador de laço ( bloco condicional 188) antes de detectar um desvio de terminação de laço (bloco 180), a detecção do laço pode então ser cancelada.
[00083] Se o contador de uops for menor que o tamanho do arma- zenador de laço (bloco condicional 188), o candidato de laço pode então encaixar no armazenador de laço, e assim a próxima condição pode ser verificada, se o número de desvios no candidato de laço é menor que o tamanho da tabela de rastreamento de desvio (BTT) (bloco condicional 190). Se o contador de uops for maior que o tamanho do armazenador de laço (bloco condicional 188), o candidato de laço será então grande demais para encaixar no armazenador de laço e o ras- treamento pode ser terminado. Método 170 pode voltar ao bloco 184 e os contadores, retentor, indicador de início detecção, e a tabela de ras- treamento de desvio podem ser reinicializados.
[00084] Se o número de desvios no candidato de laço for menor que o tamanho do BTT (bloco condicional 190), o candidato de laço então ainda está sendo considerado, e o contador de uops pode ser reiniciado (bloco 192). Então, outra iteração de laço pode ser executada e rastreada (bloco 194). O rastreamento da iteração de laço pode incluir o monitoramento dos desvios tomados e do número de uops do começo do laço até cada desvio. A distância até cada desvio desde o começo do laço pode ser comparada aos valores armazenados na tabela de rastreamento de desvio.
[00085] Quando uma iteração de laço se completa, um desvio de terminação de laço deve ser detectado, e pode se determinar se é o mesmo desvio de terminação de laço (bloco condicional 196). Alternativamente, se o desvio da terminação de laço não for detectado, o ras- treamento de laço pode ser terminado monitorando-se do contador de uops e a última entrada na tabela de rastreamento de desvio e determinando-se que o desvio de terminação de laço já deveria ter sido detectado. Se o desvio de terminação do laço for detectado e for o mesmo desvio de terminação de laço (bloco condicional 196), pode ser de- terminado então se o conteúdo do laço foi invariável para esta iteração de laço (bloco condicional 198).
[00086] Alternativamente, o bloco condicional 198 pode ser verificado antes do bloco condicional 196 em alguns casos. Por exemplo, pode ser determinado que o conteúdo de laço mudou antes da detecção do desvio de terminação de laço se um dos desvios do laço não estiver na mesma distância a partir do início do laço que o valor armazenado na tabela de rastreamento de desvio. Neste caso, o rastreamento do laço pode ser terminado antes da detecção do mesmo desvio de terminação de laço.
[00087] Se o conteúdo de laço foi invariável para esta iteração do laço (bloco condicional 198), isto indica então que o mesmo laço está sendo executado, e o contador de iteração pode então ser incrementado (bloco 200). Assim, pode ser determinado se o contador de iteração está acima de um limite para determinar se o laço foi rastreado por tempo suficiente para o laço ser armazenado (bloco condicional 202). Alternativamente, em outra modalidade, um contador de desvio pode ser comparado a um limite para determinar se o processador deve entrar em um modo de armazenador de laço.
[00088] Se o contador de iteração estiver abaixo do limite (bloco condicional 202), o método 170 pode então reiniciar o contador de uops (bloco 192). Se o contador de iteração estiver acima do limite (bloco condicional 202), o processador pode então entrar no modo de armazenador de laço e o laço pode ser armazenado em cache no ar- mazenador de laço (bloco 204). Após o bloco 204, o método 170 pode terminar. Neste ponto, a extremidade frontal do processador pode ser desligada e uops podem ser despachadas para fora do armazenador de laço. Quando o laço termina, o processador pode transportar um sinal para sair do modo de armazenador de laço e a extremidade frontal do processador pode ser ligada novamente. Neste ponto, o método 170 pode ser reiniciado, e a unidade de controle de armazenador de laço pode voltar a monitorar o fluxo de instrução para os desvios de terminação de laço (bloco 172).
[00089] Referindo-se a seguir à Figura 8, é mostrado um diagrama de blocos de uma modalidade de um sistema 210. Como ilustrado, o sistema 210 pode representar, chip, conjunto de circuitos, componentes, etc., de um computador de mesa 220, laptop 230, tablet 240, celular 250, ou outros. Na modalidade ilustrada, o sistema 210 inclui pelo menos um exemplo de IC 10 (da Figura 1) acoplado a uma memória externa 212.
[00090] O IC 10 é acoplado a um ou mais periféricos 214 e à memória externa 212. Uma fonte de energia 216 também é fornecida que proporciona as tensões de alimetação ao IC 10 bem uma ou mais tensões de alimentação para a memória 212 e/ou para os periféricos 214. Em várias modalidades, a fonte de energia 216 pode representar uma bateria (por exemplo, uma bateria recarregável em um smartphone, laptop ou tablet). Em algumas modalidades, mais do que um exemplo de IC 10 podem ser incluídos (e mais que uma memória externa 212 podem ser incluídas também).
[00091] A memória 212 pode ser qualquer tipo de memória, tal como, memória de acesso aleatório dinâmico (DRAM), DRAM sincrônica (SDRAM), DDR, DDR2, DDR3, etc.), SDRAM ( incluindo versões móveis das SDRAMs tais como DDR3, etc., e /ou versões de baixa potência das SDRAMs tais 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 tais como módulos de memória em linha única (SIMMs), módulos de memória em linha dupla (DIMMs), etc.
[00092] Os periféricos 214 podem incluir qualquer conjunto de circuitos desejado, dependendo do tipo do sistema 210. Por exemplo, em uma modalidade, os periféricos 214 podem incluir dispositivos para vários tipos de comunicação sem fio, tal como Wi-Fi, Bluetooth, celular, sistema de posicionamento global, etc. Os periféricos 214 podem incluir também armazenamento adicional, incluindo armazenamento RAM, armazenamento de estado sólido, armazenamento de disco. Os periféricos 214 podem incluir dispositivos de interface de usuário tais como uma tela de exibição, incluindo telas sensíveis ao toque ou telas de exibição multitoque, teclado ou outros dispositivos de entrada, microfones, alto-falantes, etc.
[00093] Em relação agora à Figura 9, é mostrada uma modalidade de um diagrama de blocos de um meio legível por computador 260 incluindo uma ou mais estruturas de dados representativas do conjunto de circuitos incluído no IC 10 (da Figura 1). De um modo geral, o meio legível por computador 260 pode incluir qualquer meios de armazenamento não transitório tais como meios ópticos ou magnéticos, por exemplo, disco, CD-ROM, ou DVD-ROM, meios de memória volátil ou não volátil tais com RAM, (por exemplo, SDRAM, RDRAM, SRAM, etc.), ROM, etc., assim como meios accessíveis através de meios de transmissão ou sinais tais como elétrico, eletromagnético, ou sinais digitais, transportados através de um meio de comunicação tal como uma rede e/ou um link sem fio.
[00094] Geralmente, a(s) estrutura(s) de dados do circuito no meio legível por computador 260 pode(m) ser lida(s) por um programa e usada(s), direta ou indiretamente, para fabricar o hardware compreendendo o conjunto de circuitos. Por exemplo, a(s) estrutura(s) de dados pode(m) incluir uma ou mais descrições de nível de comportamento ou descrições de nível de transferência de registro (RTL) da funcionalidade do hardware em uma linguagem de design de alto nível (HDL) tal 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 pro- duzir uma ou mais listas de rede compreendendo listas de portas de uma biblioteca de síntese. A(s) lista(s) de rede compreende(m) um conjunto de portas que representam também a funcionalidade do hardware compreendendo o conjunto de circuitos. A(s) lista(s) de rede podem ser então colocadas e encaminhadas para produzir um ou mais conjunto de dados descrevendo formas geométricas para serem aplicadas a máscaras. As máscaras podem ser então usadas em várias etapas de fabricação de semicondutor para produzir um circuito ou circuitos de semicondutor correspondendo ao conjunto de circuitos. Alternativamente, a(s) estrutura(s) de dados no meio legível por computador 230 pode(m) ser a(s) lista(s) de redes (com ou sem a biblioteca de síntese) ou o(s) conjunto (s) de dados, como desejado. Em outra alternativa ainda, as estruturas de dados podem compreender a produção de um programa esquemático, ou lista(s) de redes ou conjunto (s) de dados derivados das mesmas.
[00095] Embora o meio legível por computador 260 inclui uma representação do IC 10, outras modalidades podem incluir uma representação de qualquer porção ou da combinação de porções do IC 10 (por exemplo, armazenador de laço, unidade de controle de armazenador de laço).
[00096] Deve-se enfatizar que as modalidades descritas acima são apenas exemplos não limitativos de implementações. Numerosas variações e modificações serão evidentes para aqueles versados na técnica uma vez que a descrição acima for totalmente analisada. Pretende- se que as reivindicações a seguir sejam interpretadas de modo a englobar todas essas variações e modificações.

Claims (11)

1. Aparelho, caracterizado pelo fato de que compreende: um buffer de laço configurado para armazenar operações de instrução, em que as operações de instrução são enviadas do buffer de laço em resposta à detecção de que o aparelho está em um modo de 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 do buffer de laço está configurada para: detectar uma ramificação reversa direta para uma instrução anterior em uma sequência de instruções; considerar a instrução anterior um início de um candidato de laço; determinar se uma indicação é armazenada que indica que um candidato de laço correspondente à ramificação reversa direta foi desqualificado de ser armazenado em cache no buffer de laço durante o rastreamento do candidato de laço em um encontro anterior do candidato de laço; em resposta à determinação de que a referida indicação é armazenada, ignorar o candidato de laço e renunciar ao rastreamento do candidato de laço; se a ramificação reversa direta não tiver sido desqualificada anteriormente, acompanhe o candidato de laço, pelo qual a unidade de controle de buffer de laço está configurada para: armazenar uma identificação da ramificação reversa direta; rastrear várias instruções executadas desde o início do candidato de laço até cada ramificação reversa dentro do candidato de laço; responsivo à detecção de várias instruções executadas desde o início do candidato de laço para cada uma das ramificações reversa é invariável por pelo menos um determinado número de iterações do candidato de laço, armazena o candidato de laço no buffer de laço e inicia o modo de buffer de laço; e em resposta à detecção do número de instruções executadas a partir do início do candidato de laço para cada uma das ramificações reversas não é invariável: encerrar o rastreamento do candidato de laço; e armazenar uma indicação de que a ramificação reversa direta é desqualificada.
2. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que ainda compreende uma unidade de busca e um cache de instruções, em que o aparelho está configurado para desligar pelo menos uma unidade de busca e o cache de instruções responsivo ao modo de buffer de laço sendo iniciado.
3. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que as operações de instrução são enviadas do buffer de laço para uma unidade de decodificação quando o aparelho está no modo de buffer de laço.
4. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que, ao rastrear o candidato de laço, a unidade de controle de buffer de laço é ainda configurada para terminar o rastre- amento do candidato de laço responsivo à detecção de um segundo ramo de terminação de laço que não é o primeiro ramo de terminação de laço.
5. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que o número determinado de iterações corresponde a um número de iterações maiores que um limite e em que o limite é baseado em uma quantidade de tempo selecionada para fornecer ao preditor de ramificação uma quantidade de tempo suficiente para pre- ver um final do candidato de laço.
6. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que ainda compreende uma tabela de rastreamento de ramificação, em que a tabela de rastreamento de ramificação compreende uma entrada para cada ramificação do candidato de laço, e em que cada entrada inclui um valor que corresponde a uma distância desde o início de o candidato de laço para o respectivo ramo tomado.
7. Método caracterizado pelo fato de que compreende as etapas de: manter um buffer de laço para armazenar operações de instrução, em que as operações de instrução são enviadas do buffer de laço responsivo à detecção de um modo de buffer de laço; detectar um primeiro ramo de terminação de laço, em que o primeiro ramo de terminação de laço é uma ramificação reversa direta para uma instrução anterior em uma sequência de instruções; considerando a instrução anterior o início de um candidato de laço; determinar se é armazenada uma indicação que indica que um candidato de laço correspondente à ramificação reversa direta foi desqualificado de ser armazenado em cache no buffer de laço durante o rastreamento do candidato de laço em um encontro anterior do candidato de laço; em resposta à determinação de que a referida indicação é armazenada, ignorando o candidato de laço e o rastreamento anterior do candidato de laço; se a ramificação reversa direta não tiver sido desqualificada anteriormente, iniciar o rastreamento do candidato de laço, em que o referido rastreamento compreende: armazenar uma identificação da ramificação reversa direta; rastrear um número de instruções executadas desde o iní- cio do candidato de laço para cada ramificação tomada dentro do candidato de laço; em resposta à detecção de várias instruções executadas desde o início do candidato de laço para cada uma das ramificações tomadas é invariável por pelo menos um determinado número de iterações do candidato de laço, armazenando o candidato de laço no buffer de laço e iniciando o modo de buffer de laço ; e em resposta à detecção do número de instruções executadas desde o início do candidato de laço para cada uma das ramificações tomadas não é invariável: finalizar o rastreamento do candidato de laço; e armazenar uma indicação de que ramificação reversa direta está desqualificada.
8. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que o rastreamento ainda compreende o rastreamento de término do candidato de laço em resposta à detecção de um segundo ramo de terminação de laço que não é o primeiro ramo de terminação de laço.
9. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que ainda compreende o desligamento de uma unidade de busca sensível à entrada no modo de buffer de laço.
10. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que ainda compreende o envio do candidato de laço do buffer de laço para um próximo estágio de um pipeline do processador em resposta a entrar no modo de buffer de laço.
11. Método, de acordo com a reivindicação 10, caracterizado pelo fato de que o próximo estágio do pipeline do processador é uma unidade de decodificação.
BR102013015049-5A 2012-06-15 2013-06-17 aparelho e método BR102013015049B1 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/524,508 2012-06-15
US13/524,508 US9557999B2 (en) 2012-06-15 2012-06-15 Loop buffer learning

Publications (2)

Publication Number Publication Date
BR102013015049A2 BR102013015049A2 (pt) 2015-06-23
BR102013015049B1 true BR102013015049B1 (pt) 2021-03-02

Family

ID=48670377

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102013015049-5A BR102013015049B1 (pt) 2012-06-15 2013-06-17 aparelho e método

Country Status (8)

Country Link
US (1) US9557999B2 (pt)
EP (1) EP2674858B1 (pt)
JP (1) JP5799465B2 (pt)
KR (1) KR101497214B1 (pt)
CN (1) CN103593167B (pt)
BR (1) BR102013015049B1 (pt)
TW (1) TWI520060B (pt)
WO (1) WO2013188122A2 (pt)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9753733B2 (en) 2012-06-15 2017-09-05 Apple Inc. Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer
US9459871B2 (en) * 2012-12-31 2016-10-04 Intel Corporation System of improved loop detection and execution
EP3005078A2 (en) 2013-05-24 2016-04-13 Coherent Logix Incorporated Memory-network processor with programmable optimizations
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
CN105511838B (zh) * 2014-09-29 2018-06-29 上海兆芯集成电路有限公司 处理器及其执行方法
US20160179549A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Instruction and Logic for Loop Stream Detection
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
GB2548603B (en) * 2016-03-23 2018-09-26 Advanced Risc Mach Ltd Program loop control
GB2548602B (en) 2016-03-23 2019-10-23 Advanced Risc Mach Ltd Program loop control
US10223118B2 (en) 2016-03-24 2019-03-05 Qualcomm Incorporated Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor
JP2018005488A (ja) 2016-06-30 2018-01-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10318433B2 (en) * 2016-12-20 2019-06-11 Texas Instruments Incorporated Streaming engine with multi dimensional circular addressing selectable at each dimension
CN108256735B (zh) * 2017-12-14 2020-12-25 中国平安财产保险股份有限公司 查勘派工的处理方法及终端设备
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
US11269642B2 (en) 2019-09-20 2022-03-08 Microsoft Technology Licensing, Llc Dynamic hammock branch training for branch hammock detection in an instruction stream executing in a processor
CN112579169B (zh) * 2019-09-27 2024-04-09 阿里巴巴集团控股有限公司 处理器追踪流的生成方法及装置
US11928474B2 (en) * 2022-06-03 2024-03-12 Microsoft Technology Licensing, Llc Selectively updating branch predictors for loops executed from loop buffers in a processor

Family Cites Families (45)

* 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 デ−タ処理装置
DE69129872T2 (de) 1990-03-27 1999-03-04 Philips Electronics Nv Datenverarbeitungssystem mit einem leistungsverbessernden Befehlscachespeicher
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.
JPH0991136A (ja) 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
JPH10124315A (ja) 1996-10-18 1998-05-15 Hitachi Ltd 分岐処理方法およびそのための情報処理装置
DE69718278T2 (de) 1996-10-31 2003-08-21 Texas Instruments Inc Methode und System zur Einzel-Zyklus-Ausführung aufeinanderfolgender Iterationen einer Befehlsschleife
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
DE60027395T2 (de) 1999-11-30 2007-02-01 Texas Instruments Inc., Dallas Befehlsschleifenspuffer
US7302557B1 (en) 1999-12-27 2007-11-27 Impact Technologies, Inc. Method and apparatus for modulo scheduled loop execution in a processor architecture
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
JP2004038601A (ja) 2002-07-04 2004-02-05 Matsushita Electric Ind Co Ltd キャッシュメモリ装置
EP1567933A2 (en) * 2002-11-28 2005-08-31 Koninklijke Philips Electronics N.V. A 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
US8892691B2 (en) 2010-04-07 2014-11-18 Apple Inc. Real-time or near real-time streaming
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
US9753733B2 (en) 2012-06-15 2017-09-05 Apple Inc. Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer
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
EP2674858A2 (en) 2013-12-18
US20130339700A1 (en) 2013-12-19
BR102013015049A2 (pt) 2015-06-23
KR20130141394A (ko) 2013-12-26
JP5799465B2 (ja) 2015-10-28
EP2674858B1 (en) 2019-10-30
CN103593167B (zh) 2017-02-22
KR101497214B1 (ko) 2015-02-27
TW201411487A (zh) 2014-03-16
EP2674858A3 (en) 2014-04-30
JP2014013565A (ja) 2014-01-23
WO2013188122A3 (en) 2014-02-13
TWI520060B (zh) 2016-02-01
US9557999B2 (en) 2017-01-31
WO2013188122A2 (en) 2013-12-19
CN103593167A (zh) 2014-02-19

Similar Documents

Publication Publication Date Title
BR102013015049B1 (pt) aparelho e método
BR102013015262A2 (pt) Empacotamento de buffer de laço
US9471322B2 (en) Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
BR102013010877A2 (pt) Gerenciamento de conteúdo de preditor de dependência de carregamento-armazenamento
TWI552069B (zh) 載入-儲存相依性預測器、用於在載入-儲存相依性預測器中處理操作的處理器與方法
ES2655852T3 (es) Procedimientos y aparatos para cancelar solicitudes de captura previa de datos para un bucle
TWI494852B (zh) 維持與處理器內之屏障相關之指令的次序之方法及處理器
TWI564707B (zh) 用於控制電流之設備、方法及系統
BR102013014996B1 (pt) processador, método e unidade de renomeação de registrador
JP2018533135A (ja) データマッチングによるキャッシュライン複製解除のための方法および装置
JP7397858B2 (ja) フェッチグループのシーケンスのための分岐予測ユニットへのアクセスの制御

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]
B15K Others concerning applications: alteration of classification

Ipc: G06F 9/38 (2006.01), G06F 9/32 (2006.01)

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]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 17/06/2013, OBSERVADAS AS CONDICOES LEGAIS.