BR102016012096A2 - Hardware apparatus to improve performance of state dependent computers - Google Patents

Hardware apparatus to improve performance of state dependent computers Download PDF

Info

Publication number
BR102016012096A2
BR102016012096A2 BR102016012096-9A BR102016012096A BR102016012096A2 BR 102016012096 A2 BR102016012096 A2 BR 102016012096A2 BR 102016012096 A BR102016012096 A BR 102016012096A BR 102016012096 A2 BR102016012096 A2 BR 102016012096A2
Authority
BR
Brazil
Prior art keywords
instruction
state
hardware
hardware apparatus
record
Prior art date
Application number
BR102016012096-9A
Other languages
English (en)
Inventor
M. Maslennikov Dmitry
Haber Gadi
Caprioli Paul
G.Matveyev Pavel
Original Assignee
Intel Corporation
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 Intel Corporation filed Critical Intel Corporation
Publication of BR102016012096A2 publication Critical patent/BR102016012096A2/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30098Register arrangements
    • G06F9/30105Register structure

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)

Abstract

?aparelho de hardware para melhorar o desempenho de computações dependentes de estado? formas de realização para sistemas, métodos e aparelhos para melhorar o desempenho de computações dependentes de estado. em uma forma de realização, um aparelho de hardware compreende um decodificador de hardware para decodificar uma instrução, hardware de recuperação de operandos para recuperar dados a partir de pelo menos um operando de origem associado com a instrução decodificada pelo hardware decodificador e hardware de execução para executar a instrução decodificada de forma a gerar um resultado incluindo pelo menos um bit de estado e fazer com que o resultado e pelo menos um bit de estado sejam armazenados em um único destino de localização de armazenamento físico, em que o pelo menos um bit de estado e o resultado são acessíveis através de uma leitura do registro único.

Description

"APARELHO DE HARDWARE PARA MELHORAR O DESEMPENHO DE COMPUTAÇÕES DEPENDENTES DE ESTADO" CAMPO DA INVENÇÃO
[0001] As várias formas de realização aqui descritas se referem à arquitetura de processadores.
HISTÓRICO
[0002] Na maioria das arquiteturas existe apenas um registro de arquitetura, tal como RFLAGS, para se referir aos sinalizadores de estado de uma computação. Isso limita a capacidade de um compilador ou tradutor binário para reordenar instruções para maior desempenho e/ou eficiência energética.
BREVE DESCRIÇÃO DOS DESENHOS
[0003] A presente invenção é ilustrada a titulo de exemplo e não de limitação através das figuras dos desenhos em anexo, nas quais referências iguais indicam elementos semelhantes e nas quais: [0004] A Figura 1 ilustra uma forma de realização de registros dentro de um processador de hardware (ou núcleo de processador).
[0005] A Figura 2 ilustra formas de realização exemplificativas de formatos de instrução para instruções consumidoras de estado.
[0006] A Figura 3 ilustra uma forma de realização de um método de execução de uma instrução consumidora de estado em um processador.
[0007] A Figura 4 ilustra formas de realização exemplificativas de formatos de instrução para instruções de escrita de estado.
[0008] A Figura 5 ilustra uma forma de realização de um método de execução de uma instrução de escrita de estado em um processador.
[0009] A Figura 6A é um diagrama de blocos que ilustra um exemplo de pipeline em-ordem (in-order) e um exemplo de pipeline fora-de-ordem (out-of-order) de execução/emissão de ordens para renomeação de registros, de acordo com formas de realização da invenção.
[0010] A Figura 6B é um diagrama de blocos que ilustra uma forma de realização exemplificativa de uma arquitetura de núcleo em-ordem (in-order) e de uma arquitetura de núcleo fora-de-ordem (out-of-order) de execução/emissão de ordens para renomeação de registros, de acordo com formas de realização da invenção.
[0011] As Figuras 7A—B ilustram um diagrama de blocos de um exemplo mais especifico de arquitetura de núcleo em-ordem (in-order), núcleo que seria um dentre vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou de tipos diferentes), em um chip.
[0 012] A Figura 8 é um diagrama de blocos de um processador 800, que pode possuir mais que um núcleo, pode ter um controlador de memória integrado e pode incluir gráficos integrados, de acordo com formas de realização da invenção.
[0013] As Figuras 9—12 são diagramas de blocos de arquiteturas de computadores exemplificativas.
[0014] A Figura 13 é um diagrama de blocos que contrasta a utilização de um conversor de instruções de software para converter instruções binárias de um conjunto de instruções de origem em instruções binárias de um conjunto de instruções de destino pretendido, de acordo com formas de realização da invenção.
DESCRIÇÃO DETALHADA
[0015] Na descrição que se segue são estabelecidos vários detalhes específicos. Contudo, entende-se que as formas de realização da invenção podem ser praticadas sem esses detalhes específicos. As referências na especificação a "uma forma de realização", "a forma de realização", "uma forma de realização exemplificativa" etc. indicam que a forma de realização descrita pode incluir uma propriedade, estrutura ou característica em particular, mas não significa necessariamente que todas as formas de realização incluam essa propriedade, estrutura ou característica em particular. Além disso, estas frases não se referem necessariamente à mesma forma de realização. Além disso, quando uma determinada função, estrutura ou característica é descrita em relação a uma forma de realização, subentende-se que está ao alcance do conhecimento daqueles que dominem a área técnica afetar tal função, estrutura ou característica em relação a outras formas de realização, independentemente de assim ser, ou não, explicitamente descrito.
[0016] Uma solução para ter apenas uma única flag (registro de código de condição) é proporcionar duas variantes de cada computação (potencialmente) produtora de flags. Por exemplo, a instrução ROR gira para a direita e atualiza a flag de transporte, enquanto RORX gira para a direita sem afetar quaisquer flags. Isso permite alguma reordenação baseada no compilador, em particular em volta de instruções cujas flags podem ser suprimidas, uma vez que nunca são consumidas.
[0017] Outra solução é proporcionar registros de flag em múltiplas arquiteturas. Por exemplo, pode se imaginar RFLAGSO, RFLAGS1, RFLAGS2 e RFLAGS3. Tanto as instruções produtoras e consumidoras podem assim especificar (com 2 bits) qual o registro de flag a que pretendem fazer referência. Isto requer a adição de dois bits para cada produtora - quase todas as instruções aritméticas - e cada consumidora (por exemplo, ramificações condicionais, movimentos condicionais). Além disso, em um processador fora-de-ordem (out-of-order) , estes quatro registros de flag têm de ser renomeados.
[0018] A Figura 1 ilustra uma forma de realização de registros dentro de um processador de hardware (ou núcleo de processador). Nesta forma de realização, há um registro de estado 101 para armazenar informação de estado sobre o estado do processador. Este registro pode ter muitos nomes diferentes, incluindo, mas não se limitando a, um registro FLAGS (tal como FLAGFS, EFLAGS ou RFLAGS) , uma palavra de estado do programa (Program Status Word - PSW), um registro de código de condição (CC) etc. Os exemplos de bits (ou flags) de estado armazenados no registro de estado incluem, mas não se limitam a, uma indicação de um transporte (C), paridade (P) , ajuste (A), zero (Z), sinal (S) e sobrecarga (0).
Através do registro de estado, uma instrução pode tomar uma ação com base no resultado de uma instrução anterior através da avaliação de um ou mais dos bits de estado. Uma execução de uma instrução define os bits de estado do registro de estado 701 com base nos resultados da própria instrução. Por exemplo, apenas certos bits (flags) do registro de estado, tais como a flag C, são definidos em algumas instruções de rotação, enquanto A, Z, S e P não seriam afetados.
[0019] Há também uma pluralidade de registros de dados físicos 1 103 até N 109. Em algumas formas de realização, o número de registros de dados físicos 103, 109 é superior ao visível por um programador, devido à arquitetura. Nestas formas de realização, os registros físicos são atribuídos a um registro de arquitetura durante uma porção de renomeação de um pipeline de execução de instruções.
[0020] O tamanho da porção de dados 107 e 113 dos registros de dados varia de acordo com a implementação. Por exemplo, a porção de dados pode ser de 8 bits, 16 bits, 32 bits, 64 bits, 128 bits, 256 bits, 512 bits, 1024 bits etc. A porção de dados também pode ser utilizada para armazenar dados com valores inteiros, de vírgula flutuante ou empacotados (inteiros ou de vírgula flutuante).
[0021] Uma forma de implementar o estado em um processador, por exemplo, um processador fora-de-ordem (out-of-order) é expandir cada registro de dados físico 103 e 109 para incluir os resultados da flag de estado de uma computação (C, O, S, P, A e Z). Por exemplo, para um registro de dados de 64 bits, esta expansão conduziria a um registro físico de 70 bits. O maior registro é ilustrado como FLAGS 105 e 111, que são acrescentadas à porção de dados 107 e 113 de tal modo que são fisicamente co-localizadas com o resultado da computação. O hardware de renomeação no interior do processador faz a renomeação para um registro físico do mesmo modo que um registro de arquitetura faz a renomeação para um registro físico. Como tal, um registro de dados se refere aos primeiros 64 bits do seu registro físico e o estado se refere à porção de flags do registro físico. Embora estes registros sejam apresentados em um formato little endian (com os dados sendo armazenados nos bits menos significativos e o(s) bit(s) de estado sendo armazenado(s) no(s) bit(s) mais significativo(s)), em outras formas de realização o armazenamento de dados e dos bits de estado é realizado de modo oposto.
[0022] Considere os seguintes exemplos típicos. Quando sete é subtraído de RAX com a instrução "sub rax, $7", o valor resultante para o registro de arquitetura RAX é escrito em um registro físico (por exemplo, P39), juntamente com os resultados de flag. Assim, tanto o registro RAX como o registro de estado agora apontam para o registro físico P39. Em seguida, digamos que a instrução " add rbx, $3" escreve os seus resultados no registro físico P40. Agora, tanto o registro RBX quanto o registro de estado apontam para o registro físico P40. O registro RAX ainda aponta para o registro físico P39. Infelizmente, enquanto o resultado da instrução de subtração na flag estiver presente no hardware em P39, não há atualmente forma de o software aceder a ele.
[0023] Abaixo são descritas formas de realização de novas instruções consumidoras de estado (status) (tais como ramificações condicionais) e a sua execução, especificando qual registro físico deve servir como origem do(s) bit(s) de estado que consomem, fazendo as instruções referenciarem o registro de arquitetura que contém o resultado produzido simultaneamente com os resultados de estado pretendidos. Isto pode ser feito, desde que o registro de arquitetura especifico ainda não tenha sido substituído por uma instrução subsequente, independentemente de quaisquer instruções subsequentes terem substituído o registro de estado. Por exemplo, mesmo quando o registro de estado é substituído, o(s) bit(s) de estado armazenado(s) com o registro físico de dados são usados para tomar uma decisão condicional. Naturalmente, as instruções existentes podem continuar usando o registro de estado sem qualquer modificação.
[0024] Em algumas formas de realização, as instruções consumidoras de estado têm um campo de registro na sua codificação para indicar qual o registro de arquitetura que contém os resultados (informação de estado) da computação à qual a condição se refere. Por exemplo, a nova instrução " jne rcx.f, L2" avalia o teste "not equal" (diferente de) nas flags produzidas pela mesma instrução que produziu o valor inteiro em RCX (o " . F" indica que as flags são armazenadas). Como uma convenção ilustrativa da linguagem assembly, o resultado inteiro no registro físico referenciado arquitetonicamente por RCX como "RCX" e a flag resultam no mesmo registro físico como "RCX.F". Note-se que o software agora tem acesso a um número de registros de resultados de flag igual ao número de registros inteiros de arquitetura, com um custo de hardware relativamente baixo. Claro que, em algumas formas de realização, esta função de resultado da flag é limitada a um subconjunto dos registros de arquitetura disponíveis.
[0025] Observe que também podem ser fornecidas outras instruções condicionais além de ramificações e/ou saltos. Por exemplo, podem se especificar movimentos condicionais e operações de memória condicionais para consumir flags de RCX.F (para além do registro de estado).
[0026] A Figura 2 ilustra exemplos de formas de realização de formatos de instrução para instruções consumidoras de estado. Um primeiro tipo de instrução de escrita de estado 201 inclui um código de operação (opcode) 203 para indicar que a execução da instrução é avaliar pelo menos um bit de estado do operando de origem 207 para determinar se uma operação é para ser executada. Por exemplo, se um movimento condicional a partir da origem 207 para o destino 205 for realizado com base em um ou mais dos bits de estado definidos.
[0027] Um segundo tipo de instrução de escrita de estado 211 inclui um código de operação (opcode) 213 para a instrução consumidora de estado para indicar a realização de uma operação. O operando de origem 217 inclui uma indicação de que ele armazena informação de estado. Por exemplo, ORIGEM.F pode ser utilizado para indicar que a origem inclui dados de estado a serem consumidos. 0 destino 215 é o destino da operação.
[0028] Um terceiro tipo de instrução de escrita de estado 221 inclui um código de operação (opcode) 223 para indicar que a execução da instrução é avaliar pelo menos um bit de estado da localização explicita da flag (operando de origem) 223 para determinar se uma operação é para ser executada. Por exemplo, se um salto condicional para um OFFSET 225 for realizado com base em um ou mais dos bits de estado definidos.
[0029] Um quarto tipo de instrução de escrita de estado 231 inclui um código de operação (opcode) 233 para indicar que a execução da instrução é avaliar pelo menos um bit de estado para determinar se uma operação é para ser executada. A localização explicita da flag (operando de origem) 233 indica que ele armazena informação de estado, para além de dados. Por exemplo, ORIGEM. F pode ser utilizado para indicar que a origem inclui dados de estado a serem consumidos. Por exemplo, se um salto condicional para um OFFSET 235 for realizado com base em um ou mais dos bits de estado definidos.
[0030] A Figura 3 ilustra uma forma de realização de um método de execução de uma instrução consumidora de estado em um processador. Os exemplos de pipelines e processadores (ou núcleos) são apresentados em detalhe nas figuras posteriores. Adicionalmente, os exemplos de formatos de instrução para instruções consumidoras de estado já foram apresentados em detalhe acima.
[0031] Uma instrução consumidora de estado é encontrada através de hardware de busca em 301.
Tipicamente, as instruções são armazenadas em um cache de instruções antes da busca.
[0032] A instrução encontrada é decodificada por hardware de decodificação em 303. A decodificação da instrução determina qual é a instrução a ser executada e os operandos a buscar. Em algumas formas de realização, a instrução é decodificada em micro-operações.
[0033] Em algumas formas de realização, a renomeação de registros é realizada em um ou mais dos operandos de instrução por hardware de renomeação/alocação em 305. Por exemplo, o operando de origem é mapeado a partir de um registro de arquitetura para um registro físico.
[0034] Os valores do operando de origem são recuperados a partir de arquivos de registro físicos ou memória em 307.
[0035] A instrução consumidora de estado decodificada é executada por uma unidade funcional (hardware de execução) no(s) operando(s) de origem recuperados(s) em 309. Por exemplo, é realizado um salto não-nulo (jump not zero - JNZ). A execução da instrução consumidora de estado decodificada causa a determinação de se uma condição de estado é cumprida através da análise das informações de estado da origem recuperadas. No exemplo JNZ, é executado um salto quando o estado zero (tal como a flag de zero) não é definido na porção de estado do operando de origem.
[0036] Enquanto a figura acima foi descrita no que diz respeito ao hardware, um ou mais dos aspectos do método podem ser realizados em software, por exemplo, como uma parte de uma emulação. Por exemplo, o decodificador pode ser implementado em software ou firmware, e não hardware.
[0037] Abaixo são descritas formas de realização de novas instruções de escrita de estado (status) e a sua execução, especificando qual registro físico deve servir como destino da informação de estado fazendo elas referenciarem o registro de arquitetura que contém o resultado produzido, simultaneamente com os resultados de estado.
[0038] A Figura 4 ilustra formas de realização exemplificativas de formatos de instrução para instruções de escrita de estado. Um primeiro tipo de instrução de escrita de estado 401 inclui um código de operação (opcode) 403 para indicar que a execução da instrução é causar o armazenamento de pelo menos um bit de estado, juntamente com o resultado em um único destino de localização de armazenamento físico associado ao operando de destino 405. O primeiro tipo de instrução de escrita de estado 401 também inclui tipicamente pelo menos um operando de origem 407. Um exemplo de instrução deste tipo é SUB.F DESTINO, ORIGEM, em que o código de operação (opcode) de SUB.F indica que este tipo de instrução é diferente de uma instrução de subtração normal e é para armazenar informação de estado no destino (DESTINO).
[0039] Um segundo tipo de instrução de escrita de estado 411 inclui um código de operação (opcode) 413 para a instrução e um operando de destino 415 que indica que o resultado da instrução e a sua informação de estado devem ser armazenados em um único destino com localização física. 0 segundo tipo de instrução de escrita de estado 411 também inclui tipicamente pelo menos um operando de origem 417. Um exemplo de instrução deste tipo é SUB DESTINO. F, ORIGEM, em que o destino de DESTINO.F indica que este tipo de instrução é diferente de uma subtração normal e é para armazenar informação de estado no destino (DESTINO).
[0040] Um terceiro tipo de instrução de escrita de estado 421 inclui um código de operação (opcode) 423 para a instrução e um operando de destino 425. Este tipo de instrução de escrita de estado não indica que a informação de estado não é para ser armazenada junto com o resultado em um único destino com localização física. O terceiro tipo de instrução de escrita de estado 411 também inclui tipicamente pelo menos um operando de origem 417. Um exemplo de instrução deste tipo é SUB DESTINO, ORIGEM. Variantes de instruções que não de escrita de estado teriam um código de operação (opcode) diferente, tal como SUBX, para delinear que a execução da instrução é para não proporcionar bits de estado acessíveis. Como tal, as formas de realização aqui descritas não entram em conflito com uma arquitetura definida por instruções que contém variações de instruções produtoras de flags e supressoras de flags. Por exemplo, uma instrução SUB que escreve um registro de estado e uma instrução SUBX que não o faz. Em formas de realização aqui descritas, ambas as variantes de instruções escrevem tanto o resultado inteiro quanto o resultado da flag no registro físico de destino. No entanto, apenas a variante SUB renomeia o registro de estado para apontar para a localização de destino da instrução. No exemplo anterior, SUB poderia ser substituída por SUBX e uma instrução consumidora (tal como JNE) podería ainda consumir RCX.F. Tanto SUB quanto SUBX alocariam, digamos, o registro físico P39 como um destino. Ambas escreveríam o resultado inteiro da subtração em P39 e ambas escreveríam o resultado flag da subtração em P39. Ambas renomeariam o registro de arquitetura RCX para P39. Mas apenas SUB renomearia o registro de estado para P39. Até que RCX seja posteriormente renomeada por outra instrução, as novas ramificações condicionais podem consumir RCX.F.
[0041] A Figura 5 ilustra uma forma de realização de um método de execução de uma instrução de escrita de estado em um processador. Os exemplos de pipelines e processadores (ou núcleos) são apresentados em detalhe nas figuras posteriores. Adicionalmente, os exemplos de formatos de instrução para instruções de escrita de estado já foram apresentados em detalhe acima.
[0042] Uma instrução de escrita de estado é encontrada através de hardware de busca em 501. Tipicamente, as instruções são armazenadas em um cache de instruções antes da busca.
[0043] A instrução encontrada é decodificada por hardware de decodificação em 503. A decodificação da instrução determina qual é a instrução a ser executada e os operandos a buscam. Em algumas formas de realização, a instrução é decodificada em micro-operações.
[0044] Em algumas formas de realização, a renomeação de registros é realizada em um ou mais dos operandos de instrução por hardware de renomeação/alocação em 505. Por exemplo, o operando de destino é mapeado a partir de um registro de arquitetura para um registro fisico.
[0045] Os valores do operando de origem são recuperados a partir de arquivos de registro físicos ou memória em 507.
[0046] A instrução de escrita de estado decodificada é executada por uma unidade funcional (hardware de execução) no(s) operando(s) de origem recuperados(s) em 509. Por exemplo, é realizada uma subtração. A execução da instrução de escrita de estado decodificada provoca a computação de um resultado e a geração de informação de estado (tal como C, O, S, P, A e Z, como descrito anteriormente).
[0047] Hardware de write-back (como hardware de obsolescência [retirement]) armazena um resultado do estado decodificado executado e a informação de estado em um único registro de destino em 511. Em um processador (núcleo) que usa renomeação, o registro é mapeado a partir de uma versão de arquitetura para uma versão física. Além disso, a informação de estado (como um registro de flags) é mapeado para o registro físico contendo o estado e os dados.
[0048] Enquanto a figura acima foi descrita no que diz respeito ao hardware, um ou mais dos aspectos do método podem ser realizados em software, por exemplo, como uma parte de uma emulação. Por exemplo, o decodificador pode ser implementado em software ou firmware, e não hardware.
[0049] O que está aqui descrito aumenta o estado de arquitetura de um programa, permitindo ao software que aceda ao estado físico do hardware, que anteriormente estava oculto. Isto tem implicações nas alterações de contexto e pode ser tratado da maneira usual. Por exemplo, o estado adicional pode ser guardado e restaurado pelo sistema operacional, usando XSAVE, por exemplo. Alternativamente, esta capacidade pode ser utilizada apenas dentro das regiões transacionais (por exemplo, regiões entre XBEGIN e XEND) para que o estado de arquitetura adicional seja produzido e consumido de forma atômica. Ou, o novo estado de arquitetura pode ser gerenciado por runtime do software, tal como limitado ao código produzido através de tradução binária dinâmica, em que traps e interrupções são interceptadas por um software de gerenciamento de runtime ou camada de firmware.
[0050] As instruções acima proporcionam muitas vantagens. Normalmente, existe apenas um único valor de arquitetura para as flags (transporte, sobrecarga, sinal, zero etc.) no registro de estado. Por esse motivo, muitas vezes não é possível um compilador ou tradutor binário colocar uma flag de computação acima e fora de um loop. Considere-se o seguinte exemplo: for (int rsi = 0; rsi < 1000; ++rsi) {if (rax == rbx) { x[rsi] = calculationl; } else { x[rsi] = calculation2; } } [0051] Em pseudoassembly, isto se torna: xor rsi, rsi II set rsi = 0; L1: cmp rax, rbx; jne L2; x[rsi] = calculationl; jmp L3; L2: x[rsi] = calculation2; L3: add rsi, $1; cmp rsi, $1000; jl H;
[0052] Em particular, observe que a comparação de RAX e RBX ocorre no interior do loop e, por isso, é executado 1000 vezes, embora produza sempre o mesmo resultado. Os resultados (da flag) de estado são substituídas pela posterior - e necessária - comparação de índice de loop. Ambas as instruções de comparações produzem flags que são necessárias para os consumidores subsequentes (ramificações condicionais).
[0053] Agora, usando instruções de escrita e consumo de estado de destino, o exemplo anterior pode ser compilado (ou sujeito a tradução binária) como: xor rsi, rsi II set rsi = 0; sub rcx = rax, rbx; L1: jne rcx.f, L2; x[rsi] = calculationl; jmp L3; L2: x[rsi] = calculation2; L3: add rsi, $1; cmp rsi, $1000; jl L1;
[0054] A comparação de RAX para RBX foi movida acima do loop. O valor em RCX.F (o registro de destino com a informação de estado) é calculado uma vez e utilizado 1000 vezes. O compilador não utiliza (e não pode utilizar) o registro de valores inteiros RCX como destino de quaisquer instruções executadas no interior do loop, pois isso iria substituir RCX.F, bem como RCX.
[0055] Aliás, o código acima ainda não é ideal. Mover a comparação acima do loop permite mais otimizações, tais como evitar que a última ramificação condicional (JL) salte para outra ramificação condicional (JNE) acima. Assim: xor rsi, rsi II set rsi = 0; sub rcx = rax, rbx; jne ncx.f, L2; L1: x[rsi] = calculationl; jmp L3; L2: x[rsi] = calculation2; L3: add rsi, $1; cmp rsi, $1000; jge L4; II typically not-taken jne rcx.f, L2; jmp L1; L4: [0056] Acontece que a instrução que produz RCX.F acima é escrita como uma instrução de três operandos (origem não-destrutiva), de modo a que as origens (RAX e RBX) não sejam substituídas. Este é ortogonal a formas de realização da presente invenção. A única subtração acima pode ser substituída por "mov rcx, rax; sub rcx, rbx;" se não estiverem disponíveis instruções de operando de origem não-destrutivas em uma determinada arquitetura de conjunto de instruções (ISA - Instruction Set Architecture).
[0057] Todas as adições, subtrações e comparações acima atualizam o registro de estado. O salto condicional referido acima, JGE, também se refere à condição determinada pelas flags de estado no registro de estado.
[0058] As formas de realização aqui descritas podem ser executadas em várias arquiteturas diferentes, incluindo aquelas descritas abaixo.
Exemplos de Arquiteturas de Núcleos, Processadores e Computadores [0059] Os núcleos de processador podem ser implementados de maneiras diferentes, para fins diferentes, e em diferentes processadores. Por exemplo, as implementações desses núcleos podem incluir: 1) um núcleo em-ordem de utilização geral destinado à computação em geral; 2) um núcleo fora-de-ordem de alto desempenho de utilização geral destinado à computação em geral; 3) um núcleo de utilização específica destinado principalmente à computação gráfica e/ou científica (alto débito). As implementações de diferentes processadores podem incluir: 1) um CPU incluindo um ou mais núcleos em-ordem de utilização geral destinado(s) à computação em geral e/ou um ou mais núcleo(s) fora-de-ordem de utilização geral destinado(s) à computação em geral; e 2) um coprocessador incluindo um ou mais núcleo(s) de utilização específica destinado(s) principalmente à computação gráfica e/ou cientifica (alto débito). Esses processadores diferentes conduzem a diferentes arquiteturas de sistemas de computador, que podem incluir: 1) o coprocessador em um chip separado do CPU; 2) o coprocessador em uma matriz (die) separada no mesmo invólucro de um CPU; 3) o coprocessador na mesma matriz (die) que um CPU (caso em que esse coprocessador é, por vezes, referido como lógica de utilização especifica, tal como lógica de gráficos integrados e/ou cientifica (alto débito), ou como núcleos de utilização especifica); e 4) um sistema-em-um-chip que pode incluir na mesma matriz (die) o CPU descrito (por vezes referido como o(s) núcleo(s) de aplicativo(s) ou o(s) processador(es) de aplicativo(s)), o coprocessador descrito anteriormente e uma funcionalidade adicional. Os exemplos de arquiteturas de núcleo são descritos a seguir, seguidos por descrições de exemplos de processadores e arquiteturas de computadores.
Exemplos de Arquiteturas de Núcleo Diagrama de bloco de núcleos em-ordem e fora-de-ordem [0060] A Figura 6A é um diagrama de blocos que ilustra um exemplo de pipeline em-ordem (in-order) e um exemplo de pipeline fora-de-ordem (out-of-order) de execução/emissão de ordens para renomeação de registros, de acordo com formas de realização da invenção. A Figura 6B é um diagrama de blocos que ilustra uma forma de realização exemplificativa de uma arquitetura de núcleo em-ordem (in-order) e de uma arquitetura de núcleo fora-de-ordem (out-of-order) de execução/emissão de ordens para renomeação de registros, de acordo com formas de realização da invenção. As caixas desenhadas com linhas continuas nas Figuras 6A-B ilustram o pipeline e o núcleo em-ordem, enquanto a adição opcional das caixas desenhadas com linhas tracejadas ilustra o pipeline e o núcleo fora-de-ordem de execução/emissão de ordens para renomeação de registros. Uma vez que a característica em-ordem é um subconjunto da característica fora-de-ordem, será descrita a característica fora-de-ordem.
[0061] Na Figura 6A, um pipeline de processador 600 inclui um estágio de busca 6 02, um estágio de decodificação de extensão 604, um estágio de decodificação 606, um estágio de alocação 608, um estágio de renomeação 610, uma etapa de agendamento (também conhecida como de expedição ou emissão) 612, um estágio de leitura de registro/memória 614, um estágio de execução 616, um estágio de write-back/escrita de memória 618, um estágio de gerenciamento de exceções 622 e um estágio de submissão (commit) 624.
[0062] A Figura 6B mostra o núcleo de processador 690 incluindo uma unidade de front end 630 acoplada a uma unidade de motor de execução 650 e ambas acopladas a uma unidade de memória 670. O núcleo 690 pode ser um núcleo RISC (RISC - reduced instruction set computing) , um núcleo CISC (CISC - complex instruction set computing) , um núcleo VLIW (VLIW - very long instruction word) ou um híbrido ou tipo de núcleo alternativo. Como mais uma opção, o núcleo 690 pode ser um núcleo de utilização específica como, por exemplo, um núcleo de rede ou de comunicação, um motor de compressão, um núcleo de coprocessador, um núcleo de uma unidade de processamento de gráficos para computação de utilização geral (GPGPU -general purpose computing graphics processing unit), um núcleo de gráficos ou semelhantes.
[0063] A unidade de front end 630 inclui uma unidade de predição de ramificação 632 acoplada a uma unidade de cache de instruções 634, que está acoplada a um translation lookaside buffer (TLB) de instruções 636, que está acoplado a uma unidade de busca de instruções 638, a qual é acoplada a uma unidade de decodificação 640. A unidade de decodificação 640 (ou decodificador) pode decodificar instruções e gerar como saida um(a) ou mais micro-operações, pontos de entrada de microcódigo, micro-instruções, outras instruções ou outros sinais de controle que são decodificados de, ou que de outra forma refletem ou são derivados das instruções originais. A unidade de decodificação 640 pode ser implementada utilizando vários mecanismos diferentes. Os exemplos de mecanismos adequados incluem, mas não se limitam a, tabelas de consulta, implementações de hardware, matrizes lógicas programáveis (PLA - programmable logic arrays) , memórias só de leitura de microcódigo (ROM -read only memories) etc., em uma forma de realização, o núcleo 690 inclui uma ROM de microcódigo ou outra midia que armazena microcódigo para determinadas macro-instruções (por exemplo, na unidade de decodificação 640 ou de outra forma na unidade de front end 630) . A unidade de decodificação 640 é acoplada a uma unidade de renomeação/alocação 652 na unidade do motor de execução 650.
[0064] A unidade do motor de execução 650 inclui a unidade de renomeação/alocação 652 acoplada a uma unidade de obsolescência (retirement) 654 e um conjunto de uma ou mais unidades de agendamento 656. A(s) unidade(s) de agendamento 656 representa(m) qualquer número de origens de agendamento, incluindo estações de reservas, janela central de instruções etc. A(s) unidade(s) de agendamento 656 acopla(m)-se à(s) unidade(s) de arquivo(s) de registro fisico 658. Cada unidade de arquivo(s) de registro fisico 658 representa um ou mais arquivos de registro fisico, alguns dos quais são diferentes e armazenam um ou mais tipos diferentes de dados, tais como escalares inteiros, escalares de vírgula flutuante, inteiros empacotados (packed integer), vírgula flutuante empacotados (packed floating point), vetores inteiros, vetores de vírgula flutuante, estado (por exemplo, um apontador de instrução que é o endereço da próxima instrução a ser executada) etc. Em uma forma de realização, a unidade de arquivo(s) de registro físico 658 compreende uma unidade de registros de vetor, uma unidade de registros de máscara de escrita e uma unidade de registros escalares. Estas unidades de registro podem fornecer registros vetoriais de arquitetura, registros de máscara vetorial e registros de utilização geral. A unidade de arquivo(s) de registro físico 658 é sobreposta pela unidade de obsolescência (retirement) 654 para ilustrar várias maneiras em que é possível implementar renomeação de registros e execução fora-de-ordem (por exemplo, utilizando buffer(s) de reordenação e arquivo(s) de registro de obsolescência (retirement); utilizando arquivo(s) de futuro, buffer(s) de histórico e arquivo(s) registro de obsolescência (retirement); utilizando mapas de registro e um conjunto de registros etc.). A unidade de obsolescência (retirement) 654 e a(s) unidade (s) de arquivo (s) de registro físico 658 são acopladas ao(s) grupo(s)(cluster) de execução 660. 0(s) grupo(s) (cluster) de execução 660 pode(m) incluir um conjunto de uma ou mais unidades de execução 662 e um conjunto de uma ou mais unidades de acesso à memória 664. As unidades de execução 662 podem realizar várias operações (por exemplo, deslocamento [shift], adição, subtração, multiplicação) em vários tipos de dados (por exemplo, escalares de vírgula flutuante, inteiros empacotados (packed integer), vírgula flutuante empacotados (packed floating point), vetores inteiros, vetores de vírgula flutuante). Embora algumas formas de realização possam incluir algumas unidades de execução dedicadas a funções ou conjuntos de funções específicas, outras formas de realização podem incluir apenas uma unidade de execução ou várias unidades de execução capazes de executar todas as funções. A(s) unidade(s) de agendamento 656, a(s) unidade(s) de arquivo(s) de registro físico 658 e o(s) grupo(s) (cluster) de execução 660 apresentam-se como sendo possivelmente plurais porque certas formas de realização criam pipelines separados para certos tipos de dados/operações (por exemplo, um pipeline de escalares inteiros, um pipeline de vírgula flutuante/inteiros empacotados (packed integer)/vírgula flutuante empacotados (packed floating point)/vetorial inteiro/vetorial de vírgula flutuante e/ou um pipeline de acesso à memória, em que cada um possui a sua própria unidade de agendamento, unidade de arquivo(s) de registro físico e/ou grupo (cluster) de execução - e, no caso de um pipeline de acesso à memória separado, são implementadas certas formas de realização em que apenas o grupo (cluster) de execução deste pipeline possui a(s) unidade(s) de acesso à memória (664). Deve também ser entendido que quando são utilizados pipelines separados, um ou mais destes pipelines podem ser fora-de-ordem de emissão/execução e os restantes em-ordem.
[0065] O conjunto de unidades de acesso de memória 664 está acoplado à unidade de memória 670, que inclui uma unidade TLB de dados 672 acoplada a uma unidade de cache de dados 674 acoplada a uma unidade de cache de nível 2 (L2) 676. Em um exemplo de forma de realização, as unidades de acesso à memória 664 podem incluir uma unidade de carregamento, uma unidade de armazenamento de endereços e uma unidade de armazenamento de dados, cada uma das quais está acoplada à unidade TLB de dados 6 72 na unidade de memória 670. A unidade de cache de instruções 634 está ainda ligada a uma unidade de cache de nível 2 (L2) 676 na unidade de memória 670. A unidade de cache L2 676 é acoplada a um ou mais outros níveis de cache e, eventualmente, a uma memória principal.
[0066] A título de exemplo, a arquitetura de núcleo fora-de-ordem (out-of-order) de execução/emissão de ordens para renomeação de registros ilustrativa pode implementar o pipeline 600 da seguinte forma: 1) a busca de instrução 638 executa os estágios de busca e decodif icação de extensão 6 02 e 604; 2) a unidade de decodificação 640 realiza o estágio de decodificação 606; 3) a unidade de renomeação/alocação 652 realiza o estágio de alocação 608 e o estágio de renomeação 610; 4) a(s) unidade(s) de agendamento 656 realiza(m) o estágio de agendamento 612; 5) a(s) unidade(s) de arquivo(s) de registro físico 658 e a unidade de memória 670 realizam o estágio de leitura de registro/leitura de memória 614; o grupo (cluster) de execução 660 realiza o estágio de execução 616; 6) a unidade de memória 670 e a(s) unidade(s) de arquivo(s) de registro físico 658 executam o estágio de write-back/escrita de memória 618; 7) várias unidades podem estar envolvidas no estágio de gerenciamento de exceções 622; e 8) a unidade de obsolescência (retirement) 654 e a(s) unidade(s) de arquivo(s) de registro físico 658 realizam o estágio de submissão (commit) 624.
[0067] 0 núcleo 690 pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86 [com algumas extensões que foram adicionadas com as versões mais recentes], o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA; o conjunto de instruções ARM [com as extensões adicionais opcionais como NEON] da ARM Holdings de Sunnyvale, CA), incluindo a instrução ou instruções aqui descrita(s). Em uma forma de realização, o núcleo 690 inclui lógica para suportar uma extensão do conjunto de instruções para dados empacotados (por exemplo, AVXl, AVX2), permitindo assim a realização de operações usadas por muitas aplicações multimídia utilizando dados empacotados.
[0068] Deverá entender-se que o núcleo pode suportar multithreading (executar dois ou mais conjuntos paralelos de operações ou threads) , e podem fazê-lo de diversas formas, incluindo time sliced multithreading, multithreading simultâneo (em que um único núcleo fisico proporciona um núcleo lógico para cada um dos threads que esse núcleo fisico mantém em multithreading simultâneo) ou uma combinação destes (por exemplo, busca e decodificação time sliced e posterior multithreading simultânea, tal como na tecnologia Intel® Hyperthreading).
[0069] Ainda que a renomeação de registros seja descrita no contexto de uma execução fora-de-ordem, deverá ser entendido que a renomeação de registros pode ser utilizada em uma arquitetura em-ordem. Embora a forma de realização do processador ilustrada também inclua unidades de cache de instruções e dados separadas 634/674 e uma unidade de memória cache L2 partilhada 676, as formas de realização alternativas podem possuir um único cache interno para instruções e dados, tal como, por exemplo, um cache interno de nivel 1 (Ll) ou vários níveis de cache interno. Em algumas formas de realização, o sistema pode incluir uma combinação de um cache interno e um cache externo que é exterior ao núcleo e/ou ao processador. Como alternativa, todo o cache pode ser exterior ao núcleo e/ou ao processador. Exemplo Especifico de Arquitetura de Núcleo Em-Ordem [0070] As Figuras 7A-B ilustram um diagrama de blocos de um exemplo mais específico de arquitetura de núcleo em-ordem (in-order) , núcleo que seria um dentre vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou de tipos diferentes), em um chip. Os blocos lógicos comunicam através de uma rede de interconexão com grande largura de banda (por exemplo, uma rede em anel) com alguma lógica de função fixa, interfaces 1/0 de memória e outra lógica de 1/0 necessária, dependendo da aplicação.
[0071] A Figura 7A é um diagrama de blocos de um único núcleo de processador, juntamente com a sua ligação à rede de interconexão incluída na matriz (on-die) 702 e com o seu subconjunto local de cache de nível 2 (L2) 704, de acordo com formas de realização da invenção. Em uma forma de realização, um decodificador de instruções 700 suporta o conjunto de instruções x86 com uma extensão do conjunto de instruções para dados empacotados. Um cache Ll 706 permite acessos com baixa latência para cachear memória nas unidades escalares e vetoriais. Enquanto em uma forma de realização (para simplificar o design), uma unidade escalar 708 e uma unidade vetorial 710 usam conjuntos de registros separados (respetivamente, registros escalares 712 e registros vetoriais 714) e os dados transferidos entre eles são escritos para a memória e, em seguida, lidos de volta a partir um cache de nível 1 (Ll) 706, formas de realização alternativas da invenção podem utilizar uma abordagem diferente (por exemplo, usar um único conjunto de registros ou incluir um caminho de comunicação que permita que os dados sejam transferidos entre os dois arquivos de registro sem serem escritos e lidos novamente).
[0072] O subconjunto local da cache L2 704 é parte de um cache L2 global que é dividido em subgrupos locais separados, um por núcleo de processador. Cada núcleo do processador tem um caminho de acesso direto ao seu próprio subconjunto local de cache L2 704. Os dados lidos por um núcleo do processador são armazenados no seu subconjunto de cache L2 704 e podem ser acessados rapidamente, em paralelo com outros núcleos de processador que acessam aos seus próprios subconjuntos locais de cache L2. Os dados escritos por um núcleo de processador são armazenados no seu próprio subconjunto de cache L2 704 e são purgados de outros subconjuntos, se necessário. A rede de anel garante a coerência de dados compartilhados. A rede de anel é bidirecional para permitir que agentes como núcleos de processador, memória cache L2 e outros blocos lógicos comuniquem entre si no interior do chip. Cada caminho de dados no anel tem 1012 bits de largura em cada direção.
[0073] A Figura 7B é uma vista expandida de uma parte do núcleo do processador na Figura 7A de acordo com formas de realização da invenção. A Figura 7B inclui uma cache de dados Ll 706A parte do cache Ll 704, bem como mais detalhes relativos à unidade vetorial 710 e aos registros vetoriais 714. Especificamente, a unidade vetorial 710 é uma unidade de processamento vetorial (VPU - vector processing unit) com uma largura de 16 (ver ALU com largura de 16 728), que executa uma ou mais dentre as instruções de inteiros, vírgula flutuante de precisão simples e vírgula flutuante de precisão dupla. A VPU suporta swizzling nas entradas do registro com a unidade de swizzle 720, conversão numérica com as unidades de conversão numérica 722A-B e replicação com a unidade de replicação 724 na entrada de memória. Os registros de máscara de escrita 726 permitem determinar as escritas vetoriais resultantes.
Processador com controlador de memória e gráficos integrados [0074] A Figura 8 é um diagrama de blocos de um processador 800, que pode possuir mais que um núcleo, pode ter um controlador de memória integrado e pode incluir gráficos integrados, de acordo com formas de realização da invenção. As caixas desenhadas com linhas continuas na Figura 8 ilustram um processador 800 com um único núcleo 802A, um agente de sistema 810, um conjunto de uma ou mais unidades de controlador de barramento 816, enquanto a adição opcional das caixas desenhadas com linhas tracejadas ilustra um processador alternativo 800 com múltiplos núcleos 802A-N, um conjunto de uma ou mais unidades de controlador de memória integradas 814 na unidade de agente de sistema 810 e lógica de utilização especifica 808.
[0075] Assim, as diferentes implementações do processador 800 podem incluir: 1) integrar gráficos e/ou lógica cientifica (alto débito) (que pode incluir um ou mais núcleos) em um CPU com a lógica de utilização especifica 808 e os núcleos 802A-N serem um ou mais núcleos de utilização geral (por exemplo, núcleos em-ordem de utilização geral, núcleos fora-de-ordem de utilização geral ou uma combinação dos dois); 2) um coprocessador com os núcleos 802A-N sendo um grande número de núcleos de utilização específica destinados principalmente para processamento gráfico e/ou científico (alto débito); e 3) um coprocessador com os núcleos 802A-N sendo um grande número de núcleos em-ordem de utilização geral. Assim, o processador 800 pode ser um processador ou coprocessador de utilização geral ou um processador de utilização específica como, por exemplo, um processador de rede ou comunicação, um motor de compressão, um processador de gráficos, um GPGPU (unidade de processamento gráfico de utilização geral), um coprocessador tipo MIC (MIC - many integrated core) de alto débito (incluindo 30 ou mais núcleos), um processador embutido ou semelhantes. O processador pode ser implementado em um ou mais chips. O processador 800 pode ser uma parte de e/ou pode ser implementado em um ou mais substratos utilizando qualquer uma de uma série de tecnologias de processo, tais como, por exemplo, BiCMOS, CMOS OU NMOS.
[0076] A hierarquia de memória inclui um ou mais níveis de cache no interior dos núcleos, um conjunto ou uma ou mais unidades de cache compartilhados 806 e memória externa (não mostrada) acoplada ao conjunto de unidades de controlador de memória integradas 814. O conjunto de unidades de cache compartilhados 806 pode incluir uma ou mais caches de nível médio, como o nível 2 (L2), nível 3 (L3), nível 4 (L4) ou outros níveis de cache, um cache de último nível (LLC) e/ou combinações destes. Enquanto em uma forma de realização uma unidade de interconexão baseada em anel 812 interliga a lógica gráfica integrada 808, o conjunto de unidades de cache compartilhados 806 e a(s) unidade(s) de agente do sistema 810/controlador de memória integrado 814, algumas formas de realização alternativas podem utilizar qualquer número de técnicas bastante conhecidas para a interconexão de tais unidades. Em uma forma de realização, é mantida a coerência entre uma ou mais unidades de cache 806 e núcleos 802-A-N.
[0077] Em algumas formas de realização, um ou mais dos núcleos 802A-N são capazes de multithreading. O agente de sistema 810 inclui os componentes de coordenação e operação dos núcleos 802A-N. A unidade de agente de sistema 810 pode incluir, por exemplo, uma unidade de controlo de potência (PCU) e uma unidade de exibição. O PCU pode ser ou incluir a lógica e os componentes necessários para regular o estado de energia dos núcleos 802A-N e a lógica de gráficos integrados 808. A unidade de exibição serve para comandar uma ou mais telas conectadas externamente.
[0078] Os núcleos 802A-N podem ser homogêneos ou heterogêneos, em termos de conjunto de instruções de arquitetura; isto é, dois ou mais dos núcleos 802A-N podem ser capazes de executar o mesmo conjunto de instruções, enquanto outros podem ser capazes de executar apenas um subconjunto desse conjunto de instruções ou de um conjunto de instruções diferente. Exemplos de Arquiteturas de Computadores [0079] As Figuras 9—12 são diagramas de blocos de arquiteturas de computadores exemplificativas. Outros designs e configurações de sistemas conhecidos na técnica para laptops, desktops, palmtops, assistentes digitais pessoais, estações de trabalho de engenharia, servidores, dispositivos de rede, hubs de rede, switches, processadores embutidos, processadores de sinais digitais (DSP - digital signal processors) , dispositivos gráficos, dispositivos de jogos eletrônicos, set-top boxes, microcontroladores, telefones celulares, reprodutores portáteis de mídia, dispositivos de mão e vários outros dispositivos eletrônicos também são adequados. Em geral, é adequada uma grande variedade de sistemas ou dispositivos eletrônicos capaz de incorporar um processador e/ou outra lógica de execução tal como aqui divulgado.
[0080] Referindo-nos agora à Figura 9, é mostrado um diagrama de blocos de um sistema 900, de acordo com uma forma de realização da presente invenção. O sistema 900 pode incluir um ou mais processadores 910, 915, os quais são acoplados a um hub controlador 920. Em uma forma de realização, o hub controlador 920 inclui um hub controlador de memória gráfica (GMCH - graphics memory controller hub) 99 0 e um hub de entrada/saída (IOH -Input/Output Hub) 950 (que podem estar em chips separados); o GMCH 990 inclui controladores de memória e gráficos aos quais é acoplada memória 940 e um coprocessador 945; o IOH 950 acopla dispositivos de entrada/saída (I/O) 96 0 ao GMCH 990. Em alternativa, um ou ambos os controladores de memória e de gráficos são integrados no interior do processador (tal como aqui descrito) ; a memória 940 e o coprocessador 945 são acoplados diretamente ao processador 910 e ao hub controlador 920 em um único chip com o IOH 950.
[0081] A natureza opcional de processadores adicionais 915 está expressa na Figura 9, com linhas tracejadas. Cada processador 910, 915 pode incluir um ou mais dos núcleos de processamento aqui descritos e pode ser uma versão do processador 800.
[0082] A memória 940 pode ser, por exemplo, memória dinâmica de acesso aleatório (DRAM - dynamic random access memory) , memória de mudança de fase (PCM - phase change memory) ou uma combinação das duas. Em pelo menos uma forma de realização, o hub controlador 920 comunica com o(s) processador (es) 910, 915 através de um barramento multidrop, tal como um barramento frontal (FSB - frontside bus), uma interface ponto-a-ponto tal como QuickPath Interconnect (QPI) ou conexão similar 995.
[0083] Em uma forma de realização, o coprocessador 945 é um processador de utilização especifica, tal como, por exemplo, um processador MIC de alto débito, um processador de rede ou de comunicação, um motor de compressão, um processador de gráficos, um GPGPU, um processador embutido ou semelhantes. Em uma forma de realização, o hub controlador 920 pode incluir um acelerador de gráficos integrado.
[0084] Pode haver várias diferenças entre os recursos físicos 910, 915 no que toca a diversos aspectos relevantes, incluindo características de arquitetura, de microarquitetura, térmicas, de consumo de energia e semelhantes.
[0085] Em uma forma de realização, o processador 910 executa instruções que controlam as operações de processamento de dados de tipo geral. É possível que existam instruções de coprocessador embutidas nas instruções. O processador 910 reconhece estas instruções de coprocessador como sendo de um tipo que deve ser executado pelo coprocessador associado 945. Assim, o processador 910 emite estas instruções de coprocessador (ou sinais de controle que representam instruções de coprocessador) em um barramento de coprocessador ou em outra interconexão para o coprocessador 945. 0(s) coprocessador(es) 945 aceita(m) e executa(m) as instruções de coprocessador recebidas.
[0086] Referindo-nos agora à Figura 10, é mostrado um diagrama de um primeiro exemplo de sistema mais específico 1000, de acordo com uma forma de realização da presente invenção. Tal como mostrado na Figura 10, o sistema de multiprocessador 1000 é um sistema de interconexão ponto-a-ponto e inclui um primeiro processador 1070 e um segundo processador 1080 acoplados através de uma interconexão ponto-a-ponto 1050. Cada um dos processadores 1070 e 1080 pode ser uma versão do processador 800. Em uma forma de realização da invenção, os processadores 1070 e 1080 são, respetivamente, os processadores 910 e 915, enquanto o coprocessador 1038 é o coprocessador 945. Em uma outra forma de realização, os processadores 1070 e 1080 são, respetivamente, o processador 910 coprocessador 945.
[0087] Os processadores 1070 e 1080 são apresentados incluindo as unidades de controlador de memória integrado (IMC) 1072 e 1082, respetivamente. 0 processor 1070 também inclui como parte das suas unidades de controlador de barramento as interfaces ponto-a-ponto (PP) 1076 e 1078; da mesma forma, o segundo processador 1080 inclui as interfaces PP 1086 e 1088. Os processadores 1070, 1080 podem trocar informação através de uma interface ponto-a-ponto (PP) 1050 utilizando circuitos de interface PP 1078, 1088. Tal como mostrado na Figura 10, os IMCs 1072 e 1082 acoplam os processadores às respetivas memórias, nomeadamente uma memória 1032 e uma memória 1034, que podem ser porções da memória principal localmente ligada aos respetivos processadores.
[0088] Os processadores 1070, 1080 podem ambos trocar informação com um chipset 1090 através de interfaces PP individuais 1052, 1054 utilizando circuitos de interface ponto-a-ponto 1076, 1094, 1086, 1098. O chipset 1090 pode, opcionalmente, trocar informação com o coprocessador 1038 através de uma interface de alto desempenho 1039. Em uma forma de realização, o coprocessador 1038 é um processador de utilização especifica, tal como, por exemplo, um processador MIC de alto débito, um processador de rede ou de comunicação, um motor de compressão, um processador de gráficos, um GPGPU, um processador embutido ou semelhantes.
[0089] Um cache compartilhado (não mostrado) pode ser incluído em qualquer um dos processadores ou fora de ambos os processadores, mas conectado com os processadores através de uma interconexão PP, de tal modo que a informação do cache local de cada um ou de ambos os processadores pode ser armazenada no cache compartilhado caso um processador seja colocado em um modo de baixo consumo.
[0090] O chipset 1090 pode ser acoplado a um primeiro barramento 1016 através de uma interface 1096. Em uma forma de realização, o primeiro barramento 1016 pode ser um barramento PCI (Peripheral Component Interconnect), um barramento tipo PCI Express ou outro barramento de interconexão I/O de terceira geração, embora o âmbito da presente invenção não seja tão limitado.
[0091] Tal como apresentado na Figura 10, vários dispositivos I/O 1014 podem ser acoplados ao primeiro barramento 1016, juntamente com uma ponte (bridge) de barramento 1018, que acopla o primeiro barramento 1016 a um segundo barramento 1020. Em uma forma de realização, um ou mais processadores adicionais 1015, tais como coprocessadores, processadores MIC de alto débito, GPGPUSf aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinal digital [DSP - digital signal processing] ) , matrizes de portas programáveis em campo (field programmable gate arrays) ou qualquer outro processador são acoplados ao primeiro barramento 1016. Em uma forma de realização, o segundo barramento 1020 pode ser um barramento de baixa contagem de pinos (LPC - low pin count) . Vários dispositivos podem ser acoplados a um segundo barramento 1020 incluindo, por exemplo, um teclado e/ou mouse 1022, dispositivos de comunicação 1027 e uma unidade de armazenamento 1028, tal como uma unidade de disco ou outro dispositivo de armazenamento de massa, que podem incluir instruções/código e dados 1030, em uma forma de realização. Além disso, um 1/0 de áudio 1024 pode ser acoplado ao segundo barramento 1020. Observe que são possíveis outras arquiteturas. Por exemplo, em vez da arquitetura ponto-a-ponto da Figura 10, um sistema pode implementar um barramento multidrop ou outra arquitetura semelhante.
[0092] Referindo-nos agora à Figura 11, é mostrado um diagrama de blocos de um segundo exemplo de sistema mais específico 1100, de acordo com uma forma de realização da presente invenção. Elementos semelhantes nas Figuras 10 e 11 utilizam numerais semelhantes como referência e certos aspectos da Figura 10 foram omitidos da Figura 11, de modo a evitar obscurecer outros aspectos da Figura 11.
[0093] A Figura 11 ilustra que os processadores 1070, 1080 podem incluir memória integrada e lógica de controle 1/0 (CL - control logic) 1072 e 1082, respetivamente. Assim, a CL 1072, 1082 inclui unidades de controlador de memória integrado e inclui lógica de controle I/O. A Figura 11 ilustra que não só as memórias 1032, 1034 são acopladas à CL 1072, 1082, mas que os dispositivos de I/O 1114 também são acoplados à lógica de controle 1072, 1082. Os dispositivos de I/O da tecnologia anterior (legacy) 1115 são acoplados ao chipset 1090.
[0094] Referindo-nos agora à Figura 12, é mostrado um diagrama de blocos de um SoC 1200, de acordo com uma forma de realização da presente invenção. Elementos semelhantes na Figura 8 utilizam numerais de referência semelhantes. Além disso, as caixas desenhadas com linhas tracejadas são características opcionais em SoCs mais avançados. Na Figura 12, uma unidade(s) de interconexão 1202 é acoplada a: um processador de aplicações 1210 que inclui um conjunto de um ou mais núcleos 202A-N e unidade(s) de cache compartilhado(s) 806; uma unidade de agente de sistema 810; uma unidade(s) de controlador de barramento 816; uma unidade(s) de controlador de memória integrado 814; um conjunto ou um ou mais coprocessadores 1220 que poderão incluir lógica de gráficos integrados, um processador de imagem, um processador de áudio e um processador de vídeo; uma unidade de memória estática de acesso aleatório (SRAM - static random access memory) 1230; uma unidade de acesso direto à memória (DMA -direct memory access) 1232; e uma unidade de exibição 1240 para o acoplamento a uma ou mais telas externas. Em uma forma de realização, o(s) coprocessador(es) 1220 incluem um processador de utilização específica, tal como, por exemplo, um processador de rede ou de comunicação, um motor de compressão, um GPGPU, um processador MIC de alto débito, um processador embutido ou semelhantes.
[0095] As formas de realização dos mecanismos aqui descritos podem ser implementadas em hardware, software, firmware ou em uma combinação destas abordagens de implementação. As formas de realização da invenção podem ser implementadas como programas de computador ou código de programa executável em sistemas programáveis que compreendam pelo menos um processador, um sistema de armazenamento (incluindo a memória volátil e não volátil e/ou elementos de armazenamento), pelo menos um dispositivo de entrada e pelo menos um dispositivo de saida.
[0096] O código de programa, tal como o código 1030 ilustrado na Figura 10, pode ser aplicado a instruções de entrada para realizar as funções aqui descritas e gerar informação de saida. A informação de saida pode ser aplicada a um ou mais dispositivos de saida, de forma conhecida. Para a finalidade desta aplicação, um sistema de processamento inclui qualquer sistema que possua um processador, tal como, por exemplo, um processador de sinal digital (DSP), um microcontrolador, um circuito integrado de aplicação especifica (ASIC) ou um microprocessador.
[0097] 0 código do programa pode ser implementado em uma linguagem de programação de alto nivel procedimental ou orientada a objetos para comunicar com um sistema de processamento. O código do programa também pode ser implementado em assembly ou código de máquina, se desejado. De fato, o âmbito dos mecanismos aqui descritos não se limita a qualquer linguagem de programação em particular. Em qualquer caso, a linguagem poderá ser uma linguagem compilada ou interpretada.
[0098] Um ou mais aspectos de pelo menos uma forma de realização pode(m) ser implementado(s) por instruções representativas armazenadas em uma midia legível pela máquina, representando várias lógicas no interior do processador, que, quando lidas por uma máquina, fazem com que a máquina produza lógica para realizar as técnicas aqui descritas. Tais representações, conhecidas como "IP cores", podem ser armazenadas em uma midia tangível, legível pela máquina e fornecidas a vários clientes ou unidades de produção para serem carregadas nas máquinas de fabricação que realmente produzem a lógica ou processador.
[0099] Tais mídias de armazenamento legíveis por máquina podem incluir, sem limitação, arranjos não-temporários, tangíveis, de artigos fabricados ou formados por uma máquina ou dispositivo, incluindo mídias de armazenamento, tais como discos rígidos, qualquer outro tipo de disco, incluindo disquetes, discos óticos, CD-ROMs, CD-RWs e discos magneto-óticos, dispositivos semicondutores, tais como memória somente de leitura (ROM), memória de acesso aleatório (RAM), memória dinâmica de acesso aleatório (DRAM), memória estática de acesso aleatório (SRAM), memória apagável programável somente de leitura (EPROM), memória flash, memória eletricamente apagável programável somente de leitura (EEPROM), memória de mudança de fase (PCM), cartões magnéticos ou ópticos ou qualquer outro tipo de mídia adequado para armazenar instruções eletrônicas.
[00100] Assim, as formas de realização da invenção incluem também mídias não-temporárias, tangíveis, legíveis por máquina contendo instruções ou contendo dados de design, tais como Hardware Description Language (HDL), que definam estruturas, circuitos, aparelhos, processadores e/ou funções de sistema aqui descritos. Tais formas de realização também podem ser referidas como produtos de programa.
Emulação (Incluindo tradução binária, transformação de código [code morphing], etc.) [00101] Em alguns casos, um conversor de instruções pode ser utilizado para converter uma instrução de um conjunto de instruções de origem para um conjunto de instruções de destino. Por exemplo, o conversor de instruções pode traduzir (por exemplo, utilizando tradução binária estática ou tradução binária dinâmica incluindo compilação dinâmica), transformar, emular ou de outra forma converter uma instrução para uma ou mais instruções a serem processadas pelo núcleo. O conversor de instruções pode ser implementado em software, hardware, firmware ou em uma combinação destes. 0 conversor de instrução pode estar dentro do processador, fora do processador ou parcialmente dentro e parcialmente fora do processador.
[00102] A Figura 13 é um diagrama de blocos que contrasta a utilização de um conversor de instruções de software para converter instruções binárias de um conjunto de instruções de origem em instruções binárias de um conjunto de instruções de destino pretendido, de acordo com formas de realização da invenção. Na forma de realização ilustrada, o conversor de instruções é um conversor de instruções de software, embora alternativamente o conversor de instruções possa ser implementado em software, firmware, hardware ou em diversas combinações destes. A Figura 13 mostra que um programa em uma linguagem de alto nivel 1302 pode ser compilado utilizando um compilador x86 1304 para gerar código binário x86 1306, que pode ser nativamente executado por um processador com pelo menos um núcleo com um conjunto de instruções x86 1316. O processador com pelo menos um núcleo com um conjunto de instruções x86 1316 representa qualquer processador que possa executar substancialmente as mesmas funções que um processador Intel com pelo menos um núcleo com um conjunto de instruções x86, executando compativelmente ou processando, de alguma forma, (1) uma porção substancial do conjunto de instruções do núcleo Intel com um conjunto de instruções x86 ou (2) versões de código objeto de aplicações ou outro software destinado a ser executado em um processador Intel com pelo menos um núcleo com um conjunto de instruções x86, de modo a atingir substancialmente o mesmo resultado que um processador Intel com pelo menos um núcleo com um conjunto de instruções x86. O compilador x86 1304 representa um compilador que é operável, de forma a gerar código binário x86 1306 (por exemplo, código objeto) que pode, com ou sem ligações de processamento adicionais, ser executado no processador com pelo menos um núcleo com um conjunto de instruções x86 1316. Da mesma forma, a Figura 13 mostra que o programa na linguagem de alto nivel 1302 pode ser compilado utilizando um compilador do conjunto alternativo de instruções 1308 para gerar código binário de conjunto alternativo de instruções 1310, que pode ser nativamente executado por um processador sem pelo menos um núcleo com um conjunto de instruções x86 1314 (por exemplo, um processador com núcleos que executam o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA e/ou que executam o conjunto de instruções ARM da ARM Holdings de Sunnyvale, CA) . O conversor de instruções 1312 é usado para converter o código binário x86 1306 em um código que pode ser nativamente executado pelo processador sem um núcleo com um conjunto de instruções x86 1314. Não é provável que este código convertido seja igual ao código binário do conjunto de instruções alternativo 1310 porque é difícil de criar um conversor de instruções capaz de fazer isso; no entanto, o código convertido irá realizar a operação em geral e será constituído por instruções do conjunto de instruções alternativo. Assim, o conversor de instruções 1312 representa o software, firmware, hardware ou uma combinação destes que, por meio de emulação, simulação ou qualquer outro processo, permite que um processador ou outro dispositivo eletrônico que não tem um processador ou núcleo com um conjunto de instruções x86 executar o código binário x86 1306.
REIVINDICAÇÕES

Claims (25)

1. Aparelho de hardware para melhorar o desempenho de computações dependentes de estado, caracterizado por compreender: hardware decodificador para decodificar uma instrução; hardware de recuperação de operandos para recuperar dados a partir de pelo menos um operando de origem associado com a instrução decodificada pelo hardware decodificador; hardware de execução para executar a instrução decodificada para gerar um resultado incluindo pelo menos um bit de estado e para fazer com que o resultado e pelo menos um bit de estado sejam armazenados em um único destino de localização de armazenamento físico, em que pelo menos um bit de estado e o resultado são acessíveis através de uma leitura do registro único.
2. Aparelho de hardware, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda: hardware de renomeação de registros para mapear um registro da arquitetura da instrução para um registro físico e mapear um registro de estado do aparelho para o registro físico.
3. Aparelho de hardware, de acordo com qualquer uma das reivindicações 1 ou 2, caracterizado pelo fato de que o registro físico para armazenar dados nos bits menos significativos e bits de estado nos bits mais significativos.
4. Aparelho de hardware, de acordo com qualquer uma das reivindicações 1 ou 2, caracterizado pelo fato de que o registro físico para armazenar dados em bits mais significativos e bits de estado nos bits menos significativos.
5. Aparelho de hardware, de acordo com qualquer uma das reivindicações 1, 2, 3 ou 4, caracterizado pelo fato de que pelo menos um bit de estado compreende bits para pelo menos uma dentre transporte, sinal, sobrecarga, paridade, zero e ajuste.
6. Aparelho de hardware, de acordo com qualquer uma das reivindicações 1, 2, 3, 4 ou 5, caracterizado pelo fato de que a instrução é uma dentre as operações de ramificação condicional, salto condicional, movimento condicional ou memória condicional.
7. Aparelho de hardware, de acordo com qualquer uma das reivindicações 1, 2, 3, 4, 5 ou 6, caracterizado pelo fato de que a instrução para incluir um código de operação para indicar a instrução é para causar o armazenamento de pelo menos um bit de estado juntamente com o resultado no único destino de localização de armazenamento físico.
8. Aparelho de hardware, de acordo com qualquer uma das reivindicações 1, 2, 3, 4, 5, 6 ou 7, caracterizado pelo fato de que a instrução para incluir um operando de destino para indicar a instrução é para causar o armazenamento de pelo menos um bit de estado, juntamente com o resultado no único destino de localização de armazenamento físico.
9. Aparelho de hardware para melhorar o desempenho de computações dependentes de estado, caracterizado por compreender: hardware decodificador para decodificar uma instrução; hardware de recuperação de operandos para recuperar dados a partir de pelo menos um operando de origem associado com a instrução decodificada pelo hardware decodificador; hardware de execução para executar a instrução decodificada para realizar condicionalmente a uma operação da instrução com base na avaliação da condição de estado do registro físico com pelo menos uma origem, em que o operando de origem inclui pelo menos um bit de estado para além dos dados.
10. Aparelho de hardware, de acordo com a reivindicação 9, caracterizado pelo fato de que compreende ainda: hardware de renomeação de registros para mapear um registro da arquitetura da instrução para um registro físico e mapear um registro de estado do aparelho para o registro físico.
11. Aparelho de hardware, de acordo com qualquer uma das reivindicações 9, 10 ou 11, caracterizado pelo fato de que o registro físico para armazenar dados nos bits menos significativos e bits de estado nos bits mais significativos.
12. Aparelho de hardware, de acordo com qualquer uma das reivindicações 9, 10 ou 11, caracterizado pelo fato de que o registro físico para armazenar dados em bits mais significativos e bits de estado nos bits menos significativos.
13. Aparelho de hardware, de acordo com qualquer uma das reivindicações 9, 10, 11 ou 12, caracterizado pelo fato de que o pelo menos um bit de estado compreende bits para pelo menos uma dentre transporte, sinal, sobrecarga, paridade, zero e ajuste.
14. Aparelho de hardware, de acordo com qualquer uma das reivindicações 9, 10, 11, 12 ou 13, caracterizado pelo fato de que a instrução é uma dentre as operações de ramificação condicional, salto condicional, movimento condicional ou memória condicional.
15. Aparelho de hardware, de acordo com qualquer uma das reivindicações 9, 10, 11, 12, 13 ou 14, caracterizado pelo fato de que a instrução para incluir um código de operação para indicar a instrução é para ler a informação de estado do registro físico de origem que inclui pelo menos um bit de estado e dados.
16. Aparelho de hardware, de acordo com qualquer uma das reivindicações 9, 10, 11, 12, 13, 14 ou 15, caracterizado pelo fato de que a instrução para incluir uma indicação de que o registro físico de origem é para armazenar pelo menos um bit de estado e dados.
17. Aparelho de hardware, de acordo com qualquer uma das reivindicações 9, 10, 11, 12, 13, 14, 15 ou 16, caracterizado pelo fato de que a instrução para incluir um operando destino.
18. Aparelho de hardware, de acordo com qualquer uma das reivindicações 9, 10, 11, 12, 13, 14, 15, 16 ou 17, caracterizado pelo fato de que a instrução para incluir um operando de offset.
19. Aparelho de hardware para melhorar o desempenho de computações dependentes de estado, caracterizado por compreender: dispositivo de decodificador para decodificar uma instrução; dispositivo de recuperação de operandos para recuperar dados a partir de pelo menos um operando de origem associado com a instrução decodificada pelo hardware decodificador; dispositivo de execução para executar a instrução decodificada para gerar um resultado incluindo pelo menos um bit de estado e para fazer com que o resultado e pelo menos um bit de estado sejam armazenados em um único destino de localização de armazenamento fisico, em que pelo menos um bit de estado e o resultado são acessíveis através de uma leitura do registro único.
20. Aparelho de hardware, de acordo com a reivindicação 19, caracterizado pelo fato de que compreende ainda: dispositivo de renomeação de registros para mapear um registro da arquitetura da instrução para um registro fisico e mapear um registro de estado do aparelho para o registro fisico.
21. Aparelho de hardware, de acordo com qualquer uma das reivindicações 19 ou 20, caracterizado pelo fato de que o registro fisico para armazenar dados nos bits menos significativos e bits de estado nos bits mais significativos.
22. Aparelho de hardware, de acordo com qualquer uma das reivindicações 19 ou 20, caracterizado pelo fato de que o registro fisico para armazenar dados em bits mais significativos e bits de estado nos bits menos significativos.
23. Aparelho de hardware, de acordo com qualquer uma das reivindicações 19, 20, 21 ou 22, caracterizado pelo fato de que pelo menos um bit de estado compreende bits para pelo menos uma dentre transporte, sinal, sobrecarga, paridade, zero e ajuste.
24. Aparelho de hardware, de acordo com qualquer uma das reivindicações 19, 20, 21, 22 ou 23, caracterizado pelo fato de que a instrução é uma dentre as operações de ramificação condicional, salto condicional, movimento condicional ou memória condicional.
25. Aparelho de hardware, de acordo com qualquer uma das reivindicações 19, 20, 21, 22, 23 ou 24, caracterizado pelo fato de que a instrução para incluir um código de operação para indicar a instrução é para causar o armazenamento de pelo menos um bit de estado juntamente com o resultado no único destino de localização de armazenamento fisico.
BR102016012096-9A 2015-06-27 2016-05-27 Hardware apparatus to improve performance of state dependent computers BR102016012096A2 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/752,887 US20160378480A1 (en) 2015-06-27 2015-06-27 Systems, Methods, and Apparatuses for Improving Performance of Status Dependent Computations
US14/752,887 2015-06-27

Publications (1)

Publication Number Publication Date
BR102016012096A2 true BR102016012096A2 (pt) 2017-11-07

Family

ID=56117513

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102016012096-9A BR102016012096A2 (pt) 2015-06-27 2016-05-27 Hardware apparatus to improve performance of state dependent computers

Country Status (8)

Country Link
US (1) US20160378480A1 (pt)
EP (1) EP3109754A1 (pt)
JP (1) JP6253706B2 (pt)
KR (1) KR20170001578A (pt)
CN (1) CN106293628A (pt)
BR (1) BR102016012096A2 (pt)
DE (1) DE102016006560A1 (pt)
TW (1) TW201712530A (pt)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6795992B2 (ja) 2017-02-01 2020-12-02 西川ゴム工業株式会社 防音材
US11366663B2 (en) 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
CN111338640B (zh) * 2020-02-15 2022-06-07 苏州浪潮智能科技有限公司 一种可动态调整的非对称指令重链接方法和装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6006324A (en) * 1995-01-25 1999-12-21 Advanced Micro Devices, Inc. High performance superscalar alignment unit
US6604190B1 (en) * 1995-06-07 2003-08-05 Advanced Micro Devices, Inc. Data address prediction structure and a method for operating the same
US5864707A (en) * 1995-12-11 1999-01-26 Advanced Micro Devices, Inc. Superscalar microprocessor configured to predict return addresses from a return stack storage
US6263416B1 (en) * 1997-06-27 2001-07-17 Sun Microsystems, Inc. Method for reducing number of register file ports in a wide instruction issue processor
US6230262B1 (en) * 1998-07-31 2001-05-08 Advanced Micro Devices, Inc. Processor configured to selectively free physical registers upon retirement of instructions
US6986023B2 (en) * 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
US7386705B2 (en) * 2002-08-27 2008-06-10 Mosaid Technologies Inc. Method for allocating processor resources and system for encrypting data
GB2402763B (en) * 2003-06-13 2006-03-01 Advanced Risc Mach Ltd Data access program instruction encoding
US7234044B1 (en) * 2003-12-03 2007-06-19 Altera Corporation Processor registers having state information
WO2007145319A1 (ja) * 2006-06-15 2007-12-21 Nec Corporation プロセッサ、および、命令制御方法
JP4228241B2 (ja) * 2006-12-13 2009-02-25 ソニー株式会社 演算処理装置
GB2488980B (en) * 2011-03-07 2020-02-19 Advanced Risc Mach Ltd Address generation in a data processing apparatus
US9367314B2 (en) * 2013-03-15 2016-06-14 Intel Corporation Converting conditional short forward branches to computationally equivalent predicated instructions
US9304940B2 (en) * 2013-03-15 2016-04-05 Intel Corporation Processors, methods, and systems to relax synchronization of accesses to shared memory

Also Published As

Publication number Publication date
KR20170001578A (ko) 2017-01-04
JP6253706B2 (ja) 2017-12-27
US20160378480A1 (en) 2016-12-29
DE102016006560A1 (de) 2016-12-29
TW201712530A (zh) 2017-04-01
JP2017016640A (ja) 2017-01-19
CN106293628A (zh) 2017-01-04
EP3109754A1 (en) 2016-12-28

Similar Documents

Publication Publication Date Title
US11645135B2 (en) Hardware apparatuses and methods for memory corruption detection
US20170212825A1 (en) Hardware profiling mechanism to enable page level automatic binary translation
KR101964350B1 (ko) 다중 레지스터 메모리 액세스 명령어들, 프로세서들, 방법들 및 시스템들
KR101597774B1 (ko) 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들
RU2612597C1 (ru) Процессоры, способы, системы и команды с предикацией элементов упакованных данных
BR102014005801A2 (pt) rastreamento de fluxo de controle de instruções
US20170286302A1 (en) Hardware apparatuses and methods for memory performance monitoring
CN109508206B (zh) 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统
KR101817459B1 (ko) 1들을 최하위 비트들이 되도록 풀링하면서 비트들을 좌측으로 시프팅하기 위한 명령어
JP2015534188A (ja) ユーザレベルのスレッディングのために即時のコンテキスト切り替えを可能とする新規の命令および高度に効率的なマイクロアーキテクチャ
BR102014006021A2 (pt) processadores, métodos e sistemas para relaxamento de sincronização de acesso á memória compartilhada
TWI465920B (zh) 結構存取處理器、方法、系統及指令
BR102020019649A2 (pt) aparelho e método para agendar adaptativamente o trabalho em recursos de processamento heterogêneo
JP5806748B2 (ja) 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法
CN114490444A (zh) 用于与缓存数据相对应的元数据的选择性存储的隔离存储器
JP2018500659A (ja) 高速ベクトルによる動的なメモリ競合検出
BR102016012096A2 (pt) Hardware apparatus to improve performance of state dependent computers
US10877765B2 (en) Apparatuses and methods to assign a logical thread to a physical thread
US20230315501A1 (en) Performance Monitoring Emulation in Translated Branch Instructions in a Binary Translation-Based Processor
WO2019133091A1 (en) Apparatus and method for vectored machine check bank reporting
US20220413859A1 (en) System, apparatus and methods for performant read and write of processor state information responsive to list instructions
CN112579160A (zh) 用于具有减少的硬件要求的存储配对的装置和方法

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]
B08F Application dismissed because of non-payment of annual fees [chapter 8.6 patent gazette]

Free format text: REFERENTE A 3A ANUIDADE.

B08K Patent lapsed as no evidence of payment of the annual fee has been furnished to inpi [chapter 8.11 patent gazette]

Free format text: EM VIRTUDE DO ARQUIVAMENTO PUBLICADO NA RPI 2524 DE 21-05-2019 E CONSIDERANDO AUSENCIA DE MANIFESTACAO DENTRO DOS PRAZOS LEGAIS, INFORMO QUE CABE SER MANTIDO O ARQUIVAMENTO DO PEDIDO DE PATENTE, CONFORME O DISPOSTO NO ARTIGO 12, DA RESOLUCAO 113/2013.