BR102013014996A2 - Carregamento de ciclo zero - Google Patents

Carregamento de ciclo zero Download PDF

Info

Publication number
BR102013014996A2
BR102013014996A2 BRBR102013014996-9A BR102013014996A BR102013014996A2 BR 102013014996 A2 BR102013014996 A2 BR 102013014996A2 BR 102013014996 A BR102013014996 A BR 102013014996A BR 102013014996 A2 BR102013014996 A2 BR 102013014996A2
Authority
BR
Brazil
Prior art keywords
instruction
register
given
rename
operand
Prior art date
Application number
BRBR102013014996-9A
Other languages
English (en)
Other versions
BR102013014996B1 (pt
Inventor
Gerard R Williams Iii
John H Mylius
Conrado Blasco-Allue
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 BR102013014996A2 publication Critical patent/BR102013014996A2/pt
Publication of BR102013014996B1 publication Critical patent/BR102013014996B1/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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

Carregamento de ciclo zero. A presente invenção refere-se a um sistema e a um método para reduzir a latência das operações de carregamento. Uma unidade de renomeação de registrador dentro de um processador determina se uma instrução de carregamento decodificada é elegível para a conversão em uma operação de carregamento de ciclo zero. Se sim, a lógica de controle designa um identificador de registrador físico associado a um operando de fonte de uma instrução de armazenamento dependente mais antiga para o operando de destino da instrução de carregamento. Adicionalmente, a unidade de renomeação de registrador marca a instrução de carregamento para impedir a mesma de ler os dados associados ao operando de fonte da instrução de armazenamento da memória. Devido à renomeação duplicada, esses dados podem ser encaminhados de um arquivo de registrador físico para as instruções que são mais novas e dependentes da instrução de carregamento.

Description

Relatório Descritivo da Patente de Invenção para "CARREGAMENTO DE CICLO ZERO".
Antecedentes da Invenção Campo da invenção Esta invenção refere-se a microprocessadores e, mais particularmente, à redução de modo eficiente da latência e energia de operações -de carregamento.
Descrição da Técnica Relevante Microprocessadores incluem tipicamente estágios de encaminhamento que se sobrepõem e instruções de execução fora de ordem. Adicionalmente, os microprocessadores podem sustentar multitransação simultânea para aumentar a produtividade. Essas técnicas tiram vantagem do paralelismo em nível de instrução (ILP) no código fonte. Durante cada ciclo de relógio, um microprocessador produz idealmente execução útil de um número máximo de N instruções por transação para cada estágio de um encaminhamento, em que N é um número inteiro maior que um. No entanto, dependências de controle e dependências de dados reduzem a produtividade máxima do microprocessador para abaixo de N instruções por ciclo. A execução especulativa de instruções é utilizada para realizar execução paralela de instruções apesar das dependências de controle no código fonte. Uma dependência de dados ocorre quando um operando de uma instrução depende de um resultado de uma instrução mais velha na ordem do programa. As dependências de dados podem aparecer ou entre operandos de instruções subsequentes em um segmento de código em linha reta ou entre operandos de instruções que pertencem a iterações de laço subsequentes. Em código de linha reta, pode-se encontrar dependências de ler depois de escrever (read after write - RAW), escrever depois de ler (write after read - WAR) ou escrever depois de escrever (write after write - WAW). A renomeação de registradores é utilizada para permitir execução paralela de instruções apesar das dependências WAR e WAW. No entanto, a verdadeira dependência, ou dependência RAW, ainda está intacta. Portanto, registradores de arquitetura utilizados repetidamente como um registrador de destino e subsequentemente como um registrador de fonte causa a seriali-zação de execução de instrução para segmentos de código fonte associados.
Um exemplo de uma dependência RAW comum com um registrador de arquitetura é uma instrução de carregamento ou uma operação de leitura, que tenta ler um local de memória que foi modificado por uma instru-- ção de armazenamento mais velha (na ordem do programa) que ainda não consolidou seus resultados no local de memória. Esse tipo de dependência RAW pode ocorrer frequentemente durante a execução de programa. A leitura do local de memória pode incluir uma latência apreciável e reduzir a produtividade do processador.
Em vista do que foi dito acima, métodos e mecanismos eficientes para reduzir de modo eficiente a latência de operações de carregamento são desejados.
Sumário de Modalidades Sistemas e métodos para reduzir de modo eficiente a latência de operações de carregamento. Em uma modalidade, um processador inclui uma unidade de renomeação de registradores que recebe instruções decodificadas e determina se uma dada instrução decodificada é qualificada para ser uma operação de carregamento de ciclo zero. Um exemplo de um quali-ficador por incluir uma dependência de memória prevista para uma dada instrução de carregamento em uma dada instrução de armazenamento. Além disso, um qualificador que pode incluir a detecção de suporte disponível e-xiste para manter uma contagem duplicada de mapeamentos para um dado número de registradores físicos. Se a determinação é verdadeira, a unidade de registradores de renomeação pode atribuir um número de registradores físicos associado a um operando de fonte da dada instrução de armazenamento ao operando de destino da dada instrução de carregamento.
Ainda, a lógica de controle na unidade de renomeação de registradores pode marcar a dada instrução de carregamento para impedir a mesma de ler dados associados ao operando de fonte da instrução de armazenamento a partir da memória. Devido à renomeação duplicada, esses dados podem ser encaminhados a partir de um arquivo de registrador físico para instruções que são mais novas (na ordem do programa) e que dependem da dada instrução de carregamento. Em um estágio de encaminhamento posterior, a dependência de memória prevista pode ser verificada. Se a dependência de memória estiver correta, então a dada instrução de carregamento pode ser considerada completa sem a leitura de dados de operan-- do a partir da memória (cache de dados) ou a partir do armazenamento temporário do armazenamento. Se a dependência de memória estiver incorreta, então a dada instrução de carregamento e instruções mais novas (na ordem do programa) podem ser liberadas do encaminhamento e repetidas.
Essas e outras modalidades serão apreciadas ainda mediante referência à descrição e aos desenhos a seguir.
Breve Descrição dos Desenhos A Figura 1 é um diagrama de blocos generalizado de uma modalidade de um sistema de computador. A Figura 2 é um diagrama de blocos generalizado de uma modalidade de um núcleo de processador que realiza a execução superescalar, fora de ordem com operações de carregamento de ciclo zero. A Figura 3 é um fluxograma generalizado de uma modalidade de um método para detectar operações de carregamento de ciclo zero. A Figura 4 é um fluxograma generalizado de uma modalidade de um método para processar operações de carregamento de ciclo zero. A Figura 5 é um fluxograma generalizado de uma modalidade de um método para consolidar instruções que incluem operações de carregamento de ciclo zero.
Embora a invenção seja suscetível a várias modificações e formas alternativas, modalidades específicas da mesma são mostradas a título de exemplo nos desenhos e serão descritas no presente documento em detalhe. Deve-se compreender, no entanto, que os desenhos e a descrição detalhada para a mesma não são destinados a limitar a invenção à forma particular revelada, pelo contrário, a intenção é abranger todas as modificações, equivalências e alternativas que se encontram no espírito e escopo da presente invenção conforme definido pelas reivindicações em anexo. Conforme utilizada por todo este pedido, a palavra "pode" é utilizada em um sentido permissivo (isto é, que significa ter o potencial de), ao invés do sentido mandatório (isto é, que significa deve). De modo similar, as palavras "incluir," "que inclui," e "inclui" significam incluir, mas sem limitação. Várias unidades, circuitos ou outros componentes podem ser - descritos como "configurado para" realizar uma tarefa ou tarefas. Em tais contextos, "configurado para" é uma recitação abrangente de estrutura que geralmente significa "que tem conjunto de circuitos que" realiza a tarefa ou as tarefas durante a operação. Como tal, a unidade/circuito/componente pode ser configurada para realizar a tarefa mesmo quando a unidade/circuito/componente não está presentemente ligada. Em geral, o conjunto de circuitos que forma a estrutura que corresponde a "configurado a" pode incluir circuitos de hardware. De modo similar, várias unida-des/circuitos/componentes podem ser descritas como realizando uma tarefa ou tarefas, para conveniência na descrição. Tais descrições devem ser interpretadas como incluindo a frase "configurado para". Recitar uma unidade/circuito/componente que é configurada para realizar uma ou mais tarefas é expressamente destinado a não invocar a interpretação do 35 U.S.C. § 112, parágrafo seis para aquela unidade/circuito/componente.
Descrição Detalhada Na descrição a seguir, numerosos detalhes específicos são a-presentados para fornecer uma compreensão completa da presente invenção. No entanto, aquele versado na técnica deve reconhecer que a invenção pode ser praticada sem esses detalhes específicos. Em algumas instâncias, circuitos, estruturas e tecnologias bem conhecidos não foram mostrados em detalhe para evitar obscurecer a presente invenção.
Referindo-se à Figura 1, um diagrama de blocos generalizado de uma modalidade de um sistema de computador 100 é mostrado. Conforme mostrado, o microprocessador 110 pode ser conectado a um ou mais dispositivos periféricos 150a a 150b, e memória de computador externa, tal como uma memória de disco 130 e memória de acesso aleatório dinâmica (DRAM) 140. A memória de disco 130 pode armazenar um sistema operacional (OS) para o sistema de computador 100. As instruções de um aplicativo de software podem ser carregadas no subsistema de memória de cache 116 no microprocessador 110. O aplicativo de software pode ter sido armazenado em uma ou mais dentre a memória de disco 130, a DRAM 140 e um dos dispositivos periféricos 150a a 150b.
Apesar de um único núcleo de processador ser mostrado, o microprocessador 110 pode incluir múltiplos núcleos de processador. Cada núcleo de processador pode ser conectado a um subsistema de memória de cache associado. Além disso, cada núcleo de processador pode compartilhar outro subsistema de memória de cache. Por exemplo, cada um dos múltiplos núcleos de processador pode utilizar um cache nível um (L1) e um cache nível dois (L2) e compartilhar adicionalmente um cache nível três (L3) com os outros núcleos de processador. Conforme mostrado, o núcleo de processador 112 pode carregar as instruções de aplicativo de software do subsistema de memória de cache 116 e processar as instruções. Falando de modo geral, quando programadores de software escrevem aplicativos para realizarem trabalho de acordo com um algoritmo ou um método, os programadores utilizam variáveis para se referir dados de resultado e temporários. Esses dados utilizam espaço alocado na memória do computador. O sistema operacional aloca regiões de memória para o aplicativo de software. O núcleo de processador 112 pode incluir múltiplos registradores físicos 114 em um arquivo de registrador físico. Os registradores físicos 114 podem incluir registradores visíveis de modo arquitetônico que um programador e/ou compilador de software podem identificar no aplicativo de software. Além disso, os registradores físicos 114 podem incluir registradores que não são de arquitetura (especulativos) identificados por identificadores de registrador renomeado. Os registradores visíveis de modo arquitetônico são associados a uma dada arquitetura de conjunto de instruções (ISA). Durante o processamento do aplicativo, os dados podem ser carregados a partir das regiões alocadas da memória no subsistema de memória de cache 116. Um ou mais dentre os registradores físicos 114 pode ser utilizado para carregar e armazenar os dados temporários e os dados de resultado. O hardware no núcleo de processador 112 inclui conjunto de circuitos para processamento de instruções de acordo com a dada ISA. O conjunto de circuitos do hardware inclui pelo menos um conjunto associado de registrado-res de arquitetura, unidades funcionais, elementos de preparo de encaminhamento e lógica de controle. A arquitetura de conjunto de instruções ARM -pode ser selecionada para a dada ISA. Alternativa mente, a Alpha, PowerPC, SPARC, MIPS, x86 ou qualquer outra ISA pode ser selecionada. A dada ISA pode ser utilizada para selecionar uma maneira para declarar e alocar regiões da memória. A dada ISA pode determinar ainda um modo de endereçamento selecionado utilizado para transferir dados entre o microprocessador 110, que inclui os registradores físicos 114 e locais de memória em uma ou mais dentre a memória de disco 130, a DRAM 140 e os dispositivos periféricos 150a a 150b. Tanto as instruções de armazenamento quanto de carregamento são tipicamente utilizadas para transferir dados entre a memória e o microprocessador 110 e entre o subsistema de memória de cache 116 e os registradores físicos 114. As linhas pontilhadas mostradas no sistema de computador 100 indicam exemplos das transferências de dados realizadas pelas operações de armazenamento e de carregamento. Uma latência apreciável pode ser associada a cada uma dessas transferências de dados.
Além das emissões fora de ordem de instruções para unidades de execução em uma microarquitetura superescalar, o núcleo de processador 112 pode realizar a renomeação de registradores para aumentar a produtividade. Com uso do hardware, o núcleo de processador 112 renomeia de modo dinâmico um identificador de registrador de arquitetura utilizado para um operando de destino. O operando de fontes com um mesmo identificador de registrador de arquitetura como o operando de destino pode ser renomeado com um mesmo identificador de registrador renomeado utilizado para o operando de destino.
Em uma modalidade, o núcleo de processador 112 inclui lógica de controle que detecta instruções de armazenamento em um estágio de encaminhamento inicial e armazena temporariamente pelo menos identificadores de operando de endereço associados. Os estágios de encaminhamento iniciais podem processar instruções em ordem, enquanto que as instruções podem ser emitidas e executadas fora de ordem em estágios de encaminhamento posteriores. Os operandos de endereço de uma dada instrução de armazenamento são utilizados em um estágio de encaminhamento de - execução posterior para gerar o endereço de armazenamento. Os operandos de endereço podem incluir um identificador de registrador de arquitetura (ID) utilizado como um ID de registrador de base e um valor mediato utilizado como uma compensação.
No estágio de encaminhamento inicial, a lógica de controle no núcleo de processador 112 pode monitorar instruções subsequentes para determinar se uma ou mais dessas instruções modificam um ou mais operandos de endereço para uma dada instrução de armazenamento. Por e-xemplo, o ID de operando de endereço pode corresponder aos IDs de operando de destino em uma ou mais instruções subsequentes. Esse monitoramento pode ocorrer em um estágio de encaminhamento anterior à emissão e à execução fora de ordem dos estágios de encaminhamento. A lógica de controle pode continuar a monitorar instruções subsequentes para a dada instrução de armazenamento até que uma entrada correspondente no arquivo de registrador físico seja desalocada. Essa entrada pode ser deslocada em resposta a um identificador de registrador renomeado associado ser removido de uma tabela de mapeamento e devolvido para uma lista livre. Por exemplo, uma instrução subsequente (na ordem do programa) para a instrução de armazenamento pode ter um identificador de operando de destino (identificador de registrador de arquitetura de destino) idêntico ao identificador de operando de fonte (identificador de registrador de arquitetura de fonte) da dada instrução de armazenamento. Quando a instrução subsequente se consolida, o identificador de registrador renomeado que foi previamente atribuído ao operando de destino da instrução subsequente é colocado na lista livre ao ser recusado por outra instrução. Esse identificador de registrador renomeado livre é um mesmo identificador utili- zado para o operando de fonte da dada instrução de armazenamento. Em resposta à detecção da condição acima, o monitoramento da dada instrução de armazenamento pode terminar. Detalhes adicionais e um exemplo serão fornecidos brevemente.
Em uma modalidade, durante o monitoramento, a lógica de controle pode determinar uma operação de carregamento subsequente que tem - operandos de endereço correspondentes, pois a dada instrução de armazenamento e esses operandos de endereço não foram modificados por instruções de intervenção. Além disso, a lógica de controle que não pode determinar nenhuma outra instrução de armazenamento com os mesmos operandos de endereço é localizada entre a dada instrução de armazenamento e a instrução de carregamento. Em outras palavras, a dada instrução de armazenamento é a instrução de armazenamento mais nova com os operandos de endereço. Em reposta a essa determinação, uma indicação de uma dependência RAW entre essa instrução de carregamento e a dada instrução de armazenamento pode ser estabelecida ou declarada. Em outra modalidade, informações adicionais, tais como pelo menos etiquetas de instrução e valores de contador de programa, podem ser comparadas ou utilizadas para indexar tabelas de previsão. A lógica de controle pode prever nesse estágio de encaminhamento inicial que uma dependência RAW existe entre essa instrução de carregamento e a dada instrução de armazenamento. Uma determinação ou uma previsão dessa dependência RAW pode ocorrer em um mesmo estágio de encaminhamento que a renomeação de registradores. Alternativa mente, a determinação ou a previsão podem ocorrer em um estágio de encaminhamento antes que um estágio utilizado para renomeação de registradores. Um exemplo dessa dependência RAW é fornecido aqui: ADICIONAR r7, r3, r5 ARMAZENAR [r10 + 4], r7 // Operandos de endereço são r10 e 4. MOVER r12, r16 CARREGAR r14, [r10 + 4] // Operandos de endereço são r10 e 4. SUBTRAIR r2, r6, r14 // Para r14, utilizar dados en- caminhados de // operando de fonte da operação de armazenamento, r7. ADICIONAR r11,r14,r13 II Para r14, utilizar dados en- caminhados de // operando de fonte da operação de armazenamento, r7.
Nesse exemplo, um operando de destino é listado primeiramente antes de um mnemônico de instrução seguido por um ou mais operandos de fonte. Os registradores utilizam a nomenclatura geral de "r" seguida por um identificador de registrador. Por exemplo, o registrador 7 é denotado por "r7". As instruções no exemplo acima são destinadas a ser um exemplo de pseu-docódigo e agnóstico de linguagem. Conforme pode ser visto acima, a instrução de carregamento tem os mesmos operandos de endereço que a instrução de armazenamento. Nenhuma instrução de intervenção modifica os operandos de endereço (r10). Assim, a lógica de controle pode determinar se a instrução de carregamento tem uma dependência RAW na instrução de armazenamento. Em outras modalidades, qualificações de previsão podem ser utilizadas, tais como etiquetas de instrução de comparação, que não são mostradas para facilitar a ilustração.
Em resposta à determinação ou à previsão da dependência RAW, o identificador de operando de destino (ID) (r14) da instrução de carregamento pode ser renomeado para um mesmo identificador de registrador renomeado utilizado para o operando de fonte ID (r7) da instrução de armazenamento. Por exemplo, se o operando de fonte ID (r7) da instrução de armazenamento é renomeado para um identificador de registrador renomeado P44, então o operando de destino ID (r14) da instrução de carregamento pode ser renomeado para o mesmo identificador (P44). De modo similar, o operando de fonte ID r14 para cada uma das instruções de subtração e a instrução de menos adição pode ser renomeada para o identificador de registrador renomeado (P44). A lógica de controle dentro do núcleo de processador 112 pode emitir fora de ordem a instrução de carregamento e instruções subsequentes. Nesse caso, cada uma das instruções de subtração e a última instrução de adição podem ser emitidas, durante ou brevemente depois da instrução de carregamento apesar de a instrução de carregamento não ter sido completada. Se o operando de fontes para os identificadores de registrador r6 e • r13 estiverem disponíveis, a instrução de subtração e a instrução de última adição podem ser emitidas antes de a instrução de carregamento ser emitida, quanto mais ser completada. Essas instruções podem ser emitidas com dados encaminhados do registrador de fonte de arquitetura ID r7, que é o operando de fonte ID para a instrução de armazenamento. Com o uso da renomeação de registradores, os dados a serem encaminhados podem ser armazenados no registrador físico identificado pelo identificador de registrador renomeado P44, que é associado ao registrador de arquitetura de fonte ID r7. Portanto, a instrução de carregamento se torna uma operação de ciclo zero. A instrução de carregamento pode completar sem acessar a memória, tal como uma hierarquia de cache de múltiplos níveis em chip e uma memória fora de chip.
Se as etapas acima forem realizadas e a instrução de carregamento for convertida para uma operação de ciclo zero, então a produtividade da instrução pode aumentar para o encaminhamento. A produtividade da instrução pode aumentar visto que as instruções que são mais jovens (na ordem do programa) e que dependem da instrução de carregamento não esperam pelos dados a serem recuperados para a instrução de carregamento a parir de um cache de dados, um armazenamento temporário do armazenamento ou uma memória fora de chip. De preferência, essas instruções mais jovens e dependentes podem receber os dados do arquivo de registrador físico. Antes de continuar com detalhes adicionais a respeito da conversão de instruções carregamento para operações de carregamento de ciclo zero, uma descrição adicional dos componentes no sistema de computador 100 é fornecida.
Além de incluir um ou mais núcleos de processador conectados a subsistemas de memória de cache correspondentes, o microprocessador 110 pode incluir também lógica de interface 118 e um controlador de memória 120. Outras lógicas e comunicações inter e intrablocos não são mostradas para facilitar a ilustração. A funcionalidade ilustrada do microprocessador 110 pode ser incorporada em um único circuito integrado. Em outra modalidade, a funcionalidade ilustrada é incorporada em um chipset em uma • placa mãe de um computador. Em algumas modalidades, o microprocessador 110 pode ser incluído em um computador de mesa ou um servidor. Em ainda outra modalidade, a funcionalidade ilustrada é incorporada a uma matriz semicondutora com outras matrizes de processador em um sistema-em-um-chip (SOC). O núcleo de processador 112 pode incluir conjunto de circuitos para executar as instruções de acordo com uma dada ISA conforme descrito anteriormente. Em uma modalidade, o núcleo de processador 112 pode incluir uma microarquitetura de multitransição superescalar utilizada para processar instruções de uma dada ISA. Em algumas modalidades, o núcleo de processador é um núcleo de processador de propósito geral. Em várias outras modalidades, o microprocessador 110 pode incluir um ou mais núcleos específicos, tais como processador digital de sinal (DSP), uma unidade de processamento gráfico (GPU), um circuito integrado de aplicação específica (ASIC) e assim por diante. O subsistema de memória de cache 116 pode reduzir latências de memória para o núcleo de processador 112. Uma taxa de erros reduzida alcançada pela memória adicional fornecida pelo subsistema de memória de cache 116 ajuda a esconder a lacuna de latência entre o núcleo de processador 112 e a memória fora de chip. Apesar de a latência entre o núcleo de processador 112 e o subsistema de memória de cache 116 ser menor que a latência para a memória fora de chip, essa latência pode ser reduzida ainda se a instrução de carregamento for convertida para uma operação de carregamento de ciclo zero conforme descrito anteriormente.
Se um erro de cache ocorre, tal como um bloco solicitado não ser encontrado no subsistema de memória de cache 116, então uma solici- tação de leitura pode ser gerada e transmitida para o controlador de memória 120. O controlador de memória 120 pode traduzir um endereço que corresponde ao bloco solicitado e enviar uma solicitação de leitura a DRAM fora de chip volátil 140 através do barramento da memória 122. O controlador de memória 120 pode incluir conjunto de circuitos de controle para fazer a interface com os canais de memória e seguir um protocolo correspondente. Adicionalmente, o controlador de memória 120 pode incluir filas de solicitações para enfileirar solicitações da memória. A DRAM fora de chip 140 pode ser preenchida com dados da memória de disco fora de chip 130. A memória de disco fora de chip 130 pode fornecer um armazenamento secundário de a-cesso aleatório e não volátil de dados. Em uma modalidade, a memória de disco fora de chip 130 pode incluir uma ou mais unidades de disco rígido (HDDs). Em outra modalidade, a memória de disco fora de chip 130 utiliza um Disco de Estado Sólido (SSD).
Apesar de somente dois dispositivos periféricos serem mostrados no sistema de computador 100 por propósitos ilustrativos, outro número de dispositivos periféricos pode ser conectado ao microprocessador 110. Um ou mais dos dispositivos periféricos 150a a 150b podem ser uma tela incluindo uma televisão moderna, um monitor de computador, um computador do tipo laptop ou um monitor de dispositivo móvel, e assim por diante. Um sub-sistema gráfico de vídeo pode ser utilizado entre a tela e o microprocessador 110. Um ou mais dentre os dispositivos periféricos 150a a 150b pode ser um dispositivo de entrada/saída tipicamente utilizado tal como um teclado, mouse, impressora, modem e assim por diante.
Referindo-se agora à Figura 2, um diagrama em bloco generalizado que ilustra uma modalidade de um núcleo de processador 200 que realiza execuções fora de ordem superescalares com operações de carregamento de ciclo zero é mostrado. O núcleo de processador 200 pode utilizar um encaminhamento de múltiplos estágios para processamento de instruções. Apesar de blocos de controle e funcionais serem mostrados em uma ordem particular e em um estágio de encaminhamento, outras combinações são possíveis e contempladas. Além disso, os blocos de controle e funcio- nais podem ocupar mais de um estágio de encaminhamento. Na maioria dos casos, um único estágio de encaminhamento é mostrado para cada bloco funcional para facilitar a ilustração.
Um cache de instruções (i-cache) 204 pode armazenar instruções para um aplicativo de software. Uma ou mais instruções indicadas por um endereço transmitido pela lógica de seleção de endereço 202 podem ser .obtidas no i-cache 204. Múltiplas instruções podem ser obtidas no i-cache 204 por ciclo de relógio se não há erros de i-cache. O endereço pode ser incrementado por um previsor de próxima obtenção 206. Um previsor de direção de ramificação 208 pode ser acoplado a cada previsor de próxima obtenção 206 e a lógica de avaliação de fluxo de controle 212 em um estágio de encaminhamento posterior. O previsor 208 pode prever informações de instruções que alteram o fluxo de uma corrente de instrução de executar uma próxima instrução sequencial. A unidade de decodificação 210 decodifica os códigos de operação das múltiplas instruções obtidas. Alternativamente, as instruções podem ser dividias em micro-operações. Conforme utilizados no presente documento, os termos "instruções", "micro-operações" e "operações" são intercambi-áveis conforme a invenção pode ser utilizada com uma arquitetura que utiliza qualquer implantação. Em uma modalidade, o bloco de avaliação de fluxo de controle 212 pode alterar a obtenção de instruções no seletor de endereço 202. Por exemplo, um valor de endereço absoluto associado a um código de operação de ramificação incondicional pode ser enviado ao seletor de endereço 202. A lógica de detecção de dependência de intragrupo de renome-ação 214 pode encontrar dependências entre instruções decodificadas pela unidade de decodificação 210. Um intragrupo de instruções pode incluir instruções decodificadas de um ou mais ciclos de relógio, ou estágios de encaminhamento. Dependências tais como escrever depois de ler (WAR), escrever depois de escrever (WAW) e ler depois de escrever (RAW) podem ser detectadas. Vetores de detecção que indicam dependências entre instruções podem ser gerados. A lógica de detecção de dependência pode incluir um detector de dependência de memória (MD) 216. Em algumas modalidades, o detector de MD 216 pode determinar a dependência de memórias de armazenamento para carregamento (STL). Nessas modalidades, uma tabela pode ser utilizada para armazenar um ID de registrador de base e um valor imediato (valor de compensação) utilizado como operandos de endereço para uma dada - instrução de armazenamento. Além disso, um ID de registrador de operando de fonte para a instrução de armazenamento pode ser armazenado. Para instruções mais novas (na ordem do programa), IDs de registrador de operando de destino, IDs de registrador de operando de endereço e valores i-mediatos podem ser comparados a valores armazenados na tabela. O detector de MD 216 pode indicar se uma dependência de memória de STL e-xiste entre uma instrução de carregamento mais nova e a dada instrução de armazenamento em resposta à determinação de que certas condições são satisfeitas. Uma condição pode ser que a instrução de carregamento mais nova tenha um ID de registrador de operando de endereço e um valor imediato de operando de endereço que correspondam a valores de operando de endereço para a instrução de armazenamento. Uma segunda condição pode ser que seja determinado que nenhuma instrução de intervenção modifique os valores armazenados na tabela para a dada instrução de armazenamento. Uma terceira condição pode ser que a instrução de armazenamento seja determinada a ser a instrução de armazenamento mais nova que é mais velha que a instrução de carregamento com os operandos de endereço correspondentes. O detector de MD 216 pode armazenar uma indicação de que uma dependência RAW exista entre a instrução de carregamento e a dada instrução de armazenamento.
Adicionalmente, o detector de MD 216 pode enviar uma indicação à unidade de renomeação de registradores 220 para renomear o ID de registrador de operando de destino da instrução de carregamento com um mesmo identificador de registrador renomeado utilizado para o ID de registrador de operando de fonte da dada instrução de armazenamento. Em outras modalidades, um compilador pode analisar códigos e realizar as etapas descritas acima. Se o compilador determina que uma dependência RAW existe entre a instrução de carregamento mais nova e a dada instrução de armazenamento, então o compilador pode inserir uma indicação no código de programa a ser detectado por pelo menos o detector de MD 216. As informações podem incluir um bit declarado e o ID de registrador de operando de fonte da dada instrução de armazenamento. Alternativamente, as infor-- mações podem incluir um bit declarado e uma compensação de contador de programa (PC) utilizados para identificar a dada instrução de armazenamento. Outras informações podem ser utilizadas.
Em ainda outras modalidades, o detector de MD 216 pode incluir um previsor para dependência de memórias de STL. Em tais modalidades, o detector de MD 216 pode indexar uma ou mais tabelas com pelo menos valores de contador de programa (PC) associados a instruções de armazenamento e carga. Etiquetas de endereço parciais e outras informações identifi-cadoras de instrução podem ser utilizadas também para indexar as tabelas. Uma saída de uma função de escrutínio pode ser utilizada para indexar tabelas de previsão, que armazenam contadores de saturação ou outras informações de previsão. Em algumas modalidades, o detector de MD 216 pode determinar se esses operandos de endereço não foram modificados por instruções de intervenção. Em outras modalidades, o detector de MD 216 pode permitir lógica de correção, tal como os contadores de saturação, seja responsável por previsões erradas. As informações lidas das tabelas podem ser utilizadas para identificar dependências especuladas. Em resposta à determinação de uma dependência de memória de RAW especulativa, o detector de MD 216 pode armazenar uma indicação de que uma dependência RAW existe entre uma dada instrução de armazenamento e uma instrução de carregamento subsequente dada. Adicionalmente, o detector de MD 216 pode enviar uma indicação à unidade de renomeação de registradores 220 para renomear o ID de registrador de operando de destino da instrução de carregamento com o mesmo identificador de registrador renomeado utilizado para o ID de registrador de operando de fonte da dada instrução de armazenamento. Em modalidades adicionais, uma combinação dos métodos e meca- nismos acima para encontrar dependências de memória de STL pode ser utilizada. O mapeador 218 pode dividir instruções dentre recursos de hardware distribuídos com uso de fatores tais como concorrência disponível, criticidade de cadeias de dependência e penalidades de comunicação. Quando o hardware renomeia um identificador de registrador de arquitetura - com um identificador de registrador físico, o hardware armazena o mapeamento no mapeador 218, que pode ser uma estrutura de dados, tal como uma tabela de mapeamento. Conforme utilizado no presente documento, um identificador ou um registrador de arquitetura ou um registrador físico pode ser referido também como um número. Portanto, um identificador de registrador de arquitetura pode ser referido como um número de registrador de arquitetura. De modo similar, um identificador de registrador físico pode ser referido como um número de registrador físico. O número do registrador físico utilizado para renomear um número do registrador de arquitetura pode ser referido também como um número de registrador de renomeação. A unidade de renomeação de registradores 220 pode incluir matriz e lógica de controle de nomeação 222 e uma matriz de duplicação de registrador (RDA) 224. A unidade de renomeação de registradores 220 pode determinar quais identificadores de registrador físico utilizar para renomear identificadores de registrador de arquitetura utilizados em operandos tanto de destino quanto de fonte nas instruções. A unidade de renomeação de registradores pode selecionar identificadores de registrador físico candidatos a partir do alocador de lista livre 230 ou uma tabela de mapeamento de renomeação na lógica de controle renomeação 222. Em várias modalidades, a RDA 224 é configurada para armazenar uma indicação de mapeamentos duplicados. Os mapeamentos duplicados podem ser utilizados durante a conversão de uma operação de carregamento em uma operação de carregamento de ciclo zero. A unidade de renomeação de registradores 220 pode receber uma indicação do detector de MD 216 que uma instrução de carregamento é qualificada para ser convertida em uma operação de carregamento de ciclo zero. A unidade de renomeação de registradores 220 pode designar o ID de registrador de operando de destino da instrução de carregamento a um mesmo identificador de registrador de renomeação utilizado para o ID de registrador de operando de fonte de uma instrução de armazenamento de que a operação de carregamento é dependente. O mapeador 218 pode armazenar os mapeamentos múltiplos para o identificador de registrador re-• nomeação. Adicionalmente, a RDA 224 pode armazenar uma contagem duplicada para o identificador de registrador de renomeação. Por exemplo, no exemplo de código anterior, o identificador de registrador de renomeação P44 pode ser utilizado tanto para o ID de registrador de operando de fonte (r7) da instrução de armazenamento quanto para o ID de registrador de operando de destino (r14) da instrução de carregamento. Essa contagem duplicada pode incluir o número de vezes que qualquer dado identificador de registrador de arquitetura foi mapeado para o mesmo identificador de registrador de renomeação.
Em várias modalidades, a contagem duplicada pode não ser incrementada para um mapeamento quando um registrador de arquitetura particular já foi mapeado para o número de registrador de renomeação no momento do mapeamento. A RDA 224 pode armazenar tanto o número de registrador de renomeação quanto a contagem duplicada associada. Em uma modalidade, a RDA pode ser implantada como uma estrutura totalmente associativa etiquetada relativamente pequena. A RDA 224 pode ter qualquer número de entradas para armazenar um número de registrador de renomeação e uma contagem duplicada associada. Em um exemplo, uma implantação de uma ISA pode incluir 144 números de registradores físicos, e assim, um índice de registrador físico de 8-bit pode ser armazenado em uma entrada da RDA e utilizado para acessar a RDA. Em uma modalidade, cada tamanho de contagem duplicada é 5 bits. Portanto, um número máximo de duplicações para um dado número de registrador físico é 31. No entanto, outro tamanho de contagem duplicada pode ser possível e escolhido.
A RDA 224 pode ser atualizada antes no momento da expedição da instrução no encaminhamento do processador. Quando o detector de MD 216 determina que uma instrução de carregamento decodificada é uma operação de carregamento de ciclo zero, a RDA 224 pode ser acessada para determinar se uma entrada já existe para o número de registrador físico a ser utilizada para renomear cada um dentre o ID de registrador de operando de fonte de uma instrução de armazenamento associada e o ID de registrador de operando de destino da instrução de carregamento. Se uma entrada • existe, então a contagem duplicada associada pode ser incrementada cada vez que qualquer dado ID de registrador de arquitetura presentemente não mapeado para o dado número de registrador de renomeação é mapeado para o dado número de registrador de renomeação. Se uma entrada não existe na RDA, então uma entrada pode ser alocada e a contagem duplicada associada pode ser iniciada em duas. A RDA 224 pode ser atualizada também durante um estágio de encaminhamento de consolidação no encaminhamento do processador. A contagem duplicada pode ser diminuída cada vez que o identificador do registrador físico estiver pronto para retornar para lista livre para qualquer dado registrador de arquitetura durante uma consolidação de instrução. O identificador de registrador físico pode ser referido também como o identificador de registrador de renomeação. Um identificador de registrador físico que pode ser um candidato para retornar para a lista livre em resposta a uma entrada na tabela de mapeamento associada ao identificador de registrador físico é removido ou invalidado devido à consolidação de instrução. Em uma modalidade, em resposta à diminuição da contagem duplicada para uma, a contagem duplicada e os mapeamentos duplicados não podem mais ser armazenados.
Em uma modalidade, em resposta a um dado identificador de registrador de renomeação, um candidato retorna para lista livre durante uma consolidação de instrução associada, e nenhuma informação duplicada associada é armazenada na RDA 224, o identificador de registrador de renomeação é devolvido para a lista livre. Em outra modalidade, em resposta a um dado identificador de registrador de renomeação, um candidato retorna à listra livre e a contagem duplicada armazenada na RDA 224 é diminuída de uma para zero, o identificador de registrador de renomeação retorna à lista livre.
Em uma modalidade, em resposta a um identificador de registrador de renomeação dado ser um candidato a retornar para a lista livre e a contagem duplicada armazenada ser ainda maior que um após ser diminuída, o identificador de registrador de renomeação não é retornado para a lista ■ livre. O identificador de registrador de renomeação tem ainda mapeamentos duplicados para múltiplos registradores de arquitetura nesse último caso. Em uma modalidade, o RDA 224 é verificado para cada candidato de carregamento de ciclo zero potencial garantir que há uma entrada livre para rastrear uma duplicata. Se não houver uma entrada livre para a alocação dentro do RDA 224, então uma instrução de carregamento correspondente não é convertida em uma operação de carregamento de ciclo zero. Similarmente, se uma entrada alocada existir para o candidato de carregamento de ciclo zero, mas a contagem duplicada já estiver saturada, então a instrução de carregamento não é convertida em uma operação de carregamento de ciclo zero.
Para uma operação de carregamento de ciclo zero, os conteúdos de dados podem ser encaminhados de um registrador físico dentro do arquivo de registrador físico que armazena os dados para a instrução de armazenamento operando de fonte para a instrução de carregamento subsequente e para outras instruções mais novas, dependentes. Os dados podem não ser lidos a partir de um armazenamento intermediário de provisão de dados, um armazenamento temporário do armazenamento ou memória fora de chip. As instruções mais novas, dependentes podem emitir sem esperar os dados a serem lidos a partir do armazenamento intermediário de provisão de dados, do armazenamento temporário do armazenamento ou da memória fora de chip.
Após as instruções terem sido decodificadas e renomeadas, as entradas associadas podem ser alocadas na fila de expedição 240. As instruções e os identificadores renomeados associados, os valores de contagem de programa (PC), os vetores de dependência, as marcações para conclusão e assim por diante podem ser enviados para a fila de expedição 240 e posteriormente para o programador 250. Várias exceções podem ser detectadas, tal como pelo núcleo de execução 260. Os exemplos incluem exceções para acessos de memória, nenhuma tradução de endereço e assim por diante. As exceções podem fazer com que uma rotina de manipulação de exceção correspondente seja executada, tal como pelo microcódigo 242. O programador 250 pode programar as instruções para a execu-• ção no núcleo de execução 260. Quando os operandos estão disponíveis e os recursos de hardware também estão disponíveis, uma instrução pode ser emitida fora de ordem a partir do programador 250 para uma das unidades funcionais dentro do núcleo de execução 260. O programador 250 pode ser seus operandos de fonte do arquivo de registrador físico (não mostrado) a-pós traduzir identificadores renomeados com uma tabela de mapeamento ou a partir da lógica de desvio de operando. Os operandos de fonte podem ser fornecidos ao núcleo de execução 260. O núcleo de execução 260 pode determinar endereços para carregamento e instruções de armazenamento. A-dicionalmente, o núcleo de execução 260 pode realizar um ou mais dentre operações booleanas, ponto flutuante e número inteiro múltiplo. O núcleo de execução 260 pode incluir uma unidade de carre-gamento/armazenamento. A unidade de carregamento/armazenamento pode ser conectada a um armazenamento intermediário de provisão de dados (não mostrado) e ao armazenamento temporário do armazenamento 272 ou diretamente ou através do armazenamento temporário de reordenação (rob) 270. O processador 200 pode incluir um armazenamento temporário de tradução à parte (TLB) para cada um dentre o armazenamento intermediário de provisão i 204 e o armazenamento intermediário de provisão de dados para impedir um custo de realizar uma tradução de memória completa ao realizar um acesso de armazenamento intermediário de provisão. O armazenamento temporário do armazenamento 272 pode armazenar endereços que correspondem às instruções de armazenamento. O rob 270 pode receber resultados do núcleo de execução 260. Adicionalmente, os resultados podem ser desviados para estágios de encaminhamento anteriores para o encaminhamento de dados para instruções dependentes já no encaminhamento. O rob 270 pode garantir a desativação e a consolidação em ordem das instruções.
Referindo-se agora à Figura 3, um fluxograma generalizado de uma modalidade de um método 300 para detectar a operação de carregamento de ciclo zero é mostrado. No bloco 302, as instruções de programa são processadas. As instruções podem ser compiladas, extraídas da memória, decodificadas e executadas. Após a decodificação, se uma instrução - dada for detectada como sendo uma instrução de armazenamento (bloco condicional 304), então no bloco 306, pelo menos o ID de registrador de base de operando de endereço, o valor imediato de operando de endereço e o ID de registrador de operando de fonte da instrução de armazenamento são armazenados temporariamente. Esses valores podem ser armazenados em uma dada tabela. Um contador do programa associado (PC) e outras informações podem também ser armazenados temporariamente. Em uma modalidade, essas informações são armazenadas temporariamente em uma tabela dentro do detector de dependência de memória (MD).
No bloco 308, as informações das instruções subsequentes (na ordem de programa) são monitoradas para compatibilidades potenciais com as informações armazenadas temporariamente para as instruções de armazenamento anteriores (na ordem de programa). As informações para comparações podem incluir pelo menos o ID de registrador de operando de destinos das instruções subsequentes e o ID de registrador de base de operando de endereço e o valor imediato das instruções de carregamento subsequentes. A lógica de controle pode detectar uma compatibilidade entre um ID de registrador associado a uma instrução de armazenamento dada e um ID de registrador associado a uma instrução subsequente. Os IDs de registrador podem ser os IDs de registrador de arquitetura usados para operandos de identificação.
Uma modificação de um registrador de base de operando de endereço da instrução de armazenamento pode ser uma atualização com base no valor imediato. Com o uso do exemplo de código anterior, uma instrução de adição pode seguir (na ordem de programa) a instrução de armazenamento, tal como ADD r10, r10, #4. O símbolo "#" pode ser usado para indicar um operando de dados de valor imediato. O registrador de base de operando de endereço r10 da instrução de armazenamento é modificado. Entretanto, é uma modificação com base no valor imediato. Se nenhum tipo de modificação for feito ao registrador de base de operando de endereço r10 diferente da modificação com base no valor imediato pela instrução de intervenção entre a instrução de carregamento e a instrução de armazenamento, então ■ um ajuste pode ser realizado com a tabela para considerar a modificação com base no valor imediato. Se um registrador de base de operando de endereço de uma dada instrução de armazenamento for detectado como sendo modificado (bloco condicional 310) e a modificação tem base em uma atualização de valor imediato (bloco condicional 311), então no bloco 313, os valores armazenados particulares na tabela para a instrução de armazenamento dada são atualizados. Por exemplo, o valor imediato de operando de endereço armazenado pode ser atualizado. Com o uso do exemplo acima, o valor imediato armazenado de 4 dentro da tabela para a dada instrução de armazenamento pode ser diminuído dentro da tabela por 4, que é o valor imediato usado pela instrução ADD. Em outros exemplos, o registrador de base de operando de endereço pode ser diminuído, ao invés de aumentado e o valor imediato armazenado dentro da tabela pode ser aumentado consequentemente. Se a modificação não tiver base em uma atualização de valor imediato (bloco condicional 311), então no bloco 312, a entrada de tabela que armazena os valores correspondentes à instrução de armazenamento dada pode ser invalidada. Posteriormente, o fluxo de controle do método 300 pode retornar ao bloco 302 através do bloco A.
Se o operando de fonte da dada instrução de armazenamento for detectado como sendo modificado (bloco condicional 314) e a instrução de armazenamento tiver sido desativada (bloco condicional 316), então o fluxo de controle do método 300 se move para o bloco 312. Para ilustrar esse caso, outro exemplo de código de uma dependência de memória com modificação do operando de fonte da instrução de armazenamento e de uma condição de corrida é fornecido aqui: ADICIONAR r7, r3, r5 ARMAZENAR [r10 + 4], r7 // Os operandos de endereço são r10 e 4. ADICIONAR r19, r24, r18 ADICIONAR r7, r20, r21 //O operando de fonte de operação de armazenamento é CARREGAR // modificado. r14, [r10 +4] // Os operandos de endereço são r10 e 4. SUBTRAIR r2, r6, r14 // Para r14, usar os dados encaminha- dos a partir do // operando de fonte da operação de armazenamento, r7. ADICIONAR r7, r14, r13 // Para r14, usar os dados encaminha- dos a partir do // operando de fonte da operação de armazenamento, r7. ADICIONAR r14, r22, r25 // O operando de destino de operação de armazenamento é // substituído. Durante o estágio de consolidação, // retornar o número de registrador físico // compartilhado por r7 e r14 para a lista livre.
Similar ao exemplo de código anterior, no exemplo acima, a instrução de carregamento tem uma dependência de memória na instrução de armazenamento. Nesse caso, a terceira instrução de adição modifica o operando de fonte (r7) da instrução de armazenamento. Pode haver uma condição de corrida no encaminhamento entre a instrução de carregamento que marca o identificador de registrador renomeado associado ao operando de fonte (r7) como uma duplicata e a terceira instrução de adição que consolida e faz com que o mesmo identificador de registrador de renomeação retorna para a lista livre. No momento em que a instrução de carregamento marca esse identificador de registrador de renomeação como uma duplicata, o i-dentificador de registrador de renomeação pode já estar em um arquivo de histórico em direção à lista livre.
Uma opção para manipular o caso acima é detectar uma instrução de intervenção, tal como a terceira instrução de adição, modificar o operando de fonte da instrução de armazenamento e, em resposta, desqualificar a instrução de carregamento de ser convertida em uma operação de carregamento de ciclo zero. Outra opção para manipular o caso acima é detectar que uma instrução de intervenção modifica o operando de fonte da instrução de armazenamento e, em resposta, determinar se a instrução de armazenamento foi desativada. Se a instrução de armazenamento não tiver sido desativada, então a instrução de intervenção não foi desativada. Portanto, a instrução de intervenção ainda não fez com que o identificador de registrador de renomeação associado ao operando de fonte da instrução de armazenamento fosse retornado para a lista livre. Uma contagem duplicada desse i-dentificador de registrador de renomeação pode ser agora mantida. Similarmente, uma contagem duplicada pode ser aumentada para o operando de destino (r14) da instrução de carregamento devido à última instrução de adição no exemplo de código acima.
Retornando ao método 300, se o operando de fonte da instrução de armazenamento dada for detectado como sendo modificado (bloco condicional 314) e a instrução de armazenamento não tiver sido desativada (bloco condicional 316), então é determinado se uma instrução de carregamento pode ter uma dependência de memória na instrução de armazenamento dada. Similarmente, se o operando de fonte da dada instrução de armazenamento não for detectado como sendo modificado (bloco condicional 314), então é determinado se uma instrução de carregamento pode ter uma dependência de memória na instrução de armazenamento dada. Nota-se que, em algumas modalidades, cada um dos blocos condicionais 310, 314 e 318 pode ser avaliado ao mesmo tempo. Por exemplo, a lógica de controle e as tabelas podem receber admissões associadas às instruções subsequentes ao mesmo tempo.
Em uma modalidade, um detector de dependência de memória (MD) é acessado com as informações associadas à instrução de carregamento. Conforme descrito anteriormente, o detector MD pode incluir uma - tabela que contém informações para instruções de armazenamento particulares a serem comparadas com as instruções subsequentes. Alternativamente, o detector MD pode incluir a lógica de controle para detectar informações de dica a partir do compilador. O detector MD pode também incluir o previsor STL. Ademais, o detector MD pode incluir uma combinação dessas escolhas de projeto alternativo. Em resposta a acessar o detector MD, tanto a lógica de controle quanto a(s) tabela(s) que armazena(m) valores para a dada instrução de armazenamento e outras instruções de armazenamento podem gerar um resultado que indica que uma dependência de memória existe entre a instrução de carregamento e a instrução de armazenamento dada. Por exemplo, em uma modalidade, o ID de registrador de base de operando de endereço e o valor imediato para cada uma dentre instrução de carregamento e a dada instrução de armazenamento podem coincidir. Adicionalmente, a instrução de armazenamento pode ser determinada como sendo a instrução de armazenamento mais nova que é mais antiga que a instrução de carregamento com os operandos de endereço compatíveis. Se uma instrução de carregamento é determinada como sendo dependente da instrução de armazenamento dada (bloco condicional 318), então, no bloco 320, a instrução de carregamento pode ser processada como uma instrução de carregamento de ciclo zero. Depois, os detalhes adicionais do processamento de uma instrução de carregamento de ciclo zero são fornecidos.
Referindo-se agora à Figura 4, um fluxograma generalizado de uma modalidade de um método 400 para processar a operação de carregamento de ciclo zero é mostrado. No bloco 402, uma instrução de carregamento dada pode ser determinada como sendo dependente de uma instrução de armazenamento mais antiga (na ordem de programa). A dada instru- ção de carregamento pode se qualificar para ser convertida em uma instrução de carregamento de ciclo zero. Conforme descrito anteriormente, uma condição pode ser que a instrução de carregamento mais nova tenha um ID de registrador de operando de endereço e um valor intermediário de operando de endereço que coincide com os valores de operando de endereço para a instrução de armazenamento. Uma segunda condição pode ser que seja • determinado que nenhuma instrução de intervenção modifica os valores, tais como os operandos de endereço e o operando de fonte, armazenados em uma tabela acessada para a instrução de armazenamento dada. Uma terceira condição pode ser a instrução de armazenamento que é determinada como sendo a instrução de armazenamento mais nova que é mais antiga que a instrução de carregamento com os operandos de endereço compatíveis. Uma quarta condição pode ser uma indicação de recursos de duplicação disponíveis. Por exemplo, o número de registrador de renomeação para o ID de registrador de operando de fonte da instrução de armazenamento pode ser usado para índice em uma estrutura de dados tal como o RDA 224. Em outras modalidades, um previsor de dependência de memória STL e/ou informações de dica do compilador podem ser usados para indicar a dependência RAW entre a instrução de carregamento e a dada instrução de armazenamento.
Um acerto no RDA 224 pode indicar que o identificador de registrador renomeado de fonte já está duplicado. Um erro pode indicar que o identificador de registrador de renomeação de fonte ainda não está duplicado. Se o identificador de registrador renomeado de fonte ainda não estiver duplicado e o RDA 224 ainda não estivar completo, então uma entrada no RDA 224 pode ser alocada para o identificador de registrador renomeado de fonte. Se o identificador de registrador renomeado de fonte já estiver duplicado, então uma contagem duplicada para o identificador de registrador renomeado de fonte pode ser comparada a um limite dado. Em uma modalidade, o limite pode corresponder a uma contagem particular. Se uma contagem duplicada associada não tiver alcançado o limite, então recursos duplicados estão disponíveis. Se a contagem duplicada associada tiver alcança- do o limite, então recursos duplicados estão indisponíveis.
Se os recursos duplicados estiverem indisponíveis (bloco condicional 404), então no bloco 406, o registrador de arquitetura de destino para a instrução de carregamento é renomeado com um identificador de registrador de renomeação da lista livre. O identificador renomeado, um valor de contador do programa associado (PC), vetores de dependência e assim por -diante podem ser enviados para uma fila de expedição e posteriormente para um programador. No bloco 408, uma próxima instrução disponível pode ser processada. A próxima instrução disponível pode ser processada em paralelo com as etapas acima ou em um ciclo de relógio subsequente.
Se os recursos duplicados estiverem indisponíveis (bloco condicional 404), então, no bloco 410, o identificador de operando de destino (ID) da instrução de carregamento é renomeado com um ID de registrador renomeado usado para o operando de fonte da mais nova instrução de armazenamento dependente mais antiga. No bloco 412, uma contagem de duplicação para os registradores físicos é atualizada. A contagem duplicada pode ser aumentada cada vez que um identificador de registrador de arquitetura dado atualmente não mapeado para o identificador de registrador de renomeação selecionado for mapeado para esse identificador de registrador de renomeação. Em uma modalidade, a contagem duplicada pode ser iniciali-zada com um valor de dois.
Os identificadores renomeados para a instrução de carregamento e uma ou mais outras instruções podem ser enviados para uma fila de expedição e posteriormente para um programador. Os valores de contador do programa (PC) associados, os vetores de dependência e assim por diante podem também ser enviados. Em uma modalidade, a dependência RAW é considerada exata e a instrução de carregamento pode ser marcada como completa. Por exemplo, o acesso da tabela no detector MD conforme descrito no método 300 pode ser considerado como não tendo nenhuma incerteza e, portanto, a instrução de carregamento não é processada adicionalmente por estágios de encaminhamento posteriores. Em outras modalidades, a dependência RAW entre o carregamento e as instruções de armazenamento não é considerada como não tendo nenhuma incerteza. Portanto, a instrução de carregamento não é marcada como completa e é processada adicionalmente por estágios de encaminhamento posteriores. No bloco 414, uma ou mais instruções que incluem a instrução de carregamento quando não marcadas como completas são emitidas no encaminhamento. No bloco 416, a dependência de memória entre a instrução de armazenamento e a instrução ■ de carregamento pode ser verificada. Por exemplo, um acesso em um armazenamento temporário do armazenamento com um endereço determinado e outras informações de identificação de instrução pode ser realizado.
Se a dependência de memória for revelada como sendo incorreta (bloco condicional 418), então, no bloco 420 a instrução de carregamento e as instruções mais novas (na ordem de programa) que a instrução de carregamento podem ser liberadas do encaminhamento. A instrução de carregamento pode então ser reproduzida novamente. Se a dependência de memória prevista for revelada como sendo correta (bloco condicional 418), então no bloco 422 a instrução de carregamento procede no encaminhamento para o estágio de encaminhamento de consolidação sem ler os dados associados ao operando de fonte da hierarquia de armazenamento intermediário de provisão em chip, armazenamento temporário do armazenamento ou memória fora de chip. As instruções mais novas dependentes da instrução de carregamento podem continuar com os dados encaminhados recebidos a partir do arquivo de registrador físico associado ao operando de fonte da instrução de armazenamento correspondente.
Referindo-se agora à Figura 5, um fluxograma generalizado de uma modalidade de um método 500 para consolidar as instruções que incluem a operação de carregamento de ciclo zero é mostrado. Para propósitos de discussão, as etapas nessa modalidade e modalidades subsequentes dos métodos 300 e 400 descritos anteriormente são mostradas em ordem sequencial. Entretanto, em outras modalidades, algumas etapas podem o-correr em uma ordem diferente da mostrada, algumas etapas podem ser realizadas concomitantemente, algumas etapas podem ser combinadas com outras etapas e algumas etapas podem ser ausentadas.
No bloco 502, as instruções de programa estão sendo consolidadas Uma janela em ordem de instruções dentro de uma estrutura de dados pode ser usada para determinar quando consolidar e desativar instruções. Por exemplo, o rob 270 pode ser usado como a estrutura de dados. Quando as instruções de memória são detectadas para consolidação, uma verificação pode ser realizada para determinar se os identificadores de regis-■trador de renomeação associados são duplicados. Em um exemplo, um sina-lizador ou campo duplicado associado que indica que um estado de duplicação para cada um dentre o destino e os registradores físicos de fonte pode ser armazenado com outras informações associadas para a instrução. Em outro exemplo, cada um dentre o destino e o identificador de registrador de renomeação de fonte pode ser usado para índice em uma estrutura de dados tal como o RDA 224. Um acerto pode indicar que um identificador de registrador de renomeação correspondente já está duplicado. Um erro pode indicar que o identificador de registrador de renomeação correspondente ainda não está duplicado.
Se um dado identificador de registrador de renomeação não estiver duplicado (bloco condicional 504), então, no bloco 506, o identificador de registrador de renomeação é retornado para a lista livre. De outra maneira, no bloco 508, uma contagem duplicada para o identificador de registrador de renomeação correspondente pode ser diminuída. Geralmente, uma contagem duplicada é diminuída cada vez que um identificador de registrador de renomeação associado estiver pronto para retornar para a lista livre para qualquer registrador de arquitetura dado. Um identificador de registrador de renomeação pode ser determinado como estando pronto para retornar para a listra livre em resposta a um mapeamento ser removido da tabela de mapeamento. Tipicamente, um identificador de registrador de renomeação é retornado para a listra livre em resposta a um mapeamento ser removido da tabela de mapeamento. Entretanto, com mapeamento duplicados na tabela de mapeamento devido às operações de carregamento de ciclo zero, uma estrutura de dados, tal como o RDA 224, pode ser inspecionada antes de qualquer retomo para a lista livre.
Após a contagem duplicada ser diminuída, se o identificador de registrador de renomeação ainda estiver duplicado (bloco condicional 510), então, no bloco 512, o identificador de registrador de renomeação pode ser marcado como ainda duplicado e não é retornado para a lista livre. Por e-xemplo, uma entrada válida em uma estrutura de dados, tal como o RDA 224, pode ainda estar presente com uma contagem duplicada maior que um.
Após a contagem duplicada ser diminuída, se o identificador de registrador de renomeação não estiver ainda duplicado (bloco condicional 510), então, no bloco 514, o identificador de registrador de renomeação pode ser marcado como mapeado, mas não duplicado. Por exemplo, uma entrada associada em uma estrutura de dados, tal como o RDA 224, pode ser invalidada. Alternativamente, uma entrada válida pode ainda estar presente com uma contagem duplicada de um. O identificador de registrador de renomeação não é retornado para a lista livre.
Embora as modalidades acima tenham sido descritas em detalhes consideráveis, várias variações e modificações se tornarão aparentes aos versados na técnica uma vez que a revelação acima for completamente apreciada. Pretende-se que as seguintes reivindicações sejam interpretadas para abranger todas tais variações e modificações.

Claims (20)

1. Processador que compreende: um detector de dependência de memória configurado para determinar uma dependência de memória para uma dada instrução de carregamento em uma dada instrução de armazenamento; e uma unidade de renomeação de registrador; em que em resposta a receber uma indicação da dependência de memória determinada e determinar que as condições de qualificação são satisfeitas, a unidade de renomeação de registrador é configurada para: designar um identificador de registrador de renomeação (ID) associado a um ID de registrador de operando de fonte da dada instrução de armazenamento para um ID de registrador de operando de destino da dada instrução de carregamento; e impedir a dada instrução de carregamento de ler os dados associados ao operando de fonte da memória.
2. Processador, de acordo com a reivindicação 1, em que para impedir a dada instrução de carregamento de ler os dados associados ao operando de fonte da memória, a unidade de renomeação de registrador é configurada para indicar que a dada instrução de carregamento deve ser concluída após pelo menos um dos seguintes: a dependência de memória ser determinada e a dependência de memória ser verificada como correta.
3. Processador, de acordo com a reivindicação 2, em que em resposta à designação do ID de registrador de renomeação ao ID de registrador de operando de destino da dada instrução de carregamento, a unidade de renomeação de registrador é configurada adicionalmente para armazenar uma contagem duplicada associada ao ID de registrador de renomeação.
4. Processador, de acordo com a reivindicação 3, em que determinar que as condições de qualificação sejam satisfeitas compreende pelo menos determinar que: uma instrução entre a dada instrução de armazenamento e a dada instrução de carregamento em ordem de programa tem um ID de re- gistrador de operando de destino igual ao ID de registrador de operando de fonte da dada instrução de armazenamento; e a dada instrução de armazenamento ainda não foi desativada.
5. Processador, de acordo com a reivindicação 3, em que a unidade de renomeação de registrador é configurada adicionalmente para: detectar que uma instrução com um ID de registrador de ope-• rando de destino designado ao ID de renomeação de registrador está pronta para consolidar; e impedir o ID de registrador de renomeação de retornar a uma lista livre, em resposta à determinação de que o ID de registrador de renomeação é duplicado.
6. Processador, de acordo com a reivindicação 5, em que a instrução é pelo menos uma das seguintes: a dada instrução de carregamento, a dada instrução de armazenamento e uma instrução que está entre a dada instrução de carregamento e a dada instrução de armazenamento na ordem de programa.
7. Processador, de acordo com a reivindicação 5, em que a unidade de renomeação de registrador é configurada adicionalmente para aumentar a contagem duplicada cada vez que um ID de registrador de arquitetura atualmente não mapeado ao ID de registrador de renomeação é mapeado ao ID de registrador de renomeação.
8. Processador, de acordo com a reivindicação 5, em que o processador compreende adicionalmente uma unidade de carregamen-to/armazenamento configurada para reproduzir novamente a dada instrução de carregamento e as instruções de programa que são mais novas na ordem de programa que a dada instrução de carregamento, em resposta à determinação de que a dependência de memória está incorreta.
9. Processador, de acordo com a reivindicação 5, em que o processador compreende adicionalmente um arquivo de registrador físico configurado para encaminhar dados associados ao operando de fonte da dada instrução de armazenamento para instruções mais novas (na ordem de programa) e dependentes da dada instrução de carregamento .
10. Método que compreende: determinar uma dependência de memória para uma dada instrução de carregamento em uma dada instrução de armazenamento; em resposta ao recebimento de uma indicação da dependência de memória e determinação de que as condições de qualificação são satisfeitas; designar um identificador de registrador de renomeação (ID) associado a um ID de registrador de operando de fonte da dada instrução de armazenamento para um ID de registrador de operando de destino da dada instrução de carregamento ; e impedir a dada instrução de carregamento de ler os dados associados ao operando de fonte da memória.
11. Método, de acordo com a reivindicação 10, em que para impedir a dada instrução de carregamento dos dados de leitura associados ao operando de fonte da memória, o método compreende adicionalmente indicar que a dada instrução de carregamento deve ser concluída após pelo menos um dos seguintes: a dependência de memória ser determinada e a dependência de memória ser verificada como correta.
12. Método, de acordo com a reivindicação 11, em que em resposta à designação do ID de registrador de renomeação ao ID de registrador de operando de destino da dada instrução de carregamento, o método compreende adicionalmente armazenar uma contagem duplicada associada ao ID de registrador de renomeação.
13. Método, de acordo com a reivindicação 12, em que determinar que as condições de qualificação são satisfeitas compreende pelo menos determinar que: uma instrução de intervenção entre a dada instrução de armazenamento e a dada instrução de carregamento tem um ID de registrador de operando de destino igual ao ID de registrador de operando de fonte da dada instrução de armazenamento; e a dada instrução de armazenamento ainda não foi desativada.
14. Método, de acordo com a reivindicação 13, que compreende adicionalmente emitir instruções mais novas (na ordem de programa) e dependentes da dada instrução de carregamento com a dada instrução de carregamento.
15. Método, de acordo com a reivindicação 14, em que para determinar a dependência de memória, o método compreende adicionalmente pelo menos determinar que a dada instrução de armazenamento e a dada • instrução de carregamento têm valores compatíveis para um ID de registra-dor de base de operando de endereço e um valor imediato de operando de endereço.
16. Método, de acordo com a reivindicação 15, em que em resposta à determinação de uma instrução de intervenção modifica um registra-dor de base de operando de endereço da dada instrução de armazenamento com uma atualização de valor imediato, o método compreende adicionalmente ajustar um valor armazenado do valor imediato de operando de endereço para a dada instrução de armazenamento antes da determinação da dependência de memória com a dada instrução de carregamento.
17. Método, de acordo com a reivindicação 13, que compreende adicionalmente: detectar que uma instrução está pronta para consolidar, em que um ID de registrador de operando de destino da instrução é designado para o ID de renomeação de registrador; e impedir o ID de registrador de renomeação de retornar a uma lista livre em resposta à determinação de que o ID de registrador de renomeação é duplicado.
18. Método, de acordo com a reivindicação 17, que compreende adicionalmente aumentar a contagem duplicada cada vez que qualquer dado ID de registrador de arquitetura atualmente não mapeado para o ID de registrador de renomeação é mapeado para o ID de registrador de renomeação.
19. Unidade de renomeação de registrador que compreende: uma primeira interface configurada para receber as instruções decodificadas; uma segunda interface para uma unidade de expedição configu- rada para expedir instruções para um programador, lógica de carregamento de ciclo zero, em que em resposta ao recebimento de uma indicação de uma dependência de memória para uma dada instrução de carregamento em uma dada instrução de armazenamento e à determinação de que as condições de qualificação são satisfeitas, a lógica é configurada para: designar um identificador de registrador de renomeação (ID) associado a um ID de registrador de operando de fonte da dada instrução de armazenamento para um ID de registrador de operando de destino da dada instrução de carregamento ; e impedir a dada instrução de carregamento de ler os dados associados ao operando de fonte da memória.
20. Unidade de renomeação de registrador, de acordo com a reivindicação 19, em que determinar que as condições de qualificação são satisfeitas compreende pelo menos determinar que: uma instrução de intervenção entre a dada instrução de armazenamento e a dada instrução de carregamento tem um ID de registrador de operando de destino igual ao ID de registrador de operando de fonte da dada instrução de armazenamento; e a dada instrução de armazenamento ainda não foi desativada.
BR102013014996-9A 2012-06-14 2013-06-14 processador, método e unidade de renomeação de registrador BR102013014996B1 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/517,865 2012-06-14
US13/517,865 US9996348B2 (en) 2012-06-14 2012-06-14 Zero cycle load

Publications (2)

Publication Number Publication Date
BR102013014996A2 true BR102013014996A2 (pt) 2015-08-11
BR102013014996B1 BR102013014996B1 (pt) 2020-12-08

Family

ID=48607065

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102013014996-9A BR102013014996B1 (pt) 2012-06-14 2013-06-14 processador, método e unidade de renomeação de registrador

Country Status (8)

Country Link
US (1) US9996348B2 (pt)
EP (1) EP2674856B1 (pt)
JP (1) JP5894120B2 (pt)
KR (1) KR101497807B1 (pt)
CN (1) CN103514009B (pt)
BR (1) BR102013014996B1 (pt)
TW (1) TWI537824B (pt)
WO (1) WO2013188120A2 (pt)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101449256B (zh) 2006-04-12 2013-12-25 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
KR101966712B1 (ko) 2011-03-25 2019-04-09 인텔 코포레이션 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
CN108427574B (zh) 2011-11-22 2022-06-07 英特尔公司 微处理器加速的代码优化器
US9047092B2 (en) * 2012-12-21 2015-06-02 Arm Limited Resource management within a load store unit
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9311084B2 (en) * 2013-07-31 2016-04-12 Apple Inc. RDA checkpoint optimization
US9940229B2 (en) * 2013-12-17 2018-04-10 Intel Corporation Technologies for persistent memory programming
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
CN106648546A (zh) * 2016-09-07 2017-05-10 北京大学 用于gpu寄存器分配和并行度管理的协同优化编译方法
US11175923B2 (en) * 2017-02-13 2021-11-16 International Business Machines Corporation Comparing load instruction address fields to store instruction address fields in a table to delay issuing dependent load instructions
US10261791B2 (en) * 2017-02-24 2019-04-16 International Business Machines Corporation Bypassing memory access for a load instruction using instruction address mapping
US10838729B1 (en) 2018-03-21 2020-11-17 Apple Inc. System and method for predicting memory dependence when a source register of a push instruction matches the destination register of a pop instruction
CN108614736B (zh) 2018-04-13 2021-03-02 杭州中天微系统有限公司 实现资源索引替换的装置及处理器
US11593117B2 (en) * 2018-06-29 2023-02-28 Qualcomm Incorporated Combining load or store instructions
GB2577502B (en) * 2018-09-26 2021-09-08 Advanced Risc Mach Ltd An apparatus and method for processing instructions
CN111258653B (zh) * 2018-11-30 2022-05-24 上海寒武纪信息科技有限公司 原子访存方法、存储介质、计算机设备、装置和系统
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
US11294683B2 (en) 2020-03-30 2022-04-05 SiFive, Inc. Duplicate detection for register renaming
US11966328B2 (en) * 2020-12-18 2024-04-23 Advanced Micro Devices, Inc. Near-memory determination of registers
US11900118B1 (en) * 2022-08-05 2024-02-13 Apple Inc. Stack pointer instruction buffer for zero-cycle loads

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3852432T2 (de) 1987-07-01 1995-07-13 Ibm Befehlssteuerungsvorrichtung für ein Computersystem.
DE69311330T2 (de) 1992-03-31 1997-09-25 Seiko Epson Corp Befehlsablauffolgeplanung von einem risc-superskalarprozessor
US5799179A (en) 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US5751983A (en) 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5926646A (en) 1997-09-11 1999-07-20 Advanced Micro Devices, Inc. Context-dependent memory-mapped registers for transparent expansion of a register file
US6065103A (en) 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6122725A (en) 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6122656A (en) * 1998-07-31 2000-09-19 Advanced Micro Devices, Inc. Processor configured to map logical register numbers to physical register numbers using virtual register numbers
JP3497087B2 (ja) 1998-12-17 2004-02-16 富士通株式会社 命令制御装置及びその方法
EP1050806A1 (en) 1999-05-03 2000-11-08 STMicroelectronics SA Memory access address comparison
US6505293B1 (en) * 1999-07-07 2003-01-07 Intel Corporation Register renaming to optimize identical register values
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US7028166B2 (en) 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US7165167B2 (en) 2003-06-10 2007-01-16 Advanced Micro Devices, Inc. Load store unit with replay mechanism
US7111126B2 (en) 2003-09-24 2006-09-19 Arm Limited Apparatus and method for loading data values
US7263600B2 (en) * 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
KR20070019750A (ko) * 2004-05-05 2007-02-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법
FR2873466A1 (fr) 2004-07-21 2006-01-27 St Microelectronics Sa Procede de programmation d'un controleur de dma dans un systeme sur puce et systeme sur puce associe
US8612944B2 (en) 2008-04-17 2013-12-17 Qualcomm Incorporated Code evaluation for in-order processing
US8533438B2 (en) 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US8631225B2 (en) 2010-06-25 2014-01-14 International Business Machines Corporation Dynamically rewriting branch instructions to directly target an instruction cache location

Also Published As

Publication number Publication date
EP2674856B1 (en) 2019-08-21
EP2674856A3 (en) 2014-07-23
US20130339671A1 (en) 2013-12-19
WO2013188120A3 (en) 2014-03-06
CN103514009A (zh) 2014-01-15
KR101497807B1 (ko) 2015-03-02
TW201411485A (zh) 2014-03-16
CN103514009B (zh) 2019-10-08
US9996348B2 (en) 2018-06-12
EP2674856A2 (en) 2013-12-18
WO2013188120A2 (en) 2013-12-19
KR20130140582A (ko) 2013-12-24
JP5894120B2 (ja) 2016-03-23
JP2014002735A (ja) 2014-01-09
TWI537824B (zh) 2016-06-11
BR102013014996B1 (pt) 2020-12-08

Similar Documents

Publication Publication Date Title
BR102013014996A2 (pt) Carregamento de ciclo zero
KR101025354B1 (ko) 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법
US8219787B2 (en) Early release of resources by proceeding to retire store operations from exception reporting stage but keeping in load/store queue
US7263600B2 (en) System and method for validating a memory file that links speculative results of load operations to register values
US9575754B2 (en) Zero cycle move
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US10019263B2 (en) Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
US7133969B2 (en) System and method for handling exceptional instructions in a trace cache based processor
US20070050592A1 (en) Method and apparatus for accessing misaligned data streams
US20150205605A1 (en) Load store buffer agnostic to threads implementing forwarding from different threads based on store seniority
US20150100765A1 (en) Disambiguation-free out of order load store queue
US20150095618A1 (en) Virtual load store queue having a dynamic dispatch window with a unified structure
JP2012512491A (ja) ハードウェアフィールドにロッシーなメタデータを保持するためのメタフィジカルアドレス空間
US20150095588A1 (en) Lock-based and synch-based method for out of order loads in a memory consistency model using shared memory resources
US11068271B2 (en) Zero cycle move using free list counts
US9672298B2 (en) Precise excecution of versioned store instructions
US10572257B2 (en) Handling effective address synonyms in a load-store unit that operates without address translation
US20150095615A1 (en) Instruction definition to implement load store reordering and optimization
US6704854B1 (en) Determination of execution resource allocation based on concurrently executable misaligned memory operations
US7937569B1 (en) System and method for scheduling operations using speculative data operands
US11416254B2 (en) Zero cycle load bypass in a decode group
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction
BRPI0805218A2 (pt) esquema de omissão de trava por hardware hìbrida de retirada prévia-posterior
US20210064376A1 (en) Last physical register reference scheme

Legal Events

Date Code Title Description
B03A Publication of a patent application or of a certificate of addition of invention [chapter 3.1 patent gazette]
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
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 14/06/2013, OBSERVADAS AS CONDICOES LEGAIS.