BR102013015049A2 - Aprendizagem para armazenador de laço - Google Patents

Aprendizagem para armazenador de laço Download PDF

Info

Publication number
BR102013015049A2
BR102013015049A2 BRBR102013015049-5A BR102013015049A BR102013015049A2 BR 102013015049 A2 BR102013015049 A2 BR 102013015049A2 BR 102013015049 A BR102013015049 A BR 102013015049A BR 102013015049 A2 BR102013015049 A2 BR 102013015049A2
Authority
BR
Brazil
Prior art keywords
loop
store
candidate
deviation
instruction
Prior art date
Application number
BRBR102013015049-5A
Other languages
English (en)
Other versions
BR102013015049B1 (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

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/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

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

Resumo patente de invenção: "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. 1/1

Description

Relatório Descritivo da Patente de Invenção para "APRENDI- ZAGEM PARA ARMAZENADOR DE LAÇO".
Campo da Invenção A presente invenção refere-se a processadores, e em particular 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 Os processadores dos dias de hoje são em geral estruturados 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 propor- cionar um fluxo constante de instruções para o próximo estágio do encade- amento do processador. Tipicamente, unidades de busca utilizam um cache de instruções para manter o resto do encadeamento continuamente abaste- cido 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 microprocessa- dores que são utilizados em dispositivos operados a bateria.
Em muitas aplicações em software, as mesmas etapas do soft- ware 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 detec- tado 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 des- vios. 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 São divulgados aparelhos, processadores e métodos para detec- tar 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 mo- dalidade, 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.
Na próxima vez em que o desvio de terminação de laço for de- tectado, 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 a laço não pode ser armazenado no armazenador de laço, e desta forma o rastre- amento 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.
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 subse- quentes do laço, o valor do contador de uops quando um desvio é detectado pode ser comparado ao valor correspondente armazenado na tabela de ras- treamento 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 rastreamento do laço pode continuar. Quando o valor do contador de iteração de laço excede um limite pré-determinado, en- tão o laço pode ser colocado em cache no armazenador de laço. O laço po- de ser lido a partir do armazenador de laço e a unidade de busca pode ser desligada até que o laço termine.
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
As vantagens acima e outras vantagens dos métodos e meca- nismos podem ser melhor entendidas por referência à seguinte descrição em conjunto com os desenhos anexos, nos quais: A Figura 1 ilustra uma modalidade de uma porção de um circuito integrado. A Figura 2 é um diagrama de blocos que ilustra uma modalidade de um núcleo de processador. A Figura 3 é um diagrama de blocos que ilustra uma modalidade de uma extremidade frontal de um encadeamento de processador. 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. A Figura 5 é uma modalidade de um laço de amostra. A Figura 6 ilustra uma modalidade de uma unidade de controle de armazenador de laço. A Figura 7 é um fluxograma geral ilustrando uma modalidade de um método para rastrear um candidato a laço. A Figura 8 é um diagrama de blocos de uma modalidade de um sistema. A Figura 9 é um diagrama de blocos de uma modalidade de um meio legível por computador.
DESCRIÇÃO DETALHADA DAS MODALIDADES
Na descrição a seguir, numerosos detalhes específicos são mos- trados para proporcionar um entendimento completo dos métodos e meca- nismos apresentados aqui. Entretanto, aquele normalmente versado na téc- nica deverá reconhecer que as várias modalidades podem ser postas em prática sem esses detalhes específicos. Em alguns casos, estruturas, com- ponentes, sinais, instruções de programa de computador e técnicas ampla- mente 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 dimen- sões de alguns dos elementos podem ser exageradas com relação a outros elementos.
Esse relatório inclui referências a "uma modalidade". O uso da frase "em uma modalidade" em contextos diferentes não se refere necessa- riamente à mesma modalidade. Aspectos, estruturas ou características parti- culares podem ser combinados de qualquer maneira consistente com essa divulgação. Além disso, como usado ao longo desse pedido, a palavra "po- de" é 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.
Terminologia. Os parágrafos a seguir proporcionam definições e/ou contexto para os termos encontrados nessa divulgação (incluindo as reivindicações anexas): "Compreendendo". Esse termo não é restritivo. Conforme usado nas reivindicações anexas, esse termo não exclui estruturas ou etapas adi- cionais. Considere-se uma reivindicação com a redação: "Um processador compreendendo uma unidade de controle de armazenador 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). "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 unida- des/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 unidades/circuitos/componentes acompanha- das (os) da expressão "configurada (a) para" incluem hardware - por exem- plo, 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. "Confi- gurada (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 im- plementar ou desempenhar uma ou mais tarefas. "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.
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. O complexo processador 12 pode incluir unidades de processa- mento 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.
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 po- dem 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) ARM™ 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 po- dem incluir o conjunto de instruções PowerPC™, o conjunto de instruções Mips™, o conjunto de instruções SPARC™, o conjunto de instruções x86 (também chamado IA-32), o conjunto de instruções IA-64, etc.
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 di- vididas 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.
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 exem- plo, cache nível 3 (L3)). Em uma modalidade, o cache L2 18 pode ser confi- gurado 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 me- mó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 disposi- tivos e blocos. 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ônico (SDRAM), taxa de dados dupla (DDR) SDRAM, DDR2 SDRAM, Rambus DRAM (RDRAM), etc. O controla- dor de memória 22 também pode ser acoplado aos circuitos de interface físi- ca de memória (PHYs) 24 e 26. As memórias PHYs 24 e 26 são representa- tivas 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 configu- radas para interfacear com dispositivos de memória (não mostrados).
Observa-se que outras modalidades podem incluir outras combi- naçõ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 ocor- rê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.
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 com- ponentes 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. A unidade de FED 32 pode incluir um conjunto de circuitos con- figurado 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 asso- ciável, etc.). Além disso, o cache de instrução L1 34 pode ter qualquer tama- nho de linha de cache. A unidade de FED 32 pode incluir também um hard- ware 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, interrupção, descarga, etc.). 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 para- lelo. 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 exe- cutar. 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" po- dem ser usados intercambiavelmente 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.
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 cam- pos de código de operação ou a instrução). Em algumas modalidades, a u- nidade 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.
Uops decodificadas podem ser proporcionadas para a unidade de mapeamento/despacho 36. A unidade de mapeamento/despacho 36 po- de ser configurada para mapear uops e registros de montagem em registros físicos de núcleo 30. A unidade de mapeamento/despacho 36 pode imple- mentar o registro renomeando para fonte de mapa endereços de registro das uops para os números operandos 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.
Em uma modalidade, a unidade de mapeamento/despacho 36 pode incluir o armazenador de reordenação (ROB) 38. Em outras modalida- des, o ROB 38 pode estar localizado em outro lugar. Antes de serem despa- chadas, 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 ma- peamento/despacho 36 também pode incluir outros componentes (por e- xemplo, arranjo do mapeador, unidade de despacho, armazenador de des- pacho) não mostrados na Figura 2. Além disso, em outras modalidades, a funcionalidade incluída dentro da unidade de mapeamento/despacho 36 po- de ser dividida em duas ou mais unidades separadas, tais como uma unida- de de mapa, uma unidade de despacho, e/ou outras unidades.
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 en- dereço e funções de gerenciamento de memória. A LSU 46 pode incluir cache de dados L1 48, fila de armazena- mento 50, e fila de carregamento 52. Operações de carregamento e arma- zenamento podem ser despachadas a partir da unidade de mapeamen- to/despacho 36 para estações de reserva dentro da LSU 46. A fila de arma- zenamento 50 pode armazenar dados correspondentes a operações de ar- mazenamento, e a fila de carregamento 52 pode armazenar dados associa- dos 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, unida- de de pré-busca, TLB) não mostrados na Figura 2.
Deve ser entendido que a distribuição de funcionalidade ilustra- da 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 in- cluir outros componentes, omitir um ou mais dos componentes mostrados, e/ou incluir um arranjo diferente de funcionalidade entre os componentes.
Com referência agora à Figura 3, é mostrado um diagrama de blocos de uma modalidade de uma extremidade frontal de um encadeamen- to 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 en- tendido 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ógi- ca para implementar um armazenador de laço são possíveis e consideradas. 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 decodificadores 70A-F (via multi- plexador 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. O armazenador de laço 62, o multiplexador 68, e o decodificador 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 armazenador 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 decodificador 70A-F podem incluir mais ou me- nos do que seis pistas, e a extremidade frontal de busca 60 pode ser confi- gurada para emitir tantas uop por ciclo quanto possam ser acomodadas pelo próximo estágio do encadeamento. 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 de- verá 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 mo- dalidades, outras ISAs podem ser utilizadas, e as instruções podem ser de- codificadas e formatadas de diversas maneiras.
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 po- dem ser transportadas para os decodificadores 70A-F via multiplexador 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 armazenador 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 pro- cessador. Em uma modalidade, o próximo estágio do encadeamento de pro- cessador pode ser uma unidade de mapeamento/despacho, tal como a uni- dade de mapeamento/despacho 36 da Figura 2. A unidade 64 de controle de armazenador de laço pode ser con- figurada 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 coloca- da 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.
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 consi- derados candidatos a serem armazenados. Por exemplo, em uma modalida- de, para um candidato a 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 a 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 de- vem 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 candi- datos 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 a laço, como, por exemplo, em um laço aninhado. A unidade 64 de controle de armazenador de laço pode monito- rar o fluxo de instruções que formam laços que atendem aos critérios de ar- mazenamento de laço. A unidade 64 de controle de armazenador de laço pode capturar toda a informação relativa a como se parece um determinado candidato a laço. Por um determinado período de tempo, o candidato a laço pode ser rastreado por múltiplas iterações para assegurar que o candidato a 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 pri- meira iteração e monitoradas em iterações subsequentes para determinar se essas distâncias continuam as mesmas.
Em algumas modalidades, mesmo se o candidato a laço é inva- riável e satisfaz os outros critérios listados acima, outras características do candidato a laço podem ser consideradas não qualificadas para serem colo- cadas em cache no armazenador de laço 62. Por exemplo, se o tamanho do candidato a laço for muito grande para encaixar no armazenador de laço 62, então o candidato a 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 ar- mazenador de laço 62. Em uma modalidade, a tabela de rastreamento de desvio 66 pode incluir oito entradas paro desvios tomados dentro de um Ia- ç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 a 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 a 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.
Em uma modalidade, uma vez que o mesmo desvio para trás te- nha sido detectado mais que uma vez, então uma máquina de estados fini- tos para capturar a informação para aquele laço pode ser iniciada pela uni- dade 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 a laço. A tabela de ras- treamento 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 me- dida 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 ou- tras 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 de- terminar que a trajetória ao longo do código subjacente não mudou.
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 a 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 a laço é invariável e deve ser colocado em ca- che. A quantidade de tempo alocada para rastrear a invariância do candidato a laço pode se basear em diversas iterações de laço e/ou em uma quantida- de de desvios encontrados.
Em uma modalidade, os únicos desvios que são aceitáveis den- tro de um candidato a laço podem ser desvios condicionais que têm o mes- mo alvo. Nessa modalidade, desvios indiretos podem não ser suportados uma vez que um desvio indireto pode ter um alvo diferente em iterações dife- rentes 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 dis- tâ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 indi- retos 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 a laço que tenha o mesmo alvo em cada iteração de laço.
Em outra modalidade, desvios indiretos podem ser suportados e podem ser permitidos dentro de candidatos a laço. Nessa modalidade, a ta- bela de rastreamento de desvio 66 também pode incluir informações indi- cando o alvo de cada desvio tomado, para assegurar que o laço seja invari- ável. Durante cada iteração do candidato a 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 po- dem ser incluídas na tabela de rastreamento de desvio 66 para assegurar que o conteúdo do laço seja invariável.
Em uma modalidade, os decodificadores 70A-F podem detectar um desvio e sinalizar isso para a unidade 64 de controle de armazenador 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. Alter- nativamente, 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 é detec- tado, para mudar para a próxima entrada na tabela 66. Em iterações subse- quentes 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 tabe- la 66 pode incluir outras informações, tal como um identificador ou etiqueta de desvio, um alvo do desvio, e/ou outra informação.
Em uma modalidade, sempre que um desvio previsto incorreta- mente é 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 qual- quer 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.
Após certo período pré-determinado de tempo, a unidade 64 po- de determinar que o candidato a laço seja colocado em cache no armazena- dor 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 en- quanto o laço foi invariável está acima de um limite, então o laço pode ser colocado em cache no armazenador 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 a 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.
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 Fi- gura 3) que está localizado no encadeamento do processador antes dos de- codificadores 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 decodifica- dores 82A-F. Em uma modalidade, a extremidade frontal de busca 80 pode ser configurada para gerar e transportar seis uops pré-decodificadas por ci- clo para as seis pistas dos decodificadores 82A-F.
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 enca- deamento de processador via multiplexador 90. Além disso, decodificadores 82A-F podem transportar uops para o armazenador de laço 84 quando um candidato a 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. O armazenador de laço 84, a unidade 86 de controle de arma- zenamento de laço, e a tabela de rastreamento de desvio 88 podem ser con- figurados 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 armazenador de laço 62 para acomodar a quanti- dade maior de dados, uma vez que as uops decodificadas tipicamente têm mais informação do que uops pré-decodificadas. Observe-se que o armaze- nador de laço 84 também pode estar localizado em outros locais dentro de um encadeamento de processador, além dos dois locais mostrados nas Fi- guras 3 e 4. Por exemplo, o armazenador de laço 84 pode estar localizado dentro de uma extremidade frontal de busca, ou, alternativamente, o arma- zenador de laço 84 pode estar localizado dentro de uma unidade de mape- amento/despacho. Dependendo de onde o armazenador de laço está locali- zado no encadeamento, o conteúdo do laço que está armazenado no arma- zenador de laço pode variar com base na quantidade de processamento de instrução que foi executado naquele ponto no encadeamento.
Em uma modalidade, em uma iteração inicial de um candidato a 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 con- trole 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 a laço ter sido invariável para um determinado número de itera- ções, então o candidato a laço pode ser colocado em cache no armazenador de laço 84 e alimentado para o restante do encadeamento a partir do arma- zenador 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 pro- cessador.
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. 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 defi- nidas na ISA. O desvio 106 pode seguir a instrução 104, e o desvio 106 po- de ser um desvio para frente que se desvia para o endereço de instrução 0025.
Como mostrado na tabela 120, as instruções 102 e 104 e o des- vio 106 podem, cada um deles ser quebrado em uma só uop. Isto é pura- mente por propósitos ilustrativos, e instruções dentro de um programa po- dem 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 ta- bela 120 mostrando as uops por instrução não é uma tabela utilizada ou ar- mazenada pelo encadeamento de processador, mas é mostrada na Figura 5 para os propósitos desta discussão. 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 ins- truçõ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 pu- lar 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. 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 se- guir 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 rastreamento de desvio 130.
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 can- didato 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 rastreamento 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 a- tende 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 a- tende 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.
Observa-se que para outros laços, a tabela 130 pode incluir ou- tros 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 in- formaçã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 a 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.
Com relação agora à Figura 6, um diagrama de blocos de uma modalidade de uma unidade de controle de armazenador de laço 140 é mos- trada. 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 re- tentor 144 e o comparador 142 podem receber um sinal indicando que um desvio para trás (BTB) foi detectado. O retentor 144 e o comparador 142 também podem receber o endereço de instrução do BTB detectado. O reten- tor 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 arma- zenado 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.
Em uma modalidade, o comparador 142 pode ter duas saídas, uma primeira saída indicando igualdade e uma segunda saída indicando de- sigualdade. 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 ou- tro BTB entre eles, então isso indica que um candidato a laço foi encontrado.
Portanto, o conjunto de circuitos de rastreamento de laço pode ser iniciado para aprender mais sobre o candidato a laço. A segunda saída do comparador 142, indicando desigualdade, pode ser acoplada à porta OR 162. A saída da porta OR 162 pode estar a- coplada 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 a laço para essa modalidade. Embo- ra 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. 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 candida- to a 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 bus- cadas 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 incre- mente sua contagem em seis. Em outra modalidade, esses sinais podem ser acoplados ao contador de uops 148 a partir das unidades de decodificador. 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 re- ceber também uma entrada indicando a pista na qual a uop estava localiza- da. A seguir, o contador de uops 148 pode determinar 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. 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 deco- dificadas. 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 dife- rente do valor armazenado na tabela de rastreamento de desvio (não mos- trada). Isso pode ser indicado pelo comparador 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 tabe- la 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 reinicializa- da.
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 compa- rador 154 pode emitir um sinal que inicia o modo de armazenador de laço para o processador. Nessa modalidade, o candidato a laço pode ser rastrea- do 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 in- dicado pelo limite 156. Em várias modalidades, o limite 156 é um valor pro- gramá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 des- vio de processador detectar o fim do laço. Em algumas modalidades, o me- canismo de predição de desvio pode ser desligado enquanto o processador está no modo de armazenamento de laço.
Em outra modalidade, o número de desvios pode ser contado, e quando o número de desvios atinge um limite, então o armazenador 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 a laço iria requerer oito iterações para al- cançar o limite de desvios. Em outras modalidades, outras maneiras de de- terminar por quanto tempo rastrear um candidato a 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 armazenador de laço.
Embora a unidade 140 seja mostrada como recebendo vários si- nais, tal como o BTB detectado, número de uops detectadas, e desvio detec- tado, em outra modalidade a unidade 140 pode gerar esses sinais interna- mente monitorando as uops que estão atravessando o encadeamento do processador. Deve ser entendido também que a distribuição de funcionali- dade 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 com- ponentes e lógica. Além do mais, cada um dos componentes individuais po- de 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 a laço. Entretanto, em outras modalidades, um can- didato a laço pode incluir mais que um desvio para trás, e a lógica da unida- de de controle de armazenamento de laço pode ser modificada de acordo.
Com referência agora à Figura 7, é mostrada uma modalidade de um método para rastrear um candidato a laço. Para o propósito de dis- cussão, as etapas nessa modalidade são mostradas em ordem de sequên- cia. 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 inteiramen- te. Outros elementos adicionais também podem ser executados conforme desejado.
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 pro- cessador. A uop do desvio de terminação de laço pode ser marcada de for- ma que possa ser identificada como o final de um possível candidato a ar- mazenador de laço.
Em resposta à detecção do desvio de terminação de laço, o en- dereç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 con- tador de uops pode ser iniciado (bloco 174). O contador de iteração pode ser utilizado para manter um registro do número de iterações do laço. Em algu- mas 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 a 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 armazenador de laço. Quando o modo de armazenador de laço é iniciado, o candidato a 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 a laço.
Note-se que em uma modalidade, o contador mantido pelo con- tador 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 contives- sem menos que seis uops válidas. Por exemplo, uma linha intermediária po- de conter apenas duas uops válidas, e as quatro partições restantes da linha podem estar vazias. Portanto, o laço incluiría 32 uops válidos, mas o conta- dor de laço contará que o laço inclui 36 uops. De um modo geral, nesta mo- dalidade, 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 a laço mesmo se algumas destas partições não contiverem uops válidos.
Após configurar os contadores e qualquer outra lógica de rastre- amento adicional, o candidato a laço pode ser executado e rastreado (bloco 176). Em uma modalidade, o rastreamento do candidato a laço pode incluir a detecção dos desvios no candidato a 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 a laço (bloco 180). Se o desvio de terminação de laço for o mesmo desvio detectado previamente (bloco condi- cional 182), então o contador de iteração pode ser incrementado (bloco 186).
Se o desvio de terminação de laço não for o mesmo desvio de- tectado previamente (bloco condicional 182), então o rastreamento do can- didato a 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 reini- cializados (bloco 184). Além disso, o rastreamento do candidato a 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).
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 a laço cabe no armazenador de laço. Alternativamente, em outra modalidade, estas etapas do método 170 podem ser reordenadas. Por e- xemplo, 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 can- celada.
Se o contador de uops for menor que o tamanho do armazena- dor de laço (bloco condicional 188), o candidato a 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 a 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 a laço será então grande demais para encaixar no arma- zenador de laço e o rastreamento pode ser terminado. Método 170 pode vol- tar ao bloco 184 e os contadores, retentor, indicador de início detecção, e a tabela de rastreamento de desvio podem ser reinicializados.
Se o número de desvios no candidato a laço for menor que o tamanho do BTT (bloco condicional 190), o candidato a laço então ainda es- tá 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ân- cia até cada desvio desde o começo do laço pode ser comparada aos valo- res armazenados na tabela de rastreamento de desvio.
Quando uma iteração de laço se completa, um desvio de termi- nação de laço deve ser detectado, e pode se determinar se é o mesmo des- vio de terminação de laço (bloco condicional 196). Alternativamente, se o desvio da terminação de laço não for detectado, o rastreamento de laço po- de 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 termi- naçã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 condi- cional 196), pode ser determinado então se o conteúdo do laço foi invariável para esta iteração de laço (bloco condicional 198).
Alternativamente, o bloco condicional 198 pode ser verificado antes do bloco condicional 196 em alguns casos. Por exemplo, pode ser de- terminado 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ân- cia a partir do início do laço que o valor armazenado na tabela de rastrea- mento 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.
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 exe- cutado, 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 mo- dalidade, um contador de desvio pode ser comparado a um limite para de- terminar se o processador deve entrar em um modo de armazenador de la- ço.
Se o contador de iteração estiver abaixo do limite (bloco condi- cional 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 armazenador 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 pon- to, o método 170 pode ser reiniciado, e a unidade de controle de armazena- dor de laço pode voltar a monitorar o fluxo de instrução para os desvios de terminação de laço (bloco 172).
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. 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 modalida- des, a fonte de energia 216 pode representar uma batería (por exemplo, uma batería recarregável em um smartphone, laptop ou tablet). Em algumas mo- dalidades, 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). 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.
Os periféricos 214 podem incluir qualquer conjunto de circuitos desejado, dependendo do tipo do sistema 210. Por exemplo, em uma moda- lidade, os periféricos 214 podem incluir dispositivos para vários tipos de co- municação sem fio, tal como Wi-Fi, Bluetooth, celular, sistema de posicio- namento global, etc. Os periféricos 214 podem incluir também armazena- mento adicional, incluindo armazenamento RAM, armazenamento de estado sólido, armazenamento de disco. Os periféricos 214 podem incluir dispositi- vos 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 dispo- sitivos de entrada, microfones, alto-falantes, etc.
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 com- putador 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 e- xemplo, SDRAM, RDRAM, SRAM, etc.), ROM, etc., assim como meios ac- cessíveis através de meios de transmissão ou sinais tais como elétrico, ele- tromagnético, ou sinais digitais, transportados através de um meio de comu- nicação tal como uma rede e/ou um link sem fio.
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 trans- ferê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 produzir 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 en- tã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 semi- condutor para produzir um circuito ou circuitos de semicondutor correspon- dendo 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 deseja- do. 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.
Embora o meio legível por computador 260 inclui uma represen- taçã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, ar- mazenador de laço, unidade de controle de armazenador de laço).
Deve-se enfatizar que as modalidades descritas acima são ape- nas 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 reivindi- cações a seguir sejam interpretadas de modo a englobar todas essas varia- ções e modificações.

Claims (20)

1. Aparelho compreendendo: um armazenador de laço configurado para armazenar operações de instrução, em que as operações de instrução são despachadas do arma- zenador de laço em resposta à detecção de que o aparelho está em um mo- do de armazenador de laço; e uma unidade de controle de armazenador de laço acoplada ao armazenador de laço, em que a unidade de controle do armazenador de laço está configurada para: rastrear uma distância do início de um candidato a laço compre- endendo uma pluralidade de instruções até cada desvio situado dentro do candidato a laço; e iniciar o modo de armazenador de laço, em resposta à detecção de que as distâncias do início do candidato a laço até cada um dos desvios tomados são invariáveis para pelo menos um dado número de iterações do candidato a laço.
2. Aparelho, de acordo com a reivindicação 1, compreendendo ainda uma unidade de busca e um cache de instrução, em que o aparelho está configurado para desligar pelo menos um dentre a unidade de busca e o cache de instrução em resposta à iniciação do modo de armazenador de laço.
3. Aparelho, de acordo com a reivindicação 1, em que as opera- ções de instrução são despachadas do armazenador de laço para um uma unidade de decodificação quando o aparelho está no modo de armazenador de laço.
4. Aparelho, de acordo com a reivindicação 1, em que uma dis- tância do início do candidato a laço até cada desvio tomado é medida em operações de instrução.
5. Aparelho, de acordo com a reivindicação 1, em que o número determinado de iterações corresponde a um número de iterações superior a um limite.
6. Aparelho, de acordo com a reivindicação 5, em que o limite é com base em uma quantidade de tempo necessária para um previsor de desvio prever um término do candidato a laço.
7. Aparelho, de acordo com a reivindicação 1, compreendendo ainda uma tabela de rastreamento de desvio, em que a tabela para rastrea- mento de desvio compreende uma entrada para cada desvio tomado do candidato a laço, e em que cada entrada inclui um valor que corresponde a uma distância do início do candidato a laço ao respectivo desvio tomado.
8. Processador compreendendo: um armazenador de laço; e uma unidade de controle de armazenador de laço acoplada ao armazenador de laço; em que a unidade de controle do armazenador de laço é confi- gurada para: monitorar um candidato a laço em resposta à detecção de um desvio tomado para trás; rastrear uma ou mais distâncias de um início do candidato a laço até uma ou mais instruções dentro do candidato a laço; fazer com que o candidato a laço seja armazenado no armaze- nador de laço em resposta à detectação de que a distância ou as distâncias é(são) invariável(is) para uma primeira pluralidade de desvios detectados.
9. Processador, de acordo com a reivindicação 8, em que a ins- trução ou instruções que são rastreadas são um ou mais desvios tomadas.
10. Processador, de acordo com a reivindicação 8, em que o iní- cio do candidato a laço é identificado como uma instrução após o desvio to- mado para trás.
11. Processador, de acordo com a reivindicação 8, em que ape- nas um desvio tomado para trás é permitido em um candidato a laço.
12. Processador, de acordo com a reivindicação 8, compreen- dendo ainda uma unidade de mapeamento e despacho, em que as opera- ções de instrução são despachadas do armazenador de laço para a unidade de mapemaento e despacho quando o candidato a laço é armazenado no armazenador de laço.
13. Processador, de acordo com a reivindicação 9, em que a u- nidade de controle do armazenador de laço é configurada ainda para termi- nar o monitoramento e o rastreamento do candidato a laço em resposta à detecção de que uma distância do início do candidato a laço até qualquer desvio tomado tenha mudado em qualquer iteração subsequente do candi- dato a laço.
14. Processador, de acordo com a reivindicação 8, em que a u- nidade de controle do armazenador de laço é configurada ainda para termi- nar o monitoramento e rastreamento do candidato a laço em resposta à de- tecção de que o candidato a laço é incapaz de encaixar no armazenador de laço.
15. Método compreendendo: detectar um desvio de término do laço; iniciar um contador de operações de instrução e um contador de iteração; rastrear uma pluralidade de instruções de um candidato a laço; comparar o contador de operações de instrução a um tamanho de um armazenador de laço em resposta à detecção do desvio de termina- ção do laço por uma segunda vez; terminar o rastreamento do candidato a laço em resposta à de- terminação de que o contador de operações de instrução é superior ao ta- manho do armazenador de laço quando o desvio de término do laço é detec- tada pela segunda vez; continuar o rastreamento do candidato a laço e aumentar o con- tador de iteração em resposta à determinação de que o contador de opera- ção de instrução não é superior ao tamanho do armazenador de laço ; e armazenar em cache o candidato a laço no armazenador de laço em resposta ao contador de iteração quando este excede um limite.
16. Método, de acordo com a reivindicação 15, compreendendo ainda: monitorar uma distância de um início do candidato a laço até ca- da desvio tomado do candidato a laço em um primeiro número de iterações do candidato a laço; e terminar o rastreamento do candidato a laço em resposta à de- terminação de uma distância do início do candidato a laço até qualquer des- vio do candidato a laço tenha mudado em qualquer um do primeiro número de iterações do candidato a laço.
17. Método, de acordo com a reivindicação 15, compreendendo ainda desligar uma unidade de busca em resposta ao armazenamento em cache do candidato a laço no armazenador de laço.
18. Método, de acordo com a reivindicação 15, compreendendo ainda despachar o candidato a laço do armazenador de laço a um próximo estágio de um encadeamento do processador em resposta ao armazena- mento em cache do candidato a laço no armazenador de laço.
19. Método, de acordo com a reivindicação 18, em que o próxi- mo estágio do encadeamento do processador é uma unidade de decodifica- ção.
20. Método, de acordo com a reivindicação 18, em que a próxi- mo estágio do encadeamento do processador é uma unidade de mapeamen- to e despacho.
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 US9557999B2 (en) 2012-06-15 2012-06-15 Loop buffer learning
US13/524,508 2012-06-15

Publications (2)

Publication Number Publication Date
BR102013015049A2 true BR102013015049A2 (pt) 2015-06-23
BR102013015049B1 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 (20)

* 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
CN104298488B (zh) * 2014-09-29 2018-02-23 上海兆芯集成电路有限公司 循环预测器指导的循环缓冲器
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
GB2548602B (en) 2016-03-23 2019-10-23 Advanced Risc Mach Ltd Program loop control
GB2548603B (en) * 2016-03-23 2018-09-26 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 阿里巴巴集团控股有限公司 处理器追踪流的生成方法及装置
US20230103206A1 (en) * 2021-09-24 2023-03-30 Intel Corporation Caching based on branch instructions in a processor
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 デ−タ処理装置
EP0449369B1 (en) 1990-03-27 1998-07-29 Koninklijke Philips Electronics N.V. A data processing system provided with a performance enhancing instruction cache
JP3032031B2 (ja) 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
JP3032030B2 (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., Dallas 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
JP2001195302A (ja) 1999-11-30 2001-07-19 Texas Instr Inc <Ti> 命令ループ・バッファ
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
US6898693B1 (en) 2000-11-02 2005-05-24 Intel Corporation Hardware loops
US6748523B1 (en) 2000-11-02 2004-06-08 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 キャッシュメモリ装置
WO2004049154A2 (en) * 2002-11-28 2004-06-10 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 プロセッサ及びプロセッサの命令バッファ動作方法
US7475231B2 (en) * 2005-11-14 2009-01-06 Texas Instruments Incorporated Loop detection and capture in the instruction queue
US7330964B2 (en) 2005-11-14 2008-02-12 Texas Instruments Incorporated Microprocessor with independent SIMD loop buffer
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
WO2011127312A1 (en) 2010-04-07 2011-10-13 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
KR20130141394A (ko) 2013-12-26
EP2674858B1 (en) 2019-10-30
CN103593167A (zh) 2014-02-19
US20130339700A1 (en) 2013-12-19
WO2013188122A3 (en) 2014-02-13
WO2013188122A2 (en) 2013-12-19
TWI520060B (zh) 2016-02-01
CN103593167B (zh) 2017-02-22
JP5799465B2 (ja) 2015-10-28
KR101497214B1 (ko) 2015-02-27
JP2014013565A (ja) 2014-01-23
EP2674858A2 (en) 2013-12-18
US9557999B2 (en) 2017-01-31
EP2674858A3 (en) 2014-04-30
TW201411487A (zh) 2014-03-16
BR102013015049B1 (pt) 2021-03-02

Similar Documents

Publication Publication Date Title
BR102013015049A2 (pt) Aprendizagem para armazenador de laço
TWI552069B (zh) 載入-儲存相依性預測器、用於在載入-儲存相依性預測器中處理操作的處理器與方法
BR102013015262A2 (pt) Empacotamento de buffer de laço
BR102013010877A2 (pt) Gerenciamento de conteúdo de preditor de dependência de carregamento-armazenamento
TWI494852B (zh) 維持與處理器內之屏障相關之指令的次序之方法及處理器
ES2655852T3 (es) Procedimientos y aparatos para cancelar solicitudes de captura previa de datos para un bucle
US20150227374A1 (en) Early loop buffer entry
JP7397858B2 (ja) フェッチグループのシーケンスのための分岐予測ユニットへのアクセスの制御
TWI564707B (zh) 用於控制電流之設備、方法及系統
BR102013014996B1 (pt) processador, método e unidade de renomeação de registrador
BR102012024721A2 (pt) Regulação de emissão de instruções de processador
JP2018533135A (ja) データマッチングによるキャッシュライン複製解除のための方法および装置
CN111352757A (zh) 检测未初始化存储器读取的设备、系统和方法
BRPI0805218A2 (pt) esquema de omissão de trava por hardware hìbrida de retirada prévia-posterior

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.