BR112019009566A2 - aparelhos e métodos para uma arquitetura de processador - Google Patents

aparelhos e métodos para uma arquitetura de processador Download PDF

Info

Publication number
BR112019009566A2
BR112019009566A2 BR112019009566A BR112019009566A BR112019009566A2 BR 112019009566 A2 BR112019009566 A2 BR 112019009566A2 BR 112019009566 A BR112019009566 A BR 112019009566A BR 112019009566 A BR112019009566 A BR 112019009566A BR 112019009566 A2 BR112019009566 A2 BR 112019009566A2
Authority
BR
Brazil
Prior art keywords
cache
instruction
modalities
micro
processor
Prior art date
Application number
BR112019009566A
Other languages
English (en)
Inventor
L Toll Bret
M Guy Buford
J Hughes Christopher
Papworth David
T Grochowski Edward
Ould-Ahmed-Vall Elmoustapha
D Allen James
W Brandt Jason
Corbal Jesus
Rappoport Lihu
S Chappell Robert
Singhal Ronak
Yahya Sotoudeh Seyed
H Gunther Stephen
R Huff Thomas
Original Assignee
Intel Corp
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 Corp filed Critical Intel Corp
Publication of BR112019009566A2 publication Critical patent/BR112019009566A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

são divulgadas modalidades de uma invenção de uma arquitetura de processador. em uma modalidade, um processador inclui um decodificador, uma unidade de execução, um cache coerente e uma interconexão. o decodificador é para decodificar uma instrução para zerar uma linha de cache. a unidade de execução é para emitir um comando de gravação para iniciar uma gravação de zeros no tamanho da linha de cache. o cache coerente é para receber o comando de gravação, para determinar se existe um golpe no cache coerente e se um estado do protocolo de coerência de cache da linha de cache com golpe é um estado modificado ou um estado exclusivo, para configurar uma linha de cache para indicar todos os zeros, e para emitir o comando de gravação para a interconexão. a interconexão é para, reativa à recepção do comando de gravação, emitir uma espionagem para cada um de uma pluralidade de outros caches coerentes para os quais deve ser determinado se há um golpe.

Description

Relatório Descritivo da Patente de Invenção para APARELHOS E MÉTODOS PARA UMA ARQUITETURA DE PROCESSADOR.
CAMPO DA INVENÇÃO [001] O campo da invenção refere-se geralmente a computadores e, mais especificamente, a arquiteturas de processadores.
ANTECEDENTES [002] Os processadores incluem muitos circuitos e estruturas interconectados que funcionam juntos para executar instruções e processar informações. Esses circuitos e estruturas e os recursos que eles fornecem podem ser incluídos em um processador em muitas configurações e combinações diferentes.
BREVE DESCRIÇÃO DOS DESENHOS [003] A presente invenção é ilustrada a título de exemplo e não limitação nas figuras dos desenhos em anexo, em que referências semelhantes indicam elementos semelhantes e em que:
[004] a Figura 1A é um diagrama em bloco ilustrando quer um exemplo de arquitetura entubada em ordem quer um exemplo de um renomeamento de registro, arquitetura entubada de emissão/execução fora de ordem de acordo com modalidades da invenção;
[005] a Figura 1B é um diagrama em bloco ilustrando uma modalidade exemplar de um núcleo de arquitetura em ordem e um renomeamento de registro exemplar, núcleo de arquitetura entubada de emissão/execução fora de ordem a ser incluído em um processador de acordo com as modalidades da invenção;
[006] as Figuras 2A-B ilustram um diagrama em bloco de uma arquitetura de núcleo exemplar mais específica, cujo núcleo seria um dos vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou tipos diferentes) em um chip;
Petição 870190044159, de 10/05/2019, pág. 16/318
2/232 [007] a Figura 2A é um diagrama em bloco de um único núcleo de processador, juntamente com sua conexão com a rede de interconexão em pastilha 202 e com seu subconjunto local do cache 204 de Nível 2 (L2), de acordo com as modalidades da invenção;
[008] a Figura 2B é uma vista expandida de uma parte do núcleo de processador na Figura 2A, de acordo com modalidades da invenção;
[009] a Figura 3 é um diagrama em bloco de um núcleo de processador de emissão/execução fora de ordem ilustrativo que pode ser incluído em um processador de acordo com modalidades da invenção;
[0010] a Figura 4 é um diagrama em bloco de uma unidade de busca ilustrativa que pode ser incluída em um núcleo de processador, tal como o da Figura 3, e/ou um processador de acordo com as modalidades da invenção;
[0011] a Figura 5 é um diagrama em bloco de uma unidade de decodificação ilustrativa que pode ser incluída em um núcleo de processador, tal como o da Figura 3, e/ou um processador de acordo com modalidades da invenção;
[0012] a Figura 6 é um diagrama em bloco de uma unidade de execução inteira ilustrativa que pode ser incluída em um núcleo de processador, tal como o da Figura 3 e/ou um processador de acordo com modalidades da invenção;
[0013] a Figura 7 é um diagrama em bloco de uma unidade de execução de virgula flutuante (FP - floating-point) ilustrativa que pode ser incluída em um núcleo de processador, tal como o da Figura 3, ou um processador de acordo com modalidades da invenção;
[0014] a Figura 8 é um diagrama em bloco de uma unidade de carga/armazenamento ilustrativa que pode ser incluída em um núcleo de processador, tal como o da Figura 3, ou um processador de acordo
Petição 870190044159, de 10/05/2019, pág. 17/318
3/232 com modalidades da invenção;
[0015] a Figura 9 é um diagrama em bloco de um núcleo de processador de emissão/execução fora de ordem ilustrativo, tal como o da Figura 3, suportando multiencadeamento (SMT - multi-threading) simultâneo em um processador de acordo com modalidades da invenção;
[0016] a Figura 10 é um diagrama em bloco ilustrando um recurso de particionamento estático SMT que pode ser incluído em um processador de acordo com algumas modalidades;
[0017] a Figura 11 é um diagrama de fluxo ilustrando um método para um recurso de particionamento estático SMT que pode ser realizado por um processador de acordo com algumas modalidades;
[0018] a Figura 12 é um diagrama em bloco ilustrando um alocador de recursos que pode ser incluído em um processador de acordo com algumas modalidades;
[0019] a Figura 13 é um diagrama em bloco ilustrando um recurso SMT algorítmico que pode ser incluído em um processador 1300 de acordo com modalidades;
[0020] a Figura 14 é um diagrama de fluxo ilustrando um método para um recurso SMT algorítmico que pode ser realizado por um processador de acordo com modalidades;
[0021] a Figura 15 é um diagrama em bloco ilustrando um recurso SMT algorítmico que pode ser incluído em um processador de acordo com modalidades;
[0022] a Figura 16 mostra um diagrama em bloco implementando um algoritmo de prioridade do preditor de ramificação de acordo com uma modalidade exemplar;
[0023] a Figura 17 é um diagrama em bloco ilustrando um circuito de arbitragem para um recurso de comutação de segmento SMT que pode ser incluído em um processador de acordo com modalidades;
Petição 870190044159, de 10/05/2019, pág. 18/318
4/232 [0024] a Figura 18 é um diagrama em bloco ilustrando um hardware de impedimento de bloqueio 1800 que pode ser incluído em um processador de acordo com modalidades;
[0025] a Figura 19 é um diagrama mostrando uma carga de 256 bits para um arquivo de registro de 256 bits usando um par de pops de 128 bits, de acordo com algumas modalidades;
[0026] a Figura 20 é um diagrama ilustrando um processo para carregar um arquivo de registro de 256 bits para um de 256 bits utilizando um par de pops de 128 bits, de acordo com algumas modalidades;
[0027] a Figura 21 é um diagrama mostrando um armazenamento de 256 bits a partir de um arquivo de registro de 256 bits usando pops de 128 bits, de acordo com algumas modalidades.
[0028] a Figura 22 é um diagrama ilustrando um processo para armazenar 256 bits a partir de um arquivo de registro de 256 bits usando um par de pops de 128 bits, de acordo com algumas modalidades.
[0029] a Figura 23 é um diagrama em bloco ilustrando um recurso para permitir operações aritméticas de 256 bits usando microoperações de 128 bits de acordo com algumas modalidades;
[0030] a Figura 24 é um diagrama em bloco ilustrando operações de pista cruzada usando uma área de armazenamento temporário para armazenar resultados parciais de acordo com algumas modalidades;
[0031] a Figura 25 é um diagrama em bloco ilustrando um recurso de cache micro-op que pode ser incluído em um processador de acordo com modalidades;
[0032] a Figura 26 é um diagrama de fluxo ilustrando um método para um recurso de cache micro-op que pode ser realizado por um processador de acordo com modalidades;
Petição 870190044159, de 10/05/2019, pág. 19/318
5/232 [0033] a Figura 27 é um diagrama em bloco ilustrando um recurso de cache micro-op que pode ser incluído em um processador de acordo com a modalidade;
[0034] a Figura 28 é um diagrama em bloco ilustrando um recurso de cache micro-op que pode ser incluído em um processador de acordo com modalidades;
[0035] a Figura 29 é um diagrama em bloco ilustrando um esquema de renomeamento de registro e seguimento de dependência envolvendo uma tabela de pseudônimo de registro (RAT - register alias table) de acordo com modalidades;
[0036] a Figura 30 é um diagrama em bloco ilustrando uma RAT estendida para incluir idioma zero, extensão de sinal e extensão zero de acordo com modalidades;
[0037] a Figura 31 é um diagrama em bloco ilustrando a leitura de bits de RAT estendidos durante o renomeamento de registradores e passando-os pela arquitetura entubada com a micro-op que lê o registrador de acordo com as modalidades;
[0038] a Figura 32 é um diagrama em bloco ilustrando um recurso de renomeamento de registro virtual que pode ser incluído em um processador de acordo com modalidades;
[0039] a Figura 33 é um diagrama de fluxo ilustrando um método para um recurso de renomeamento de registro virtual que pode ser realizado por um processador de acordo com modalidades;
[0040] a Figura 34 é um diagrama em bloco ilustrando uma arquitetura entubada de emissão/execução que pode ser implementada em um núcleo de processador que suporta um recurso de fissão/fusão com de multiplicação adição fundida (FMA - fused multiply-add) de acordo com modalidades da invenção;
[0041] a Figura 35 é um diagrama de fluxo ilustrando um método para fissão/fusão FMA que pode ser realizado por um processador de
Petição 870190044159, de 10/05/2019, pág. 20/318
6/232 acordo com modalidades da invenção;
[0042] a Figura 36 é um diagrama em bloco de um processador que pode ter mais do que um núcleo, pode ter um controlador de memória integrado e pode ter gráficos integrados de acordo com modalidades da invenção;
[0043] a Figura 37 é um diagrama em bloco de um complexo ilustrativo de unidade de processamento central (CPU - central processing unit) que pode ser incluído em um processador de acordo com modalidades da invenção;
[0044] a Figura 38 é um diagrama em bloco de uma hierarquia de cache ilustrativa que pode ser incluída em um processador de acordo com modalidades da invenção;
[0045] a Figura 39 é um diagrama em bloco ilustrando uma hierarquia de memória dentro da qual uma instrução de zeramento de linha de cache pode ser implementada de acordo com as modalidades;
[0046] a Figura 40 é um diagrama em bloco ilustrando um cache em um processador que implementa uma instrução de zeramento de linha de cache de acordo com modalidades;
[0047] a Figura 41 é um diagrama de fluxo ilustrando as modalidades da invenção que primeiro tentam gravar em um cache do agente emissor antes de usar espionagem;
[0048] a Figura 42 é um diagrama de fluxo ilustrando modalidades da invenção que dependem de espionagem dos caches coerentes;
[0049] a Figura 43 é um diagrama de fluxo ilustrando modalidades da invenção em que usam espionagem de atualização de gravação para implementar o processo de espionagem;
[0050] a Figura 44 é um diagrama de fluxo ilustrando as modalidades da invenção que usam espionagem de invalidação de gravação para implementar o processo de espionagem.
Petição 870190044159, de 10/05/2019, pág. 21/318
7/232 [0051] a Figura 45 é um diagrama de fluxo ilustrando modalidades da invenção que usam espionagem que invalidam e gravam de volta para implementar o processo de espionagem;
[0052] a Figura 46 é um diagrama de fluxo ilustrando as modalidades da invenção que usam espionagem que grava qualquer linha de cache que acerta, mas não envia os dados de volta ao primeiro agente e não resulta na leitura dos dados da memória a jusante para implementar o processo de espionagem;
[0053] a Figura 47 é um diagrama ilustrando um recurso de coalescência de página que pode ser incluído em um processador de acordo com algumas modalidades;
[0054] a Figura 48 é um diagrama de fluxo ilustrando um método para coalescer entradas de tabela de páginas em uma única página efetiva de acordo com algumas modalidades;
[0055] as Figuras 49 - 52 são diagramas em bloco de arquiteturas de computador exemplares;
[0056] a Figura 49 mostra um diagrama em bloco de um sistema de acordo com uma modalidade da presente invenção;
[0057] a Figura 50 é um diagrama em bloco de um primeiro sistema exemplar mais específico de acordo com uma modalidade da presente invenção;
[0058] a Figura 51 é um diagrama em bloco de um segundo sistema exemplar mais específico de acordo com uma modalidade da presente invenção;
[0059] a Figura 52 é um diagrama em bloco de um sistema em chip (SoC - system-on-chip) de acordo com uma modalidade da presente invenção;
[0060] as Figuras 53A-53B são diagramas em bloco ilustrando um formato genérico de instrução amigável vetorial e padrão de instrução dos mesmos de acordo com modalidades da invenção;
Petição 870190044159, de 10/05/2019, pág. 22/318
8/232 [0061] a Figura 53A é um diagrama em bloco ilustrando um formato genérico de instrução amigável vetorial e padrão de instrução de classe A dos mesmos de acordo com modalidades da invenção;
[0062] a Figura 53B é um diagrama em bloco ilustrando um formato genérico de instrução amigável vetorial e padrão de instrução de classe B dos mesmos de acordo com modalidades da invenção;
[0063] a Figura 54A é um diagrama em bloco ilustrando um formato específico de instrução amigável de vetorial exemplificativo de acordo com modalidades da invenção;
[0064] a Figura 54B é um diagrama em bloco ilustrando os campos de um formato específico de instrução amigável de vetorial que constituem o campo de código de operação completo de acordo com uma modalidade da invenção;
[0065] a Figura 54C é um diagrama em bloco ilustrando os campos de um formato específico de instrução amigável de vetorial que constituem o campo de índice de registro de acordo com uma modalidade da invenção;
[0066] a Figura 54D é um diagrama em bloco ilustrando os campos de um formato específico de instrução amigável de vetorial que constituem o campo de operação de aumento de acordo com uma modalidade da invenção;
[0067] a Figura 55 é um diagrama em bloco de uma arquitetura de registro de acordo com uma modalidade da invenção; e [0068] a Figura 56 é um diagrama em bloco contrastando o uso de um conversor de instruções de software para converter instruções binárias em um conjunto de instruções de origem para instruções binárias em um conjunto de instruções de destino de acordo com modalidades da invenção.
[0069] As Figuras 57-66 são ilustrações de modalidades da invenção em sistemas.
Petição 870190044159, de 10/05/2019, pág. 23/318
9/232
DESCRIÇÃO DETALHADA [0070] Na descrição seguinte, numerosos detalhes específicos são estabelecidos. No entanto, entende-se que as modalidades da invenção podem ser praticadas sem estes detalhes específicos. Em outros casos, circuitos, estruturas e técnicas bem conhecidos não foram mostrados em detalhes para não obscurecer o entendimento dessa descrição.
[0071] Referências na especificação a uma modalidade, uma modalidade de exemplo, etc., indicam que a modalidade descrita pode incluir um recurso, estrutura ou característica particular, mas cada modalidade pode não incluir necessariamente o recurso, estrutura ou característica particular. Além disso, tais frases não se referem necessariamente à mesma modalidade. Além disso, quando um recurso, estrutura ou característica particular é descrito em conexão com uma modalidade, é apresentado que está dentro do conhecimento de um perito na técnica afetar tal recurso, estrutura ou característica em conexão com outras modalidades se ou não explicitamente descrito.
[0072] Um aparelho, tal como um computador, para processar informação pode incluir um ou mais núcleos de processador. Cada núcleo de processador pode incluir uma variedade de circuitos, hardware, estruturas e outros recursos, onde cada um sozinho, ou qualquer número em conjunto, pode ser referido como um recurso. Os recursos podem ser implementados e/ou organizados de várias maneiras, utilizar várias técnicas e estar envolvidos na execução de vários métodos para tentar alcançar níveis desejados, em várias combinações, de desempenho, consumo de energia e/ou outras características (por exemplo, aumentando o desempenho, diminuindo o consumo de energia e implementando recursos de economia de energia e melhorando a imparcialidade, garantias mínimas de
Petição 870190044159, de 10/05/2019, pág. 24/318
10/232 desempenho, produtividade, instruções por clock (IPC - instructions per clock), instruções por unidade de tempo, qualidade de serviço, eficiência de tempo e/ou memória, para listar apenas alguns dos critérios aplicáveis). Modalidades da invenção podem incluir uma ou mais dos recursos descritos nessa especificação. Alguns exemplos de arquiteturas e sistemas em que a invenção pode ser concretizada são fornecidos nas Figuras e descrição nesta especificação [0073] Os núcleos de processador nos quais a invenção pode ser realizada podem ser implementados de maneiras diferentes, para diferentes propósitos e em processadores diferentes. Por exemplo, implementações de tais núcleos podem incluir: 1) um núcleo de propósito geral destinado a computação de propósito geral; 2) um núcleo fora de ordem de propósito geral de alto desempenho destinado à computação de propósito geral; 3) um núcleo de propósito especial destinado principalmente para computação gráfica e/ou científica (rendimento). As implementações de diferentes processadores podem incluir: 1) uma unidade de processamento central (CPU - central processing unit), incluindo um ou mais núcleos de ordem geral destinados a computação de propósito geral e/ou um ou mais núcleos de fora de ordem para uso geral destinados a computação de propósito geral; e 2) um coprocessador que inclui um ou mais núcleos de propósito especial destinados principalmente a computação gráfica e/ou científica (rendimento). Esses processadores diferentes levam a diferentes arquiteturas de sistemas de computador, que podem incluir: 1) o coprocessador em um chip separado da CPU; 2) o coprocessador em uma matriz separada no mesmo pacote que uma CPU; 3) o coprocessador na mesma matriz como uma CPU (nesse caso, tal coprocessador é algumas vezes chamado de lógica de propósito especial, como gráficos integrados e/ou lógica científica (rendimento), ou como núcleos de propósito especial); e 4) um sistema
Petição 870190044159, de 10/05/2019, pág. 25/318
11/232 em um chip (SoC) que pode incluir na mesma matriz a CPU descrita (algumas vezes referida como núcleo(s) de aplicação ou processador(es) de aplicação), o coprocessador descrito acima e funcionalidade adicional.
[0074] Arquiteturas de núcleo exemplificativas descritas a seguir, seguida por descrições de arquiteturas de processadores e computadores exemplificativas. Cada processador pode incluir um ou mais núcleos, onde cada núcleo e/ou combinação de núcleos podem ser arquitetados e projetados para executar um ou mais segmentos, processos ou outras sequências de instruções em vários momentos. Arquiteturas centrais e técnicas de projeto podem fornecer e/ou suportar a execução simultânea de vários segmentos, de acordo com qualquer tipo de abordagem conhecida como multissegmento (SMT) simultâneo (ou simétrico) ou qualquer outra abordagem. Consequentemente, núcleos de processador nos quais a invenção pode ser realizada, incluindo aqueles descritos como exemplos abaixo, podem incluir vários novos recursos arquitetados e projetados para suportar SMT e/ou vários recursos conhecidos modificados de várias maneiras novas para suportar SMT, conforme pode ser descrito abaixo. Para facilitar a descrição, o significado do termo SMT nesta especificação pode incluir SMT em combinação com qualquer outra abordagem para multissegmento (por exemplo, divisão de tempo).
[0075] Como mencionado acima e explicado em mais detalhe abaixo, modalidades da presente divulgação pode ser desejável por uma variedade de razões, incluindo, por exemplo, aumentar o desempenho, diminuir o consumo de energia e implementar recursos de economia de energia e melhorar a imparcialidade, garantias mínimas de desempenho, produtividade, instruções por clock (IPC instructions per clock), instruções por unidade de tempo, qualidade de serviço, eficiência de tempo e/ou memória, para listar apenas alguns
Petição 870190044159, de 10/05/2019, pág. 26/318
12/232 dos critérios aplicáveis. Os critérios desejáveis listados acima e aqui descritos são exemplares; como explicado aqui, a presente divulgação pode ser desejável por qualquer das razões listadas acima, individualmente ou em combinação, e pode ainda ser desejável por razões adicionais não especificamente enumeradas acima.
[0076] Além disso, como mencionado acima e explicado em mais detalhes abaixo, modalidades da presente divulgação podem ser aplicadas a qualquer tipo de processador ou elemento de processamento, incluindo processadores de uso geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, processadores MIC de alto rendimento de coprocessadores (por exemplo, coprocessadores de segurança), GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP - digital signal processing), aceleradores de criptografia, aceleradores de função fixa, aceleradores de aprendizado de máquina, aceleradores de rede ou aceleradores de visão computacional), rede de portas lógicas programáveis ou qualquer outro processador ou dispositivo de processamento. O processador ou processadores podem ser implementados em um ou mais chips. O processador ou processadores 3600 pode ser uma parte de e/ou pode ser implementado em um ou mais substratos usando qualquer uma de várias tecnologias de processo, tais como, por exemplo, BiCMOS, CMOS ou NMOS. Os processadores e dispositivos de processamento listados acima e aqui descritos são exemplares; como explicado aqui, a presente divulgação é aplicável a qualquer processador ou dispositivo de processamento.
[0077] Além disso, como mencionado acima e explicado em mais detalhe abaixo, modalidade da presente invenção pode se aplicar a processadores ou elementos de processamento utilizando uma ampla
Petição 870190044159, de 10/05/2019, pág. 27/318
13/232 variedade de conjuntos de instruções e arquiteturas de conjuntos de instruções, incluindo, por exemplo, o conjunto de instruções x86 (facultativamente incluindo extensões que foram adicionadas com versões mais recentes); o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA; o conjunto de instruções ARM (com extensões adicionais opcionais, como NEON) da ARM Holdings de Sunnyvale, CA; conjunto de instruções Power da IBM ou qualquer outro conjunto de instruções, incluindo conjuntos de instruções RISC e CISC. Os conjuntos de instruções e arquiteturas de conjuntos de instruções listados acima e aqui descritos são exemplificativos; como explicado aqui, a presente divulgação é aplicável a qualquer conjunto de instruções ou arquitetura de conjunto de instruções.
Arquiteturas de Núcleo Exemplar [0078] Diagrama em bloco de núcleo em ordem e fora de ordem [0079] A Figura 1A é um diagrama em bloco ilustrando quer um exemplo de arquitetura entubada em ordem quer um exemplo de um renomeamento de registro, arquitetura entubada de emissão/execução fora de ordem de acordo com modalidades da invenção. A Figura 1B é um diagrama em bloco ilustrando uma modalidade exemplar de um núcleo de arquitetura em ordem e um renomeamento de registro exemplar, núcleo de arquitetura entubada de emissão/execução fora de ordem a ser incluído em um processador de acordo com as modalidades da invenção. As caixas de segmento a cheio nas Figuras 1A-B ilustram a arquitetura entubada em ordem e o núcleo em ordem, enquanto a adição opcional de caixas tracejadas ilustra o renomeamento de registradores, arquitetura entubada e núcleo de emissão/execução fora de ordem. Dado que o aspecto em ordem é um subconjunto do aspecto fora de ordem, o aspecto fora de ordem será descrito.
[0080] Na Figura 1 A, uma arquitetura entubada de processador
Petição 870190044159, de 10/05/2019, pág. 28/318
14/232
100 inclui um estágio de busca 102, um estágio de decodificação de comprimento 104, um estágio de decodificação 106, um estágio de alocação 108, um estágio de renomeamento 110, um estágio de programação (também conhecido como um despacho ou emissão) 112, um estágio de leitura/ leitura de memória 114, um estágio de execução 116, um estágio de gravação/gravação de memória 118, um estágio de manipulação de exceção 122 e um estágio de compromisso 124.
[0081] A Figura 1B mostra o núcleo de processador 190, incluindo uma unidade de extremidade frontal 130 acoplada a uma unidade de mecanismo de execução 150, e ambas são acopladas a uma unidade de memória 170. O núcleo 190 pode ser um núcleo de computação de conjunto de instruções reduzidas (RISC - reduced instruction set computing), um núcleo de computação de conjunto de instruções complexo (CISC - complex instruction set computing), um núcleo de palavra de instrução muito longo (VLIW - very long instruction word), ou um tipo de núcleo híbrido ou alternativo. Como ainda outra opção, o núcleo 190 pode ser um núcleo de propósito especial, como, por exemplo, um núcleo de rede ou comunicação, mecanismo de compactação, núcleo do coprocessador, núcleo de unidade de processamento gráfico de computação geral (GPGPU - general purpose computing graphics processing unit), núcleo gráfico ou semelhante. Por exemplo, como explicado acima, o núcleo 190 pode ser qualquer membro de um conjunto contendo: processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de segurança), processadores MIC de alto rendimento, GPGPU's, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores de criptografia,
Petição 870190044159, de 10/05/2019, pág. 29/318
15/232 aceleradores de função fixa, aceleradores de aprendizado de máquina, aceleradores de rede ou aceleradores de visão computacional) ou qualquer outro processador ou dispositivo de processamento.
[0082] A unidade de extremidade frontal 130 inclui uma unidade de predição de ramificação 132 acoplada a um cache micro-op 133 e uma unidade de cache de instrução 134, que é acoplada a um buffer de tradução lateral (TLB - translation lookaside buffer) de instrução 136, que é acoplado a uma unidade de busca de instruções 138, que é acoplada a uma unidade de decodificação 140. A unidade de decodificação 140 (ou decodificador) pode decodificar instruções e gerar como saída uma ou mais micro-operações, pontos de entrada de microcódigo, micro-ops, outras instruções ou outros sinais de controle, que são decodificados de, ou que refletem ou são derivados das instruções originais. As micro-operações, pontos de entrada de microcódigo, micro-ops, etc. podem ser armazenados em pelo menos o cache micro-op 133. A unidade de decodificação 140 pode ser implementada usando vários mecanismos diferentes. Exemplos de mecanismos adequados incluem, mas não estão limitados a, tabelas de consulta, implementações de hardware, matrizes lógicas programáveis (PLA - programmable logic arrays), memórias de leitura de microcódigo (ROM - read only memories), etc. Em uma modalidade, o núcleo 190 inclui uma ROM de microcódigo ou outro meio que armazena o microcódigo para certas macro!nstruções (por exemplo, na unidade de decodificação 140 ou de outro modo dentro da unidade de extremidade frontal 130). O cache micro-op 133 e a unidade de decodificação 140 são acoplados a uma unidade de renomeamento/alocação 152 na unidade de mecanismo de execução 150. Em várias modalidades, um cache micro-op tal como 133 também pode ou em vez disso ser referido como um op-cache, u-op cache, uop-cache ou μορ-cache; e micro-operações podem ser referenciadas
Petição 870190044159, de 10/05/2019, pág. 30/318
16/232 como micro-ops, u-ops, uops e pops.
[0083] A unidade de mecanismo de execução 150 inclui a unidade de renomeamento/alocação 152 acoplada a uma unidade de retirada 154 e um conjunto de uma ou mais unidade(s) programadora(s) 156. A(s) unidade(s) programadora(s) 156 representam qualquer número de programadoras diferentes, incluindo estações de reservas, janela de instrução central, etc. A(s) unidade(s) programadora(s) 156 é(são) acoplada(s) à(s) unidade(s) de registro(s) física 158. Cada uma das unidades de registro físico 158 representa um ou mais arquivos de registradores físicos, diferentes dos quais armazenam um ou mais tipos de dados diferentes, como inteiro escalar, ponto flutuante escalar, inteiro empacotado, ponto flutuante empacotado, inteiro de vetorial, ponto flutuante de vetorial, status (por exemplo, uma instrução ponteiro que é o endereço da próxima instrução a ser executada), etc. Em uma modalidade, a unidade de arquivo de registro físico 158 compreende uma unidade de registradores vetorial, uma unidade de registros de máscara de gravação e uma unidade de registros escalares. Essas unidades de registro podem fornecer registros vetoriais de arquitetura, registros de máscara de vetorial e registros de propósito geral. A(s) unidade(s) de arquivo(s) de registro 158 é(são) sobreposta(s) pela unidade de retirada 154 para ilustrar várias maneiras nas quais o renomeamento de registradores e a execução fora de ordem podem ser implementados (por exemplo, usando um buffer de reordenamento e um arquivo(s) de registro de retirada, usando um arquivo futuro, um buffer de histórico e um arquivo de registro de retirada, usando um registro de mapas e um conjunto de registros, etc. A unidade de retirada 154 e a(s) unidade(s) de registro(s) físico 158 são acopladas ao(s) cluster(s) de execução 160. O cluster de execução 160 inclui um conjunto de uma ou mais unidades de execução 162 e um conjunto de uma ou mais unidades
Petição 870190044159, de 10/05/2019, pág. 31/318
17/232 de acesso à memória 164. As unidades de execução 162 podem realizar várias operações (por exemplo, deslocamentos, adição, subtração, multiplicação) e em vários tipos de dados (por exemplo, ponto flutuante escalar, inteiro empacotado, ponto flutuante, inteiro de vetorial, ponto flutuante de vetorial). Enquanto algumas modalidades podem incluir um número de unidades de execução dedicadas a funções específicas ou conjuntos de funções, outras modalidades podem incluir apenas uma unidade de execução ou várias unidades de execução que executam todas as funções. A(s) unidade(s) programadora(s) 156, unidade(s) de registro(s) físico 158 e cluster(s) de execução 160 são mostrados como possivelmente plurais porque certas modalidades criam arquiteturas entubadas separadas para certos tipos de dados/operações (por exemplo, uma arquitetura entubada inteira escalar, um ponto flutuante escalar/inteiro empacotado/ponto flutuante empacotado/vetorial inteiro/ arquitetura entubada de ponto flutuante de vetorial, e/ou uma arquitetura entubada de acesso à memória que cada um possui sua própria unidade programadora, unidade de arquivo(s) de registro físico, e/ou cluster de execução - e, no caso de uma arquitetura entubada separada de acesso à memória, são implementadas certas modalidades nas quais apenas o cluster de execução desta arquitetura entubada tem a(s) unidade(s) de acesso à memória 164). Também deve ser entendido que, quando são usadas arquiteturas entubadas separadas, uma ou mais dessas arquiteturas entubadas podem ser emissão/execução fora de ordem e o restante em ordem.
[0084] O conjunto de unidades de acesso à memória 164 é acoplado à unidade de memória 170, que inclui uma unidade TLB de dados 172 acoplada a uma unidade de cache de dados 174 acoplada a uma unidade de cache de nível 2 (L2) 176. Em uma modalidade exemplar, as unidades de acesso à memória 164 podem incluir uma
Petição 870190044159, de 10/05/2019, pág. 32/318
18/232 unidade de carga, uma unidade de endereço de armazenamento e uma unidade de dados de armazenamento, cada uma das quais é acoplada à unidade de dados TLB 172 na unidade de memória 170. A unidade de cache de instruções 134 é ainda acoplada a uma unidade de cache de nível 2 (L2) 176 na unidade de memória 170. A unidade de cache de L2 176 é acoplada a um ou mais outros níveis de cache e, eventualmente, a uma memória principal.
[0085] A título de exemplo, a arquitetura de núcleo de emissão/execução fora de ordem de renomeamento de registro exemplar pode implementar a arquitetura entubada 100 da seguinte forma: 1) a busca de instrução 138 realiza os passos de busca e comprimento de decodificação 102 e 104; 2) a unidade de decodificação 140 executa o estágio de decodificação 106; 3) a unidade de renomeamento/alocação 152 executa o estágio de alocação 108 e renomeamento 110; 4) a(s) unidade(s) programadora(s) 156 realiza a etapa de programação 112; 5) a(s) unidade(s) de registro(s) físico 158 e a unidade de memória 170 executam o estágio de leitura/leitura de memória 114; o cluster de execução 160 executa o estágio de execução 116; 6) a unidade de memória 170 e a(s) unidade(s) de registro(s) físico 158 executam o estágio de leitura/leitura de memória 118; 7) várias unidades podem estar envolvidas no estágio de tratamento de exceção 122; e 8) a unidade de retirada 154 e a(s) unidade(s) de registro(s) físico 158 executam o estágio de confirmação 124.
[0086] O núcleo 190 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 versões mais recentes), o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA; (com extensões opcionais adicionais, tais como NEON) da ARM Holdings of Sunnyvale, CA, conjunto de instruções energia da IBM,
Petição 870190044159, de 10/05/2019, pág. 33/318
19/232 ou qualquer outro conjunto de instruções, incluindo tanto RISC e conjuntos de instruções CISC), incluindo a instrução(s) aqui descrita. Em uma modalidade, o núcleo 190 inclui lógica para suportar uma extensão de conjunto de instruções de dados empacotados (por exemplo, AVX, AVX2, AVX-512), permitindo assim que as operações utilizadas por muitas aplicações multimédia sejam realizadas utilizando dados empacotados.
[0087] Deve ser entendido que o núcleo pode suportar multitratamento (executando dois ou mais conjuntos paralelos de operações ou segmentos), e pode fazê-lo de várias maneiras, incluindo multitratamento fatiado em tempo, SMT (por exemplo, um único núcleo físico fornece um núcleo lógico para cada um dos segmentos que o núcleo físico está a multitratar simultaneamente), ou uma combinação dos mesmos (por exemplo, busca de tempo fatiado e decodificação, e depois SMT tal como na tecnologia Intel® Hyperthreading).
[0088] Embora o renomeamento de registradores seja descrito no contexto de execução fora de ordem, deve ser entendido que o renomeamento de registradores pode ser usado em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também inclui unidades de instrução e do cache de dados separados 134/174 e uma unidade de memória cache L2 176, modalidades alternativas podem ter um único cache interno para ambas as instruções e dados, tais como, por exemplo, um cache interno Nível 1 (L1) ou vários níveis de cache interno. Em algumas modalidades, o sistema pode incluir uma combinação de um cache interno e um cache externo que é externo ao núcleo e/ou ao processador. Como alternativa, todos os cache(s) podem ser externos ao núcleo e/ou ao processador.
[0089] Arquitetura de Núcleo Exemplar Específica [0090] As Figuras 2AB ilustram um diagrama em bloco de uma
Petição 870190044159, de 10/05/2019, pág. 34/318
20/232 arquitetura de núcleo exemplar mais específica, cujo núcleo seria um dos vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou tipos diferentes) em um chip. Os blocos lógicos se comunicam através de uma rede de interconexão de alta largura de banda (por exemplo, uma rede em anel) com alguma lógica de função fixa, interfaces de E/S de memória e outras lógicas de E/S necessárias, dependendo da aplicação.
[0091] A Figura 2A é um diagrama em bloco de um único núcleo de processador, juntamente com sua conexão com a rede de interconexão em contato 202 e com seu subconjunto local do cache de Nível 2 (L2) 204, de acordo com modalidades da invenção. Em uma modalidade, um decodificador de instruções 200 suporta o conjunto de instruções x86 com uma extensão de conjunto de instruções de dados empacotados. Um cache L1 206 permite acessos de baixa latência a memória cache nas unidades escalares e vetoriais. Enquanto em uma modalidade (para simplificar o projeto), uma unidade escalar 208 e uma unidade vetorial 210 usam conjuntos de registradores separados (respectivamente, registradores escalares 212 e registradores vetoriais 214) e os dados transferidos entre eles são gravados na memória e depois lidos de volta a partir de um cache de nível 1 (L1) 206, modalidades alternativas da invenção podem utilizar uma abordagem diferente (por exemplo, utilizar um único conjunto de registros ou incluir um caminho de comunicação que permita a transferência de dados entre os dois ficheiros de registro sem ser escrito e lido de volta).
[0092] O subconjunto local do cache L2 204 faz parte de um cache L2 global que é dividido em subconjuntos locais separados, um por núcleo de processador. Cada núcleo de processador tem um caminho de acesso direto ao seu próprio subconjunto local do cache L2 204. Os dados lidos por um núcleo de processador são armazenados em seu
Petição 870190044159, de 10/05/2019, pág. 35/318
2ΛΙ2.32 subconjunto de cache L2 204 e podem ser acessados rapidamente, em paralelo com outros núcleos de processador acessando seus próprios subconjuntos de cache L2 locais. Os dados gravados por um núcleo de processador são armazenados em seu próprio subconjunto de cache L2 204 e são liberados de outros subconjuntos, se necessário. A rede em anel garante coerência para dados compartilhados. A rede em anel é bidirecional para permitir que agentes como núcleos de processador, caches L2 e outros blocos lógicos se comuniquem uns com os outros dentro do chip. Cada caminho de dados do anel tem 1012Bits de largura por direção.
[0093] A Figura 2B é uma visão expandida de parte do núcleo de processador na Figura 2A de acordo com modalidades da invenção. A Figura 2B inclui um cache de dados L1 206A parte do cache L1 204, bem como mais detalhes sobre a unidade vetorial 210 e os registradores vetoriais 214. Especificamente, a unidade vetorial 210 é uma unidade de processamento vetorial (VPU - vector processing unit) de 16 larguras (consultar ALU de Iargura16 228), que executa uma ou mais instruções flutuantes inteiras, de precisão simples e de precisão dupla. A VPU suporta a passagem rápida das entradas de registro com a unidade swizzle 220, conversão numérica com unidades de conversão numérica 222A-B e replicação com unidade de replicação 224 na entrada de memória. Registros de máscara de gravação 226 permitem a predicação de gravações vetoriais resultantes.
[0094] Arquitetura de Núcleo Fora de Ordem Exemplar Específica [0095] A Figura 3 é um diagrama em bloco de um núcleo de processador de emissão/execução fora de ordem ilustrativo que pode ser incluído em um processador de acordo com modalidades da invenção. Na Figura 3, o núcleo de processador 300 inclui a unidade de extremidade frontal 310, unidade inteira 320, unidade FP 330, unidade de carga-armazenamento 340 e unidade de cache de nível 2
Petição 870190044159, de 10/05/2019, pág. 36/318
22/232 (L2) 350. A Figura 3 é proporcionada para fins ilustrativos e, como tal, mostra várias unidades dispostas e nomeadas de acordo com uma das muitas abordagens possíveis de acordo com modalidades da presente invenção. Qualquer uma ou mais modalidades podem ser ilustradas de uma ou mais maneiras. Cada unidade mostrada na Figura 3 pode incluir circuitos e/ou estruturas que podem ser incluídos em outras unidades em outras representações de modalidades. Por exemplo, a unidade de extremidade frontal 310 pode adicionalmente ou alternativamente ser ilustrada e descrita como incluindo uma unidade de busca, tal como a unidade de busca 400 na Figura 4, e uma unidade de decodificação, tal como a unidade de decodificação 500 na Figura 5; qualquer uma ou todas da unidade inteira 320, unidade FP 330 e unidade de armazenamento de carga 340 podem, adicionalmente ou alternativamente, ser ilustradas e descritas, separada ou coletivamente, como uma ou mais unidades de execução; e assim por diante. Além disso, várias unidades dentro do núcleo 300 podem ser acopladas de várias maneiras; portanto, por conveniência, figuras diferentes podem mostrar unidades dentro de diferentes unidades maiores; por exemplo, uma unidade particular pode ser mostrada dentro de uma primeira unidade maior em uma primeira figura e dentro de uma segunda unidade maior em uma segunda figura.
[0096] Na Figura 3, a unidade de extremidade frontal 310 inclui unidade de predição de ramificação 311, unidade de cache microoperação (op-cache) 312, unidade de cache de instruções (i-cache) 313, unidade de decodificação 314 e unidade de fila de microoperação (micro-op) 315. A unidade de predição de ramificação 311 inclui um circuito de previsão de desvio, tal como um buffer-alvo de ramificação (BTB - branch-target buffer), para reduzir o atraso médio de ramificação e é acoplado à unidade de op-cache 312 e à unidade iPetição 870190044159, de 10/05/2019, pág. 37/318
23/232 cache 313. A unidade de Op-cache 312 inclui um op-cache para armazenar em cache as micro-operações associadas às instruções. A unidade i-cache 313 inclui um i-cache, que em uma modalidade pode ser um i-cache de quatro vias de 64 K, no qual as instruções são armazenadas em cache. A unidade i-cache 313 é acoplada para decodificar a unidade 314 para fornecer instruções em cache para serem decodificadas. A unidade de decodificação 314 inclui um circuito de decodificação, tal como um decodificador de instruções, para decodificar instruções. Em uma modalidade, a unidade de extremidade frontal 310 pode buscar e a unidade de decodificação 314 pode decodificar até quatro instruções por ciclo de clock. A unidade de op-cache 312 e a unidade de decodificação 314 são cada uma acopladas à unidade de fila de micro-op 315 para fornecer dois caminhos para carregar micro-ops na unidade de fila de micro-op 315. A unidade de fila de micro-op 315 inclui uma fila de micro-op, que em uma modalidade pode despachar seis micro-operações por ciclo para uma ou mais unidades de execução.
[0097] Também na Figura 3, a unidade de número inteiro 320 inclui unidade de renomeamento inteiro 321; unidades programadoras inteiras 322A, 322B, 322C, 322D, 322E e 322F (coletivamente, unidades programadoras inteiras 322); arquivo de registro físico inteiro 323; unidades aritméticas lógicas (ALU - arithmetic-logic units) 324A, 324B, 324C e 324D (coletivamente, ALUs 324); e unidades de geração de endereços (AGU - address generation units) 325A e 325B (coletivamente, AGUs 325). A unidade de renomeamento inteiro 321 está acoplada à unidade de fila de micro-op 315 para receber uma ou mais micro-ops para serem executadas, no todo ou em parte, por um ou mais de ALU 324 e/ou AGU 325. A unidade de renomeamento inteiro 321 inclui circuitos de renomeamento de registradores e também é acoplada a unidades programadoras inteiras 322, que por
Petição 870190044159, de 10/05/2019, pág. 38/318
24/232 sua vez são acopladas ao arquivo de registro físico inteiro 323, para fornecer renomeamento de registrador inteiro. Unidades programadoras inteiras 322 incluem circuitos de programação para programar micro-operações a serem executadas, no todo ou em parte, por uma ou mais ALU 324 e/ou AGU 325. O arquivo de registro físico inteiro 323 inclui um arquivo de registro físico inteiro, que em uma modalidade pode incluir 168 registros físicos inteiros. Cada uma das ALU 324 e AGU 325 são acopladas ao arquivo de registro físico 323 para receber valores a serem utilizados como entradas na execução de micro-ops e/ou para fornecer valores como saídas da execução de micro-ops.
[0098] Também na Figura 3, a unidade FP 330 inclui a unidade de renomeamento FP 331, a unidade programadora FP 332, o arquivo registrador FP 333, multiplicadores FP 334A e 334B (coletivamente, multiplicadores FP 334) e adicionadores de FP 335A e 335B (coletivamente, adicionadores FP 335). A unidade de renomeamento FP 331 é acoplada à unidade de fila de micro-op 315 para receber uma ou mais micro-ops para ser executadas, no todo ou em parte, por um ou mais dos multiplicadores FP 334 e/ou adicionadores FP 335. A unidade de renomeamento FP 331 inclui circuitos de renomeamento de registro e também é acoplada à unidade programadora FP 332, que por sua vez são acopladas ao arquivo de registro FP 333, para proporcionar renomeamento de registro FP. A unidade programadora FP 332 inclui circuitos de programação para programar micro-ops para ser executadas, no todo ou em parte, por um ou mais multiplicadores FP 334 e/ou adicionadores FP 335. Cada um dos multiplicadores FP 334 e/ou adicionadores FP 335 são acoplados ao arquivo FP 333 para receber valores a serem utilizados como entradas na execução de micro-ops e/ou para fornecer valores como saídas da execução de micro- ops.
Petição 870190044159, de 10/05/2019, pág. 39/318
25/232 [0099] Também na Figura 3, a unidade de armazenamento de carga 340 inclui unidade de fila de armazenamento de carga 341 e unidade de cache de dados (d-cache) 342. A unidade de fila de armazenamento de carga 341 pode incluir qualquer número de filas de carga e/ou de armazenamento, em uma modalidade que fornece duas cargas e um ciclo de armazenamento por ciclo, acopladas a AGU 325 para receber endereços de memória para operações de carga e/ou armazenamento. A unidade D-cache 3 42 inclui um d-cache, que em uma modalidade pode ser um cache d de nível 1 (L1) de 32 K, no qual armazenar dados em cache, acoplado ao arquivo de registro físico inteiro 323, arquivo registrador FP 333, e uma unidade de fila de armazenamento de carga 341 para receber e fornecer os dados gerados por e para ser utilizado na execução de micro-ops.
[00100] Também na Figura 3, a unidade de cache L2 350 inclui um cache L2, que em uma modalidade pode ser um cache de oito vias de 512K, no qual armazenar instruções e dados em cache.
[00101] A Figura 4 é um diagrama em bloco de uma unidade de busca ilustrativa que pode ser incluída em um núcleo de processador, como o núcleo 300 da Figura 3, e/ou um processador de acordo com as modalidades da invenção. Na Figura 4, a unidade de busca 400 inclui unidade de próxima-contagem-de-programa (PC) 410, buffer de tradução lateral (TLB) de instrução 420, unidade de perceptron de hash 430, unidade matriz de alvo indireto (ITA - indirect target array) de pilha de retorno 440, unidade de fila de pedido físico 450, unidade de micro-etiqueta 460 e unidade i-cache 470.
[00102] A Figura 5 é um diagrama em bloco de uma unidade de decodificação ilustrativa que pode ser incluída em um núcleo de processador, como o núcleo 300 da Figura 3, e/ou um processador de acordo com as modalidades da invenção. Na Figura 5, a unidade de decodificação 500 inclui unidade buffer de Bit de instrução 510,
Petição 870190044159, de 10/05/2019, pág. 40/318
26/232 unidade de escolha 520, unidade de decodificação 530, unidade opcache 540, unidade de fila de micro-op 550, unidade de memória só de leitura (ROM - read-only memory) de microcódigo 560, unidade de arquivo de memória do motor de pilha (memfile) 570 e unidade de despacho 580.
[00103] A Figura 6 é um diagrama em bloco de uma unidade de execução inteira ilustrativa que pode ser incluída em um núcleo de processador, tal como o núcleo 300 da Figura 3, e/ou um processador de acordo com modalidades da invenção. Na Figura 6, a unidade de execução inteira 600 inclui a unidade de mapa 610; unidade de fila de retirada 620; unidades de fila aritmética-lógica (ALQ - arithmetic-logic queue) 630A, 630B, 630C e 630D (coletivamente, ALQ 630 ); unidades de fila de geração de endereços (AGQ) 640A e 640B (coletivamente, AGQ 640); unidade de arquivo de registro físico 650, unidade de multiplexador de encaminhamento (mux) 660; ALU 670A, 670B, 670C e 670D (coletivamente, ALU 670); AGU 680A e 680B (coletivamente, AGU 680); e unidade de armazenamento de carga 690.
[00104] A Figura 7 é um diagrama em bloco de uma unidade de execução ilustrativa FP que pode ser incluída em um núcleo de processador, como o núcleo 300 da Figura 3, ou um processador de acordo com modalidades da invenção. Na Figura 7, a unidade de execução FP 700 inclui unidade de fila de micro-op não programável 710, unidade de fila de micro-op programável 720, unidade de fila de retirada 730, unidade de conversão FP 740, arquivo de registro físico FP 750, unidade mux de reencaminhamento 760, multiplicadores FP 770A e 770B (coletivamente, multiplicadores FP 770) e adicionadores FP 780A e 780B (conjuntamente, adicionadores FP 780).
[00105] A Figura 8 é um diagrama em bloco de uma unidade de carga/armazenamento ilustrativa que pode ser incluída em um núcleo de processador, tal como o núcleo 300 da Figura 3, ou um
Petição 870190044159, de 10/05/2019, pág. 41/318
27/232 processador de acordo com modalidades da invenção. Na Figura 8, a unidade de carga/armazenamento 800 inclui a unidade de fila de carga 810, as unidades de escolha de carga de arquitetura entubada 811A e 811B (coletivamente, unidades de escolha de carga 811), unidades de TLB 812A e 812B, (coletivamente, unidades de escolha TLB 812), unidades de arquitetura entubada de dados 813A e 813B (coletivamente, unidades de arquitetura entubada de dados 813), unidade de fila de armazenamento 820, unidade de pré-busca 821, unidades de escolha de armazenamento tubo 822), unidade de armazenamento de tubo 823, unidade de compromisso de armazenamento 824, matriz de etiqueta de cache de dados L1/L2 TLB e matriz de etiqueta de cache de dados 830, cache de dados L1 840, buffer de endereços de memória 850, um buffer de combinação de gravação 860.
[00106] A Figura 9 é um diagrama em bloco de um núcleo de processador de emissão/execução fora de ordem ilustrativo, tal como o núcleo 300 da Figura 3, suportando SMT em um processador de acordo com modalidades da invenção. Na Figura 9, o núcleo de processador 900 inclui a unidade de extremidade frontal 910, unidade inteira 920, unidade FP 930, unidade de carga-armazenamento 940, unidade de cache L2 950 e unidade de retirada 960. A unidade de extremidade frontal 910 inclui unidade de previsão de ramificação 911, unidade op-cache 912, unidade i-cache 913, unidade de decodificação 914, unidade fila de micro-op 915 e unidade de instruções TLB 916. A unidade inteira 9 20 inclui a unidade de renomeamento interno 921, a unidade programadora inteira 922, o arquivo de registro físico inteiro 9 23, as ALU 924 e as AGU 925. A unidade FP 930 inclui unidade de renomeamento FP 931, unidade programadora FP 932, arquivo de registro FP 933, multiplicadores FP 934A e 934B (coletivamente, multiplicadores FP 934) e adicionadores FP 935A e 935B
Petição 870190044159, de 10/05/2019, pág. 42/318
28/232 (coletivamente, adicionadores FP 935). A unidade de armazenamento de carga 940 inclui unidade de fila de carga 941A e unidade de fila de armazenamento 941B (coletivamente, unidade de fila de cargaarmazenamento 941), unidade de cache de dados (d-cache) 942 e unidade TLB 943. A unidade de retirada 960 inclui uma fila de retirada. Características SMT [00107] Os núcleos de processador de acordo com modalidades da invenção podem incluir várias características para suportar SMT. Várias dessas características são descritas separadamente usando exemplos não limitativos abaixo, mas as modalidades podem incluir qualquer combinação de tais características.
[00108] Particionamento Estático de Recursos [00109] Um núcleo de processador pode suportar um recurso de particionamento estático SMT de acordo com algumas modalidades exemplificativas. Segmentos podem ser atribuídos a recursos disponíveis que são estaticamente compartilhados em uma arquitetura entubada de multitratamento simultâneo. Em algumas modalidades, os segmentos podem ser atribuídos a recursos disponíveis usando técnicas como um algoritmo baseado em padrões para melhorar o desempenho e a eficiência. Em algumas modalidades, esse recurso pode melhorar os sistemas de computador ao fornecer um compartilhamento de recursos mais eficiente entre segmentos de recursos estaticamente compartilhados. Também pode usar os recursos disponíveis que de outra forma tenham permanecido sem uso devido ao particionamento SMT estático.
[00110] Por exemplo, os recursos em uma arquitetura entubada podem ser estaticamente compartilhados, por exemplo, 50%-50%, entre dois segmentos para fornecer recursos iguais para ambos os segmentos. Em algumas modalidades, porcentagens diferentes de recursos disponíveis podem ser atribuídas a cada segmento, por
Petição 870190044159, de 10/05/2019, pág. 43/318
29/232 exemplo, com base em padrões de carga de trabalho. Por exemplo, se um segmento for interrompido por mais tempo que o outro segmento e houver entradas vazias disponíveis para o outro segmento, as entradas disponíveis poderão ser designadas ao segmento paralisado em vez de mantê-las vazias em um recurso estaticamente compartilhado.
[00111] Em algumas modalidades, mais de um segmento poderia ter um padrão semelhante. Nesses casos, um esquema de prioridade pode ser usado para atribuir recursos no caso de um empate entre segmentos. O desempate pode, por exemplo, ser realizado por seleção aleatória, selecionando o segmento numerado inferior, selecionando o segmento numerado mais alto e/ou selecionando segmentos alternados.
[00112] A Figura 10 é um diagrama em bloco ilustrando um recurso de particionamento estático SMT que pode ser incluído em um processador de acordo com algumas modalidades. O recurso de particionamento estático SMT pode incluir um Bloco de Detecção de Padrão 1001 de acordo com uma modalidade exemplar. Primeiro e segundo recursos podem ser estaticamente atribuídos aos segmentos TO e T1. Uma tabela base de padrão de pesquisa pode determinar que o segmento T1 tenha um longo tempo de parada. O Bloco de Detecção de Padrão pode ajustar os recursos atribuídos estaticamente com base na entrada do padrão. Por exemplo, o segundo recurso, que foi atribuído estaticamente a T1, pode ser atribuído a T0.
[00113] Em algumas modalidades, o particionamento dinâmico pode ser aplicado a outros recursos estaticamente particionados, como um buffer de tradução lateral de instrução (ITLB - instruction translation lookaside buffer).
[00114] A Figura 11 é um diagrama de fluxo ilustrando um método para um recurso de particionamento estático SMT que pode ser
Petição 870190044159, de 10/05/2019, pág. 44/318
30/232 realizado por um processador de acordo com algumas modalidades. Em algumas modalidades, o método pode compreender detectar padrões tais como paradas de segmentos para um recurso partilhado estaticamente na arquitetura entubada, tal como ilustrado na caixa CQB01. O método pode ainda compreender ajustar a partilha (por exemplo, partilha 50-50), tal como ilustrado na caixa CQB02. O ajuste do método pode, por exemplo, ser baseado na duração de paradas ou em alguns outros eventos similares.
Sumário de algumas modalidades [00115] Uma modalidade pode incluir um processador configurado para detectar um padrão para pelo menos um de um primeiro e segundo recurso particionado estaticamente; e ajustar uma alocação de pelo menos um dos primeiro e segundo recursos particionados estaticamente.
[00116] Em algumas modalidades, um ou mais dos seguintes se aplicam. O primeiro e o segundo recurso particionado estaticamente da arquitetura entubada podem ser recursos de uma arquitetura entubada de multitratamento simultâneo. O primeiro e o segundo recursos particionados estaticamente podem ser alocados entre um primeiro e um segundo segmento. O processador pode ainda ser configurado para atribuir o primeiro e o segundo recursos com base em um algoritmo baseado em padrões. O processador pode ainda ser configurado para atribuir pelo menos um dos primeiro e segundo recursos com base em um ou mais padrões de carga de trabalho. O processador pode ainda ser configurado para atribuir pelo menos um dos primeiro e segundo recursos com base na determinação de se pelo menos um dos primeiro e segundo segmentos foi interrompido por um período de tempo maior que o outro. O processador pode ainda ser configurado para atribuir pelo menos um dos primeiro e segundo recursos com base na determinação de haver entradas
Petição 870190044159, de 10/05/2019, pág. 45/318
31/232 vazias associadas a pelo menos um dos primeiro e segundo recursos disponíveis e atribuir pelo menos um dos primeiros recursos disponíveis e o segundo segmentos para pelo menos um dos primeiro e segundo recursos disponíveis. O processador pode ainda ser configurado para atribuir pelo menos um dos primeiro e segundo recursos com base em um esquema de prioridade. O processador pode ainda ser configurado para determinar se ocorreu uma parada com base em uma tabela base de padrão de pesquisa. O primeiro e o segundo recursos particionados estaticamente podem ser recursos de um buffer de tradução lateral de instrução (ITLB).
[00117] Uma modalidade pode incluir um método compreendendo a detecção de pelo menos um de um padrão para um primeiro e segundo recurso estaticamente particionado; e ajustar uma alocação de pelo menos um dos primeiro e segundo recursos particionados estaticamente.
[00118] Em algumas modalidades, um ou mais dos seguintes se aplicam. O primeiro e o segundo recurso particionado estaticamente podem ser recursos de uma arquitetura entubada simultânea de multitratamento. O primeiro e o segundo recursos particionados estaticamente podem ser alocados entre um primeiro e um segundo segmento. O método pode ainda compreender a alocação do primeiro e segundo recursos com base em um algoritmo baseado em padrões. O método pode ainda compreender a alocação de pelo menos um dos primeiro e segundo recursos com base em um ou mais padrões de carga de trabalho. O método pode ainda compreender a alocação de pelo menos um dos primeiro e segundo recursos com base na determinação de se pelo menos um dos primeiro e segundo segmentos foi interrompido por um período de tempo maior que o outro. O método pode ainda compreender a alocação de pelo menos um dos primeiro e segundo recursos com base na determinação de
Petição 870190044159, de 10/05/2019, pág. 46/318
32/232 haver entradas vazias associadas a pelo menos um dos primeiro e segundo recursos que estão disponíveis e atribuindo pelo menos um dos primeiros e os segundos segmentos para o pelo menos um dos primeiro e segundo recursos que estão disponíveis. O método pode ainda compreender a alocação de pelo menos um dos primeiro e segundo recursos com base em um esquema de prioridade. O método pode ainda compreender determinar se uma parada ocorreu com base em uma tabela base de padrão de consulta. O primeiro e o segundo recursos particionados estaticamente podem ser recursos de um buffer de tradução lateral de instrução (ITLB).
[00119] Uma modalidade pode incluir um meio não transitório legível por máquina armazenando pelo menos uma instrução que, quando executada por um processador, faz com que o processador execute um método, compreendendo o método pelo menos um de um padrão para um primeiro e segundo recurso particionado; e ajustar uma alocação de pelo menos um dos primeiro e segundo recursos particionados estaticamente.
[00120] Em algumas modalidades, um ou mais dos seguintes se aplicam. O primeiro e o segundo recurso particionado estaticamente podem ser recursos de uma arquitetura entubada simultânea de multitratamento. O primeiro e o segundo recursos particionados estaticamente podem ser alocados entre um primeiro e um segundo segmento. O método pode ainda compreender a alocação do primeiro e segundo recursos com base em um algoritmo baseado em padrões. O método pode ainda compreender a alocação de pelo menos um dos primeiro e segundo recursos com base em um ou mais padrões de carga de trabalho. O método pode ainda compreender a alocação de pelo menos um dos primeiro e segundo recursos com base na determinação de se pelo menos um dos primeiro e segundo segmentos foi interrompido por um período de tempo maior que o
Petição 870190044159, de 10/05/2019, pág. 47/318
33/232 outro. O método pode ainda compreender a alocação de pelo menos um dos primeiro e segundo recursos com base na determinação de haver entradas vazias associadas a pelo menos um dos primeiro e segundo recursos que estão disponíveis e atribuindo pelo menos um dos primeiros e os segundos segmentos para o pelo menos um dos primeiro e segundo recursos que estão disponíveis. O método pode ainda compreender a alocação de pelo menos um dos primeiro e segundo recursos com base em um esquema de prioridade. O método pode ainda compreender determinar se uma parada ocorreu com base em uma tabela base de padrão de consulta. O primeiro e o segundo recursos particionados estaticamente podem ser recursos de um buffer de tradução lateral de instrução (ITLB).
[00121] Uma modalidade pode incluir um sistema incluindo uma memória e um processador, o processador configurado para detectar um padrão para pelo menos um de um primeiro e segundo recurso estaticamente particionado; e ajustar uma alocação de pelo menos um dos primeiro e segundo recursos particionados estaticamente.
[00122] Em algumas modalidades, um ou mais dos seguintes se aplicam. O primeiro e o segundo recurso particionado estaticamente podem ser recursos de uma arquitetura entubada simultânea de multitratamento. O primeiro e o segundo recursos particionados estaticamente podem ser alocados entre um primeiro e um segundo segmento. O processador pode ainda ser configurado para atribuir o primeiro e o segundo recursos com base em um algoritmo baseado em padrões. O processador pode ainda ser configurado para atribuir pelo menos um dos primeiro e segundo recursos com base em um ou mais padrões de carga de trabalho. O processador pode ainda ser configurado para atribuir pelo menos um dos primeiro e segundo recursos com base na determinação de se pelo menos um dos primeiro e segundo segmentos foi interrompido por um período de
Petição 870190044159, de 10/05/2019, pág. 48/318
34/232 tempo maior que o outro. O processador pode ainda ser configurado para atribuir pelo menos um dos primeiro e segundo recursos com base na determinação de haver entradas vazias associadas a pelo menos um dos primeiro e segundo recursos disponíveis e atribuir pelo menos um dos primeiros recursos disponíveis, e os segundos segmentos para pelo menos um dos primeiro e segundo recursos disponíveis. O processador pode ainda ser configurado para atribuir pelo menos um dos primeiro e segundo recursos com base em um esquema de prioridade. O processador pode ainda ser configurado para determinar se ocorreu uma parada com base em uma tabela base de padrão de pesquisa. O primeiro e o segundo recursos particionados estaticamente podem ser recursos de um buffer de tradução lateral de instrução (ITLB).
[00123] Compartilhamento competitivo de recursos [00124] Um núcleo de processador pode apoiar SMT com compartilhamento competitivo de recursos de acordo com modalidades da invenção. Um circuito, estrutura ou outro recurso no núcleo pode ser compartilhado por vários segmentos com base em uma política na qual os segmentos competem pela prioridade. Na modalidade da Figura 9, cada um dos seguintes recursos pode ser compartilhado entre ou entre os segmentos de acordo com uma política competitiva: unidade de previsão de ramificação 911, unidade de cache de op 912, unidade de i-cache 913, unidade de descodificação 914, unidade de instrução TLB 916, unidade de renomeamento inteiro 921, unidade programadora inteira 922, arquivo de registro físico inteiro 923, ALU 924, AGU 925, unidade de renomeamento FP 931, unidade programadora FP 932, unidade de registro FP 933, multiplicadores FP 934A e 934B, adicionadores FP 935A e 935B, unidade de fila de carga 941 A, unidade d-cache 942 e unidade TLB 943.
Petição 870190044159, de 10/05/2019, pág. 49/318
35/232 [00125] Alguns desses recursos, como um buffer na unidade de renomeamento inteiro 921, unidade programadora de número inteiro 922, unidade de renomeamento FP 931, unidade programadora FP 932 ou unidade de fila de carregamento 941 A, podem ter entradas, subunidades, ou outras partes que podem ser alocadas separadamente a um segmento. Por conveniência, esse tipo de recurso pode ser chamado de recurso divisível, e esse tipo de alocação pode ser chamado de alocação em parte. Outros, como cada ALU de ALU 924, AGU individual de AGU 925, multiplicador FP 934A, multiplicador FP 934B, adicionador FP 935A, ou adicionador FP 935B, só podem ser alocados na íntegra para um determinado ciclo de clock, conjunto de ciclos de clock consecutivos para concluir uma operação ou outro período de tempo ou duração da operação. Por conveniência, esse tipo de recurso pode ser referido como um recurso indivisível, e esse tipo de alocação pode ser chamado de alocação integral.
[00126] A Figura 12 é um diagrama em bloco ilustrando um alocador de recursos 1200 que pode ser incluído em um processador de acordo com modalidades da invenção. O alocador de recursos 1200 pode incluir circuitos, estruturas e/ou hardware para alocar um circuito central, estrutura, unidade ou recurso, ou qualquer parte dele, a um determinado segmento. Em modalidades, o alocador de recursos 1200 pode ser implementado para alocar um único recurso e/ou múltiplos recursos. Em qualquer um dos casos, um núcleo de processador ou processador pode incluir várias instâncias de uma ou mais modalidades de alocador de recursos 1200, cada uma para alocar qualquer um ou mais recursos, cada um incluindo qualquer um ou mais dos blocos mostrados na Figura 12, e cada um deles implementar qualquer uma ou mais políticas de alocação de recursos ou combinações de políticas de alocação de recursos.
[00127] O alocador de recursos 1200 pode incluir circuito rastreador
Petição 870190044159, de 10/05/2019, pág. 50/318
36/232
1210, circuito de política 1220, circuito decisório 1230 e circuito alocador 1240. O circuito rastreador pode incluir um ou mais circuitos históricos de desempenho 1212, circuito histórico de uso 1214 e circuito de estado de segmento 1216, o circuito de política 1220 pode incluir um ou mais de circuito de política de energia 1222, circuito de política de imparcialidade 1224, circuito de política de garantia de desempenho 1226 e circuito de política de transferência 1228. As modalidades podem incluir, combinar e/ou implementar cada um desses circuitos de várias maneiras, de acordo com os tipos e número de recursos a serem alocados e as políticas desejadas.
[00128] O circuito de histórico de desempenho 1212 pode incluir circuitos, estruturas e/ou hardware para monitorar, controlar, registrar e/ou relatar o desempenho de segmentos em uma ou mais formas. Em uma modalidade, o circuito de histórico de desempenho 1212 pode incluir um ou mais contadores de hardware 1212A por segmento para contar uma ou mais medidas de desempenho por segmento, como instruções retiradas por alguma medida de tempo ou duração. Por exemplo, a medida de tempo ou duração pode ser uma janela de ciclos de clock, onde o tamanho da janela (por exemplo, representado pela letra 'N') pode ser fixo (por exemplo, com segmento), configurável (por exemplo, hardware ou firmware) e/ou programável (por exemplo, por software). Em uma modalidade, N pode ser 1024.
[00129] O circuito de histórico de desempenho 1212 também pode incluir um ou mais comparadores de hardware 1212B para comparar o desempenho, medido pelos contadores 1212A, de um segmento com um ou mais outros segmentos. Por exemplo, no final de cada janela de N ciclos clock, os comparadores de hardware 1212B podem comparar o número de instruções retiradas durante a janela por um primeiro segmento ao de um segundo segmento, e os contadores 1212A podem ser redefinidos para a próxima janela. Durante a janela
Petição 870190044159, de 10/05/2019, pág. 51/318
37/232 seguinte, o resultado da comparação da janela anterior pode ser utilizado pelo circuito de política 1220 e/ou pelo circuito de decisão 1230 como descrito abaixo. Em modalidades, o resultado da comparação pode ser uma classificação de segmentos (por exemplo, qual segmento retirou mais instruções), o resultado da comparação pode ser uma razão (por exemplo, um cálculo ou cálculo aproximado da proporção do número de instruções retiradas por um primeiro segmento para o número de instruções retiradas pelo segundo segmento) e/ou qualquer outra medição ou cálculo.
[00130] As modalidades podem incluir mais de um contador por segmento. Por exemplo, dois contadores separados podem ser fornecidos por segmento: um primeiro contador para rastrear instruções identificadas como famintas por energia (por exemplo, a execução normalmente consome mais energia do que outras instruções) e um segundo contador para contar outras instruções (ou seja, não famintas por energia). Por exemplo, as instruções do AVX512 FMA (conforme definido abaixo) podem ser identificadas como famintas por energia e rastreadas (possivelmente junto com outras instruções que consomem muita energia) usando um contador separado.
[00131] Circuito de histórico de uso 1214 pode incluir circuitos, estruturas e/ou hardware para monitorar, rastrear, registrar e/ou relatar o uso de recursos por segmentos. Em uma modalidade, o circuito de histórico de uso 1214 pode incluir um ou mais contadores de hardware 1214A para contar o uso de um recurso por segmento e um ou mais comparadores de hardware 1214B para comparar o uso de um recurso entre segmentos. Um ou mais resultados dos contadores 1214A e/ou comparadores 1214B podem ser utilizados pelo circuito de política 1220 e/ou circuito de decisão 1230 como descrito abaixo.
[00132] Por exemplo, para um recurso divisível, como um buffer,
Petição 870190044159, de 10/05/2019, pág. 52/318
38/232 um contador pode contar o número de entradas ocupadas por um segmento. A contagem a ser usada para cálculos adicionais e/ou decisões de alocação pode ser uma contagem atual, relatada ou usada diretamente a qualquer momento, e/ou pode ser uma contagem média, calculada em uma janela (por exemplo, uma janela de tamanho N como descrito acima). Para um recurso indivisível, a contagem a ser usada para cálculos adicionais e/ou decisões de alocação pode ser uma média ponderada no tempo ou média no tempo (por exemplo, o número de vezes que um segmento usou um recurso dentro de uma janela de tempo, onde a contagem é redefinida no final de cada janela de tempo ou quando a contagem é deslocada para a direita (para dividir por uma energia de dois) no final de cada janela de tempo). Os resultados com base em qualquer uma dessas contagens podem ser as próprias contagens, as classificações por segmento das contagens e/ou as proporções de contagem segmento-a-segmento.
[00133] O circuito de estado de segmento 1216 pode incluir circuitos, estruturas e/ou hardware para monitorar, rastrear, registrar e/ou reportar o estado de um segmento. Por exemplo, o circuito de estado de segmento 1216 pode reportar se um segmento está atualmente parado, tal como devido a uma longa latência L2/L3 ou outro erro de cache.
[00134] As informações históricas e atuais relatadas pelo circuito rastreador 1210 podem ser usadas em cálculos e decisões de alocação de recursos de acordo com políticas especificadas pelo circuito de políticas 1220. Essas políticas podem incluir quaisquer tipos de políticas, com quaisquer prioridades, em quaisquer combinações, incluindo considerações de consumo de energia, justiça, garantias mínimas de desempenho e rendimento.
[00135] Circuito de política de energia 1222 pode incluir circuitos, estruturas e/ou hardware para implementar uma ou mais políticas de
Petição 870190044159, de 10/05/2019, pág. 53/318
39/232 energia e/ou favorecer ou selecionar um segmento baseado na política ou políticas. Essas políticas podem incluir quaisquer tipos de políticas de energia, com quaisquer prioridades, em quaisquer combinações. Por exemplo, um segmento que esteja usando menos instruções famintas por energia ou um segmento que esteja fazendo um progresso mais lento pode ser favorecido ou selecionado.
[00136] Circuito de política de equidade 1224 pode incluir circuitos, estruturas e/ou hardware para implementar uma ou mais políticas de justiça e/ou favorecer ou selecionar um segmento baseado na política ou políticas. Por exemplo, um segmento que tenha desempenho recente mais baixo, menor ocupação de um recurso divisível e/ou uso recente mais baixo de um recurso indivisível pode ser favorecido ou selecionado.
[00137] Circuito de política de garantia de desempenho 1226 pode incluir circuitos, estruturas e/ou hardware para implementar uma ou mais políticas mínimas de garantia de desempenho e/ou favorecer ou selecionar um segmento com base na política ou políticas. Por exemplo, um segmento que está progredindo abaixo de um determinado limite mínimo pode ser favorecido ou selecionado com base em uma política de garantia de desempenho.
[00138] Circuito de política de rendimento 1228 pode incluir circuitos, estruturas e/ou hardware para implementar uma ou mais políticas de rendimento e/ou favorecer ou selecionar um segmento baseado na política ou políticas. Por exemplo, um segmento que está progredindo relativamente mais ou mais rapidamente que outro segmento pode ser favorecido ou selecionado.
[00139] Qualquer um ou todos de circuito de política de energia 1222, circuito de política de equidade 1224, circuito de política de garantia de execução 1226, circuito de política de rendimento 1228 e/ou qualquer outro circuito de políticas podem incluir locais de
Petição 870190044159, de 10/05/2019, pág. 54/318
40/232 armazenamento individuais ou registros em que para armazenar informações e/ou critérios para habilitar, modificar (por exemplo, fortalecer ou enfraquecer a importância de uma política ou um ou mais critérios ou medidos usados por uma política), ou afetar dinamicamente uma política. Modalidades podem também, ou em vez disso, incluir um local de armazenamento central ou compartilhado ou registrar-se para essa informação. Qualquer um ou mais locais de armazenamento individuais ou em grupo são representados como registro de políticas 1220A. Em modalidades, qualquer tal local ou registro de armazenamento pode ser configurável (por exemplo, por hardware ou firmware) ou programável (por exemplo, por software).
[00140] Circuito de decisão 1230 pode incluir circuitos, estruturas, e/ou hardware para receber informação, resultados, e/ou sinais de circuito rastreador 1210 e informações, critérios, e/ou sinais de circuito de política 1220 para usar, ponderar, priorizar, filtrar, comparar, combinar, substituir ou processar de outra forma para gerar informações que podem resultar na escolha de um segmento para o qual alocar um recurso e/ou uma ou mais indicações ou sinais referentes a essa decisão. Por exemplo, em uma modalidade, incluindo uma política de taxa de transferência e uma garantia de desempenho mínimo, a política de taxa de transferência pode favorecer um primeiro segmento, mas o circuito de decisão 1230 pode substituir essa preferência e escolher um segundo segmento para ajudar a atender uma garantia de desempenho mínimo para o segundo segmento. Em modalidades, o alocador de recursos 1200 pode incluir múltiplas instâncias de uma ou mais modalidades do circuito de decisão 1230, cada uma para qualquer recurso ou grupo de recursos, e cada uma para implementar uma ou mais políticas de alocação de recursos ou combinações de políticas de alocação de recursos, e cada um para implementar uma ou mais abordagens ou
Petição 870190044159, de 10/05/2019, pág. 55/318
41/232 combinações de abordagens descritas abaixo, onde cada um pode ser configurado ou programado para escolher um segmento de acordo com qualquer abordagem ou combinação de abordagens (por exemplo, cada um pode atribuir um peso diferente às informações recebidas de cada circuito separado da política no circuito da política 1220).
[00141] Em modalidades incluindo um recurso indivisível, o circuito de decisão 1230 pode determinar qual segmento tem prioridade para a alocação dinâmica completa do recurso indivisível. Em modalidades incluindo um recurso divisível, o circuito de decisão 1230 pode determinar qual segmento tem prioridade para a alocação dinâmica em parte do recurso divisível e/ou parte do recurso divisível, e/ou quanto (por exemplo, quantas entradas de buffer) do recurso divisível para alocar a um segmento.
[00142] Em uma modalidade, o circuito de decisão 1230 pode gerar ou fornecer uma ou mais informações, resultados de decisão, indicadores e/ou sinais, por exemplo, armazenando-os em um ou mais locais de armazenamento acessíveis pelo circuito alocador 1240 e/ou enviando-os diretamente para o circuito alocador 1240, que pode identificar um único segmento que tenha prioridade sobre qualquer número de outros segmentos ou pode especificar uma classificação de prioridade de dois ou mais segmentos.
[00143] O circuito alocador 1240 pode incluir circuitos, estruturas e/ou hardware para receber informações, resultados de decisão, indicadores, e/ou sinais do circuito de decisão 1230 para agir em, finalizar, e/ou implementar as decisões de alocação de recursos para, por exemplo, responder a uma decisão, a partir do circuito de decisão 1230, que um primeiro segmento tem prioridade sobre um segundo segmento, para enviar um ou mais sinais para dirigir a alocação de um recurso (por exemplo, recurso 1250), na totalidade ou em parte, para
Petição 870190044159, de 10/05/2019, pág. 56/318
42/232 esse segmento. Para o fazer, o circuito alocador 1240 pode enviar um ou mais sinais (por ex., um sinal ir 1240C) a um despacho ou outro circuito que permita que um determinado segmento use um recurso indivisível ou use uma ou mais partes de um recurso divisível.
[00144] Em modalidades, o circuito alocador 1240 também pode receber uma ou mais solicitações (por exemplo, solicitações 1240A e 1240B) para usar um recurso. Os pedidos podem ser sinais e/ou qualquer outro tipo de indicação de segmentos, de recurso e/ou de qualquer tipo de circuito de despacho associado com um segmento ou um recurso. Em modalidades, o circuito alocador 1240 pode escolher ou arbitrar entre solicitações de segmento, por exemplo, usando informações, resultados de decisão, indicadores e/ou sinais do circuito de decisão 1230, para determinar qual segmento deve ser alocado ao recurso.
[00145] Em modalidades, o circuito alocador 1240 pode incluir circuitos, estruturas e/ou hardware para atuar em decisões de alocação do circuito de decisão 1230 sujeito a, ou com base em informações adicionais ou restrições. Por exemplo, o circuito alocador 1240 pode incluir um conjunto de locais de armazenamento ou registradores fixos, configuráveis ou programáveis 1242, com um registro por segmento, que indica quantas partes de um recurso divisível (por exemplo, quantas entradas de um buffer) são dedicadas a cada segmento, um conjunto de contadores 1244, um por segmento, para rastrear quantos de cada parte estão atualmente em uso por cada segmento, e um conjunto de comparadores 1246, um por segmento, para verificar se um segmento está usando sua alocação completa. O circuito alocador 1240 pode usar resultados de comparadores 1246 para aceitar ou rejeitar decisões de alocação do circuito de decisão 1230. Em vez disso ou adicionalmente, uma modalidade pode incluir armazenamento para um indicador para cada
Petição 870190044159, de 10/05/2019, pág. 57/318
43/232 parte de um recurso divisível (por exemplo, um bit ou campo de cada entrada em um buffer), para indicar qual segmento (ou segmentos) tem permissão para usar essa parte desse recurso, e o circuito alocador 1240 pode usar o indicador armazenado para aceitar ou rejeitar decisões de alocação do circuito de decisão 1230.
Sumário de Algumas Modalidades [00146] Uma modalidade da invenção pode incluir um processador que compreende um alocador de recursos e um recurso incluindo um circuito rastreador, um circuito de política, um circuito de decisão e um circuito alocador. O circuito rastreador pode ser para rastrear pelo menos um dos históricos de desempenho do recurso, histórico de uso do recurso e um estado de segmento. O circuito de política pode fornecer informações de política para implementar uma política de alocação de recursos. O circuito de decisão pode ser o de escolher um segmento baseado em uma saída do circuito do rastreador e a informação da política. O circuito alocador pode ser o uso de uma saída do circuito de decisão para alocar o recurso para o segmento. [00147] Compartilhamento Competitivo Algorítmico de Recursos [00148] Um núcleo de processador pode suportar um recurso algorítmico de SMT de acordo com modalidades. Em algumas modalidades, esse recurso resolve o problema da alocação de segmentos aos recursos disponíveis que são compartilhados competitivamente na arquitetura entubada. Em algumas modalidades, este problema é resolvido usando um algoritmo de prioridade. Em algumas modalidades, um bloco preditor de ramificação em uma arquitetura entubada pode ser compartilhado competitivamente e pode usar um algoritmo de prioridade para alocação de entrada eficiente. Em algumas modalidades, um algoritmo de prioridade pode ser implementado em hardware e/ou software. Em algumas modalidades, a alocação de segmento pode ser executada com dois ou mais
Petição 870190044159, de 10/05/2019, pág. 58/318
44/232 segmentos. Em algumas modalidades, a alocação de segmento pode atribuir um segmento mais eficiente a um recurso disponível na arquitetura entubada para alcançar instruções mais elevadas por clock (IPC - instructions per clock) e/ou o rendimento da arquitetura entubada. Em algumas modalidades, esse recurso pode fornecer um algoritmo mais conhecido para priorizar uma alocação de segmento a um recurso disponível. À medida que o número de segmentos aumenta e/ou o contexto alternar entre segmentos aumentar, a funcionalidade pode proporcionar benefícios adicionais por eficientemente alocar recursos.
[00149] A Figura 13 é um diagrama em bloco ilustrando um recurso algorítmico de SMT que pode ser incluído em um processador 1300 de acordo com modalidades. O hardware do algoritmo de prioridade pode, por exemplo, incluir gerenciamento baseado em comportamento dinâmico. O hardware de prioridade pode compreender pelo menos um de um bloco de detecção de evento 1301, um bloco de sinalizador de contador de desempenho 1302, um bloco de prevenção de impasse 1303 e um bloco de tipo de instrução/classe 1304. O bloco de detecção de evento 1301 pode, por exemplo, detectar um ou mais eventos, como um nuke, uma frequência de clear (por exemplo, JEClear e CRCIear), frequência de BR, interrupções e falhas de cache. O bloco de bandeira do contador de desempenho 1302 pode, por exemplo, contar um ou mais dos seguintes: instruções retiradas, erros de falta, falhas L2/L3. O bloco de prevenção de impasse 1303 pode impedir estados de conflito. O tipo de instrução/bloco de classes 1304 pode, por exemplo, permitir que uma instrução de ponto flutuante se retire. Em algumas modalidades, um ou mais dos anteriores podem ser implementados em software e/ou firmware. Além disso, em algumas modalidades, o software pode permitir que um sistema operacional (SO - operating system) e/ou um gerenciador de máquina
Petição 870190044159, de 10/05/2019, pág. 59/318
45/232 virtual (VMM - virtual machine manager) estabeleçam prioridades.
[00150] Em algumas modalidades, um algoritmo de prioridade pode ter capacidades de aprendizagem, como a aprendizagem de máquina. A capacidade de aprendizado pode fornecer uma seleção de segmento mais inteligente e pode ser baseada em adaptações, por exemplo, em dados históricos e/ou padrões coletados.
[00151] Em algumas modalidades, pode haver mais de um segmento com um evento similar. Em algumas modalidades, um esquema de prioridade pode ser usado em casos em que há empate entre segmentos. O desempate pode, por exemplo, ser realizado por seleção aleatória, selecionando o segmento numerado inferior, selecionando o segmento numerado mais alto e/ou selecionando segmentos alternados.
[00152] A Figura 14 é um diagrama de fluxo ilustrando um método para um recurso SMT algorítmico que pode ser realizado por um processador de acordo com modalidades. O método pode incluir a determinação se o recurso compartilhado competitivo na arquitetura entubada está disponível, conforme ilustrado em 1401. O método pode ainda incluir tópicos de priorização, conforme ilustrado em 1402. Por exemplo, segmentos podem ser priorizados se não é mais que um evento. O método pode ainda compreender a escolha do evento de maior prioridade ou sinalizador, conforme ilustrado em 1403. Por exemplo, o evento de maior prioridade ou sinalizador pode ser selecionado com base em um algoritmo designado. O método pode ainda compreender a alocação de recursos a um segmento, conforme ilustrado em 1404. Por exemplo, recursos podem ser atribuídos ao segmento mais desejável com base no algoritmo de prioridade.
[00153] A Figura 15 é um diagrama em bloco ilustrando um recurso algorítmico SMT que pode ser incluído em um processador de acordo com modalidades. A Figura 15 mostra uma alocação de um segmento,
Petição 870190044159, de 10/05/2019, pág. 60/318
46/232 por exemplo, segmento TO, para um recurso compartilhado competitivamente baseado em um bloco de prioridade algorítmica. Por exemplo, a característica pode determinar que um recurso compartilhado competitivamente 1501 está disponível, por exemplo, de acordo com a caixa 1401 na Figura 14. O bloco de prioridade algorítmica 1502 pode priorizar se houver mais de um evento, por exemplo, eventos Evt1 e Evt2, por exemplo, de acordo com a caixa 1402 da Figura 14. O bloco de prioridade algorítmica 1502 também pode incluir o evento de maior prioridade ou o sinalizador baseado no algoritmo atribuído, por exemplo, de acordo com a caixa 1403 da Figura 14. O bloco de prioridade algorítmica 1502 pode também atribuir um recurso, por exemplo, 1501, a um segmento mais desabilitado, por exemplo, T0 baseado no algoritmo de prioridade.
[00154] Em algumas modalidades, um algoritmo de prioridade pode compreender um renomear inteiro e/ou um algoritmo de renomeamento de ponto flutuante. O algoritmo de prioridade pode incluir determinações baseadas em eventos baseadas em eventos como Nuke, Clear e parada. O algoritmo de prioridade pode incluir um contador de desempenho, que pode contar ocorrências como instruções retiradas e erros de código. O algoritmo de prioridade pode compreender a limitação de registros físicos, o uso de prevenção de conflito e/ou a determinação de falhas de cache. O algoritmo de prioridade pode compreender tipos e classes de instrução determinantes. O algoritmo de prioridade pode compreender a alocação de registradores, por exemplo, alocando um segmento de palavras de ponto flutuante a mais dos registradores de ponto flutuante. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. Por exemplo, o algoritmo de prioridade pode permitir que um sistema operacional e/ou um gerenciador de máquinas virtuais forneçam prioridade. O algoritmo de
Petição 870190044159, de 10/05/2019, pág. 61/318
47/232 prioridade pode incluir prioridade gerenciada por hardware, por exemplo, com base no comportamento dinâmico.
[00155] Em algumas modalidades, um algoritmo de prioridade pode compreender um algoritmo preditor de ramificação. Em algumas modalidades do algoritmo preditor de ramificação pode controlar a ação dos tampões alvo de ramificação (BTB) com base em um ou mais dos seguintes: a frequência de clears (por exemplo, JEClears e CRCIears), frequências de ramificações (por exemplo, todas, tomadas, não tomadas), propriedades que não sejam ramificações (por exemplo, instruções retiradas, faltas L2/L3). O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. Por exemplo, o algoritmo de prioridade pode permitir que um sistema operacional e/ou um gerenciador de máquinas virtuais forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware, por exemplo, com base no comportamento dinâmico. A Figura 16 mostra um diagrama em bloco implementando um algoritmo de prioridade do preditor de ramificação de acordo com uma modalidade exemplificativa. A lógica de particionamento 1602 pode receber entradas 1603, tais como frequência de clears (por exemplo, JEClears e CRCIears), frequências de ramificações (por exemplo, todos, tomadas, não tomadas), propriedades que não sejam ramificações (por exemplo, instruções retiradas, faltas L2/L3. A lógica de particionamento 1602 pode alocar entradas dos buffers alvo de ramificação (BTB) 1601 com base nas entradas 1603.
Sumário de Algumas Modalidades [00156] Uma modalidade pode incluir um processador configurado para identificar um recurso compartilhado competitivo disponível; selecionar um segmento baseado pelo menos em parte em um algoritmo de prioridade; e atribuir o segmento selecionado ao recurso compartilhado de forma competitiva disponível.
Petição 870190044159, de 10/05/2019, pág. 62/318
48/232 [00157] Em algumas modalidades, um ou mais dos seguintes se aplicam. Em algumas modalidades, o processador pode ser configurado adicionalmente para compartilhar competitivamente a previsão de ramificação e usar o algoritmo de prioridade para alocação de entrada. Em algumas modalidades, o processador pode ser ainda configurado para atribuir um segundo segmento baseado no algoritmo de prioridade. Em algumas modalidades, o processador pode ser ainda configurado para atribuir um segmento mais eficiente para o recurso disponível na arquitetura entubada para aumentar pelo menos uma das instruções por clock (IPC) e o rendimento da arquitetura entubada. Em algumas modalidades, o processador pode ser ainda configurado para fornecer um algoritmo mais conhecido para priorizar uma alocação de segmento ao recurso disponível. Em algumas modalidades, o processador pode ser ainda configurado para priorizar quando dois ou mais eventos são detectados. Em algumas modalidades, o processador pode ser configurado adicionalmente para selecionar pelo menos um evento de maior prioridade e sinalizador baseado em um algoritmo designado.
[00158] Em algumas modalidades, o processador pode compreender um bloco de detecção de evento, um bloco de sinalizador de contador de desempenho, um bloco de prevenção de bloqueio e um bloco de tipo/classe de instrução. Em algumas modalidades, o bloco de detecção de eventos pode detectar pelo menos um de um nuke, frequência de clear, frequência de BR, uma parada e uma falta de cache. Em algumas modalidades, o bloco de sinalizador de contador de desempenho pode contar pelo menos uma das instruções retiradas, erros de código e falhas L2/L3. Em algumas modalidades, o bloco de prevenção de impasse pode impedir estados de conflito. Em algumas modalidades, o tipo de instrução/bloco de classe pode permitir que uma instrução de ponto flutuante se retire.
Petição 870190044159, de 10/05/2019, pág. 63/318
49/232
Em algumas modalidades, o processador pode ser ainda configurado para permitir que pelo menos um de um sistema operacional (SO) e um gerenciador de máquina virtual (VMM) definam prioridades. Em algumas modalidades, o algoritmo de prioridade pode ter pelo menos uma capacidade de aprendizagem. Em algumas modalidades, a capacidade de aprendizagem, pelo menos, um pode ser adaptável com base em pelo menos um dos dados históricos e padrões de carga de trabalho.
[00159] Em algumas modalidades, o algoritmo de prioridade pode compreender pelo menos um de um renomeamento inteiro e um algoritmo de renomeamento de ponto flutuante. O algoritmo de prioridade pode compreender determinações baseadas em eventos. A determinação baseada em evento pode incluir um ou mais de um nuke, um clear e uma parada. O algoritmo de prioridade pode incluir um contador de desempenho. O contador de desempenho pode contar ocorrências. As ocorrências podem ser uma ou mais das instruções retiradas e erros do código. O algoritmo de prioridade pode compreender um ou mais dos registros físicos limitantes, usando a prevenção de bloqueio e determinando as perdas de cache. O algoritmo de prioridade pode compreender tipos e classes de instrução determinantes. O algoritmo de prioridade pode incluir alocação de registros. Alocar registradores pode incluir a alocação de um segmento de palavras de ponto flutuante a mais dos registradores de ponto flutuante. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada em comportamento dinâmico.
Petição 870190044159, de 10/05/2019, pág. 64/318
50/232 [00160] Em algumas modalidades, um algoritmo de prioridade pode compreender um algoritmo preditor de ramificação. Em algumas modalidades, o algoritmo preditor de ramificação pode controlar a ação de buffers de alvo de ramificação (BTB) com base, pelo menos em parte, em um ou mais dos seguintes: frequência de clears, frequências de ramificações, propriedades diferentes de ramificações. Os clears podem compreender um ou mais de JEClears e CRCIears. As frequências de ramificações podem compreender um ou mais de todas, tomadas, não tomadas. As propriedades que não sejam ramificações podem incluir uma ou mais das instruções retiradas, falhas L2/L3. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada, pelo menos em parte, no comportamento dinâmico. O algoritmo de prioridade pode incluir o uso de lógica de particionamento para receber entradas. As entradas podem compreender uma ou mais das frequências de clears, frequências de ramificações, propriedades diferentes de ramificações. A lógica de particionamento pode alocar entradas dos buffers de destino de ramificação (BTB) com base nas entradas.
[00161] Uma modalidade pode incluir um método compreendendo a identificação de um recurso compartilhado competitivamente disponível; selecionando um segmento baseado pelo menos em parte em um algoritmo de prioridade; e atribuir o segmento selecionado ao recurso compartilhado de forma competitiva disponível.
[00162] Em algumas modalidades, um ou mais dos seguintes se aplicam. Em algumas modalidades, o método pode ainda compreender competitivamente a previsão de ramificação e utilizar o
Petição 870190044159, de 10/05/2019, pág. 65/318
51/232 algoritmo de prioridade para alocação de entrada. Em algumas modalidades, o método pode ainda compreender a alocação de um segundo segmento com base no algoritmo de prioridade. Em algumas modalidades, o método pode ainda compreender a alocação de um segmento mais eficiente para o recurso disponível na calha para aumentar pelo menos uma das instruções por clock (IPC) e rendimento da arquitetura entubada. Em algumas modalidades, o método pode ainda compreender providenciar um algoritmo melhor conhecido para dar prioridade a um segmento mais alto para o recurso disponível. Em algumas modalidades, o método pode ainda compreender priorizar quando são detectados dois ou mais eventos. Em algumas modalidades, o método pode ainda compreender a seleção de pelo menos um evento de maior prioridade e sinalizador baseado em um algoritmo designado.
[00163] Em algumas modalidades, o método pode ainda compreender usando um bloco de detecção de eventos, um bloco de sinalizador de contador de desempenho, um bloco de prevenção de bloqueio e um tipo de instrução/bloco de classe. Em algumas modalidades, o método pode ainda compreender a utilização do bloco de detecção de eventos para detectar pelo menos um de nukes, uma frequência clear, uma interrupção e uma falha de cache. Em algumas modalidades, o método pode ainda compreender a utilização do bloco de bandeira de contador de desempenho para contar pelo menos uma das instruções retiradas, erros de código e falhas L2/L3. Em algumas modalidades, o método pode ainda compreender a utilização do bloco de prevenção de impasse para evitar estados de impasse. Em algumas modalidades, o método pode ainda compreender a utilização do tipo de instrução/bloco de classe para permitir que uma instrução de ponto flutuante se retire. Em algumas modalidades, o método pode ainda compreender permitir que pelo menos um de um sistema
Petição 870190044159, de 10/05/2019, pág. 66/318
52/232 operacional (OS) e um gerenciador de máquina virtual (VMM) definam prioridades. Em algumas modalidades, o algoritmo de prioridade pode ter pelo menos uma capacidade de aprendizagem. Em algumas modalidades, a capacidade de aprendizagem, pelo menos, um pode ser adaptável com base em pelo menos um dos dados históricos e padrões de carga de trabalho.
[00164] Em algumas modalidades, o algoritmo de prioridade pode compreender pelo menos um de um renomear inteiro e um algoritmo de renomeamento de ponto flutuante. O algoritmo de prioridade pode compreender determinações baseadas em eventos. A determinação baseada em evento pode incluir um ou mais de um nuke, um clear e uma parada. O algoritmo de prioridade pode incluir um contador de desempenho. O contador de desempenho pode contar ocorrências. As ocorrências podem ser uma ou mais das instruções retiradas e erros do código. O algoritmo de prioridade pode compreender um ou mais dos registros físicos limitantes, usando a prevenção de bloqueio e determinando as perdas de cache. O algoritmo de prioridade pode compreender tipos e classes de instrução determinantes. O algoritmo de prioridade pode incluir alocação de registros. Alocar registradores pode incluir a alocação de um segmento de palavras de ponto flutuante a mais dos registradores de ponto flutuante. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada em comportamento dinâmico.
[00165] Em algumas modalidades, um algoritmo de prioridade pode compreender um algoritmo preditor de ramificação. Em algumas modalidades, o algoritmo de predição de ramificação pode controlar a
Petição 870190044159, de 10/05/2019, pág. 67/318
53/232 ação de buffers de alvo de ramificação (BTB) com base, pelo menos em parte, em um ou mais dos seguintes: frequência de clears, frequências de ramificações, propriedades diferentes de ramificações. As clears podem incluir JECIears. As frequências de ramificações podem compreender um ou mais de todas, tomadas, não tomadas. As propriedades que não sejam filiais podem incluir uma ou mais das instruções retiradas, falhas L2/L3. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada, pelo menos em parte, no comportamento dinâmico. O algoritmo de prioridade pode incluir o uso de lógica de particionamento para receber entradas. As entradas podem compreender uma ou mais das frequências de limpezas, frequências de ramificações, propriedades diferentes de ramificações. A lógica de particionamento pode alocar entradas dos buffers de destino de ramificação (BTB) com base nas entradas.
[00166] Uma modalidade pode incluir um meio não transitório legível por máquina, armazenando pelo menos uma instrução que, quando executada por um processador, faz com que o processador execute um método, compreendendo o método a identificação de um recurso compartilhado disponível competitivamente; selecionando um segmento baseado pelo menos em parte em um algoritmo de prioridade; e atribuir o segmento selecionado ao recurso compartilhado de forma competitiva disponível.
[00167] Em algumas modalidades, um ou mais dos seguintes se aplicam. Em algumas modalidades, o método pode ainda compreender competitivamente a predição de ramificação e utilizar o
Petição 870190044159, de 10/05/2019, pág. 68/318
54/232 algoritmo de prioridade para alocação de entrada. Em algumas modalidades, o método pode ainda compreender a alocação de um segundo segmento com base no algoritmo de prioridade. Em algumas modalidades, o método pode ainda compreender a alocação de um segmento mais eficiente para o recurso disponível na calha para aumentar pelo menos uma das instruções por clock (IPC) e rendimento de arquitetura entubada. Em algumas modalidades, o método pode ainda compreender a provisão de um algoritmo melhor conhecido para dar prioridade a uma alocação de segmento para o recurso disponível. Em algumas modalidades, o método pode ainda compreender priorizar quando são detectados dois ou mais eventos. Em algumas modalidades, o método pode ainda compreender a seleção de pelo menos um evento de maior prioridade e sinalizador baseado em um algoritmo designado.
[00168] Em algumas modalidades, o método pode ainda compreender o uso de um bloco de detecção de evento, um bloco de sinalizador de contador de desempenho, um bloco de prevenção de bloqueio e um bloco de tipo/classe de instrução. Em algumas modalidades, o método pode ainda compreender a utilização do bloco de deteção de eventos para detectar pelo menos um de nukes, uma frequência de clear, frequência de BR, uma interrupção e uma falha de cache. Em algumas modalidades, o método pode ainda compreender a utilização do bloco de bandeira de contador de desempenho para contar pelo menos uma das instruções retiradas, erros de código e falhas L2/L3. Em algumas modalidades, o método pode ainda compreender a utilização do bloco de prevenção de impasse para evitar estados de impasse. Em algumas modalidades, o método pode ainda compreender a utilização do tipo de instrução/bloco de classe para permitir que uma instrução de ponto flutuante se retire. Em algumas modalidades, o método pode ainda compreender permitir que
Petição 870190044159, de 10/05/2019, pág. 69/318
55/232 pelo menos um de um sistema operacional (OS) e um gerenciador de máquina virtual (VMM) definam prioridades. Em algumas modalidades, o algoritmo de prioridade pode ter pelo menos uma capacidade de aprendizagem. Em algumas modalidades, a capacidade de aprendizagem, pelo menos, um pode ser adaptável com base em pelo menos um dos dados históricos e padrões de carga de trabalho.
[00169] Em algumas modalidades, o algoritmo de prioridade pode compreender pelo menos um de um renomeamento inteiro e um algoritmo de renomeamento de ponto flutuante. O algoritmo de prioridade pode compreender determinações baseadas em eventos. A determinação baseada em evento pode incluir um ou mais de um nuke, um clear e uma parada. O algoritmo de prioridade pode incluir um contador de desempenho. O contador de desempenho pode contar ocorrências. As ocorrências podem ser uma ou mais das instruções retiradas e erros do código. O algoritmo de prioridade pode compreender um ou mais dos registros físicos limitantes, usando a prevenção de bloqueio e determinando as perdas de cache. O algoritmo de prioridade pode compreender tipos e classes de instrução determinantes. O algoritmo de prioridade pode incluir alocação de registros. Alocar registradores pode incluir a alocação de um segmento de palavras de ponto flutuante a mais dos registradores de ponto flutuante. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada em comportamento dinâmico.
[00170] Em algumas modalidades, um algoritmo de prioridade pode compreender um algoritmo preditor de ramificação. Em algumas
Petição 870190044159, de 10/05/2019, pág. 70/318
56/232 modalidades, o algoritmo de predição de ramificação pode controlar a ação de buffers de alvo de ramificação (BTB) com base, pelo menos em parte, em um ou mais dos seguintes: frequência de clears, frequências de ramificações, propriedades diferentes de ramificações. Os clears podem incluir um ou mais dos JEClears e CRCIears. As frequências de ramificações podem compreender um ou mais de todas, tomadas, não tomadas. As propriedades que não sejam filiais podem incluir uma ou mais das instruções retiradas, falhas L2/L3. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada, pelo menos em parte, no comportamento dinâmico. O algoritmo de prioridade pode incluir o uso de lógica de particionamento para receber entradas. As entradas podem compreender uma ou mais das frequências de limpezas, frequências de ramificações, propriedades diferentes de ramificações. A lógica de particionamento pode alocar entradas dos buffers de destino de ramificação (BTB) com base nas entradas.
[00171] Uma modalidade pode incluir um sistema incluindo uma memória e um processador, o processador configurado para identificar um recurso compartilhado competitivo disponível; selecionar um segmento baseado pelo menos em parte em um algoritmo de prioridade; e atribuir o segmento selecionado ao recurso compartilhado de forma competitiva disponível.
[00172] Em algumas modalidades, o algoritmo de prioridade pode compreender pelo menos um de um renomeamento inteiro e um algoritmo de renomeamento de ponto flutuante. O algoritmo de prioridade pode compreender determinações baseadas em eventos. A
Petição 870190044159, de 10/05/2019, pág. 71/318
57/232 determinação baseada em evento pode incluir um ou mais de um nuke, um clear e uma parada. O algoritmo de prioridade pode incluir um contador de desempenho. O contador de desempenho pode contar ocorrências. As ocorrências podem ser uma ou mais das instruções retiradas e erros do código. O algoritmo de prioridade pode compreender um ou mais dos registros físicos limitantes, usando a prevenção de bloqueio e determinando as perdas de cache. O algoritmo de prioridade pode compreender tipos e classes de instrução determinantes. O algoritmo de prioridade pode incluir alocação de registros. Alocar registradores pode incluir a alocação de um segmento de palavras de ponto flutuante a mais dos registradores de ponto flutuante. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada em comportamento dinâmico.
[00173] Em algumas modalidades, um algoritmo de prioridade pode compreender um algoritmo preditor de ramificação. Em algumas modalidades, o algoritmo de predição de ramificação pode controlar a ação de buffers de alvo de ramificação (BTB) com base, pelo menos em parte, em um ou mais dos seguintes: frequência de clears, frequências de ramificações, propriedades diferentes de ramificações. Os clears podem incluir um ou mais dos JEClears e CRCIears. As frequências de ramificações podem compreender um ou mais de todas, tomadas, não tomadas. As propriedades que não sejam filiais podem incluir uma ou mais das instruções retiradas, falhas L2/L3. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou
Petição 870190044159, de 10/05/2019, pág. 72/318
58/232 mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada, pelo menos em parte, no comportamento dinâmico. O algoritmo de prioridade pode incluir o uso de lógica de particionamento para receber entradas. As entradas podem compreender uma ou mais das frequências de limpezas, frequências de ramificações, propriedades diferentes de ramificações. A lógica de particionamento pode alocar entradas dos buffers de destino de ramificação (BTB) com base nas entradas.
[00174] Em algumas modalidades, um ou mais dos seguintes se aplicam. Em algumas modalidades, o processador pode ser configurado adicionalmente para compartilhar competitivamente a previsão de ramificação e usar o algoritmo de prioridade para alocação de entrada. Em algumas modalidades, o processador pode ser ainda configurado para atribuir um segundo segmento baseado no algoritmo de prioridade. Em algumas modalidades, o processador pode ser ainda configurado para atribuir um segmento mais eficiente para o recurso disponível na calha para aumentar pelo menos uma das instruções por clock (IPC) e rendimento de arquitetura entubada. Em algumas modalidades, o processador pode ser ainda configurado para fornecer um algoritmo mais conhecido para priorizar uma alocação de segmento ao recurso disponível. Em algumas modalidades, o processador pode ser ainda configurado para priorizar quando dois ou mais eventos são detectados. Em algumas modalidades, o processador pode ser configurado adicionalmente para selecionar pelo menos um evento de maior prioridade e sinalizador baseado em um algoritmo designado.
[00175] Em algumas modalidades, o processador pode compreender um bloco de detecção de evento, um bloco de
Petição 870190044159, de 10/05/2019, pág. 73/318
59/232 sinalizador de contador de desempenho, um bloco de prevenção de conflito e um bloco de tipo/classe de instrução. Em algumas modalidades, o bloco de detecção de eventos pode detectar pelo menos um de um nuke, frequência de clear, frequência de BR, uma parada e uma falta de cache. Em algumas modalidades, o bloco de sinalizador de contador de desempenho pode contar pelo menos uma das instruções retiradas, erros de código e falhas L2/L3. Em algumas modalidades, o bloco de prevenção de impasse pode impedir estados de conflito. Em algumas modalidades, o tipo de instrução/bloco de classe pode permitir que uma instrução de ponto flutuante se retire. Em algumas modalidades, o processador pode ser ainda configurado para permitir que pelo menos um de um sistema operacional (SO) e um gerenciador de máquina virtual (VMM) definam prioridades. Em algumas modalidades, o algoritmo de prioridade pode ter pelo menos uma capacidade de aprendizagem. Em algumas modalidades, a capacidade de aprendizagem, pelo menos, um pode ser adaptável com base em pelo menos um dos dados históricos e padrões de carga de trabalho.
[00176] Em algumas modalidades, o algoritmo de prioridade pode compreender pelo menos um de um renomeamento inteiro e um algoritmo de renomeamento de ponto flutuante. O algoritmo de prioridade pode compreender determinações baseadas em eventos. A determinação baseada em evento pode incluir um ou mais de um nuke, um clear e uma parada. O algoritmo de prioridade pode incluir um contador de desempenho. O contador de desempenho pode contar ocorrências. As ocorrências podem ser uma ou mais das instruções retiradas e erros do código. O algoritmo de prioridade pode compreender um ou mais dos registros físicos limitantes, usando a prevenção de bloqueio e determinando as perdas de cache. O algoritmo de prioridade pode compreender tipos e classes de instrução
Petição 870190044159, de 10/05/2019, pág. 74/318
60/232 determinantes. O algoritmo de prioridade pode incluir alocação de registros. Alocar registradores pode incluir a alocação de um segmento de palavras de ponto flutuante a mais dos registradores de ponto flutuante. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada em comportamento dinâmico.
[00177] Em algumas modalidades, um algoritmo de prioridade pode compreender um algoritmo preditor de ramificação. Em algumas modalidades, o algoritmo de predição de ramificação pode controlar a ação de buffers de alvo de ramificação (BTB) com base, pelo menos em parte, em um ou mais dos seguintes: frequência de clears, frequências de ramificações, propriedades diferentes de ramificações. Os clears podem incluir um ou mais dos JEClears e CRCIears. As frequências de ramificações podem compreender um ou mais de todas, tomadas, não tomadas. As propriedades que não sejam filiais podem incluir uma ou mais das instruções retiradas, falhas L2/L3. O algoritmo de prioridade pode incluir a prioridade de gerenciamento por meio de software. O algoritmo de prioridade pode permitir que um ou mais de um sistema operacional e um gerenciador de máquina virtual forneçam prioridade. O algoritmo de prioridade pode incluir prioridade gerenciada por hardware. A prioridade gerenciada por hardware pode ser baseada, pelo menos em parte, no comportamento dinâmico. O algoritmo de prioridade pode incluir o uso de lógica de particionamento para receber entradas. As entradas podem compreender uma ou mais das frequências de limpezas, frequências de ramificações, propriedades diferentes de ramificações. A lógica de particionamento
Petição 870190044159, de 10/05/2019, pág. 75/318
61/232 ic pode alocar entradas dos buffers de destino de ramificação (BTB) com base nas entradas.
[00178] Comutação de Segmentos [00179] Um núcleo de processador pode suportar um recurso de troca de segmento SMT de acordo com a modalidades da invenção. Em um núcleo de processador que implementa o SMT com recursos compartilhados, o SMT pode envolver escolher qual de dois ou mais segmentos selecionar em vários estágios na arquitetura entubada de emissão/execução do processador. Modalidades da invenção, incluindo um recurso de troca de segmento SMT, podem ser desejadas para permitir que essa seleção seja influenciada por prioridades entre desempenho, justiça e outros fatores (por exemplo, aumentar o desempenho, diminuir o consumo de energia e implementar recursos de economia de energia e melhorar a justiça), garantias mínimas de desempenho, rendimento, instruções por clock (IPC), instruções por unidade de tempo, qualidade de serviço, tempo e/ou eficiência de memória, para listar apenas alguns dos critérios aplicáveis).. Por exemplo, em um núcleo de processador de arquitetura entubada de emissão/execução 900, a arbitragem pode ser usada para selecionar um segmento no qual o preditor de ramificação 911 deve iniciar a previsão, um segmento para o qual procurar uma previsão no i-TLB 916, um segmento para o qual procurar uma tradução i-TLB no i-cache 913, um segmento para o qual decodificar bits do i-cache 913 no decodificador 914, um segmento para o qual ler do op-cache 912, um segmento para o qual ler da fila de micro-op 915, etc.
[00180] A Figura 17 é um diagrama em bloco ilustrando um circuito de arbitragem 1700 para um recurso de comutação de segmento SMT que pode ser incluído em um processador de acordo com modalidades da invenção. Circuito de arbitragem 1700 pode incluir circuitos,
Petição 870190044159, de 10/05/2019, pág. 76/318
62/232 estruturas e/ou hardware para escolher qual de dois ou mais segmentos para selecionar para avanço em qualquer um dos vários estágios em uma arquitetura entubada de emissão/execução do processador. Um núcleo processador ou processador pode incluir múltiplas instâncias de uma ou mais modalidades de circuito de arbitragem 1700, cada um para qualquer um ou mais estágios de arquitetura entubada ou de recursos, cada um incluindo qualquer um ou mais dos blocos apresentados na Figura 17, e cada um a implementar qualquer uma ou mais abordagens ou combinações de abordagens descritas abaixo. Além disso, toda ou parte de qualquer instância do circuito de arbitragem 1700 pode ser incluída, integrada ou incorporada em outros circuitos, estruturas e/ou hardware de um processador ou núcleo de processador, tal como alocação de recursos, programação ou compartilhamento de circuitos.
[00181] Circuito de arbitragem 1700 pode incluir circuito round-robin simples 1710, circuito round-robin de alto rendimento 1720, circuito dinâmico round-robin 1730 e um circuito round-robin controlável por software 1740, juntamente com qualquer outro circuito desejado para implementar qualquer outro round-robin ou outro(s) esquema(s).
[00182] O circuito round-robin simples 1710 pode incluir circuitos, estruturas e/ou hardware para executar um esquema round-robin simples para selecionar um segmento. Por exemplo, pode implementar um esquema no qual a seleção alterna constantemente entre escolhas; ou seja, segmento 0, em seguida, segmento 1, em seguida, segmento 0, em seguida, segmento 1 e assim por diante; ou segmento 0, segmento 1, segmento 2, segmento 0, segmento 1, segmento 2 e assim por diante; etc.
[00183] O circuito round-robin de alto rendimento 1720 pode incluir circuitos, estruturas, e/ou o hardware para efetuar um esquema roundrobin modificado para selecionar um segmento com base no desejo de
Petição 870190044159, de 10/05/2019, pág. 77/318
63/232 prioridade de transferência em relação a outros fatores possíveis (tais como equidade). Por exemplo, pode implementar um esquema roundrobin simples (por exemplo, conforme descrito acima), desde que cada segmento tenha trabalho disponível no ponto de troca de segmento, caso contrário, pode escolher o segmento que possui o trabalho disponível. Em uma modalidade com mais de dois segmentos para escolher, pode cair do simples esquema de round-robin qualquer segmento sem trabalho disponível.
[00184] O circuito round-robin dinâmico 1730 pode incluir circuitos, estruturas e/ou hardware para executar um esquema round-robin dinamicamente modificável para selecionar um segmento baseado no comportamento dinâmico de segmentos. O circuito round-robin dinâmico 1730 pode incluir e/ou usar contadores de desempenho, outros contadores de hardware ou outras estruturas (cada uma das quais são representadas como 1732) para fornecer informações sobre as quais basear uma decisão (por exemplo, heurística). Um rácio ou outro critério sobre o qual basear a seleção de segmento para favorecer um segmento, bem como uma indicação de quais medidas de comportamento dinâmico devem ser usadas, pode ser fixo (por exemplo, com fio), configurável (por exemplo, por hardware ou firmware) ou programável (por exemplo, por software). Por exemplo, um primeiro segmento pode ser favorecido ou selecionado em um segundo segmento por uma proporção de 2:1 (por exemplo, segmento 0, segmento 0, segmento 1, segmento 0, segmento 0, segmento 1 e assim por diante). Exemplos de fatores ou critérios para determinar que um segmento é favorecido em relação a outro segmento são: taxa de erro, instruções por ciclo, taxa de falha de cache, etc.) [00185] Circuito round-robin controlável por software 1740 pode incluir circuitos, estruturas, e/ou o hardware para efetuar um esquema de round-robin modificado para selecionar um segmento com base em
Petição 870190044159, de 10/05/2019, pág. 78/318
64/232 uma prioridade fornecido pelo software (por exemplo, e o sistema operativo ou monitor de máquina virtual), que pode ter mais informações sobre o comportamento desejado do sistema do que está disponível para o software. A indicação, juntamente com uma relação a qual favorecer e/ou qualquer outra informação sobre qual esquema usar ou como implementá-lo (por exemplo, se e como combinar roundrobin controlável por software com round-robin dinâmico e/ou modificável) pode ser fornecido em um local de armazenamento programável ou registrador 1742 dentro ou acessível ao circuito de arbitragem 1700.
[00186] Em modalidades, combinações de abordagens são possíveis. Por exemplo, o software pode fornecer (por exemplo, usando os circuitos e/ou técnicas para round-robin controlável por software), uma dica sobre qual segmento favorecer e hardware (por exemplo, os circuitos ou técnicas de round-robin dinâmico), pode determinar, com base no comportamento do segmento e/ou heurística, pode determinar uma proporção de acordo com a qual favorecer esse segmento.
Sumário de Algumas Modalidades [00187] Uma modalidade da invenção pode incluir um processador que compreende um circuito de arbitragem. O circuito de arbitragem pode incluir um primeiro circuito de round-robin e um segundo circuito de round-robin. O primeiro circuito round-robin pode ser o de implementar um esquema de troca de segmento round-robin simples. O segundo circuito de round-robin pode ser implementar um esquema de troca de segmento de round-robin dinamicamente modificado. [00188] Evitar bloqueio [00189] Um núcleo de processador pode suportar um recurso de evitar bloqueio de SMT de acordo com modalidades da invenção. O compartilhamento de recursos pode, em algumas circunstâncias, levar
Petição 870190044159, de 10/05/2019, pág. 79/318
65/232 a um segmento que progride lentamente devido à falta de um ou mais recursos, não progredindo por não conseguir avançar (por exemplo, retirar uma instrução) e/ou por qualquer outro impasse tipo situação. Como resultado, a experiência do usuário pode incluir um desempenho notavelmente mais lento ou um erro, ou falha. As modalidades da invenção incluindo uma característica de evitar o impasse, podem ser desejadas para reduzir as situações do tipo de impasse e melhorar a experiência do usuário. Outros benefícios dessas modalidades podem incluir, por exemplo, aumentar o desempenho, diminuir o consumo de energia e implementar recursos de economia de energia e melhorar a justiça, garantias mínimas de desempenho, produtividade, instruções por clock (IPC), instruções por unidade de tempo, qualidade de serviço, tempo e/ou eficiência de memória, para listar apenas alguns dos critérios aplicáveis.
[00190] A Figura 18 é um diagrama em bloco ilustrando um hardware de impedimento de bloqueio 1800 que pode ser incluído em um processador de acordo com modalidades da invenção. O hardware de impedimento de bloqueio 1800 pode incluir circuitos, estruturas e/ou hardware para afetar a alocação e o uso de circuitos, estruturas, unidades e recursos centrais, e partes deles, para reduzir a incidência de situações do tipo bloqueio. Em modalidades, um hardware de impedimento de bloqueio 18000 podem ser implementados para evitar um bloqueio envolvendo um único recurso e/ou vários recursos. Em qualquer um dos casos, um núcleo de processador ou processador pode incluir várias instâncias de uma ou mais modalidades de hardware de impedimento de bloqueio 1800, cada uma para qualquer um ou mais recursos, cada um incluindo qualquer um ou mais dos blocos mostrados na Figura 18, e cada implementar uma ou mais abordagens ou combinações de abordagens descritas abaixo. Além disso, a totalidade ou parte de qualquer exemplo de hardware de
Petição 870190044159, de 10/05/2019, pág. 80/318
66/232 impedimento de bloqueio 1800 podem ser incluídas, integrado, ou incorporados em outros circuitos, estruturas, e/ou hardware de um núcleo processador ou processador, tal como a afetação de recursos, de programação, ou partilha de circuitos.
[00191] Hardware de impedimento de bloqueio 1800 pode incluir circuito alocador 1810, que pode incluir circuitos, estruturas e/ou hardware para alocar recursos para segmentos. Uma modalidade ou instância de uma modalidade do circuito alocador 1810 pode representar ou corresponder a uma modalidade ou instância de uma modalidade de um circuito alocador 1240 na Figura 12.
[00192] Hardware de impedimento de bloqueio 1800, circuito alocador CGA10 e/ou qualquer outra parte de um núcleo de processador ou processador pode incluir circuitos, estrutura e/ou hardware para desabilitar, bloquear ou impedir de outro modo o circuito alocador CGA10 de alocar um recurso, ou uma parte de um recurso divisível, para qualquer um ou mais segmentos específicos. Por exemplo, em uma modalidade incluindo qualquer tipo de esquema round-robin, como os descritos acima, para escolher ou arbitrar entre pedidos de segmento, o bloqueio de um determinado segmento do uso de um recurso pode ser realizado pela queda temporária desse segmento de esquema round-robin. Modalidades podem incluir uma porta AND tendo um sinal de solicitação de segmento (por exemplo, 1240A, 1240B) como uma entrada e o complemento de um sinal de bloco de segmento (por exemplo, gerado por circuitos baseados em contadores de uso de recursos 1820, conforme descrito abaixo, ou qualquer outra informação, estado ou sinais), de modo que a saída da porta AND possa indicar se um segmento deve receber um recurso ou ser considerado como um candidato para o qual um recurso deve ser alocado.
[00193] Hardware de impedimento de bloqueio 1800 também pode
Petição 870190044159, de 10/05/2019, pág. 81/318
67/232 incluir o contador de uso de recursos 1820. Em uma modalidade de recurso, contador de uso de recursos 1820 pode ser um contador de hardware por segmento para contar o número de partes (por exemplo, entradas) de um recurso divisível (por exemplo, buffer, fila, programadora, estação de reserva) que estão sendo ocupados ou usados por um determinado segmento. Para um recurso específico, uma instância do contador de uso de recursos 1820 para um segmento específico pode ser incrementada em resposta ao circuito alocador 1810 alocando uma entrada para esse segmento, decrementada em resposta à entrada sendo desalocada ou removida e limpa em resposta para o recurso sendo liberado. O circuito alocador 1810 pode ser dinamicamente desabilitado ou bloqueado (por exemplo, conforme descrito acima) da alocação de uma entrada para um segmento em resposta à contagem desse segmento que atinja ou exceda um limite.
[00194] O limite pode ser escolhido para ser menor que o número total de entradas no recurso para impedir que um único segmento use todas as entradas ao mesmo tempo, o que pode resultar em uma situação do tipo bloqueio. O limite também pode ser escolhido ou ajustado com base em outros fatores ou critérios, incluindo aqueles relacionados à tolerância para abordar situações do tipo bloqueio e/ou desejo de priorizar o rendimento ou outras medidas ou fatores de desempenho. O limite pode ser fixo (por exemplo, com segmento), configurável (por exemplo, por hardware ou firmware) ou programável (por exemplo, por software).
[00195] Em uma modalidade, um recurso divisível pode ser logicamente particionado para segmentos específicos e grupos de segmentos. Por exemplo, em um recurso divisível tendo um conjunto de entrada de N, um subconjunto de entradas N1 (em que N1 é menos que N) podem ser reservados para uso apenas por um primeiro
Petição 870190044159, de 10/05/2019, pág. 82/318
68/232 segmento, um subconjunto de entrada de N2 (em que n 2 é menor do que N) pode ser reservado para uso apenas por um segundo, e o subconjunto restante de N- (N1 + N2) entradas podem ser alocadas para qualquer segmento. Em modalidades, esta abordagem pode ser executada por uma ou mais instâncias do circuito alocador 1810.
[00196] Em uma modalidade em que a conclusão de uma carga depende da leitura de dados fora de um cache, cada entrada de cache pode incluir um bit para indicar que a entrada está bloqueada por um segmento que inclui uma carga dessa entrada. A substituição de entradas com esse conjunto de bits do indicador pode ser evitada até que o bit seja limpo em conexão com a conclusão da carga ou o segmento tenha um evento de liberação de arquitetura entubada (por exemplo, uma ramificação incorreta). Em modalidades, esta abordagem pode ser aplicada por uma ou mais instâncias do circuito alocador 1810.
[00197] Em uma simulação de modalidade, o contador de uso de recursos 1820 pode ser um contador de hardware por segmento para contar o número de ciclos de clock que, para a entrada mais antiga em uma fila de retiros para um determinado segmento, esse segmento (o segmento interrompido) está aguardando um despacho correspondente para um recurso indivisível (a condição envolve a fila de retirada porque o segmento precisa de um horário de envio e um horário de gravação de volta). Um circuito alocador 1810, em resposta à contagem para o segmento parado atingindo ou excedendo um limite, pode ser dinamicamente desabilitado ou bloqueado (por exemplo, como descrito acima) da alocação de uma operação de um segmento diferente para o programador para o recurso indivisível. Como alternativa, o envio de quaisquer operações para o recurso indivisível pode ser desativado ou bloqueado para um determinado número de ciclos de clock.
Petição 870190044159, de 10/05/2019, pág. 83/318
69/232 [00198] Essas abordagens podem evitar uma situação do tipo bloqueio sobre o uso de um recurso indivisível, como uma unidade de execução, que pode executar diferentes operações consumindo uma série de ciclos de clock. Por exemplo, ele pode permitir que uma operação que conclua em um único ciclo use um recurso que, de outra forma, poderia ser mantido ocupado ao concluir uma sucessão de operações de vários ciclos.
[00199] O limite pode ser fixo (por exemplo, com segmento), configurável (por exemplo, por hardware ou firmware) ou programável (por exemplo, por software). Ele pode ser escolhido e/ou ajustado dinamicamente com base em vários fatores ou critérios, incluindo aqueles relacionados à taxa de transferência e aqueles relacionados à imparcialidade. Por exemplo, se a equidade é uma prioridade, então o limiar pode ser gradualmente reduzido para permitir de forma mais agressiva que cada segmento progrida; se a taxa de transferência for uma prioridade, pode ser aumentada gradualmente para permitir que os segmentos que estão progredindo continuem sem interrupções.
Sumário de Algumas Modalidades [00200] Uma modalidade da invenção pode incluir um processador que compreende hardware de prevenção de bloqueio e um recurso. O hardware de impedimento de bloqueio pode incluir um circuito alocador e um contador de uso de recursos. O circuito alocador pode ser para determinar se deve alocar o recurso para um segmento com base em uma saída do contador de uso de recursos.
Recursos do Caminho de Dados [00201] Os núcleos de processador de acordo com modalidades da invenção podem incluir vários recursos para suportar uma arquitetura de conjunto de instruções (ISA - instruction set architecture) com um caminho de dados que é mais estreito do que o previsto pela ISA. Várias dessas características são descritas separadamente usando
Petição 870190044159, de 10/05/2019, pág. 84/318
70/232 exemplos não limitativos abaixo, mas as modalidades podem incluir qualquer combinação de tais características.
[00202] Um núcleo de processador pode suportar um recurso que permite operações em operandos de um tamanho maior (por exemplo, carrega/armazena/operações aritméticas em operandos que são 256 bits no lado) dividindo essas operações em várias micro-operações (pops) que operam em operandos menores (por exemplo, vários pops que operam em valores de 128 bits). Tal característica pode ser desejável por uma variedade de razões: por exemplo, um processador pode suportar uma arquitetura de conjunto de instruções que envolve tamanhos de operandos maiores, mas pode usar uma microarquitetura baseada em tamanhos menores de operandos. Além disso, ou alternativamente, um processador pode suportar uma arquitetura de conjunto de instruções que envolve tamanhos de operandos maiores e ter um arquivo de registradores incluindo registros desse tamanho maior, mas pode incluir unidades de execução que podem manipular dados apenas em partes menores. Adicionalmente ou alternativamente, um processador pode ter um arquivo de registro de tamanho maior, unidades de execução e portas de carregamento/armazenamento, mas executar pops usando operandos de tamanho menor pode ser desejável para, por exemplo, fins de economia de energia ou programação. Outros benefícios potenciais de um processador, incluindo os recursos descritos abaixo, incluem, mas não se limitam a, aumento de desempenho, redução do consumo de energia e implementação de recursos de economia de energia e melhoria da imparcialidade, garantias mínimas de desempenho, produtividade, instruções por clock (IPC) por unidade de tempo, qualidade de serviço e eficiência de tempo e/ou memória, para listar apenas alguns dos critérios aplicáveis.
[00203] Carregamentos e Armazenamentos de Caminho de Dados
Petição 870190044159, de 10/05/2019, pág. 85/318
71/232 de 256 para 128 bits [00204] Um núcleo de processador pode suportar um recurso que permite cargas de 256 bits e armazena usando micro-operações de 128 bits (pops), de acordo com modalidades da invenção. Em algumas modalidades, um processador pode suportar uma arquitetura de conjunto de instruções de 256 bits, mas pode usar uma microarquitetura de 128 bits, incluindo um arquivo de registro de 128 bits. Noutras modalidades, um processador pode ter uma arquitetura de conjunto de instruções de 256 bits e um arquivo de registro de 256 bits, mas pode incluir portas de carregamento e/ou armazenamento que apenas podem manipular dados em blocos de 128 bits.
[00205] A Figura 19 é um diagrama mostrando uma carga de 256 bits para um arquivo de registro de 256 bits usando um par de pops de 128 bits, de acordo com algumas modalidades. A memória 1901 inclui uma série de valores de 256 bits, como o valor armazenado no local de memória 1902. Um primeiro pop 1903 recupera a metade inferior do valor armazenado no local de memória 1902 e um segundo pop 1904 recupera o valor metade superior do valor armazenado na posição de memória 1902. As duas metades do valor armazenado na posição de memória 1902 são mescladas (1905) e o resultado da operação de mesclagem é colocado no arquivo de registro de 256 bits 1906.
[00206] A Figura 20 é um diagrama de fluxo ilustrando o processo descrito acima com referência à Figura 19, de acordo com algumas modalidades. Durante o processo de decodificação de uma instrução (2001) se uma carga de 256 bits é detectada, 3 pl são gerados (caixa 2002), incluindo uma primeira carga pop, uma segunda carga pop e uma mistura pop. Os pops estão programados para serem executados e, para cada pop, o processador pode aguardar até que os dados a serem carregados/combinados estejam prontos (2003). Quando a
Petição 870190044159, de 10/05/2019, pág. 86/318
72/232 primeira carga μορ é executada, o processador pode recuperar a metade inferior do valor armazenado na posição de memória 1902, como mostrado na caixa 2004. Quando a segunda carga μορ é executada, o processador pode recuperar a metade superior do valor armazenado na posição de memória 1902, como mostrado na caixa 2004. Quando a mistura μορ é executada, as duas metades recuperadas do valor armazenado na posição de memória 1902 são combinadas e colocadas em um arquivo de registro de 256 bits, como mostrado na caixa 2004. Final mente, as instruções decodificadas são retiradas após a conclusão, conforme mostrado na caixa 2005.
[00207] Em algumas modalidades, um valor pode ser armazenado a partir de um arquivo de registro de 256 bits na memória usando pops de 128 bits. A Figura 21 é um diagrama representando este processo. Um arquivo de registro de 256 bits 2101 inclui registradores com 256 bits de largura, como o registrador 2102. Um primeiro armazenamento pop, 2103, recupera a metade inferior do valor armazenado no registrador 2102 e o armazena na metade inferior da localização de memória 2104. Um segundo armazenamento pop 2105 recupera a metade superior do valor armazenado no registrador 2102 e a armazena na metade superior do local de memória 2104.
[00208] A Figura 22 é um diagrama de fluxo representando o processo descrito acima com referência à Figura 21, de acordo com algumas modalidades. Durante o processo de decodificação de uma instrução (2201) se um armazenamento de 256 bits é detectado, 2 μΙ são gerados (caixa 2202), incluindo um primeiro armazenamento pop e um segundo armazenamento pop. Os pops estão programados para serem executados e, para cada μορ, o processador pode esperar até que os dados a serem armazenados estejam prontos (2203). Quando o primeiro armazenamento μορ é executado, o processador pode recuperar a metade inferior do valor armazenado no registrador 2102,
Petição 870190044159, de 10/05/2019, pág. 87/318
73/232 como mostrado na caixa 2204, e gravá-lo na metade inferior da localização de memória 2104. Quando o segundo armazenamento μορ é executado, o processador pode recuperar a metade superior do valor armazenado no registrador 2102, como mostrado na caixa 2204, e gravá-lo na metade superior do local de memória 2104. Finalmente, as instruções decodificadas são retiradas após a conclusão, como mostrado na caixa 2205.
[00209] Em algumas modalidades, uma instrução de carga de 256 bits pode carregar um valor de 256 bits em dois registradores de 128 bits executando dois pops, um primeiro μορ para carregar a metade inferior do valor de 256 bits em um primeiro registrador de 128 bits e um segundo μορ para carregar a metade superior do valor de 256 bits em um segundo registrador de 128 bits.
[00210] Em algumas modalidades, uma carga é realizada usando um único μορ que é duplamente bombeado - ou seja, que é executado duas vezes, uma vez para carregar a metade inferior de um valor da memória e uma segunda vez para carregar a metade superior de um valor da memória. Em algumas modalidades, um armazenamento é realizado usando um único μορ que é duplamente bombeado - isto é, executado uma vez para armazenar a metade inferior de um registro na memória e uma vez para armazenar a metade superior de um registrador na memória. Em algumas modalidades, os pops utilizados para implementar uma carga e/ou armazenamento de 256 bits podem ser programados de acordo com algoritmos de programação vetoriais. Em algumas modalidades, as técnicas de programação de grupo podem ser usadas para programar os múltiplos pops envolvidos em uma carga e/ou armazenamento para execução em unidades de execução separadas.
[00211] Os recursos de carga/armazenamento descritos acima não estão limitados a realizar cargas e/ou armazenamentos usando
Petição 870190044159, de 10/05/2019, pág. 88/318
74/232 memória, carregar portas ou registrar arquivos de qualquer tamanho particular. Por exemplo, as técnicas descritas acima podem ser usadas para executar cargas de 512 bits e/ou armazenamentos usando hardware subjacente que opera em 256 bits por vez] [00212] Execução Em Linha de Caminho de Dados de 256 a 128 bits [00213] Um núcleo de processador pode suportar um recurso que permite operações aritméticas de 256 bits usando micro-operações de 128 bits (pops), de acordo com modalidades da invenção. Em algumas modalidades, um processador pode suportar uma arquitetura de conjunto de instruções de 256 bits, mas pode usar uma microarquitetura de 128 bits, incluindo um arquivo de registro de 128 bits. Em outras modalidades, um processador pode ter uma arquitetura de conjunto de instruções de 256 bits e um arquivo de registro de 256 bits, mas pode incluir unidades de execução que só podem manipular dados em trechos de 128 bits. Em algumas modalidades, um processador pode ter um arquivo de registro de 256 bits, unidades de execução e portas de carregamento/armazenamento, mas pode ser desejável para, por exemplo, fins de economia de energia ou programação, implementar operações aritméticas de 256 bits usando múltiplos pops de 128 bits.
[00214] A Figura 23 ilustra este processo de acordo com algumas modalidades. Uma instrução de 256 bits 2301 é decodificada dividindo-a em 2 pops de 128 bits 2302 e 2303, que são então programados independentemente para execução em uma ou mais unidades de execução de 128 bits 2304, 2305. De acordo com a modalidade mostrada na Figura 23, o primeiro pl de 128 bits 2302 pode executar uma instrução usando as metades inferiores dos operandos de 256 bits fornecidos para a instrução aritmética de 256 bits e o processador pode então armazenar o resultado na metade de
Petição 870190044159, de 10/05/2019, pág. 89/318
75/232 um registro de destino de 256 bits. O segundo μορ de 128 bits 2303 pode executar uma instrução usando as metades superiores dos operandos de 256 bits fornecidos para a instrução aritmética de 256 bits e o processador pode então armazenar o resultado na metade superior de um registrador de destino de 256 bits.
[00215] De acordo com algumas modalidades, particionar a instrução de 256 bits em um par de pops de 128 bits baseia a metade inferior do resultado somente nas metades inferiores dos operandos da instrução de 256 bits, e a metade superior do resultado é baseado unicamente nas metades superiores dos operandos da instrução de 256 bits (isto é, operações em pista). Nesses cenários em pista, os dois pops de 128 bits podem ser programados independentemente um do outro, porque o resultado da instrução de 256 bits pode ser expresso como dois resultados independentes de dois pops de 128 bits separados.
[00216] Em algumas modalidades, cada um dos pops de 128 bits representam a mesma instrução (por exemplo, uma instrução ADI), e a instrução de 256 bits pode ser implementada usando um único pop de 128 bits que é duplamente bombeado. - isto é, executado duas vezes, uma vez para calcular a metade inferior do resultado e uma vez para calcular a metade superior do resultado. Em algumas modalidades, a instrução de 256 bits pode ser dividida em dois pops distintos, que são programados e executados de forma independente em uma ou mais unidades de execução. Em algumas modalidades, a instrução de 256 bits pode ser executada utilizando duas unidades de execução simultaneamente, cada uma executando um pop de 128 bits (este procedimento é por vezes conhecido na arte como programação de grupos).
[00217] Os recursos de execução em pista descritos acima não estão limitados à execução de instruções usando valores de memória,
Petição 870190044159, de 10/05/2019, pág. 90/318
76/232 portas de carregamento, unidades de execução ou arquivos de registro de qualquer tamanho particular. Por exemplo, as técnicas descritas acima podem ser usadas para executar operações de 512 bits usando hardware subjacente que opera em 256 bits por vez ou para executar operações de 1024 bits usando hardware subjacente que opera em 512 bits por vez.
[00218] Execução de Pista Cruzada de Caminho de Dados de 256 para 128 bits [00219] Em algumas modalidades, a instrução de 256 bits a ser executada não pode ser particionada em dois pops de 128 bits completamente independentes, porque a metade inferior do resultado depende dos valores armazenados nas metades superiores dos operandos e/ou a metade superior do resultado depende dos valores armazenados nas metades inferiores dos operandos (ou seja, operações de pista cruzada).
[00220] Operações de pista cruzada podem ser implementadas usando uma área de armazenamento temporário para armazenar resultados parciais, que são então combinados em um resultado final e armazenados em um registro de destino. A Figura 24 ilustra este processo de acordo com algumas modalidades desta característica. Uma instrução QJA01 de 256 bits de pista cruzada é decodificada dividindo-a em 2 pops QJA02 e QJA03 de 128 bits, que são então programados independentemente para execução em uma ou mais unidades de execução de 128 bits QJA06, QJA07. Uma área de armazenamento temporário QJA04 é usada para armazenar resultados parciais produzidos pelos pops QJA02 e QJA03. Esses resultados temporários são usados por um terceiro pop, QJA05, para produzir um resultado final.
[00221] Em algumas modalidades, cada um dos pops QJA02 e QJA03 de 128 bits representam a mesma instrução, e pode ser
Petição 870190044159, de 10/05/2019, pág. 91/318
77/232 implementado usando um único μορ de 128 bits que é duplamente bombeado duas - isto é, executado duas vezes, uma vez para calcular um primeiro resultado parcial que é armazenado na área de armazenamento temporário QJA04, e uma vez para calcular um segundo resultado parcial, que é armazenado na área de armazenamento temporário QJA04. Em algumas modalidades, a instrução de 256 bits pode ser dividida em dois pops distintos, que são programados e executados independentemente em uma ou mais unidades de execução, cujos resultados parciais são armazenados em uma área de armazenamento temporário. Em algumas modalidades, a instrução de 256 bits pode ser executada utilizando duas unidades de execução simultaneamente, cada uma executando um pop de 128 bits (este procedimento é por vezes conhecido na arte como programação de grupos). Em algumas modalidades, um pop de 256 bits pode ser executado usando uma unidade de execução especial com recursos de 256 bits, eliminando a necessidade de uma área de armazenamento temporário (por exemplo, área de armazenamento temporária QJA04).
[00222] Os recursos de execução de faixa cruzada descritos acima não estão limitados à execução de instruções usando valores de memória, portas de carregamento, unidades de execução ou arquivos de registro de qualquer tamanho específico. Por exemplo, as técnicas descritas acima podem ser usadas para executar operações de 512 bits usando hardware subjacente que opera em 256 bits por vez ou para executar operações de 1024 bits usando hardware subjacente que opera em 512 bits por vez.
Recursos Adicionais Independentes e Combináveis [00223] Os núcleos de processador de acordo com modalidades da invenção podem incluir várias características adicionais para suportar um desempenho melhorado e/ou um menor consumo de energia.
Petição 870190044159, de 10/05/2019, pág. 92/318
78/232
Várias dessas características são descritas separadamente usando exemplos não limitativos abaixo, mas as modalidades podem incluir qualquer combinação de tais características.
[00224] Cache Micro-op [00225] Um núcleo de processador pode suportar um recurso de cache micro-op de acordo com modalidades. Em algumas modalidades, o recurso de cache micro-op pode incluir alocação, política de substituição e diferentes tipos de estrutura (por exemplo, física, virtual, etc.). A alocação inteligente no cache micro-op característica pode detectar um tipo de instruções, tais como instruções do fluxo de loop ou complexos com microcódigo sequenciador (MS - microcode sequencer) de fluxo, contra instruções simples e alocar em conformidade. O recurso de cache micro-op também pode abranger a adição de um cache de vítima para possível reutilização futura e/ou para determinar quantas micro-operações devem ser atribuídas por linha de cache. Em algumas modalidades, o cache micro-op pode ser usado para salvar instruções decodificadas (micro-ops) em um buffer de micro-op para reutilização posterior das instruções decodificadas. Em algumas modalidades, o uso do buffer de micro-op pode encurtar a arquitetura entubada evitando múltiplos (por exemplo, pelo menos dois) ciclos de uma busca de cache de instruções e um estágio de decodificação. Também pode economizar energia usando micro-operações já disponíveis e decodificadas no buffer de micro-op. Em algumas modalidades, pode haver mais de um segmento com um evento similar (por exemplo, microtipo, dificuldade de decodificação de micro-op, padrões de uso de micro-op), e um esquema de prioridade pode ser usado nos casos em que há empate entre segmentos para alocar recursos para o cache micro-ops. Em algumas modalidades, o recurso de cache micro-op pode fornecer alocação inteligente, política de substituição e/ou de configuração para
Petição 870190044159, de 10/05/2019, pág. 93/318
79/232 cache micro-op para alcançar o mais alto I PC e/ou rendimento de instrução na arquitetura entubada.
[00226] A Figura 25 é um diagrama em bloco ilustrando um recurso de cache micro-ops que pode ser incluído em um processador de acordo com as modalidades. Uma característica de cache microoperação pode compreender um ou mais dos seguintes: um decodificador de instrução 2501, um bloco de alocação e substituição inteligente 2502 e um cache de micro-operação 2503. Um bloco de alocação e substituição inteligente 2502 pode receber instruções a partir do decodificador de instruções 2501. O decodificador de instruções 2501 pode também ser omitido e o bloco de alocação e substituição inteligente 2502 podem receber uma instrução já descodificada. O bloco de alocação e substituição inteligente 2502 pode determinar através de algoritmos que tipos de instruções para alocar, tais como complexo de instruções (por exemplo, com o fluxo de MS), corrente de lacete, etc. O bloco de alocação e substituição inteligente 2502 pode determinar onde alocar uma instrução no cache micro-op KQA03 e pode alocar a instrução no local determinado. Em algumas modalidades, o bloco de alocação e substituição inteligente 2502 podem, por exemplo, determinar algoritmicamente o tipo de instruções a serem alocadas com base em um ou mais dos seguintes: padrões de uso histórico para instruções, frequência de uso, dificuldade de decodificação e tempo de decodificação. O bloco de alocação e substituição inteligente podem, por exemplo, determinar onde armazenar instruções no cache micro-op com base em um ou mais dos seguintes parâmetros: informações de instruções usadas recentemente, padrões de uso histórico para instruções, frequência de uso, dificuldade de decodificação a instrução faz parte de um loop e se outras instruções do loop são armazenadas e o tempo de decodificação das instruções armazenadas no cache micro-op. Esses
Petição 870190044159, de 10/05/2019, pág. 94/318
80/232 parâmetros podem, por exemplo, ser armazenados no bloco de alocação e substituição inteligente, no cache micro-ops e/ou em outro lugar (por exemplo, em uma tabela separada).
[00227] A Figura 26 é um diagrama de fluxo ilustrando um método para um recurso de cache micro-operação que pode ser executado por um processador de acordo com modalidades. O método pode compreender receber instruções conforme mostrado na caixa 2601. O método pode ainda compreender determinar algoritmicamente quais os tipos de instruções para alocar, tais como complexo de instruções, corrente de lacete, etc., conforme mostrado na caixa 2602. O método pode ainda compreender a determinação onde alocar uma instrução em um cache micro-op conforme mostrado na caixa 2603. O método pode ainda compreender alocar a instrução no local determinado do cache micro-op conforme mostrado na caixa 2604.
[00228] A Figura 27 é um diagrama em bloco ilustrando um recurso de cache micro-ops que pode ser incluído em um processador de acordo com modalidades. O recurso de cache micro-op pode compreender uma ou mais de uma unidade de predição de ramificação (BPU - branch prediction unit) 2701, uma etiqueta de cache de instruções 2702, uma etiqueta micro-op 2703, um cache de instruções 2704, um cache micro-op 2705, um decodificador 2706 e uma fila de micro-op 2707. BPU 2701 pode executar predição de ramificação (por exemplo, para determinar se deve executar operações condicionais). Como ilustrado no lado esquerdo da Figura 27, a etiqueta de cache de instrução 2702 pode, por exemplo, receber uma etiqueta de instrução da BPU 2701 e determinar uma instrução associada à etiqueta de instrução. A instrução pode ser recuperada a partir do cache de instruções 2704 e descodificada pelo decodificador 2706. A fila micro-op 2707 pode em seguida receber a instrução descodificado a partir da decodificação 2706. Como ilustrado no lado
Petição 870190044159, de 10/05/2019, pág. 95/318
81/232 direito da Figura 28, a etiqueta micro-op 2703 pode receber uma etiqueta de instrução da BPU 2701 e determinar uma etiqueta microop associada. O cache micro-op 2705 pode então ser verificado para determinar se o micro-op associado com a etiqueta micro-op é armazenado no cache micro-op 2705 e para recuperar o micro-op do cache micro-op 2705. Micro-op pode ser decodificado e armazenado no cache micro-op 2705, por exemplo, como descrito acima em conexão com as Figs. 25 e 26. O recurso de cache micro-op pode ser físico e/ou virtual. O recurso de cache micro-op pode incluir o encurtamento da arquitetura entubada. Por exemplo, conforme ilustrado na Figura 27, no caso em que as micro-operações foram previamente decodificadas e armazenadas no cache micro-op, a tubulação no lado direito é mais curta que a tubulação no lado esquerdo porque uma operação de decodificação pode não precisar ser executada quando o micro-op já está armazenado no cache microop. O recurso de cache micro-op pode incluir a previsão de próximo segmento dentro do cache micro-op 2705. O recurso de cache microop pode armazenar fluxos de MS no cache micro-op 2705. O recurso de cache micro-op pode usar políticas de substituição para determinar quais micro-operações armazenam no cache e quais micro-operações substituir por novas micro-operações. O recurso de cache micro-ops pode determinar os tipos de instruções a serem alocadas no cache micro-op 2705, por exemplo, fluxo de loop e/ou instruções complexas. O recurso de cache micro-op pode priorizar micro-op. O recurso de cache micro-op pode incluir um cache de vítima (não mostrado). O cache da vítima pode armazenar instruções para possível reutilização, como instruções difíceis de decodificar.
[00229] A Figura 28 é um diagrama em bloco ilustrando um recurso de cache micro-op que pode ser incluído em um processador de acordo com modalidades. O recurso de cache micro-op pode
Petição 870190044159, de 10/05/2019, pág. 96/318
82/232 compreender um ou mais de um cache de operação física 2801 e um cache de operação virtual 2802. O cache de operação física 2801 pode, por exemplo, armazenar micro-ops na memória física usando um espaço de endereço físico. O cache micro-op virtual pode, por exemplo, armazenar micro-operações na memória virtual usando um espaço de endereço virtual. O cache micro-op físico 2801 e/ou o cache micro-op virtual 2802 pode ser liberado, por exemplo, no contexto e/ou na troca de modo. O cache micro-op físico 2801 e/ou o cache micro-op virtual 2802 podem ser compartilhados competitivamente.
Sumário de algumas modalidades [00230] Uma modalidade pode incluir um processador configurado para determinar algoritmicamente um tipo de instrução para alocar a um cache micro-operação; e determinar um local para atribuir uma instrução do tipo determinado com o cache micro-op; e alocar a instrução para o local determinado.
[00231] Em algumas modalidades, um ou mais dos seguintes se aplicam. Em algumas modalidades, o processador é ainda configurado para fazer com que uma alocação inteligente e um bloco de substituição recebam uma instrução de um decodificador de instruções. Em algumas modalidades, o tipo de instrução determinado é, pelo menos, um de uma instrução complexa e um fluxo de loop. Em algumas modalidades, o processador pode compreender uma ou mais de uma unidade de predição de ramificação (BPU), uma etiqueta de cache de instrução, uma etiqueta micro-op, um cache de instrução, um cache micro-op e um decodificador e uma fila micro-op. Em algumas modalidades, o cache micro-op pode compreender a previsão do próximo segmento. Em algumas modalidades, o processador está configurado para armazenar fluxos de MS no cache micro-op. Em algumas modalidades, o processador é configurado para priorizar micro-ops. Em algumas modalidades, o processador compreende um
Petição 870190044159, de 10/05/2019, pág. 97/318
83/232 cache de vítima. Em algumas modalidades, o cache micro-op é composto por, pelo menos, um de um cache micro-op físico e um cache micro-op virtual. Em algumas modalidades, o pelo menos um dos cache micro-op físico e o cache micro-op virtual podem ser compartilhados competitivamente. Em algumas modalidades, a determinação de que tipo de instruções para atribuir a um cache micro-op pode ser baseada, pelo menos em parte, em um ou mais dos seguintes: padrões de uso histórico, frequência de utilização, dificuldade de decodificação e tempo de decodificação. Em algumas modalidades, a determinação da localização para alocar a instrução do tipo determinado para o cache micro-op pode ser baseada em um ou mais dos seguintes: informações de instruções usadas menos recentemente, padrões de uso históricos para instruções, frequência de uso, dificuldade de decodificação, informações de status de loop e tempo de decodificação de instruções armazenadas no cache microop.
[00232] Uma modalidade pode incluir um método compreendendo algoritmicamente determinar um tipo de instrução para atribuir a um cache micro-op; detectar um local para alocar uma instrução do tipo determinado para o cache micro-op; e alocar a instrução para o local determinado.
[00233] Em algumas modalidades, um ou mais dos seguintes se aplicam. Em algumas modalidades, o método pode ainda compreender levar um bloco de alocação e substituição inteligente para receber uma instrução de um decodificador de instruções. Em algumas modalidades, o tipo de instrução determinado é pelo menos um de uma instrução complexa e um fluxo de loop. Em algumas modalidades, o método pode ainda compreender o uso de uma ou mais de uma unidade de predição de ramificação (BPU), uma etiqueta de cache de instruções, uma etiqueta micro-op, um cache de
Petição 870190044159, de 10/05/2019, pág. 98/318
84/232 instruções, um cache micro-op e um decodificador e uma fila micro-op. Em algumas modalidades, o cache micro-op pode compreender a previsão do próximo segmento. Em algumas modalidades, o método também pode incluir o armazenamento de fluxos MS no cache microop. Em algumas modalidades, o método pode ainda compreender a priorização de micro-operações. Em algumas modalidades, o método pode ainda compreender o uso de um cache de vítima. Em algumas modalidades, o uso do cache micro-op é composto pelo uso de pelo menos um cache micro-op físico e um cache micro-op virtual. Em algumas modalidades, o método pode ainda compreender competitivamente o compartilhamento de pelo menos um dos cache micro-op físico e o cache micro-op virtual. Em algumas modalidades, a determinação de que tipo de instruções para atribuir a um cache micro-op pode ser baseada, pelo menos em parte, em um ou mais dos seguintes: padrões de uso histórico, frequência de utilização, dificuldade de decodificação e tempo de decodificação. Em algumas modalidades, a determinação da localização para atribuir a instrução do tipo determinado à cache micro-op pode basear-se em um ou mais dos seguintes: informações de instruções usadas menos recentemente, padrões de utilização históricos para instruções, frequência de utilização, dificuldade de decodificação, informações de status de loop e tempo de decodificação de instruções armazenadas no cache micro-op.
[00234] Uma modalidade pode incluir um meio não transitório legível por máquina armazenando pelo menos uma instrução que, quando executada por um processador, faz com que o processador execute um método, compreendendo o método determinar algoritmicamente um tipo de instrução para alocar a um cache microop; detectar um local para alocar uma instrução do tipo determinado para o cache micro-op; e alocar a instrução para o local determinado.
Petição 870190044159, de 10/05/2019, pág. 99/318
85/232 [00235] Em algumas modalidades, um ou mais dos seguintes se aplicam. Em algumas modalidades, o método pode ainda compreender levar um bloco de alocação e substituição inteligente para receber uma instrução de um decodificador de instruções. Em algumas modalidades, o tipo de instrução determinado é, pelo menos, um de uma instrução complexa e um fluxo de loop. Em algumas modalidades, o método pode ainda compreender o uso de uma ou mais de uma unidade de predição de ramificação (BPU), uma etiqueta de cache de instruções, uma etiqueta micro-op, um cache de instruções, um cache micro-op e um decodificador e uma fila micro-op. Em algumas modalidades, o cache micro-op pode compreender a previsão do próximo segmento. Em algumas modalidades, o método também pode incluir o armazenamento de fluxos MS no cache microop. Em algumas modalidades, o método pode ainda compreender a priorização de micro-operações. Em algumas modalidades, o método pode ainda compreender o uso de um cache de vítima. Em algumas modalidades, o uso do cache micro-op é composto pelo uso de pelo menos um cache micro-op físico e um cache micro-op virtual. Em algumas modalidades, o método pode ainda compreender competitivamente o compartilhamento de pelo menos um dos cache micro-op físico e o cache micro-op virtual. Em algumas modalidades, a determinação de que tipo de instruções para atribuir a um cache micro-op pode ser baseada, pelo menos em parte, em um ou mais dos seguintes: padrões de uso histórico, frequência de utilização, dificuldade de decodificação e tempo de decodificação. Em algumas modalidades, a determinação da localização para atribuir a instrução do tipo determinado à cache micro-op pode basear-se em um ou mais dos seguintes: informações de instruções usadas menos recentemente, padrões de utilização históricos para instruções, frequência de utilização, dificuldade de decodificação, informações de
Petição 870190044159, de 10/05/2019, pág. 100/318
86/232 status de loop e tempo de decodificação de instruções armazenadas no cache micro-op.
[00236] Uma modalidade pode incluir um sistema incluindo uma memória e um processador, o processador configurado para determinar algoritmicamente um tipo de instrução para alocar a um cache micro-operação; determinar um local para alocar uma instrução do tipo determinado ao cache micro-op; e alocar a instrução para o local determinado.
[00237] Em algumas modalidades, um ou mais dos seguintes se aplicam. Em algumas modalidades, o processador é ainda configurado para fazer com que uma alocação inteligente e um bloco de substituição recebam uma instrução de um decodificador de instruções. Em algumas modalidades, o tipo de instrução determinado é pelo menos um de uma instrução complexa e um fluxo de loop. Em algumas modalidades, o processador pode compreender uma ou mais de uma unidade de predição de ramificação (BPU), uma etiqueta de cache de instrução, uma etiqueta micro-op, um cache de instrução, um cache micro-op e um decodificador e uma fila micro-op. Em algumas modalidades, o cache micro-op pode compreender a previsão do próximo segmento. Em algumas modalidades, o processador está configurado para armazenar fluxos de MS no cache micro-op. Em algumas modalidades, o processador é configurado para priorizar micro-operações. Em algumas modalidades, o processador compreende um cache de vítima. Em algumas modalidades, o cache micro-op é composto por pelo menos um de um cache micro-op físico e um cache micro-op virtual. Em algumas modalidades, o pelo menos um dos cache micro-op físico e o cache micro-op virtual podem ser compartilhados competitivamente. Em algumas modalidades, a determinação de que tipo de instruções para atribuir a um cache micro-op pode ser baseada, pelo menos em parte, em um ou mais dos
Petição 870190044159, de 10/05/2019, pág. 101/318
87/232 seguintes: padrões de uso histórico, frequência de utilização, dificuldade de decodificação e tempo de decodificação. Em algumas modalidades, a determinação da localização para alocar a instrução do tipo determinado para o cache micro-op pode ser baseada em um ou mais dos seguintes: informações de instruções usadas menos recentemente, padrões de uso históricos para instruções, frequência de uso, dificuldade de decodificação, informações de status de loop e tempo de decodificação de instruções armazenadas no cache microop.
[00238] Eliminação de Movimento [00239] Um núcleo processador pode suportar um recurso de eliminação de movimento de acordo com modalidades da invenção. Para muitos processadores, executar uma instrução de movimentação geralmente envolve mover um valor de um registrador para outro, ou mover um imediato para um registrador. Devido à frequência de tais instruções de movimentação, o desempenho do processador pode ser aumentado se as instruções de movimentação forem processadas com eficiência.
[00240] A maioria das instruções opera em vários operandos de origem e gera resultados. Eles nomeiam, explicitamente ou indiretamente, os locais de origem e destino onde os valores são lidos ou gravados. Um nome pode ser um registro lógico (arquitetural) ou um local na memória.
[00241] Normalmente, o número de registros físicos disponíveis para um processador excede o número de registros lógicos, de modo que o renomeamento de registradores pode ser utilizado para aumentar o desempenho. Em particular, para processadores fora de ordem, o renomeamento de registro permite que as instruções sejam executadas fora de sua ordem de programa original. Assim, para muitos processadores fora de ordem, uma instrução de movimento é
Petição 870190044159, de 10/05/2019, pág. 102/318
88/232 renomeada para que o registro lógico nomeado na instrução de movimentação original seja renomeado para registradores físicos.
[00242] O renomeamento de um registro lógico envolve o mapeamento de um registro lógico para um registro físico. Esses mapeamentos podem ser armazenados em uma Tabela de Pseudônimo de Registro (RAT - Register Alias Table). Uma RAT mantém o mapeamento mais recente para cada registro lógico. Uma RAT é indexada por registros lógicos e fornece mapeamentos para os registros físicos correspondentes.
[00243] Ilustrado na Figura 29 é um esquema de renomeamento de registro e rastreamento de dependência envolvendo três estruturas RAT 2900, lista ativa (AL - active list) 2902 e lista livre (FL - free list) 2904. Para cada registro lógico especificado por uma instrução renomeada, um registro físico não utilizado da FL 2904 é alocado e a RAT 2900 é atualizada com esse novo mapeamento. Os registradores físicos estão livres para serem usados novamente (ou seja, recuperados), uma vez que não são mais referenciados por instruções na janela de instrução atual.
[00244] Com base nas estruturas de dados representadas na Figura 29, um método para recuperação de registro é recuperar um registro físico somente quando a instrução que o despejou da RAT 110, ou seja, a instrução que criou um novo mapeamento para o registro físico, se retira. Como resultado, sempre que um novo mapeamento atualiza a RAT 2900, o mapeamento antigo removido é empurrado para a AL 2902. (Uma entrada AL é associada a cada instrução na janela de instrução.) Quando uma instrução é retirada, o registro físico do antigo mapeamento gravado em AL 2902, se houver, é recuperado e empurrado para FL 2904. Este ciclo é mostrado na Figura 29.
[00245] Para muitas instruções, um dos registradores de origem
Petição 870190044159, de 10/05/2019, pág. 103/318
89/232 também é usado como registrador de destino. Se o valor armazenado neste registrador de fonte for necessário por instruções subsequentes (na ordem do programa), uma instrução de movimento de registrador pode ser inserida antes da instrução subsequente para copiar o operando de origem no registrador de origem para outro local lógico para que possa ser acessado pela instrução subsequente.
[00246] Outro motivo para a inserção de instruções de movimentação de registro é definir os valores de parâmetro nos registros apropriados antes de uma chamada de procedimento.
[00247] Como resultado, o número de instruções de movimentação de registradores pode ser bastante significativo. Portanto, pode ser desejável fornecer a execução eficiente de instruções de movimentação de registradores com esquemas eficientes de renomeamento e recuperação de registros.
[00248] Na Figura 1B, a unidade funcional de renomeamento de registradores é indicada como unidade de renomeamento/alocador 152, e os registradores físicos são indicados como unidade de arquivos de registrador físico 158. Na Figura 3, as unidades funcionais de renomeamento de registradores são indicadas como unidade de renomeamento inteiro 321 e unidade de renomeamento de FP 331, e os registros físicos são indicados pelo arquivo de registro físico inteiro 323 e arquivo de registro de FP 333. Cada registro lógico possui um mapeamento para um registro físico, em que o mapeamento é armazenado na RAT 2900 como uma entrada. Uma entrada na RAT 2900 é indexada por um registro lógico e contém um ponteiro para um registro físico.
[00249] Durante o renomeamento de uma instrução, as entradas atuais na RAT fornecem o mapeamento necessário para renomear o(s) registro(s) lógico(s) de origem da instrução e um novo mapeamento é criado para o registro lógico de destino da instrução.
Petição 870190044159, de 10/05/2019, pág. 104/318
90/232
Esse novo mapeamento libera o mapeamento antigo na RAT e a RAT é atualizada com o novo mapeamento.
[00250] A Tabela 1 ilustra um exemplo de renomeamento de registradores. Na Tabela 1, quatro instruções na ordem original do programa são fornecidas na primeira coluna. Instruções renomeadas são indicadas na segunda coluna. Ao lado de cada instrução renomeada estão as entradas atuais na RAT após o renomeamento da instrução. A coluna final fornece o mapeamento expulso pelo renomeamento da instrução. Por simplicidade, apenas três registros lógicos, LRa, LRb e LRb, são considerados. Um registro físico é denotado por PRi, onde i é um inteiro. A primeira entrada na Tabela 1 fornece o estado atual da RAT antes que a primeira instrução listada seja renomeada.
[00251] Por exemplo, na Tabela 1, a primeira instrução LRa + 2 -> LRa (indicando que o imediato 2 é adicionado ao valor no registro lógico LRa e o resultado é armazenado no registro lógico LRa) é renomeado para PR1 + 2 -> PR2, onde o registro físico PR2 foi assumido como disponível. Para esta instrução, foi criado um novo mapeamento LRa PR2 e o antigo mapeamento LRa PR1 foi expulso da RAT.
[00252] Note-se que há uma verdadeira dependência da segunda e quarta instruções sobre a primeira instrução, e uma verdadeira dependência da terceira instrução sobre a segunda instrução. Entretanto, o renomeamento de registro removeu a dependência de saída entre a segunda e a quarta instruções, bem como a antidependência entre a terceira e a quarta instruções, para que a segunda, terceira e quarta instruções possam ser executadas fora de ordem, desde a execução A ordem segue as várias dependências verdadeiras.
Petição 870190044159, de 10/05/2019, pág. 105/318
91/232
INSTRUÇÃO Instrução Renomeada RAT MAPEAMENTO EXPULSO
LRa PR1 LRb—>PR\\ LRc -ã PR1Q
LRa + 2 —> LRa PR\ + 2—> PR2 LRa PR2 LRb^ PR \ \ LRc PR1Q LRa PR1
LRa + 3 —> LRb PR2 + 3 -ã PR12 LRa -ã PR2 LRb -ã PR12 LRc -ã PR10 LRb—> PRU
LRb + 2—> LRc PR12 + 2^ PR13 LRa -ã PR2 LRb -ã PR12 LRc -ã PR13 LRc -ã PR10
LRa + 5 —> LRb PR2 + 5^ PR14 LRa -ã PR2 LRb -ã PR14 LRc -ã PR13 LRb -ã PR12
[00253] Tabela 1 [00254] Instruções renomeadas são colocadas no buffer da janela de instruções. As entradas no buffer da janela de instruções contêm o código de operação da instrução renomeada, bem como outros campos a serem descritos posteriormente. Para esta modalidade, os resultados das instruções não são armazenados no buffer da janela de instruções, mas residem no arquivo de registro físico.
[00255] O buffer da janela de instrução permite a retirada da instrução na ordem original do programa. Para arquiteturas complexas de conjunto de instruções (CISC), uma instrução complexa é retirada quando todas as micro-ops que compõem a instrução complexa são retiradas juntas. O buffer de janela de instrução é operado como um buffer circular, onde um primeiro ponteiro aponta para a próxima instrução a ser retirada e um segundo ponteiro aponta para a próxima entrada disponível para uma instrução recém decodificada. Incrementar os ponteiros em feito na aritmética do módulo N, onde N é
Petição 870190044159, de 10/05/2019, pág. 106/318
92/232 o número de entradas disponíveis no buffer. Quando uma instrução se retira, o primeiro ponteiro é incrementado. Os ponteiros são incrementados em um para cada instrução decodificada em arquiteturas RISC (reduced instruction set computing) e podem ser incrementados em mais de um para arquiteturas CISC.
[00256] Para uma instrução de armazenamento que grava seu resultado em um local de memória, o cache de dados é atualizado na retirada da instrução. Para uma instrução que grava seu resultado em um registro lógico, nenhuma gravação precisa ser feita na retirada porque não há registradores dedicados como registradores lógicos. Para tal instrução, o arquivo de registro físico possui o resultado da instrução reservada no registro físico para o qual o registro lógico de destino foi mapeado quando a instrução foi renomeada.
[00257] O programador programa instruções para unidades de execução para execução. A função de programação pode, por exemplo, ser realizada por estações de reserva implementando o algoritmo de Tomasulo (ou suas variações). As unidades de execução podem recuperar dados ou enviar dados para o cache de dados ou o arquivo de registro físico, dependendo da instrução (ou micro-op) a ser executada.
[00258] Em outras modalidades da invenção, o conteúdo da informação contida nas estruturas de dados do arquivo de registro físico e no buffer da janela de instrução pode ser realizado por diferentes unidades funcionais. Por exemplo, um buffer de reordenação pode substituir o buffer da janela de instruções e o arquivo de registro físico, de modo que os resultados sejam armazenados no buffer de reordenação e, além disso, os registros em um arquivo de registro sejam dedicados como registradores lógicos. Para este tipo de modalidade, o resultado de uma instrução especificando uma gravação para um registro lógico é gravado em um
Petição 870190044159, de 10/05/2019, pág. 107/318
93/232 registro lógico na retirada da instrução.
[00259] Agora distinguimos dois tipos de instruções de movimento: movimentos de registro para registro e movimentos de imediato para registro. Em um movimento de registro para registro, um valor é movido de um registro, o registro lógico de origem, para outro registro, o registro lógico de destino. Em um movimento de imediato para registro, um valor imediato é movido para um registro lógico.
[00260] Em modalidades da invenção, as instruções de movimento são executadas pelo mapeamento de mais de um registro lógico para o mesmo registro físico. A execução de uma instrução de movimento de registro para registro é executada mapeando o registro lógico de destino da instrução de movimento para o registro físico mapeado pelo registro lógico de origem da instrução de movimento.
[00261] A execução de uma instrução de movimento de imediato para registro pode ser realizada acessando um cache de correspondência de valores. As entradas em um cache de correspondência de valores são indexadas por valores, em que uma entrada de cache associa um valor a um registro físico que armazena esse valor. O valor correspondente ao cache pode ter menos entradas do que o número de registros físicos. Se houver uma ocorrência no cache de correspondência de valores, o registro lógico de destino da instrução de movimentação será mapeado para o registro físico indicado pelo cache de correspondência de valores. Se não houver um golpe, a execução do movimento será executada como nas arquiteturas da técnica anterior e o cache de correspondência de valores será atualizado.
[00262] O próprio arquivo de registro físico pode servir à função de um cache de correspondência de valores, de tal forma que o cache de correspondência de valores não é necessário. Nesse caso, o arquivo de registro precisaria de uma porta extra para realizar correspondência
Petição 870190044159, de 10/05/2019, pág. 108/318
94/232 de etiqueta paralela, em que a etiqueta é o valor armazenado em um registro físico.
[00263] Como discutido acima, as instruções de movimento de registro para registro e as instruções de movimento de imediato para registro (desde que haja um acerto no cache de correspondência de valores para o último tipo de movimento) são executadas criando múltiplos mapeamentos nos quais mais de um registro lógico é mapeado para o mesmo registro físico. Efetivamente, essas instruções de movimentação são eliminadas no sentido de que não são mais executadas por unidades de execução. Em vez disso, eliminações de movimento são realizadas durante o estágio de renomeamento. Essas instruções permanecem na janela do buffer de instruções pronta para ser retirada. Os gráficos de dependência são recolhidos, pois as instruções dependentes de tais instruções de movimentação são feitas diretamente dependentes do produtor real (as dependências são redirecionadas). Também pode haver uma redução na necessidade de registros físicos, e pode haver menos gravações no arquivo de registro.
[00264] Os mecanismos de eliminação de idiomas também efetuam operações de instrução sem repassá-los para uma arquitetura entubada tradicional fora de ordem. As expressões idiomáticas são exemplos de instruções de propósito geral codificadas para obter um efeito específico, geralmente de maneira mais otimizada em comparação com instruções explícitas. Mover idiomas incluem qualquer instrução construída para colocar o conteúdo de um registrador de origem em um registrador de destino sem outros efeitos, tais como R1 = ADD RO, #0. Os idiomas zero são, de forma semelhante, instruções de propósito geral codificadas para definir um registrador como zero, como R0 = XOR R0, R0. Não-ops (NOP - Noops) são instruções definidas para não ter efeito no estado arquitetural,
Petição 870190044159, de 10/05/2019, pág. 109/318
95/232 incluindo opcode NOP e idiomas NOP explícitos, tais como RO = ADD RO, #0.
[00265] Modalidades da invenção podem ser desejadas para melhorar as técnicas existentes de eliminação de movimento e eliminação de idiomas salvando a largura de banda de renomeamento/alocação de micro-op, aumentando o desempenho, diminuindo o consumo de energia e implementando recursos de economia de energia e melhorando a equidade, taxa de transferência, instruções por clock (IPC), instruções por unidade de tempo, qualidade de serviço, tempo e/ou eficiência de memória e expansão da cobertura de eliminações de movimentação para mais tipos de instrução.
[00266] Em modalidades, os resultados de operação de eliminação em movimento e operações de eliminação de idioma em um fluxo de instrução podem ser armazenados em cache em um micro-op decodificado, como cache micro-op 133 ou 312. Portanto, redescoberta das condições necessárias e repetição das operações que eliminam as instruções originais da tubulação podem ser evitadas. [00267] As instruções eliminadas podem ser substituídas por metadados armazenados no cache micro-operação que alcança o mesmo efeito que as instruções eliminadas. Quando o cache micro-op é gravado, os resultados da eliminação de movimento ou eliminação de idioma são convertidos em metadados para que as microoperações possam ser removidas do cache micro-ops e assim otimizadas para fora do fluxo de micro-ops entregues. Como o mecanismo de eliminação de instruções imediato já fez o trabalho para identificar as oportunidades, a compilação do cache micro-ops pode ser modificada para varrer e remover as micro-operações afetadas. Os metadados incluem informações necessárias para executar as operações de renomeamento, além de informações arquitetônicas relevantes, como a existência de limites de eventos e os efeitos dos
Petição 870190044159, de 10/05/2019, pág. 110/318
96/232 contadores de monitoramento de desempenho. Por exemplo, os metadados podem indicar quantas instruções foram eliminadas, e/ou, para uma arquitetura CISC, quantas micro-operações foram eliminadas para cada instrução, e/ou que uma instrução de fim de macro aconteceu após uma instrução que foi eliminado. Os metadados podem ser armazenados em um campo em uma entrada para uma micro-operação antes e/ou após as micro-operações eliminadas.
[00268] Em uma modalidade, a eliminação de movimento pode ser expandida para incluir operações de extensão de sinal e de extensão de sinal. Por exemplo, RO = MOV.ZE R1 pode ser eliminado, mesmo que não seja um simples movimento.
[00269] Em uma modalidade, a RAT 3000 pode ser estendida como mostrado na Figura 30 para incluir expressões nulas, extensão de sinal e extensão zero. A RAT é estendida com os seguintes três bits: Z, quando definido, o restante da entrada da RAT é ignorado e o registro lógico é tratado como zero; SE, quando definido, o valor do registro lógico é a versão estendida de sinal do identificador de arquivo de registro físico (ID PRF - physical register file identifier) armazenado na entrada; e ZE, quando definido, o valor do registro lógico é a versão estendida zero do ID PRF armazenado na entrada.
[00270] Assim, como ilustrado na Figura 31, os bits Z, SE e ZE podem ser lidos durante o renomeamento de registro e passado para baixo da arquitetura entubada com o micro-op que lê o registro. Os bits são interpretados antes da operação da ALU 3120 para criar o resultado correto. Na Figura 31, o caminho de origem esquerdo é conceitualmente aumentado para incluir a interpretação dos bits Z, SE e ZE pelo multiplexador 3110. Com base nesses bits, a origem é usada não modificada da rede de bypass ou do arquivo de registro físico, substituída por um zero, usado após a extensão do sinal ou usado após a extensão zero.
Petição 870190044159, de 10/05/2019, pág. 111/318
97/232
Sumário de Algumas Modalidades [00271] Uma modalidade da invenção pode incluir um processador compreendendo um cache micro-operação, incluindo uma pluralidade de locais de entrada. Pelo menos um local de entrada pode incluir um primeiro campo e um segundo campo. O primeiro campo pode ser armazenar uma primeira micro-operação. O segundo campo pode ser armazenar metadados para indicar a eliminação de uma segunda micro-operação de um fluxo de micro-operações a ser decodificado a partir de um fluxo de instruções, onde a segunda micro-operação é resultante de um decodificador de uma instrução de movimento.
[00272] Uma modalidade da invenção pode incluir um processador compreendendo uma tabela de pseudônimo de registro, incluindo uma pluralidade de entradas. Pelo menos uma entrada pode incluir um campo no qual armazenar um de um indicador de zero, um indicador de extensão de sinal e um indicador de extensão de zero. O indicador zero serve para indicar que um operando de origem deve ser substituído por um zero. O indicador de extensão de sinal serve para indicar que o operando de origem deve ser usado após a extensão do sinal. O indicador de extensão zero serve para indicar que o operando de origem deve ser usado após a extensão zero.
[00273] Renomeamento de Registro Virtual [00274] Um núcleo de processador pode suportar um recurso de renomeamento de registro virtual de acordo com modalidades. Em algumas modalidades, um operando de 256 bits ymmi pode ser armazenado em um arquivo de registro de 128 bits. A metade superior do operando de 256 bits pode ser armazenada no arquivo de registro de 128 bits como operando de 128 bits ymmihigh. A metade inferior do operando de 256 bits pode ser armazenada no arquivo de registro de 128 bits como o operando de 128 bits xmmi (ymmilow), renomeando virtualmente a metade inferior do operando de 256 bits. Em algumas
Petição 870190044159, de 10/05/2019, pág. 112/318
98/232 modalidades, esse recurso permite, de forma vantajosa, implementar uma ISA mais ampla em um registro físico menor, renomeando as metades da instrução. Em algumas modalidades, o uso de registros físicos menores melhora o sistema do computador, proporcionando mais flexibilidade, economia de energia e melhor desempenho porque, por exemplo, partes das instruções podem ser acessadas individualmente. Em algumas modalidades, outros tamanhos de instruções e registros podem ser usados (por exemplo, operandos de 512 bits com registros de 256 bits). Em algumas modalidades, os operandos podem ser divididos em partes menores, por exemplo, terços, quartos, oitavos, décimos sextos. Por exemplo, o recurso de renomeamento de registro virtual poderia, por exemplo, ser usado para permanecer um operando de 512 bits como oito partes a serem armazenadas em um arquivo de registro de 64 bits.
[00275] A Figura 32 é um diagrama em bloco ilustrando um recurso de renomeamento de registro virtual que pode ser incluído em um processador de acordo com modalidades. O recurso de renomeamento de registro virtual pode compreender um operando 3201, como um operando de 256 bits ymmi. O recurso de renomeamento de registro virtual pode ainda compreender um arquivo de registro de 128 bits 3201. O operando de 256 bits ymmi 3201 pode ser armazenado em um arquivo de registro de 32 bits 3202. A metade superior do operando de 256 bits 3201 pode ser armazenada em o arquivo de registro de 128 bits 3202 como operando de 128 bits ymmihigh. A metade inferior do operando de 256 bits 3201 pode ser armazenada no arquivo de registro de 128 bits 3202 como o operando de 128 bits xmmi (ymmilow) virtualmente renomeando a metade inferior do operando de 256 bits.
[00276] A Figura 33 é um diagrama de fluxo ilustrando um método para um recurso de renomeamento de registro virtual que pode ser
Petição 870190044159, de 10/05/2019, pág. 113/318
99/232 realizado por um processador de acordo com modalidades. O método compreende o armazenamento de uma metade inferior de um operando em um arquivo de registro, como mostrado em 3301. O método compreende ainda mudar virtualmente o nome de uma metade superior do operando como mostrado em 3302. O modo compreende ainda armazenar a superior metade do operando virtualmente renomeada no arquivo de registro. Em outras modalidades, outras modificações são possíveis. Por exemplo, a parte inferior do operando pode ser virtualmente renomeada em vez de, ou além de praticamente renomear a metade superior. Além disso, as operações podem ser realizadas em ordens diferentes. Por exemplo, o armazenamento da metade não virtualmente renomeada pode ser executado antes ou depois do renomeamento virtual e/ou armazenamento da metade virtualmente renomeada. Além disso, a metade virtualmente renomeada pode ser virtualmente renomeada e depois armazenada ou vice-versa.
Sumário de Algumas Modalidades [00277] Uma modalidade pode incluir um processador configurado para armazenar uma primeira metade de um operando em um arquivo de registro; mudar virtualmente o nome de uma segunda metade do operando; e armazenar a segunda metade do operando virtualmente renomeada no arquivo de registro. Em algumas modalidades, um ou mais dos seguintes se aplicam. O operando pode ser um operando de 256 bits. O arquivo de registro pode ser um arquivo de registro de 128 bits.
[00278] Uma modalidade pode incluir um método compreendendo armazenar uma primeira metade de um operando em um arquivo de registro; praticamente renomeando uma segunda metade do operando; armazenando a segunda metade virtualmente renomeada do operando no arquivo de registro. Em algumas modalidades, um ou
Petição 870190044159, de 10/05/2019, pág. 114/318
100/232 mais dos seguintes se aplicam. O operando pode ser um operando de 256 bits. O arquivo de registro pode ser um arquivo de registro de 128 bits.
[00279] Uma modalidade pode incluir um meio não transitório legível por máquina armazenando pelo menos uma instrução que quando executada por um processador faz com que o processador execute um método, compreendendo o método armazenar uma primeira metade de um operando em um arquivo de registro; praticamente renomeando uma segunda metade do operando; armazenando a segunda metade virtualmente renomeada do operando no arquivo de registro. Em algumas modalidades, um ou mais dos seguintes se aplicam. O operando pode ser um operando de 256 bits. O arquivo de registro pode ser um arquivo de registro de 128 bits.
[00280] Uma modalidade pode incluir um sistema incluindo uma memória e um processador, o processador configurado para armazenar uma primeira metade de um operando em um arquivo de registro; mudar virtualmente o nome de uma segunda metade do operando; e armazenar a segunda metade do operando renomeada virtualmente no arquivo de registro. Em algumas modalidades, um ou mais dos seguintes se aplicam. O operando pode ser um operando de 256 bits. O arquivo de registro pode ser um arquivo de registro de 128 bits.
[00281] Fissão e Fusão FMA [00282] Um núcleo de processador pode suportar a fissão e a fusão de instruções e operações de adição de multiplicação de acordo com modalidades da invenção. Em várias modalidades, um núcleo de processador pode suportar um conjunto de instruções tendo qualquer uma ou mais instruções de adicionar, multiplicar, multiplicar-adicionar fundida (FMAD - fused multiply-add) e/ou instruções multiplicar
Petição 870190044159, de 10/05/2019, pág. 115/318
101/232 acumular fundido (FMAC - fused multiply-accumulate) (onde FMAD e/ou FMAC podem ser referidos como FMA) para operar em valores FP. Tal núcleo pode incluir qualquer um ou mais de um circuito adicionador, um circuito multiplicador e/ou um circuito FMA para realizar operações de adição, multiplicação e/ou FMA FP em resposta a estas instruções. Podem ser fornecidas instruções separadas e/ou circuitos para operar em valores inteiros (por exemplo, FMAC) e valores FP (por exemplo, FMAD), e modalidades podem ser descritas com referência a um ou outro (inteiro ou FP); no entanto, várias modalidades da invenção podem incluir uma ou ambas.
[00283] As modalidades da invenção permitem converter instruções/operações de FMA em pares de adicionar/multiplicar instruções/operações (fissão) e/ou converter pares de instruções de adição e multiplicação/operações em instruções/operações de FMA (fusão) entre e/ou dentro de vários estágios em uma arquitetura entubada de emissão/execução de instruções. Esta característica pode ser geral mente referida como fissão/fusão FMA ou fissão dinâmica/fusão FMA.
[00284] Modalidades da invenção incluindo fissão/fusão FMA podem ser desejadas por muitas razões, incluindo: fornecer a capacidade de executar instruções FMA e/ou executar operações FMA em um núcleo tendo um circuito adicionador e um circuito multiplicador, mas nenhum circuito FMA; fornecer a capacidade de executar uma instrução de multiplicar e adicionar uma instrução usando uma operação de FMA para aumentar o rendimento através de um ou mais recursos principais; fornecendo a capacidade de dividir dinamicamente as instruções ou operações do FMA em operações múltiplas e adicionar operações para reduzir o caminho crítico em um loop e aumentar as instruções por ciclo; e fornecer a possibilidade de otimizar, passo a passo, um arquitetura entubada com capacidade de
Petição 870190044159, de 10/05/2019, pág. 116/318
102/232
FMA para uma combinação desejada de desempenho, complexidade e energia (por exemplo, aumentando o desempenho, diminuindo o consumo de energia e implementando recursos de economia de energia e melhorando justiça, garantias mínimas de desempenho, produtividade, instruções por clock (IPC), instruções por unidade de tempo, qualidade de serviço, tempo e/ou eficiência de memória, para listar apenas alguns dos critérios aplicáveis).
[00285] A Figura 34 é um diagrama em bloco ilustrando um segmento de emissão/execução 3400 que pode ser implementado em um núcleo de processador que suporta um recurso de fissão/fusão de FMA de acordo com modalidades da invenção. Na Figura 34, a arquitetura entubada 3400 inclui estágio de busca de instrução 3401, estágio de decodificação de instrução 3402, renomear/alocar estágio 3403, programar estágio 3404, executar estágio 3405 e retirar/assumir estágio 3406. A arquitetura entubada 3400 é fornecida para fins ilustrativos, e podem ser implementados e/ou modificados de várias maneiras em várias modalidades da invenção. Portanto, a seguinte descrição da arquitetura entubada 3400 pode referir-se a vários blocos mostrados em outras figuras descritas nesta especificação.
[00286] Por exemplo, o estágio de busca da instrução 3401 pode incluir o uso de um circuito de instrução (por exemplo, 138, 400) para identificar (por exemplo, usando o próximo registro do PC 410 ) uma instrução ou a localização da memória de um instrução a ser buscada e buscar a instrução de um i-cache (por exemplo, 134, 313, 470, 913) ou outro local de memória; estágio de decodificação de instruções 3402 pode incluir o uso de um circuito de decodificação de instruções (por exemplo, 140, 314, 500, 914) para codificar (por exemplo, usando o decodificador 530) a instrução; renomear/alocar estágio 3403 pode incluir o uso de um circuito de renomeamento/alocação (por exemplo, 152, 331,931) para renomear operandos de registro e/ou alocar locais
Petição 870190044159, de 10/05/2019, pág. 117/318
103/232 de armazenamento e/ou etiquetas para renomeamento de registradores; o estágio de programação 3404 pode incluir o uso de um circuito de programação (por exemplo, 156, 332, 932) para programar operações e/ou micro-operações (por exemplo, do decodificador 140, 314, 530 ou 614 ou cache micro-op 133, 312, 540 ou 912) associado à instrução para execução; o estágio de execução 3405 pode incluir o uso de um circuito executivo (por exemplo, 1 62, 334, 335, 770, 780, 934, 935) para executar operações e/ou operações de micro-op (por exemplo, do decodificador 140, 314, 530 ou 614 ou cache micro-op 133, 312, 540 ou 912) associados com a instrução; e o estágio de retirar/assumir 3406 pode incluir o uso de um circuito de retirada (por exemplo, 154, 730, 960) para retirar a instrução e/ou enviar seu resultado para um arquivo de registro físico (por exemplo, 158, 333, 750, 933) ou memória. Cada estágio mostrado na Figura 34 pode representar um ou mais estágios e/ou ciclos de relógio em várias modalidades.
[00287] A Figura 34 também mostra o caminho fundido 3410 e o caminho dividido 3420, cada um representando uma modalidade de um caminho através da arquitetura entubada 3400. O caminho fundido 3410 pode incluir circuitos, estruturas e/ou hardware para processar, executar e/ou executar uma instrução, operação e/ou micro-op FMA como uma instrução, operação e/ou micro-op fundida, como descrito usando as modalidades ilustrativas abaixo. Caminho dividido 3420 pode incluir circuitos, estruturas e/ou hardware para processar, executar, e/ou executar uma multiplicação e uma instrução de adição, operação, e/ou micro-op como instruções separadas, operações e/ou micro-ops, como descrito usando modalidades ilustrativas abaixo. Além disso, o caminho dividido 3420 pode incluir circuitos, estruturas e/ou hardware para processar, executar e/ou executar uma instrução FMA, operação e/ou micro-op como uma instrução multiplexar e
Petição 870190044159, de 10/05/2019, pág. 118/318
104/232 adicionar, operação e/ou micro-op; e caminho fundido 3410 pode incluir circuitos, estruturas e/ou hardware para processar, executar e/ou executar uma instrução, operação e/ou micro-op de multiplicação e adição como uma instrução, operação e/ou micro-op.
[00288] Portanto, a Figura 34 conceitualmente ilustra um conjunto de recursos principais que podem ser usados para processar, executar e/ou executar fundido e/ou multiplicar separadamente e adicionar instruções, operações e micro-operações. Várias modalidades podem incluir vários subconjuntos destes recursos para suportar várias capacidades, como será ainda descrito abaixo. Além disso, as implementações podem incluir vários recursos adicionais não mostrados na Figura 34 que podem ser fornecidos e/ou configurados para praticar várias modalidades da invenção.
[00289] A Figura 34 também mostra o controlador de fissão/fusão FMA 3430, que pode representar um controlador ou estrutura de controle programável, configurável ou com segmento, incluindo um ou mais circuitos de controle e/ou registradores de configuração de hardware ou programáveis para gerar sinais de controle, dirigir o fluxo de instruções, operações, micro-operações, operandos, valores e/ou outros dados através e/ou entre o caminho fundido 3410 e/ou o caminho dividido 3420. Esses sinais de controle podem fornecer um ou mais caminhos através de arquitetura entubada 3400 que incluem uma combinação de recursos no caminho fundido 3410 e no caminho dividido 3420. Esses sinais de controle podem fornecer fissão/fusão dinâmica FMA fazendo com que uma instrução, operação e/ou microinformação FMA seja processada, executada, e/ou executado como uma instrução, operação e/ou micro-operação em resposta a uma primeira condição e como multiplicação separada e adicionar instruções, operações e/ou micro-operações em resposta a uma segunda condição e/ou causando separa multiplique e adicione
Petição 870190044159, de 10/05/2019, pág. 119/318
105/232 instruções, operações e/ou micro-operações para serem processadas, executadas e/ou executadas como uma instrução, operação e/ou micro-operação em resposta a uma terceira condição e como multiplicação separada e adicionar instruções, operações e/ou microoperações em resposta a uma quarta condição.
[00290] Por exemplo, uma instrução FMA pode ser buscada por hardware no caminho fundido 3410, e o controlador 3430 pode gerar um ou mais sinais de controle para direcionar a instrução para o hardware no caminho dividido 3420 para decodificar a instrução em duas micro-ops separadas, uma micro-op de multiplicação e micro-op de adição. Embora mostrado como um bloco independente na Figura 34, em várias modalidades o controlador 3430 pode ser integrado ou incluído dentro de outra estrutura de controle em um núcleo de processador ou pode ser totalmente omitido (por exemplo, em uma modalidade na qual o núcleo fornece apenas um caminho possível, exemplos dos quais são descritos abaixo).
[00291] Na Figura 34, o caminho fundido 3410 inclui o dispositivo de busca 3411, o decodificador 3412, o renomeador 3413, o programador 3414, o multiplexador fundido 3415 e a fila de buffer/retirar de reordenamento (ROB/RQ - re-order buffer /retire queue) 3416; e caminho dividido 3420 inclui o buscador 3421, decodificador 3422, o renomeador 3423, programador 3424, multiplicador 3425A e adicionador 3425B e a fila de buffer/retirar de reordenamento (ROB/RQ) 3426.
[00292] O buscador 3411 pode incluir circuitos e/ou estruturas para buscar uma instrução FMA (por exemplo, uma instrução AVX (conforme definido abaixo) como VFMADD132PS, VFMADD213PS, VFMADD231PS, VFMADD132PD, VFMADD213PD, VFMADD231PD, VFMADD132SS, VFMADD213SS, VFMADD231SS, VFMADD132SD, VFMADD213SD, VFMADD231SD, VFMSUB132PS, VFMSUB213PS,
Petição 870190044159, de 10/05/2019, pág. 120/318
106/232
VFMSUB231SD, VFNMADD231 PS, VFNMADD231PD,
VFNMADD231SS,
VFNMADD231SD,
VFNMSUB231PS,
VFNMSUB231PD,
VFNMSUB231SS,
VFNMSUB231SD,
VFMADDSUB231PS, VFMADDSUB231PD, VFMSUBADD231PS,
VFNMADD132PS,
VFNMADD132PD,
VFNMADD132SS,
VFNMADD132SD,
VFNMSUB132PS,
VFNMSUB132PD,
VFNMSUB132SS,
VFNMSUB132SD,
VFMADDSUB132PS,
VFMADDSUB132PD,
VFMSUBADD132PS,
VFMSUBADD132PD,
VFMSUB231PS, VFMSUB132PD, VFMSUB213PD, VFMSUB231PD, VFMSUB132SS, VFMSUB213SS, VFMSUB231SS, VFMSUB132SD, VFMSUB213SD, VFNMADD213PS, VFNMADD213PD, VFNMADD213SS, VFNMADD213SD, VFNMSUB213PS, VFNMSUB213PD, VFNMSUB213SS, VFNMSUB213SD, VFMADDSUB213PS, VFMADDSUB213PD, VFMSUBADD213PS,
VFMSUBADD213PD ou VFMSUBADD231 PD).
[00293] Uma instrução FMA buscada pelo buscador 3411 pode ter três operandos. Por exemplo, uma instrução VFMADD231PS pode ter um primeiro operando (xmm1 ou ymm1), um segundo operando (xmm2 ou ymm2) e um terceiro operando (xmm3 ou ymm3), onde os registros xmm e ymm que podem ser especificados por esses operandos são descritos abaixo. Estes registradores podem conter valores escalares ou empacotados, e para uma descrição conveniente de uma modalidade, a letra 'd' pode ser usada para referir-se ao registrador de origem/destino ou uma porção do registrador especificado pelo operando xmm1 e/ou um valor armazenados ou armazenados neste registro ou parte deste registro; a letra 'a' pode ser usada para referir-se ao registrador de origem ou a uma parte do registrador especificado pelo operando xmm2 e/ou um valor armazenado ou a ser armazenado neste registrador ou parte deste registrador; e a letra 'b' pode ser usada para se referir ao registrador
Petição 870190044159, de 10/05/2019, pág. 121/318
107/232 de origem ou a uma parte do especificado pelo operando xmm3 e/ou um valor armazenado ou a ser armazenado neste registro ou uma parte deste registro. Portanto, uma representação conceituai de uma operação a ser executada em resposta a uma instrução VFMADD231PS, onde a, b e d também podem ser referidos como operandos, é d=a*b+d. Além disso, embora esta descrição se refira a operandos como registradores, as modalidades podem usar locais de memória em vez de registradores para qualquer ou todos os operandos.
[00294] O buscador 3421 pode incluir circuitos, estruturas e/ou hardware para buscar uma instrução de multiplicação (por exemplo, uma instrução SSE (extensão de instrução única com múltiplos dados de instrução) como MULPS, MULPD, MULSS ou MULSD) e uma instrução de adição (por exemplo, uma instrução SSE como ADDPS, ADDPD, ADDSS ou ADDSD), cada uma com dois operandos. Por exemplo, uma instrução MULPS pode ter um primeiro operando (xmm1) e um segundo operando (xmm2) e uma instrução ADDPS pode ter um primeiro operando (xmm1) e um segundo operando (xmm2), onde, em geral, cada um dos operandos MULPS xmm1, MULPS xmm2, ADDPS xmm1 e ADDPS xmm2 podem ser diferentes registradores. Contudo, em uma modalidade da invenção, o buscador 3421 pode emparelhar uma instrução MULPS com uma instrução ADDPS quando se determina que a instrução ADDPS depende da instrução MULPS (isto é, o resultado MULPS é uma entrada para o ADDPS). Por exemplo, com 'a' como operando MULPS xmm1 e 'b' como operando MULPS xmm2, a operação de multiplicação correspondente a=a*b, e se a é usada em seguida como um operando ADDPS xmm2, com 'd' como o operando ADDPS xmm1, a operação de adição correspondente é d=d+a, e o buscador 3421 pode emparelhar as instruções MULPS e ADDPS. Em modalidades, o
Petição 870190044159, de 10/05/2019, pág. 122/318
108/232 emparelhamento e/ou a determinação da condição de emparelhamento pode ser realizado em resposta a um sinal de controle do controlador 3430.
[00295] O buscador 3411 pode ser acoplado ou conectado, como representado pela seta 3432A, ao decodificador 34 12 e/ou, como representado pela seta 3432B, ao decodificador 3422. O buscador 3421 pode ser acoplado ou conectado, conforme representado pela seta 3432C, ao decodificador 3412 e/ou, como representado pela seta 3432D, ao decodificador 3422. O acoplamento ou ligação e/ou operação de decodificador pode ser estático (por exemplo, com cabo) ou dinâmico (por exemplo, dependendo de sinais de controle de 3430) em várias modalidades.
[00296] O decodificador 3412 pode incluir circuitos, estruturas, e/ou hardware para decodificar uma instrução FMA, recebida do buscador 3411, em uma micro-op FMA tendo três operandos (por exemplo, d, a e b). Em vez disso ou adicionalmente, o decodificador 3412 pode incluir circuitos, estruturas e/ou hardware para decodificar uma instrução multiplicada emparelhada e adicionar instrução, recebida do buscador 3421, para uma micro-op FMA com três operandos (por exemplo, d, a e b).
[00297] O decodificador 3422 pode incluir circuitos, estruturas e/ou hardware para decodificar uma instrução FMA, recebida do buscador 3411, para uma micro-op de multiplicação tendo dois operandos e uma micro-op de adição tendo dois operandos. Em vez disso ou adicionalmente, o decodificador 3422 pode incluir circuitos, estruturas e/ou hardware para decodificar um multiplicado emparelhado e adicionar instrução do buscador 3421 para uma micro-op de multiplicação possuindo dois operandos e uma micro-op de adição possuindo dois operandos. Por exemplo, a micro-op de multiplicação pode ser representada como t=a*b e a micro-op de adição como
Petição 870190044159, de 10/05/2019, pág. 123/318
109/232 d=d+t, onde um novo operando Έ pode ser introduzido para servir como o destino da operação de multiplicação e uma fonte para a operação de adição.
[00298] O decodificador 3412 pode ser acoplado ou conectado, como representado pela seta 3433A, ao renomeador 3413 e/ou, como representado pela seta 3433B, ao renomeador 3423. O decodificador
3422 pode ser acoplado ou conectado, conforme representado pela seta 3433C ao renomeador 3413 e/ou, como representado pela seta 3433D, ao renomeador 3423. A operação de acoplamento ou conexão e/ou renomeador pode ser estática (por exemplo, com segmento) ou dinâmica (por exemplo, dependendo sinais de controle de 3430) em várias modalidades.
[00299] Renomeadores 3413 e/ou 3423 podem incluir circuitos, estruturas e/ou hardware, como um buffer de reordenação, para renomear operandos de registradores e/ou para alocar locais de armazenamento e/ou etiquetas para renomeamento de registradores, para exemplo para acomodar o processamento fora de ordem. Em modalidades, para eliminar conflitos de registros (por exemplo, para a, b, t e/ou d), o renomeador 3413 pode renomear operandos para a operação FMA (por exemplo, como a', b' e/ou d'); e/ou renomeador
3423 pode renomear operandos para a operação de multiplicação (por exemplo, como a' e/ou b') e para a operação de adição (por exemplo, como t' e/ou d').
[00300] Renomeador 3413 pode ser acoplado ou conectado, como representado pela seta 3434A, ao programador 3414, e/ou, como representado pela seta 3434B, ao programador 3424. Renomeador 3423 pode ser acoplado ou conectado, como representado pela seta 3434C, ao programador 3414 e/ou, como representado pela seta 3434D, ao programador 3424. A operação de acoplamento ou conexão e/ou programador pode ser estática (por exemplo, com
Petição 870190044159, de 10/05/2019, pág. 124/318
110/232 segmento) ou dinâmica (por exemplo, dependendo nos sinais de controle de 3430) em várias modalidades.
[00301] Programadoras 3414 e/ou 3424 podem incluir circuitos, estruturas e/ou hardware, como uma estação de reserva, para agendar operações e/ou micro-operações para execução. Em modalidades, o programador 3414 pode programar, em uma estação de reserva para um circuito de execução FP, uma operação FMA a ser executada com os operandos a, b e d, e/ou programador 3424 podem agendar, em uma estação de reserva para um circuito de execução FP, uma operação de multiplicação a ser executada com os operandos a e b e uma operação de adição a ser executada com os operandos t e d.
[00302] O programador 3414 pode ser acoplado ou conectado, como representado pela seta 3435A, ao multiplicador/adicionador fundido 3415, e/ou, como representado pela seta 3435B, ao multiplicador 3425A ou ambos os multiplicadores 3425A e adicionador 3425B. O programador 3424 pode ser acoplado ou conectado, como representado pela seta 3434C, ao multiplicador/adicionador fundido 3415, e/ou, como representado pela seta 3434D, ao multiplicador 3425A ou ao multiplicador 3425A e adicionador 3425B. A operação de acoplamento ou conexão e/ou o programador pode ser estática (por exemplo, com segmento) ou dinâmica (por exemplo, dependendo dos sinais de controle de 3430) em várias modalidades.
[00303] O multiplicador/adicionador fundido 3415, o multiplicador 3425A e o adicionador 3425B podem incluir circuitos, estruturas e/ou hardware para executar uma operação de adição, multiplicação por fusão, uma operação de multiplicação e uma operação de adição, respectivamente. Em uma modalidade, o multiplicador 3425A pode ser acoplado a uma estação de reserva para receber duas entradas (por exemplo, a e b) para uma operação de multiplicação e acoplado ao
Petição 870190044159, de 10/05/2019, pág. 125/318
111/232 adicionador 3425B para fornecer sua saída (por exemplo, t) para ser usado como uma das duas entradas (por exemplo, t e d) para uma operação de adição. Nesta modalidade, a precisão de um multiplicador-multiplicador dedicado fundido (por exemplo, de acordo com o padrão IEEE 754) pode ser obtida enviando o resultado múltiplo não arredondado para o adicionador. Em outra modalidade, o multiplicador 3425A pode ser acoplado a uma estação de reserva para receber duas entradas (por exemplo, a e b) para uma operação de multiplicação que gera uma saída (por exemplo, t), e o adicionador 3425A pode ser acoplado à estação de reserva para receber duas entradas para uma operação de adição (por exemplo, t e d). Nesta modalidade, a precisão de um multiplexador agregador dedicado pode ser obtida aumentando a largura dos locais de armazenamento internos para o resultado intermediário (por exemplo, t) ou usando uma assistência ou armadilha de microcódigo para fornecer tratamento especial.
[00304] Multiplicador-adicionador fundido 3415 pode ser acoplado ou conectado, como representado pela seta 3436A, a ROB/RQ 3416 e/ou, como representado pela seta 3436B, a ROB/RQ 3426. Adicionador 3425B pode ser acoplado ou conectado, como representado pela seta 3436C, a ROB/RQ 34 16, e/ou adicionador 3425B ou ambos multiplicador 3425A e adicionador 3425B podem ser acoplados ou conectados, como representado pela seta 3436D, para ROB/RQ 3426. A operação de acoplamento ou conexão e/ou escalonador pode ser estática (por exemplo, com segmento) ou dinâmica (por exemplo, dependendo dos sinais de controle de 3430) em várias modalidades.
[00305] ROB/RQ 3416 e/ou ROB/RQ 3426 podem incluir circuitos, estruturas e/ou hardware, como um buffer de reordenação e/ou uma fila de retirada, para retirar instruções e/ou confirmar resultados. Em
Petição 870190044159, de 10/05/2019, pág. 126/318
112/232 uma modalidade, ROB/RQ 3416 pode retirar uma instrução FMA e confirmar o seu resultado (por exemplo, xmm1). Em uma modalidade, ROB/RQ 3426 pode retirar uma instrução de multiplicação e uma instrução de adição e confirmar seus resultados (por exemplo, MULPS xmm1, ADDPS xmm1, respectivamente). Em uma modalidade, ROB/RQ 3416 pode confirmar o resultado de uma operação FMA que foi criada por fusão de uma instrução de adição separada e de multiplicação separada, desde que o resultado da operação de multiplicação separada não seja desejado (por exemplo, esperado de acordo com a arquitetura do conjunto de instruções). Em uma modalidade, ROB/RQ 3426 pode confirmar, como resultado de uma instrução FMA, o resultado de uma operação de adição que foi criada por fissão da instrução FMA. Em um núcleo de processador de acordo com modalidades da invenção, o resultado da instrução de adição será o mesmo que o resultado de uma instrução FMA correspondente.
[00306] Como ilustrado na Figura 34, as modalidades podem fornecer fissão ou fusão de FMA em vários estágios de uma arquitetura entubada de emissão/execução. Em uma modalidade, a fissão no estágio de decodificação 3402 pode proporcionar instruções de suplemento multiplicado por fusão para serem executadas em um núcleo sem um multiplicador-multiplicador dedicado fundido. Em uma modalidade, a fusão no estágio de decodificação 3402, renomear/atribuir a estágio 3403, programar o estágio 3404, executar o estágio 3405 e/ou retirar o estágio 3406 pode proporcionar maior rendimento através de recursos de hardware (uma instrução/operação/micro-op em vez de duas instruções/operações/micro-operações). Em uma modalidade, a fissão no estágio de renomear/alocar 3403 pode fornecer uma complexidade reduzida no hardware de renomeamento restringindo o número de operandos a dois em vez de três. Em uma modalidade, a fusão no
Petição 870190044159, de 10/05/2019, pág. 127/318
113/232 estágio de renomear/alocar 3403 e/ou no estágio programado 3404 pode fornecer o uso de menos entradas no renomeamento, reordenação e/ou programação de armazenamento para permitir janelas de execução mais fora de ordem e/ou a descoberta de maior paralelismo no nível de instrução. Em uma modalidade, a fissão no estágio de programação 3404 não proporciona uma complexidade de hardware reduzida, limitando o número de fontes de despertar fora de ordem a duas por entrada em vez de três. Em uma modalidade, a fissão no estágio de programação 3404 e/ou estágio de execução 3405 pode fornecer latência reduzida permitindo que partes separadas de uma operação FMA executem em momentos diferentes para limitar o caminho crítico àquele da parte mais lenta em vez da soma das duas partes. Em uma modalidade, a fusão no estágio de execução 3405 pode proporcionar um desempenho melhorado, uma precisão aumentada e/ou uma energia reduzida utilizando um multiplexador agregado dedicado.
[00307] A Figura 35 é um diagrama de fluxo ilustrando um método para fissão/fusão FMA que pode ser realizado por um processador de acordo com modalidades da invenção. No bloco 3510 do método 3500 da Figura 35, um circuito de busca de instrução (por exemplo, 138, 400) pode buscar uma instrução de um i-cache (por exemplo, 134, 313, 470, 913) ou outro local de memória. Por exemplo, a instrução pode ser uma instância de uma instrução FMA, como VFMADD231 PS, tendo um primeiro operando ('d'), um segundo operando ('a') e um terceiro operando fb'), ao qual um processador deve responder executando uma operação FMA (por exemplo, d=a*b+d).
[00308] No bloco 3520, um circuito de decodificação de instruções ou decodificador (por exemplo, 140, 314, 500, 914) que é conectado por fio, configurado ou programado para executar fissão de instruções FMA pode decodificar as instruções em múltiplos separados micro
Petição 870190044159, de 10/05/2019, pág. 128/318
114/232 ops, um multi-micro-op e um micro-op. O decodificador pode selecionar operandos específicos da instrução FMA e/ou de outro micro-op, atribuir um ou mais deles para um ou mais dos separado micro-op s, e/ou criar novos operandos para um ou mais dos separado micro-operações. Por exemplo, o decodificador pode selecionar os operandos 'a' e 'b' da instrução FMA como operandos de origem para uma micro-op de multiplicação e criar um operando 't' como o operando de destino para a micro-op de multiplicação, na qual o processador é para responder executando a operação de multiplicação t=a*b; e o decodificador pode selecionar os operandos 'd' da instrução FMA e o operando 't' da microinformática como operandos fonte para uma micro-op de adição e selecionar o operando 'd' da instrução FMA como o operando de destino para o micro-op, para o qual o processador deve responder executando a operação de adição d=d*t.
[00309] No bloco 3530, um circuito de renomeamento de registradores (por exemplo, 152, 331, 931) pode renomear qualquer um dos operandos, alocar locais de armazenamento e/ou etiquetas para renomear registradores (por exemplo, em um buffer de reordenamento) e/ou implementar a alocação da saída da micro-op de multiplicação (por exemplo, Έ) como uma entrada para a micro-op de adição.
[00310] No bloco 3540, um circuito programador (por exemplo, 156, 332, 932) pode programar as micro-operações separadas para execução, por exemplo, em uma estação de reserva para uma unidade FP. Em uma modalidade, múltiplas micro-operações separadas decodificadas a partir da mesma instância de uma instrução (por exemplo, uma micro-op e uma micro-operação descodificada de uma instrução FMA) podem ser programadas em uma estação de reserva para despacho em uma ordem especificada (por exemplo, a micro-op de adição pode ser programada para despacho somente
Petição 870190044159, de 10/05/2019, pág. 129/318
115/232 após o despacho e/ou conclusão da micro-op de multiplicação).
[00311] No bloco 3550, um circuito de execução (por exemplo, 162,
334, 770, 934) pode executar uma das micro-ops separadas. Por exemplo, o multiplicador FP 334A, 334B, 770A, 770B, 934A ou 934B pode executar a micro-op de multiplicação.
[00312] No bloco 3552, um circuito de execução (por exemplo, 162,
335, 780, 935) pode executar a outra das micro-operações separadas. Por exemplo, o adicionador FP 335A, 335B, 780A, 780B, 935A ou 935B pode executar a micro-op de adição.
[00313] No bloco 3560, um circuito de retirada (por exemplo, 154, 730, 960) pode retirar a instrução e/ou assumir seu resultado a um arquivo de registro físico (por exemplo, 158, 333, 750, 933) ou memória. Em uma modalidade, o bloco 3560 pode incluir a retirada de apenas uma das micro-operações separadas decodificadas a partir de uma instrução. Por exemplo, uma instrução FMA pode ser retirada e/ou seu resultado assumido retirando uma micro-operação de adição correspondente de um buffer de reordenação e confirmando seu resultado (por exemplo, d).
Sumário de Algumas Modalidades [00314] Uma modalidade da invenção pode incluir um processador que compreende uma pluralidade de circuitos dispostos em uma arquitetura entubada. A pluralidade de circuitos pode incluir um decodificador para decodificar uma instrução de adição de multiplicação fundida em pelo menos duas micro-operações separadas. A pluralidade de circuitos pode também incluir um multiplicador para operar em uma primeira das duas micro-operações separadas e um adicionador para operar em uma segunda das duas micro-operações separadas.
Arquiteturas de Processador Específicas [00315] A Figura 36 é um diagrama em bloco de um processador
Petição 870190044159, de 10/05/2019, pág. 130/318
116/232
3600 que pode ter mais de um núcleo, pode ter um controlador de memória integrado e pode ter gráficos integrados de acordo com modalidades da invenção. As caixas de traço contínuo na Figura 36 ilustram um processador 3600 com um único núcleo 36 02A, um agente do sistema 3610, um conjunto de uma ou mais unidades controladoras de barramento 3616, enquanto a adição opcional das caixas tracejadas ilustra um processador alternativo 3600 com múltiplos núcleos 3602A-N, um conjunto de uma ou mais unidade(s) controlador(as) de memória integrada 3614 na unidade de agente do sistema 3610 e lógica de uso especial 3608.
[00316] Deste modo, diferentes implementações do processador 3600 podem incluir: 1) um processador com a lógica para fins especiais 3608 a ser ilustrações e/ou lógica (rendimento) científica (que pode incluir um ou mais núcleos) integradas, e os núcleos 3602AN sendo um ou mais núcleos de uso geral (por exemplo, núcleos de ordem geral, núcleos de fim de ordem de propósito geral, uma combinação dos dois); 2) um coprocessador com os núcleos 3602A-N sendo um grande número de núcleos para fins especiais destinados principalmente a gráficos e/ou dados científicos (rendimento); e 3) um coprocessador com os núcleos 36 02A-N sendo um grande número de núcleos de ordem geral em ordem. Assim, o processador 3600 pode ser um processador de propósito geral, processador de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de segurança), processadores MIC de alta capacidade, aceleradores GPGPU (como, por exemplo, gráficos aceleradores ou unidades de processamento digital de sinais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizado de máquina, aceleradores de rede ou aceleradores de visão computacional), matrizes de gate programáveis em campo ou qualquer outro processador ou dispositivo
Petição 870190044159, de 10/05/2019, pág. 131/318
117/232 de processamento. O processador pode ser implementado em um ou mais chips. O processador 3600 pode ser uma parte de e/ou pode ser implementado em um ou mais substratos usando qualquer uma de várias tecnologias de processo, como, por exemplo, BiCMOS, CMOS ou NMOS.
[00317] A hierarquia de memória inclui um ou mais níveis de cache dentro dos núcleos, um conjunto ou uma ou mais unidades de cache compartilhadas 3606 e memória externa (não mostrada) acoplada ao conjunto de unidades de controlador de memória integrado 3614. O conjunto de unidades de cache compartilhadas 3606 pode incluir um ou mais caches de nível médio, como 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 dos mesmos. Enquanto em uma modalidade uma unidade de interconexão baseada em anel 3612 interconecta a lógica de gráficos integrada 3608 (lógica de gráficos integrada 3608 é um exemplo de e também é referida aqui como lógica de propósito especial), o conjunto de unidades de cache compartilhadas 3606, e a unidade de agente de sistema 3610/unidade(s) de controlador de memória integrada 3614, modalidades alternativas podem usar qualquer número de técnicas bem conhecidas para interligar tais unidades. Em uma modalidade, a coerência é mantida entre uma ou mais unidades de cache 3606 e núcleos 3602-AN.
[00318] Em algumas modalidades, um ou mais dos núcleos 3602AN são capazes de multi-segmentação. O agente do sistema 3610 inclui aqueles componentes que coordenam e operam os núcleos 3602A-N. A unidade de agente de sistema 3610 pode incluir, por exemplo, uma unidade de controle de energia (PCU) e uma unidade de exibição. A PCU pode ser ou incluir lógica e componentes necessários para regular o estado de energia dos núcleos 3602A-N e a lógica de gráficos integrados 3608. A unidade de exibição serve para acionar um
Petição 870190044159, de 10/05/2019, pág. 132/318
118/232 ou mais displays conectados externamente.
[00319] Os núcleos 3602A-N podem ser homogêneos ou heterogêneos em termos de conjunto de instruções de arquitetura; isto é, dois ou mais dos núcleos 3602A-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 um conjunto de instruções diferente.
[00320] A Figura 37 é um diagrama em bloco de um complexo ilustrativo de unidade de processamento central (CPU) que pode ser incluído em um processador de acordo com modalidades da invenção. Em uma modalidade, o cache L3 é um cache de 16 MB de 16 vias dividido em um módulo de quatro núcleos (referido como um complexo de CPU ou CCX), proporcionando uma fatia de 2 MB de cache L3 por núcleo. No entanto, as fatias de cache L3 em um CCX são implementadas de forma que o cache L3 seja um cache compartilhado. Vários CCXs podem ser incluídos em um único processador (por exemplo, dois CCXs formam um cache L3 de 16 MB). Os caches de 8 MB em cada CCX são separados, então eles agem como um cache de último nível por módulo de quatro núcleos com os ganchos apropriados no outro cache L3 para determinar se os dados são necessários (os protocolos envolvidos no projeto de cache L3 permitem que cada núcleo para acessar o cache L3 de cada outro núcleo). Assim, esses caches L1, L2 e L3 são caches coerentes, com as fatias de cache L3 dentro de um CCX e entre CCXs sendo conectadas por uma interconexão coerente de cache (também referida como um tecido coerente de cache).
[00321] A Figura 38 é um diagrama em bloco de uma hierarquia de cache ilustrativa que pode ser incluída em um processador de acordo com modalidades da invenção. Na Figura 38, a hierarquia de cache 3800 inclui L1 i-cache 3810 A e L1 d-cache 3810B (coletivamente,
Petição 870190044159, de 10/05/2019, pág. 133/318
119/232 cache L1 3810), instrução L2 e cache de dados 3820 e instrução e dados nível 3 (L3) cache 3830. Em uma modalidade, tanto o cache L1 3810 quanto o cache L2 3820 são caches de gravação de volta privada/local, enquanto o cache L3 3830 é urn cache de vítima. Em uma modalidade, L1 i-cache 3810 A é urn cache de 64 KB de 4 vias, L1 d-cache 3810B é urn cache de 32 KB de 8 vias, cache L2 3820 é urn cache de 8 vias de 512 KB e cache de nível 3 (L3) 3830 é um cache de 8 MB de 16 vias.
Recursos da Organização da Memória [00322] Os núcleos, processadores e sistemas do processador de acordo com modalidades da invenção podem incluir várias características relacionadas com a organização e uso da memória. Várias dessas características são descritas separadamente usando exemplos não limitativos abaixo, mas as modalidades podem incluir qualquer combinação de tais características.
[00323] Zeramento da Linha de Cache [00324] Algumas modalidades incluem uma instrução cuja execução provoca uma gravação em tamanho de linha de cache de zeros em um endereço de memória. Tal instrução pode ser referida como uma instrução de zeramento de linha de cache, instrução CLZERO, instrução CLZEROING, instrução de inicialização de linha de cache, instrução CLINIT, etc. Em uma modalidade, a instrução de zeragem da linha de cache é uma instrução macro executada por um núcleo, como núcleo 190 e/ou núcleo 5300. Especificamente, o decodificador 140 e/ou o decodificador 5314 seria implementado para decodificar tal macroinstrução em uma ou mais instruções de nível relativamente baixo ou sinais de controle (por exemplo, um ou mais micro-ops, micro-operações (micro-ops), os pontos de entrada de microcódigo, instruções descodificadas ou sinais de controle) que fazem com que a unidade de acesso de memória 164 e/ou a unidade
Petição 870190044159, de 10/05/2019, pág. 134/318
120/232 de geração de endereço 325/unidade de carga-armazenamento 340, respectivamente, para realizar a operação.
[00325] Uma instrução de zeramento de linha de cache tern a vantagem de ser uma maneira mais rápida e deterministica de zerar uma linha de cache porque não precisa usar uma operação de solicitação de propriedade (RFO) ou pelo menos não precisa dos dados de volta ou retornados. Uma operação de RFO é uma operação em protocolos de coerência de cache que combina uma transmissão lida e uma invalidada (uma operação de leitura com intenção de gravar nesse endereço de memória) e faz com que todos os outros caches coerentes definam o estado de tal linha de cache como estado de protocolo de coerência de cache de inválido. Por exemplo, uma operação de RFO é normalmente emitida por um processador que tenta gravar em uma linha de cache que está nos estados compartilhado (S) ou inválido (I) do protocolo MESI. O protocolo MESI usa os estados do protocolo de coerência de cache modificado, exclusivo, compartilhado e inválido. Em contraste, uma implementação de uma instrução de zeramento de linha de cache não requer que uma linha seja lida e retornada ao agente emissor porque está zerando os dados; de fato, em algumas modalidades, o agente emissor não precisa ter a propriedade dos dados.
[00326] Diferentes modalidades podem implementar a instrução de zeramento da linha de cache para indicar um endereço de memória de maneiras diferentes. Por exemplo, a instrução de zeramento da linha de cache pode ser implementada para indicar as informações de endereço explicitamente (por exemplo, através de um ou mais campos imediatos), indiretamente (por exemplo, especificando um ou mais registros nos quais as informações de endereço são armazenadas) e/ou implicitamente (por exemplo, um ou mais registradores designados). A informação de endereço de memória pode ser um
Petição 870190044159, de 10/05/2019, pág. 135/318
121/232 endereço de memória ou ser informação usada em combinação com outra informação (por exemplo, informação de um registrador de segmento, etc.) para gerar um endereço de memória. Embora em algumas modalidades o endereço de memória esteja alinhado em um limite de linha de cache, modalidades alternativas também podem suportar o endereço de memória entre limites de linha de cache e tratadas como indicando a linha de cache entre essas fronteiras. A informação de endereço pode representar informação de endereço de memória absoluta ou informação de endereço de memória relativa, o que pode indicar uma localização de memória relativa a um endereço de memória de base ou outra localização de memória. Além disso, diferentes modos de endereço de memória indireta podem opcionalmente ser usados. Como um exemplo específico, a instrução pode implicitamente indicar um registro (por exemplo, um registrador de propósito geral) que é usado para armazenar informações de endereço de memória relativas que podem ser combinadas com informações de endereço de memória adicionais armazenadas em outro registro implícito (por exemplo, um código, dados ou registro de segmento estendido) para gerar o endereço de memória final usado para identificar o endereço de memória. Isso é apenas um exemplo. Outras formas da informação de endereço também são possíveis.
[00327] Diferentes modalidades podem implementar segmentos de cache de tamanhos diferentes (por exemplo, 32 bits, 64 bits) e/ou uma dada modalidade pode implementar mais de um tamanho de linha de cache. Por exemplo, as modalidades podem suportar uma instrução de anulação de linha de cache que é: 1) implementada para um tamanho de linha de cache específico (e, portanto, não é necessário designar um tamanho de linha de cache); 2) implementado para usar um tamanho de cache atual, em que diferentes tipos de núcleos possuem tamanhos de linha de cache diferentes (por exemplo, o
Petição 870190044159, de 10/05/2019, pág. 136/318
122/232 tamanho do cache atual pode ser indicado por meio de um valor em um registrador); ou 3) implementado para ter um campo para indicar um tamanho de linha de cache. Em algumas modalidades, a instrução permite a indicação de um parâmetro de tamanho que indica uma ou mais segmentos de cache (isto é, um múltiplo de um tamanho de linha de cache). Em algumas modalidades, há adicionalmente ou, em vez disso, uma instrução ZERO que permite a indicação de um parâmetro de tamanho que não esteja vinculado a um tamanho de linha de cache (por exemplo, apenas indica um número de bits), pois permite que o software não saiba tamanho da linha de cache (se o tamanho não for um múltiplo do tamanho da linha de cache (por exemplo, especificado em bits e o número de bits for 112, embora o tamanho da linha de cache seja de 64 bits), as configurações podem zerar até a linha de cache ou emitir um RFO apenas para os dados restantes nessa última linha).
[00328] Em algumas modalidades, a instrução de zeramento da linha de cache é atômica. Assim, toda a linha de cache de zeros será armazenada em sua totalidade, ou nenhuma delas, não apenas uma parte (isto é, uma garantia de atomicidade completa). A atomicidade também pode garantir que os zeros escritos por uma instrução de zeramento da linha de cache não serão intercalados com dados armazenados por outros armazenamentos. A atomicidade pode ser em relação a outros acessos, de modo que quaisquer desses acessos observarão todos os dados armazenados em sua totalidade, ou nenhum dos dados armazenados, mas não apenas uma parte. A atomicidade também pode ser em relação a uma falha de energia, falha do sistema, reinicialização ou outro evento desse tipo, de modo que mesmo em face de tais eventos, todos os zeros são armazenados ou nenhum dos zeros são armazenados, não apenas uma porção. Existem vários usos possíveis de tal operação atômica. Um exemplo
Petição 870190044159, de 10/05/2019, pág. 137/318
123/232 de tal uso é atualizar atomicamente uma parte dos dados em um banco de dados. Outro exemplo de tal uso é atualizar atomicamente uma parte de dados compartilhados em um ambiente de multiprocessamento. Ainda outro exemplo de tal uso é armazenar dados atomicamente em um local para substituir um bloqueio, um semáforo, para atualizar uma variável compartilhada, para sincronizar, para coordenar ou algo parecido. Ainda outras utilizações de tal operação de armazenamento atômico são contempladas e serão evidentes para os versados na arte e tendo o benefício da presente divulgação.
Hierarquias de memória exemplares [00329] A Figura 39 é um diagrama em bloco ilustrando uma hierarquia de memória dentro da qual uma instrução de anulação de linha de cache pode ser implementada de acordo com modalidades da invenção. A hierarquia de memória ilustrada pode ser implementada em conjunto com vários núcleos de processador, clusters de núcleo, CCXs, processadores, arquiteturas de computadores, etc. Por meio de modalidades específicas, uma implementação da instrução de zeramento de cache será descrita com referência à hierarquia de memória da Figura 39 em conjunto com o núcleo/CCX das Figuras 3, 8, 38 e 37. Isso é para fins ilustrativos, e a instrução de zeramento de cache pode ser implementada em diferentes hierarquias de memória e/ou em conjunto com diferentes núcleos, clusters de núcleo, etc.
[00330] A Figura 39 ilustra um agente coerente 3900 e um agente coerente 3901, bem como a possibilidade de outros agentes coerentes como representado por... e agente coerente 3902 usando uma caixa tracejada. A hierarquia de memória na Figura 39 inclui caches coerentes 3904A, uma interconexão 3920 e memória a jusante 3930. Diferentes modalidades podem implementar diferentes números de caches e níveis de cache como parte de caches coerentes 3904A. Os
Petição 870190044159, de 10/05/2019, pág. 138/318
124/232 agentes coerentes e os caches coerentes fazem parte de um domínio de coerência de cache dentro do qual a coerência de cache é mantida usando um protocolo de coerência de cache (por exemplo, o protocolo MESI que usa os estados de protocolo de coerência de cache modificado, exclusivo, compartilhado e inválido, o protocolo MESIF que adiciona o estado de protocolo de coerência de cache para a frente, o protocolo MOESI que adiciona o estado de protocolo de coerência de cache de Pertencente e outros protocolos de coerência de cache).
[00331] O agente coerente 3900 é acoplado à interconexão 3920 através de um ou mais caches em níveis sucessivamente mais baixos de uma hierarquia de cache. Uma hierarquia de cache inclui um cache que está no nível mais alto da hierarquia de cache e que é acoplado ao agente coerente 3900, um cache (por exemplo, um cache L3 3915) que está em um nível mais baixo da hierarquia de cache e que é acoplado à interconexão 3920 (e, portanto, esse cache é referido como o cache de nível mais baixo ou cache de último nível (LLC - last level cache)) e zero ou mais caches (por exemplo, um cache L2 3910) que estão no nível intermediário da hierarquia de cache acoplada a um dos caches em um nível mais alto e um dos caches em um nível inferior (por exemplo, Figura 39 ilustra o agente coerente 3900 acoplado ao cache L1 3905, que é acoplado ao cache L2 3910, que é acoplado ao cache L3 3915, que é acoplado à interconexão 3920).
[00332] O agente coerente 3901 também é acoplado à interconexão através de um ou mais níveis de caches. A Figura 39 ilustra o agente coerente 3901 acoplado a um cache L1 opcional 3906, que é acoplado a um cache L2 opcional 3911, que é acoplado ao cache L3 3915. Além disso, a Figura 3902 também ilustra esse agente coerente opcional 3902 pode ser acoplado diretamente à interconexão 3920 (ou seja, não há caches coerentes).
Petição 870190044159, de 10/05/2019, pág. 139/318
125/232 [00333] Em adição a ou em lugar da conectividade incluindo os agentes coerentes sendo acoplados à interconexão 3920 através de níveis sucessivos de caches, certas modalidades implementar outra conectividade para permitir a comunicação direta ou mais direta (por exemplo, acoplar o agente coerente 3900 diretamente à interconexão 3920, acoplar o agente coerente 3900 diretamente ao cache L2 3910, acoplar o cache L1 3905 diretamente à interconexão 3920 e/ou acoplar o cache L2 3910 diretamente à interconexão 3920 como respectivamente ilustrado por linhas tracejadas 3935, 3936, 3937 e 3938).
[00334] A interconexão 3920 é acoplada à memória a jusante 3930 (por exemplo, através de um conjunto de um ou mais controladores de memória (não mostrados)). A memória a jusante 3930 está em um nível mais baixo da hierarquia de memória do que os caches coerentes 3904, e pode incluir um ou mais tipos de memória e/ou uma hierarquia de memórias (por exemplo, memória volátil e/ou memória não volátil, memória principal, entrada/saída mapeada na memória (MMIO - memory mapped input/outpuf), cache do lado da memória, memória de dois níveis (2LM), DRAM, flash, memória de mudança de estágio, 3D Xpointtm).
[00335] A interconexão 3920 (também referida como uma interconexão coerente de cache, uma malha, uma interconexão, parte de uma rede de interconexão uncore, unidade (s) de interconexão) inclui um controlador de espionagem 3925 para emitir espionagem para os caches coerentes 3904 e receber qualquer resposta dela. O controlador de espionagem 3925 inclui um gerador de espionagem 3926 para emitir espionagem e, em algumas modalidades, um socorrista de espionagem 3927 para receber quaisquer respostas. Além disso, o controlador de espionagem 3925 em certas modalidades inclui um gerador de gravação 3929 (para gerar efetivamente uma
Petição 870190044159, de 10/05/2019, pág. 140/318
126/232 gravação em tamanho de linha de cache de todos os zeros) e/ou um conversor de gravação QOS28 (para converter efetivamente uma linha de cache de dados recebidos responsivos a uma espionagem para todos os zeros). Além disso, enquanto em uma modalidade a interligação 3920 é ilustrada como estando entre o cache L3 3915 e a memória a jusante 3930, modalidades alternativas podem implementar a interligação 3920 noutra localização (por exemplo, entre as caches L2 e o cache L3, quer com um conjunto ou um ou mais controladores de memória para a memória a jusante 3930 fora a interconexão 3920 (por exemplo, como um agente de casa) ou um conjunto ou um ou mais controladores de memória entre o cache L3 3915 e a memória a jusante 3930). A interconexão 3920 (por exemplo, como parte do controlador de espionagem 3925) pode incluir outros itens, como um filtro de espionagem (não mostrado).
[00336] Diferentes modalidades podem ser implementadas com diferentes números dos agentes coerentes como núcleos de uso geral (também conhecidos como unidades de processamento central (CPU central processing units)). Por exemplo, em algumas modalidades, o agente coerente 3900 é um núcleo, o agente coerente 391 é um núcleo, há zero ou mais agentes coerentes adicionais que são núcleos, e há zero ou mais agentes coerentes adicionais que são outros tipos de agentes (por exemplo, processadores de uso geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de segurança), processadores MIC de alto rendimento, aceleradores GPGPUs (como, por exemplo, aceleradores gráficos ou sinal digital processamento (DSP), aceleradores de criptografia, aceleradores de função fixa, aceleradores de aprendizado de máquina, aceleradores de rede ou aceleradores de visão de computador), matrizes de gate programáveis em campo ou qualquer
Petição 870190044159, de 10/05/2019, pág. 141/318
127/232 outro processador ou dispositivo de processamento, para citar apenas alguns exemplos).
[00337] Em algumas modalidades, os agentes coerentes e os caches coerentes 3904 são implementados como nas Figuras 38 e 37. Por exemplo, em um CCX, há 4 agentes coerentes que são núcleos, um cache L1 privado/local por núcleo, um cache L2 privado/local por núcleo e um cache L3 compartilhado; e pode haver vários CCXs acoplados em um único processador. Os caches L1 e L2 são caches de gravação de volta, os caches L2 são caches inclusivos e o cache L3 é um cache de vítima. Além disso, o cache L3 3915 é dividido em fatias entre vários agentes coerentes (por exemplo, 2 MB por núcleo sobre 4 núcleos, totalizando 8 MB) dentro de um módulo (um CCX) e, opcionalmente, entre um ou mais desses módulos (por exemplo, dois CCXs, cada um com 8MB, para formar um cache L3 de 16 MB). A Figura 39 ilustra isto com fatia de cache L3 3916 do agente coerente 3900 e fatia de cache L3 3917 do agente coerente 3901. A interconexão 3920 pode, por exemplo, representar: 1) apenas uma interconexão dentro de um CCX; 2) uma interconexão dentro e entre os CCXs; 3) interconexões separadas dentro de diferentes CCXs, bem como interconexão entre CCXs. Diferentes modalidades podem implementar a interconexão 3920 de forma diferente, incluindo um ou mais de um anel, anéis múltiplos, ligações ponto a ponto, barramento compartilhado, etc. Em modalidades que implementa um agente doméstico e agentes de cache, a interconexão 3920 é considerada para incluir os agentes de armazenamento em cache.
[00338] Um ou mais, ou todos, dos agentes coerentes na Figura 39 podem ser implementados para executar uma instrução de zeramento de linha de cache (ver o possível agente de emissão de instrução de zeragem de linha de cache 3903 sendo identificado como qualquer agente coerente 3900, 3901 e 3902). O agente coerente que está
Petição 870190044159, de 10/05/2019, pág. 142/318
128/232 atualmente executando uma instrução de zeramento de linha de cache é o agente emissor, agente emissor coerente ou primeiro agente, e seus caches são chamados de cache Lx do agente emissor (onde x pode ser 1, 2 ou 3 e onde o cache L3 é implementado com fatias, é a fatia do cache L3 do agente emissor). Na discussão abaixo, este será um agente coerente 3900. Um agente coerente que não está atualmente executando uma instrução de zeramento de linha de cache é referido como agente coerente mas não emissor, agente não emissor, agente coerente não emissor ou segundo agente (como discutido acima, pode haver vários segundos agentes, mas um será discutido abaixo para simplificar), e seus caches são referidos como o cache Lx do segundo agente (onde x pode ser um 1, 2 ou 3 e onde o cache L3 é implementado com fatias, é a fatia do cache L3 do segundo agente). Na discussão abaixo, este será um agente coerente 391.
Arquitetura de Cache Exemplar [00339] A Figura 40 é um diagrama em bloco ilustrando um cache em um processador que implementa uma instrução de zeramento de linha de cache de acordo com modalidades da invenção. A Figura 40 inclui um cache Lx 4050, em que x indica o nível na hierarquia do cache (por exemplo, 1,2, 3). O cache Lx 4050 inclui um controlador de cache 4051 para controlar a operação do cache, incluindo a detecção de ocorrências/erros, fazendo com que gravações/leituras armazenem segmentos em cache, recebendo espionagem (e, portanto, em algumas configurações o controlador de cache 4051 inclui uma interface espião e, em algumas modalidades, um controlador de rastreamento 4043), etc. O controlador de cache inclui uma matriz de etiquetas 4055 com entradas 4060 (que inclui o que às vezes é chamado de estado de etiqueta) e o cache Lx 4050 inclui uma matriz de dados 4056 com as segmentos de cache correspondentes 4070.
Petição 870190044159, de 10/05/2019, pág. 143/318
129/232
Cada uma das entradas 4060 inclui um campo de etiqueta 4061 para armazenar uma etiqueta usada para determinar se um dado endereço atinge ou perde os dados na correspondente dos segmentos de cache 4070. Além disso, cada uma das entradas 4060 inclui um conjunto de um ou mais campos de atributos 4062 (por vezes referido como estado de etiqueta) para armazenar atributos dos dados armazenados na correspondente dos segmentos de cache 4070. O(s) campo(s) de atributo 4062 inclui(em) um cache e campo de estado de protocolo de coerência 4065 para armazenar um valor indicando um estado de protocolo de coerência de cache atual dos dados armazenados na correspondente das linhas de cache 4070. O(s) campo(s) de atributo 4062 pode opcionalmente incluir outros campos, tais como campo de segmento zero 4066, um campo tóxico 4067, um campo de código de correção de erro (não mostrado). Enquanto que a Figura 40 ilustra o(s) campo(s) de atributo 4062 estando na matriz de etiquetas, modalidades alternativas podem implementar este(s) campo(s) em uma matriz de estados separada (não mostrada). Em uma modalidade, uma dada linha de cache pode ter múltiplas indicações de toxicidade (por exemplo, uma para os dois trechos de 32 bits de uma linha de cache de 64 bits) no campo tóxico 4067. Enquanto a Figura 40 ilustra um campo tóxico separado 4067, modalidades podem codificar as indicações de envenenamento em outro campo (por exemplo, o campo de código de correção de erro (ECC - error correction code) ou campo de estado de protocolo de coerência de cache).
[00340] Reativo a um acerto no cache (por exemplo, com base em uma etiqueta no campo de etiqueta 4061), o controlador de cache 4051 inclui circuitos (por exemplo, circuito de estado de protocolo de coerência de cache ou outro circuito) para responder à coerência de cache estado de protocolo no campo de estado de protocolo de
Petição 870190044159, de 10/05/2019, pág. 144/318
130/232 coerência de cache 4056 para o resultado (por exemplo, o campo de estado de protocolo de coerência de cache 4056 correspondente ao campo de etiqueta 4061 cuja etiqueta corresponde); qual resposta difere entre as modalidades e com base em vários fatores (por exemplo, se a consulta de cache foi iniciada, respondendo a um comando de gravação, a um comando de leitura, a uma espionagem (e possivelmente ao tipo de espionagem)). Por exemplo, em algumas modalidades, a resposta é determinar se o estado do protocolo de coerência de cache é aquele que concede a autoridade de cache para modificar a linha de cache (por exemplo, um estado modificado ou exclusivo) reativo a um comando de gravação e/ou certos tipos de espionagem, como discutido em mais detalhes abaixo. Em algumas modalidades, o controlador de cache 4051 inclui: 1) Circuito de falha de acerto (não mostrado) para determinar se há um acerto ou erro no cache que responde a um comando (por exemplo, um comando de gravação, um comando de leitura, uma espionagem comando); 2) o controlador de espionagem 4043 acoplado a uma interface de espionagem (não mostrada) para receber espionagem e para transmitir mensagens de resposta aos espionagem; e 3) circuito de leitura de linha de cache (não mostrado) e circuito de gravação de linha de cache (não mostrado).
Técnicas para configurar uma linha de cache para indicar todos os zeros [00341] Enquanto algumas modalidades são implementadas para configurar uma linha de cache para indicar todos os zeros escrevendo sobre os dados na linha de cache com zeros (primeira técnica), modalidades alternativas podem configurar uma linha de cache para indicar todos os zeros usando outras técnicas (a segundas quatro técnicas descritas abaixo são exemplos). Tais outras técnicas podem ser implementadas por uma variedade de razões, tal como o tamanho
Petição 870190044159, de 10/05/2019, pág. 145/318
131/232 de uma linha de cache é tipicamente maior que a largura de alguns barramentos/estruturas dentro de um núcleo (por exemplo, um ou mais buffers intermédios, tal fila de carga 810, armazenar a fila 820, buffer de combinação de gravação (WCB - write combining buffer) 860) e/ou gravar os dados em uma linha de cache com zeros consome energia e aumenta a complexidade do cache.
[00342] A segunda técnica é invalidar a linha de cache no caminho do cache em que essa linha de cache reside atualmente e gravar uma linha de cache de zeros em uma maneira diferente do cache.
[00343] A terceira e quarta técnicas envolvem a mudança do estado da etiqueta em vez dos dados na matriz de dados 4056, e estes podem ser usados em um ou mais dos níveis de cache e/ou na interconexão. A terceira técnica é implementar um campo (referido como um campo de segmento zero 4066) para cada um dos segmentos de cache (por exemplo, no(s) campo(s) de atributo 4062) e o valor neste campo (que pode ser um bit) indica se: 1) a linha de cache deve ser tratada como tendo o valor dos dados armazenados nessa linha de cache; ou 2) a linha de cache deve ser tratada como sendo todos zeros (independentemente dos dados reais armazenados nessa linha de cache). Em tais modalidades, as leituras (incluindo remoções) dessa linha de cache irá passar o valor do campo de segmento zero 4066 para outra estrutura que suporta tal campo de segmento zero ou converter os dados em zeros. Os dados também seriam convertidos antes de serem usados por um dos agentes coerentes (por exemplo, agente coerente 3900) em uma leitura. Embora em algumas dessas modalidades os dados também sejam convertidos antes de serem gravados na memória a jusante QO30, as modalidades alternativas também implementam um campo de segmento zero na memória a jusante 3930 ou uma estrutura de memória alternativa gerida pelo controlador de memória.
Petição 870190044159, de 10/05/2019, pág. 146/318
132/232 [00344] A quarta técnica é como o terceiro, mas em vez de implementar um campo separado, implementa uma nova codificação em um existente do campo de atributo (por exemplo, uma nova codificação em um campo de estado de protocolo de coerência de cache ou o erro campo da síndrome do código correto (ECC - error correction code)).
[00345] Certas modalidades podem implementar um cache para, como parte da configuração de uma linha de cache para indicar todos os zeros, modificar o estado do protocolo de coerência de cache dessa linha de cache para modificado ou pertencente (ou no caso de usar uma nova codificação no campo de estado de coerência de cache para indicar segmento zero, depois para o estado de segmento zero) e fazer com que qualquer indicação de veneno seja ignorada (dados não mais tóxicos) ou limpa. Assim, outra vantagem de uma instrução de anulação de linha de cache é que ela pode ser usada para limpar linhas tóxicas consistentemente.
[00346] Em uma nota relacionada, um mecanismo para forçar uma linha de cache a zero pode ser implementado apenas em certos níveis de cache (por exemplo, um subconjunto de caches L1, caches L2 e caches L3, como apenas no cache L1 e não nos caches L2 ou L3), e um determinado nível de cache que não possui esse mecanismo pode ser implementado para configurar uma linha de cache para indicar todos os zeros enviando-os para um nível de cache diferente que tenha o mecanismo (por exemplo, um nível de cache maior (por exemplo, os caches L1) são implementados para configurar uma linha de cache para indicar todos os zeros, expulsando os dados para um nível de cache mais baixo (por exemplo, caches L2) que pode fazer o zeramento, um nível de cache mais baixo (por exemplo, os caches L2) é implementado para configurar uma linha de cache para indicar todos os zeros, enviando-os para um cache de nível superior (por exemplo,
Petição 870190044159, de 10/05/2019, pág. 147/318
133/232 os caches L1) que podem fazer a zeragem). Como descrito em mais detalhe abaixo, diferentes modalidades podem implementar o zeramento de uma linha de cache reativa a uma gravação e/ou a uma espionagem. Em modalidades que implementam o zeramento de uma linha de cache reativa a uma gravação e espionagem, um determinado nível de cache poderia ser implementado para fazer a zeragem responder apenas a um de uma gravação ou uma espionagem (mas não ambos) e poderia empurrar/expulsar ou encaminhar os dados para um cache de nível inferior ou superior que possa fazer a zeragem responder à outra de uma gravação e uma espionagem.
Disparar um cache para configurar uma linha de cache para indicar todos os zeros [00347] Independentemente da técnica implementada em um cache para configurar uma linha de cache para indicar todos os zeros (ver acima), acionando um cache para configurar uma linha de cache para indicar que todos os zeros poderiam responder a uma mensagem enviada da interconexão para um dos caches, pelo próprio agente emissor, ou pelo agente emissor, respondendo a uma mensagem enviada da interconexão.
[00348] No caso do agente emissor (sozinho ou reativo a uma mensagem da interconexão) que aciona um cache para configurar uma linha de cache para indicar todos os zeros, diferentes modalidades podem usar técnicas diferentes, incluindo técnicas para implementar a linha de cache zerar a instrução para ser atômica no caso em que uma linha de cache é mais ampla (por exemplo, 32 bits, 64 bits) do que a largura de dados suportada nativamente de um agente emissor (por exemplo, 32 bits, 64 bits, 128 bits, 512 bits 1024 bits). A largura de dados suportados nativamente pode manifestar-se de maneiras diferentes em diferentes modalidades. Em algumas modalidades, a largura de dados suportados nativamente pode
Petição 870190044159, de 10/05/2019, pág. 148/318
134/232 representar a largura em bits do conjunto mais amplo de registradores, e/ou a largura do(s) operando(s) que devem ser operados nas instruções. Em algumas modalidades, a largura de dados suportados nativamente pode representar a largura das unidades de execução aritméticas e/ou lógicas (por exemplo, quando possui a mesma largura dos operandos indicados pelas instruções, de modo que múltiplas porções dos operandos não são bombeadas sequencial mente (duplamente bombeado ou mais)). Em algumas modalidades, a largura de dados suportados nativamente pode representar a largura de um barramento (por exemplo, um tubo de carga). A quantidade de dados que podem ser armazenados atomicamente pode ser limitada pela largura de uma ou mais estruturas internas do agente emissor (por exemplo, barramentos, buffers intermédios).
[00349] Assim, em algumas modalidades em que o agente emissor (por conta própria ou reativo a uma mensagem da interconexão) faz o disparo (de um cache para configurar uma linha de cache para indicar todos os zeros), o agente emissor: 1) implementa um campo de segmento zero em outras estruturas, como um ou mais dos buffers intermédios (por exemplo, a fila de armazenamento 820 e o buffer de combinação de gravação (WCB) 860); ou 2) implementa um novo comando (por exemplo, uma micro-op, sinal de controle, micro-op), que não carrega a linha de cache de zeros, mas indica uma gravação de zeros no tamanho da linha de cache, que pode passar pelos buffers intermédios (por exemplo, a fila de armazenamento 820 e buffer de combinação de gravação (WCB) 860). Como tal, onde o tamanho da linha de cache é maior (por exemplo, 32 bits, 64 bits) do que a largura de dados suportada nativamente de um agente emissor, uma linha de cache de zeros pode ser representada nessas estruturas mais estreitas. A conversão para uma linha de zeros é executada quando o segmento zero (como indicado pelo campo de segmento zero ou novo
Petição 870190044159, de 10/05/2019, pág. 149/318
135/232 comando/micro-op) está sendo enviada para uma estrutura que é menor na hierarquia de memória e que não suporta o zero Campo de segmento ou o novo comando (por exemplo, a conversão para uma linha de zero pode ser realizada quando o segmento zero é enviado para o cache de dados 840 (que pode executar outra das técnicas acima), enviada do buffer de combinação de gravação 8600, enviado pelo cache L3 para a interconexão, ou enviado pela interconexão (por exemplo, através de um controlador de memória) para a memória a jusante).
[00350] Como outro exemplo, em algumas modalidades em que o agente emissor (por conta própria ou reativo a uma mensagem da interconexão) faz o acionamento (de um cache para configurar uma linha de cache para indicar todos os zeros), o agente emissor sequencialmente grava mandris menores (por exemplo, 16 bits por vez, 32 bits por vez) de zeros em um buffer intermédio (por exemplo, a fila de armazenamento 820, o buffer de combinação de gravação (WCB) 860, um buffer de preparação separado (não mostrado)) que não responde a espionagem (ou não responde a espionagem enquanto os fragmentos estão sendo escritos) e que é expulso reativo a bits suficientes que foram escritos para igualar o tamanho de uma linha de cache (e não anterior) para que os fragmentos são escritas simultaneamente; implementando assim a instrução de zeramento da linha de cache atomicamente.
Outros aspectos [00351] Diferentes modalidades podem implementar uma instrução de zeramento de linha de cache com ordenação diferente (por exemplo, fracamente ordenada, fortemente ordenada, uma ordenação que é mais fraca a fracamente ordenada, uma ordenação que é mais forte do que fortemente ordenada). No caso de uma instrução de zeramento da linha de cache que é fracamente ordenada, as
Petição 870190044159, de 10/05/2019, pág. 150/318
136/232 modalidades podem implementar a instrução de modo que seja autoexpulsadora.
[00352] A instrução de zeramento da linha de cache pode ser implementada de modo que não configure uma linha de cache para indicar todos os zeros antes da desativação dessa instrução. Em tais modalidades, existe um mecanismo para assegurar que a instrução de segmento zero do cache foi concluída e a linha de cache está configurada para indicar todos os zeros para todos os leitores (por exemplo, uma ou mais instruções de cerca, uma instrução de bloqueio, uma instrução de serialização arquitetural, uma loja mais jovem sendo GO (fortemente ordenada), carga mais jovem sendo GO (mais rigorosa do que fortemente ordenada)).
[00353] A instrução de zeramento da linha de cache pode ser tratada como uma loja para propósitos de visitas à tabela de páginas (incluindo tabelas de virtualização (por exemplo, Tabelas de Página Estendida (EPT - Extended Page Tables) (nas quais os bits A e D serão atualizados), tabelas de página de sombra) e irá falhar se não for gravável.
Modalidades que Primeiro Tentam Gravar em um Cache do Agente Emissor antes de Usar Espionagem [00354] A Figura 41 é um diagrama de fluxo ilustrando as modalidades da invenção que primeiro tentam gravar em um cache do agente emissor antes de usar espionagem. Como discutido acima, o primeiro agente 3900 decodifica e executa uma instrução cuja execução deve causar uma gravação de zeros no tamanho da linha de cache em um endereço de memória (bloco 4110). Reativo à decodificação e execução da instrução, o primeiro agente deve emitir, a um dos caches coerentes acoplados ao primeiro agente (por exemplo, o cache L1 3905), um comando de gravação para iniciar a gravação do tamanho do segmento do cache de zeros no endereço de
Petição 870190044159, de 10/05/2019, pág. 151/318
137/232 memória (neste caso, o primeiro agente também é referido como o agente emissor) (bloco 4112). Em algumas modalidades, o primeiro agente inclui uma unidade de decodificação (por exemplo, decodificador 140, decodificador 314) para decodificar a instrução cuja execução consiste em provocar a gravação de zeros no tamanho da linha de cache em um endereço de memória. O primeiro agente também inclui uma unidade de execução (por exemplo, unidade(s) de acesso à memória 164, unidade de armazenamento de carga 340), reativa à unidade de decodificação, para emitir o comando para iniciar a gravação de zeros no tamanho da linha de cache endereço.
[00355] Quando há um golpe para uma linha de cache do cache (por exemplo, o cache L1 3905) para o qual o comando é emitido (bloco 4114) e estado de protocolo de coerência de cache dessa linha de cache é aquele que concede o cache autoridade para modificar a linha de cache sem transmitir para outros caches (por exemplo, modificado ou exclusivo) (bloco 4116), então esse cache é para configurar a linha de cache para indicar todos os zeros e suprimir espionagem (bloco 4118). Diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros. Em algumas modalidades, se houver uma ocorrência para uma linha de cache do cache (por exemplo, o cache L1 3905) para o qual o comando é emitido (bloco 4114), a linha de cache ainda é zerada para um ou mais estados de protocolo de coerência de cache (por exemplo, um ou mais de propriedade, frente ou compartilhado). Para qualquer estado para o qual isso é feito, o controle passa para o bloco 4119; para qualquer estado para o qual isso não é feito controle, passa para o bloco 4120. Assim, nas modalidades nas quais o controle passa para o bloco 4119 para qualquer estado que não seja modificado,
Petição 870190044159, de 10/05/2019, pág. 152/318
138/232 exclusivo e inválido, então o bloco 4120 não está implementado; e vice-versa. Contudo, podem ser implementadas modalidades nas quais o controle passa para o bloco 4119 ou 4120, dependendo do estado. No bloco 4119, esse cache é para configurar a linha de cache para indicar todos os zeros; a partir do bloco 4119, o controle passa para o bloco 4122 (descrita em mais detalhe aqui mais adiante), no qual a memória cache é para emitir o comando de gravação para a interconexão (dependendo da modalidade, para o próximo nível de cache, ou para a interconexão de emitir espionagem (por exemplo, uma atualização de gravação de espionagem (também conhecido como uma gravação-zero de espionagem ou uma gravação-e-zero de espionagem), uma gravação inválida de espionagem (também chamada de espionagem inválida se modificada), ou uma espionagem que indique para invalidar e gravar de volta (também chamada de espionagem de gravar de voltar-invalidar)). É possível que o comando de gravação passado para o próximo nível de cache ou interconexão indique que uma linha com um estado diferente de Modificado ou exclusivo foi configurado para indicar todos os zeros Um uso deste comando de gravação modificado é tal que se uma linha compartilhada é configurada para todos os zeros e seu estado é alterado para modificado ou pertencente, então uma espionagem de atualização de gravação não seria enviada. Nessa situação, a interconexão poderia emitir um tipo diferente de espião (por exemplo, uma gravação invalidade de espionagem ou gravar de volta e invalidar). No bloco 4120, o cache deve alterar o estado do protocolo de coerência de cache dessa linha de cache para inválido e o controle passa para o bloco 4122. Se houver um erro de cache (bloco 4114), o controle passa para o bloco 4122.
[00356] A título de exemplo específico sobre o estado de frente ou de propriedade, quando um cache do agente emissor tem a linha de
Petição 870190044159, de 10/05/2019, pág. 153/318
139/232 cache no estado de encaminhamento ou de propriedade, essa linha de cache pode estar em outros caches no estado compartilhado. Como tal, se a linha de cache é zerada no bloco 4119, então uma espionagem pode ser enviada para invalidar os outros segmentos de cache que estão no estado compartilhado ou para configurar para indicar todos os zeros os outros segmentos de cache que estão no estado compartilhado. Alternativamente, a linha de cache no estado de encaminhamento ou de propriedade pode ser invalidada (ou limpa, expulsa e invalidada) (bloco 4120) e uma nova linha criada que é modificada e zerada ou detida e zerada. Essa nova linha que é zerada pode ser inserida (preenchida) no mesmo cache que a linha de cache que foi encontrada no estado de encaminhamento ou de propriedade (por exemplo, em um conjunto diferente ou maneira desse cache), ou pode ser inserida em um cache diferente (por exemplo, se a linha de cache foi encontrada no estado de encaminhamento ou de propriedade no cache L2 ou cache L3, a linha de cache pode ser invalidada e uma nova linha de modificação e zerada ou de propriedade e zerada criada no cache L1).
[00357] No bloco 4122, o cache deve emitir o comando de gravação para a interconexão. Esse comando de gravação pode ser emitido diretamente para a interconexão 3920, ou pode ser enviado para um ou mais níveis mais baixos dos caches do primeiro agente. Por meio de exemplos: 1) em algumas modalidades, o comando de gravação é emitido diretamente para a interconexão (isto é, pular quaisquer caches em níveis mais baixos da hierarquia de cache - por exemplo, do cache L1 3905 diretamente para a interconexão 3920, pulando quaisquer caches de nível inferior (por exemplo, o cache L2 OQA10, o cache L3 OQA15) - nesse caso, o comando de gravação é usado para dados do cache L1 do primeiro agente, enquanto espionagem (descritos a seguir) são usados para a instrução do cache L1, o cache
Petição 870190044159, de 10/05/2019, pág. 154/318
140/232
L2 e o cache L3 (mais especificamente, a fatia do cache L3 3916 se implementado) do primeiro agente, bem como para os caches do segundo agente); 2) em algumas modalidades, o comando de gravação é emitido para o cache L2 3910 que repete o acima, e se ele não configurar uma linha de cache para indicar todos os zeros, emite o comando de gravação diretamente para a interconexão 3920 - nesse caso, o comando de gravação é usado para o cache L1 e cache L2 do primeiro agente, enquanto espionagem (descritos a seguir) são usados para o cache L3 (mais especificamente, a fatia cache L3 3916 se implementada) do primeiro agente e os caches de o segundo agente; 3) em algumas modalidades, o comando de gravação é emitido para o cache L2 3910 que repete o acima, e se ele não configurar uma linha de cache para indicar todos os zeros, emite o comando de gravação para o cache L3 3915 (mais especificamente, a fatia de cache L3 3916 se implementada), e se ela não configurar uma linha de cache para indicar todos os zeros, para a interconexão 3920 - nesse caso, o comando de gravação é usado para os caches do primeiro agente, enquanto espionagem (descrito a seguir) são usados para os caches do segundo agente. Em certas modalidades, o(s) cache(s) ao(s) qual(is) os comandos de gravação são emitidos inclui um controlador de cache implementado para responder aos comandos de gravação discutidos acima, determinar se existem ou não acertos de cache, configurar segmentos de cache para indicar todos os zeros pode implementar caches para configurar a linha de cache para indicar todos os zeros conforme descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) e emitir os comandos de gravação para a interconexão em falhas de cache. Em um exemplo específico, reativo a um golpe de linha de cache, no cache L2 3910 (do agente emissor), que é modificado, exclusivo e/ou de propriedade, o cache L2 é implementado
Petição 870190044159, de 10/05/2019, pág. 155/318
141/232 para configurar uma linha de cache para indicar todos os zeros encaminhando a tarefa para o cache L1.
[00358] O controlador de espionagem 3925 da interconexão 3920, reativo ao comando de gravação, é implementado para iniciar um processo de rastreamento (bloco 4190) para localizar quaisquer caches que possam estar armazenando a linha de cache. Para implementar o processo de espionagem 4190, o controlador de espionagem 3925 é implementado (por exemplo, através do gerador de espionagem 3926) para emitir um espião àqueles dos caches coerentes que podem estar armazenando a linha de cache (bloco 4126) palavras, aqueles dos caches coerentes para os quais deve ser determinado se houver um golpe). Em algumas modalidades, os caches coerentes que podem estar armazenando a linha de cache são aqueles dos caches coerentes: 1) para o qual o comando de gravação não foi previamente emitido; e 2) em modalidades que implementam um filtro de rastreamento (não mostrado) na interconexão 3920, que o filtro de rastreamento indica que o cache pode conter a linha (ou seja, para o qual o filtro de rastreamento não suprime a espionagem). Isto pode incluir um ou mais níveis de caches (por exemplo, o cache L1 3906, o cache L2 3911, o cache L3 3915) acoplando o segundo agente 3901 à interconexão 3920; bem como qualquer um dos caches (por exemplo, o cache L2 3910, o cache L3 3915) que acoplam o primeiro agente 3900 (o agente emissor) à interconexão 3920, que não recebeu o comando de gravação (isto é, caches que foram omitidos), e que, em modalidades que implementam um filtro espionagem (não mostrado) na interconexão 3920, o filtro de espionagem indica que pode conter a linha (ou seja, o filtro espionagem não suprime a espionagem). Em modalidades em que uma espionagem emitida para um ou mais dos caches que ligam o primeiro agente de interconexão, cada uma dessas espias também pode ser referida como uma espia
Petição 870190044159, de 10/05/2019, pág. 156/318
142/232 traseira. Como parte do processo de espionagem 4190, diferentes modalidades podem ser implementadas para emitir diferentes tipos de espionagem, dependendo da situação, ou emitir apenas um tipo de espião. Há uma variedade de possíveis tipos de espionagem que podem ser usados (por exemplo, um espião de atualização de gravação (também chamado de espião de gravação-zero ou um espião gravação-e-zero), um espião de gravação invalidado (também chamado de espionagem de gravação invalidada). Uma espionagem invalidada se modificada, uma espionagem que indica para invalidar e gravar de volta (também chamado de espionagem gravar de volta-einvalidar), uma espionagem que escreve qualquer linha de cache que acerta, mas não envia os dados de volta para o primeiro agente e não resulta na leitura dos dados da memória a jusante, uma espionagem da técnica anterior (por exemplo, um RFO)) como discutido em mais detalhe mais adiante neste documento. Especificamente, onde espionagem de gravação de atualização é utilizada, o controlador de espionagem 3925 é também aplicado para determinar se a gravação dimensionada de linha de cache foi realizada por um dos caches que respondem a uma da espionagem de gravação de atualização (mostrado como bloco a tracejado 4128) como parte do processo de espionagem 4190; se assim for, o processo está completo (bloco 4130); caso contrário, o controle passa para o bloco 4132. O bloco 4128 é tracejado, pois não é usado quando os outros tipos de espionagem são usados para o processo de espionagem 4190.
[00359] O comando de gravação e a espionagem operam para manipular casos em que há uma linha de cache que contém os dados a serem zerados em um ou mais dos caches. A gravação de zeros em tamanho de linha de cache pode ter sido executada por um dos caches que respondem ao comando de gravação (como descrito acima) ou, em modalidades que emitem espionagem de atualização
Petição 870190044159, de 10/05/2019, pág. 157/318
143/232 de gravação, por um dos caches que respondem a uma da espionagem de atualização, conforme descrito em mais detalhes abaixo. Se a gravação em tamanho de linha de cache de zeros não foi executada por nenhum dos caches, então no bloco 4132A de interconexão 3920 (por exemplo, através do gerador de gravação 3929 do controlador de espionagem 3925), ou o primeiro agente (o agente emissor) reativo a uma mensagem da interconexão 3920, faz com que uma linha de cache em um ou mais dos caches coerentes (por exemplo, o cache L1 3905, o cache L2 3910, o cache L3 3915) seja configurado para indica todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou faz com que uma gravação de zeros do tamanho da linha de cache seja a memória a jusante no endereço de memória. Como indicado acima e em mais detalhe abaixo, em certas modalidades, o controlador de espionagem 3925 inclui um respondedor de espionagem 3927 (e opcionalmente um conversor de gravação 3928 e um gerador de gravação 3929) responsável por esta ação. Em certas modalidades, o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware) executa seu rolo (se houver) nesta ação. Em uma modalidade alternativa, a interconexão 3920 instrui um controlador de memória a causar a gravação de zeros na memória a jusante.
[00360] Como descrito acima na seção intitulada Acionamento de um cache para configurar uma linha de cache para indicar todos os zeros, diferentes modalidades podem implementar o agente emissor diferentemente para provocar o acionamento de um cache para configurar uma linha de cache para indicar todos os zeros (por
Petição 870190044159, de 10/05/2019, pág. 158/318
144/232 exemplo, para garantir a atomicidade onde uma linha de cache é mais ampla (por exemplo, 32 bits, 64 bits) do que a largura de dados suportada nativamente de um agente emissor, implementando um campo de segmento zero em outras estruturas (por exemplo, buffers intermédios), implementando um novo comando (que não carrega a linha de cache de zeros, mas indica uma gravação de zeros em tamanho de linha de cache) que pode passar pelos buffers intermédios ou implementar gravações sequenciais de mandris menores (por exemplo, 16 bits por vez, 32 bits a um tempo) de zeros em um buffer intermédio (por exemplo, a fila de armazenamento 8200, o buffer de combinação de gravação (WCB) 8600, um buffer temporário separado (não mostrado)) que não responde a espionagem (ou não responde a espionagem enquanto os bits estão sendo escritos n) e que é expulso reativo a que bits suficientes tenham sido escritos para igualar o tamanho de uma linha de cache (e não anterior) para que os fragmentos sejam escritos simultaneamente).
Modalidades que Confiam em Espionagem dos Caches Coerentes [00361] A Figura 42 é um diagrama de fluxo ilustrando as modalidades da invenção que dependem de espionagem dos caches coerentes (eles não tentam primeiro gravar em um cache do agente emissor). Como discutido acima, o primeiro agente 3900 decodifica e executa uma instrução cuja execução deve causar uma gravação de zeros no tamanho da linha de cache em um endereço de memória (bloco 4210). Em resposta à decodificação e execução da instrução, o primeiro agente deve emitir, para a interconexão 3920, um comando para iniciar a gravação de zeros no tamanho da linha de cache no endereço de memória (nesse caso, o primeiro agente também é referido como o agente emissor) (bloco 4212). Em algumas modalidades, o primeiro agente inclui uma unidade de descodificação (por exemplo, decodificador 140, decodificador 314) para decodificar a
Petição 870190044159, de 10/05/2019, pág. 159/318
145/232 instrução cuja execução consiste em provocar a gravação de zeros no tamanho da linha de cache em um endereço de memória. O primeiro agente também inclui uma unidade de execução (por exemplo, unidade(s) de acesso à memória 164, unidade de armazenamento de carga 340), reativa à unidade de decodificação, para emitir o comando para iniciar a gravação de zeros no tamanho da linha do endereço de cache.
[00362] O comando do primeiro agente/agente emissor 3900 é emitido para a interconexão 3920 (bloco 4212), e a interconexão 3920, reativa ao comando, é implementada para iniciar um processo de espionagem (bloco 4290) para localizar quaisquer caches que possam estar armazenando a linha de cache. Para implementar o processo de espionagem 4290, a interconexão 3920 (por exemplo, através do controlador espionagem 3925) é implementada (por exemplo, através do gerador de espionagem 3926) para emitir uma espionagem para aqueles dos caches coerentes que podem estar armazenando a linha de cache (bloco 4226) (em outras palavras, aqueles dos caches coerentes para os quais deve ser determinado se houver um golpe). Em algumas modalidades, os caches coerentes que podem estar armazenando a linha de cache são aqueles dos caches coerentes: 1) qualquer um dos caches coerentes (por exemplo, o cache L1 3905, o cache L2 3910, o cache L1 3906, o cache L1 L2 cache 3911, o cache L3 3915) em modalidades que não implementam um filtro de rastreamento (não mostrado) na interconexão 3920; ou 2) os dos caches coerentes para os quais um filtro de rastreamento (não mostrado) na interconexão 3920 indica que o cache pode conter segmentos (isto é, o filtro de rastreamento não suprime a espionagem) em modalidades que implementam tal filtro de espionagem. Em modalidades em que uma espionagem emitida para um ou mais dos caches que ligam o primeiro agente de interconexão, cada uma
Petição 870190044159, de 10/05/2019, pág. 160/318
146/232 dessas espias também pode ser referida como uma espia traseira. Como antes, como parte do processo de espionagem 4290, diferentes modalidades podem emitir diferentes tipos de espionagem, dependendo da situação, ou emitir apenas um tipo de espião. Há uma variedade de possíveis tipos de espionagem que podem ser usados (por exemplo, um espião de atualização de gravação (também chamado de espião de gravação-zero ou um espião de gravação-ezero), um espião de gravação inválida (também chamado de espião de gravação inválida, espionagem inválida se modificada), uma espionagem que indica para invalidar e gravar de volta (também chamado de espionagem gravar de volta e invalidar), uma espionagem que escreve qualquer linha de cache que acerta mas não envia os dados de volta ao primeiro agente e não faz com que os dados sejam lidos a partir da memória a jusante, um espião da arte anterior (por exemplo, um RFO) como discutido em mais detalhes mais adiante aqui. Especificamente, onde espionagem de atualização de gravação são usados, o controlador de espionagem 3925 também é implementado para determinar se a gravação em tamanho de linha de cache foi executada por um dos caches que respondem a um dos espias de atualização de gravação (mostrados como bloco tracejado 4228) como parte do processo de rastreamento 4290; processo está completo (bloco 4230), caso contrário, o controle passa para o bloco 4232. O bloco 4228 é tracejado como não é usado quando os outros tipos de espionagem são usados para o processo de espionagem 4290.
[00363] Em uma modalidade alternativa, o bloco 4212 é substituído pelo primeiro agente a ser implementado para emitir um comando espionagem àqueles dos caches coerentes que podem estar armazenando a linha de cache (nesse caso, o bloco 4226 não está presente, e o fluxo passa para o bloco 4228 em modalidades que
Petição 870190044159, de 10/05/2019, pág. 161/318
147/232 utilizam espionagem de atualização de gravação ou para bloquear 4232 de outro modo).
[00364] A espionagem opera para lidar com casos em que há uma linha de cache que contém os dados a serem zerados em um ou mais dos caches. Em modalidades que emitem espionagem de atualização de gravação, a gravação de zeros em tamanho de linha de cache pode ter sido executada por um ou mais dos caches. Se a gravação de zeros em tamanho de linha de cache não tiver sido executada por nenhum dos caches, então no bloco 4232 o primeiro agente por conta própria, a interconexão 3920 (por exemplo, através do gerador de gravação 3929), ou o primeiro agente reativo para uma mensagem da interconexão 3920, faz com que uma linha de cache em um ou mais dos caches (por exemplo, o cache L1 3905, o cache L2 3910, o cache L3 3915) seja configurado para indicar todos os zeros diferentes). As modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou causar uma gravação de zeros do tamanho da linha de cache na memória a jusante no endereço. Como indicado acima e em mais detalhe abaixo, em certas modalidades, o controlador de espionagem 3925 inclui um respondente de espionagem 3927 (e opcionalmente um conversor de gravação 3928 e um gerador de gravação 3929) para executar sua função (se houver) nesta ação. Em certas modalidades, o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware) executa sua função (se houver) nesta ação. Em uma modalidade alternativa, a interconexão 3920 instrui um controlador de memória a causar a gravação de zeros na memória a jusante.
Petição 870190044159, de 10/05/2019, pág. 162/318
148/232 [00365] Conforme descrito acima na seção intitulada Acionamento de um cache para configurar uma linha de cache para indicar todos os zeros, diferentes modalidades podem implementar o agente emissor diferentemente para causar o acionamento de um cache para configurar uma linha de cache para indicar todos os zeros (por exemplo, para garantir a atomicidade onde uma linha de cache é mais ampla (por exemplo, 32 bits, 64 bits) do que a largura de dados suportada nativamente de um agente emissor, implementando um campo de segmento zero em outras estruturas (por exemplo, buffers intermédios), implementando um novo comando (que não carrega a linha de cache de zeros, mas indica uma gravação de zeros em tamanho de linha de cache) que pode passar pelos buffers intermédios ou implementar gravações sequenciais de mandris menores (por exemplo, 16 bits por vez, 32 bits a um tempo) de zeros em um buffer intermédio (por exemplo, a fila de armazenamento 8200, o buffer de combinação de gravação (WCB) 8600, um buffer temporário separado (não mostrado)) que não responde a espionagem (ou não responde a espionagem enquanto os bits estão sendo escrito) e que é expulso reativo a que fatias suficientes tenham sido escritas para igualar o tamanho de uma linha de cache (e não anterior) para que os fragmentos sejam escritos simultaneamente).
Tipos Diferentes de Espionagem [00366] Como previamente indicado, como parte do processo de espionagem 4190 ou o processo de espionagem 4290, diferentes modalidades podem emitir diferentes tipos de espionagem, dependendo da situação, ou emitir apenas um tipo de espião. Há uma variedade de possíveis tipos de espionagem que podem ser usados (por exemplo, um espião de atualização de gravação (também chamado de espionagem de gravação-zero ou uma espionagem de gravação e zero), uma espionagem de gravação inválida, uma
Petição 870190044159, de 10/05/2019, pág. 163/318
149/232 espionagem que indica para invalidar e gravar de volta (também conhecido como espionagem de invalidar se modificada), uma espia que grava qualquer linha de cache que acerta, mas não envia os dados de volta para o primeiro agente e não resulta em dados ler a partir da memória a jusante, uma espia da técnica anterior (por exemplo, um RFO)). Como indicado anteriormente, qualquer um destes tipos diferentes de espionagem pode ser usado em conjunto com qualquer das modalidades acima discutidas em relação às Figuras 41 e 42. Mais detalhes sobre os diferentes tipos de espionagem serão agora descritos.
[00367] Espionagem de atualização de gravação: A Figura 43 é um diagrama de fluxo ilustrando modalidades da invenção que usam espionagem de atualização de gravação (também referidos como espionagem de gravação zero ou gravações de gravação e zero) para implementar o processo de espionagem 4190 ou 4290. No contexto das Figuras 41 e 42, o fluxo passa, respectivamente, do bloco 4124 ou do bloco 4212 para o bloco 4326, que realiza o bloco 4126 ou 4226 utilizando uma espia de atualização de gravação. A interconexão 3920 (por exemplo, através do gerador de espionagem 3926 do controlador de espionagem 3925) é implementada para emitir espionagem de atualização de gravação para aqueles dos caches coerentes que podem estar armazenando a linha de cache (bloco 4326) (em outras palavras, aqueles dos caches coerentes para os quais deve ser determinado se houver um golpe). Quando há um impacto em uma linha de cache de um cache (por exemplo, o cache L1, o cache L2 e/ou a fatia do cache L3 do primeiro agente, o cache L1, o cache L2 e a fatia do cache L3 de o segundo agente) para o qual uma espionagem de atualização de gravação é emitido (bloco 4340), então esse cache é: 1) se o estado do protocolo de coerência de cache da linha de cache de entrada for modificado (e em algumas
Petição 870190044159, de 10/05/2019, pág. 164/318
150/232 modalidades, um ou mais de para a frente, exclusivo, pertencente e/ou compartilhado) (bloco 4342), configurar a linha de cache para indicar todos os zeros (bloco 4344) (diferentes modalidades podem implementar caches para configurar a linha de cache para indicação de todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) e transmite à interconexão 3920 uma mensagem de resposta indicando zerada (em algumas modalidades que suportam zeragem de uma linha de cache que está no estado compartilhado, a mensagem de resposta também distingue o estado da linha de cache - como modificado-e-zero ou detido-e-zero versus compartilhado-e-zero (o último indicando que o estado original foi compartilhado e o cache configurou a linha de cache para indicar todos os zeros e seu estado ainda é compartilhado); em uma modalidade alternativa que suporta o zeramento de uma linha de cache no estado compartilhado, uma mensagem de resposta indicando não zerada (como no bloco 4350) é enviada quando o estado original foi compartilhado e o cache configurou a linha de cache para indicar todos zeros e seu estado ainda é compartilhado)) (4346); e 2) caso contrário, configure o estado do protocolo de coerência de cache dessa linha de cache para inválido (bloco 4328) e emita uma mensagem de resposta indicando não zerada para a interconexão (bloco 4350). Quando não há um golpe para uma linha de cache do cache para o qual uma espionagem de atualização de gravação é emitida (bloco 4340), o cache emite uma mensagem de resposta indicando não zerada para a interconexão (bloco 4350). Assim, em algumas modalidades, um cache coerente pode ser implementado de tal forma que um comando de gravação ou espionagem de gravação e zero que atinge uma linha de cache em qualquer um dos estados modificados, próprios, exclusivos e encaminhados fará com que o cache configure o cache segmento a
Petição 870190044159, de 10/05/2019, pág. 165/318
151/232 ser zerada (e alterar seu estado para modificado (modificado-ezerado) ou de propriedade (próprio-e-zerado)). Em modalidades alternativas, tal cache pode fazê-lo apenas para um subconjunto dos estados modificado, de propriedade, exclusivo e de encaminhamento; nesse caso, isso faria com que qualquer linha de cache de ocorrência nos estados modificado, de propriedade, exclusivo ou de encaminhamento e que não estivesse sendo alterada para modificada e zerada ou de propriedade e zerada, para ser alterada para o estado inválido para uma espionagem de gravação e zero. Como tal, em algumas modalidades, todo ou um subconjunto dos caches coerentes é implementado para, para todos ou um subconjunto dos estados modificados, exclusivos, de propriedade ou de encaminhamento, fazer com que uma linha de cache seja zerada (e seu estado alterado para modificado (modificado-e-zerado) ou de propriedade (próprio-ezerado)) reativo a um comando de gravação ou espionagem de gravação e atualização (também conhecido como gravação e zero) que acerta nesse cache. As modalidades que suportam o zeramento de uma linha de cache que está no estado compartilhado e o deixa no estado compartilhado o farão somente quando qualquer linha Modificada, Exclusiva, Própria ou Direta atingida em outros caches for alterada para Própria e Zerada ou invalidada em vez de alterado para modificado e zerado. Em certas modalidades, um cache implementado para responder a um espionagem de atualização de gravação inclui o controlador de cache 4051 (por exemplo, através do controlador de rastreamento 4053), reativo aos rastreamentos de atualização de gravação, para determinar se existem ou não ocorrências de cache configurar segmentos de cache que atingem para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha
Petição 870190044159, de 10/05/2019, pág. 166/318
152/232 de cache para indicar todos os zeros) e emitir as mensagens de resposta para a interconexão 3920.
[00368] Depois de emitir a espionagem de atualização de gravação, a interconexão 3920 (por exemplo, através do respondents de espionagem 3927 do controlador de espionagem 3925) é implementada para rastrear o recebimento das respectivas mensagens de resposta (bloco 4352) (por exemplo, em uma modalidade, o gerador de espionagem 3926 indica ao respondedor de espionagem 3927 informação para rastrear a recepção das respectivas mensagens de resposta). A partir do bloco 4352, o controle passa para o bloco 4128 ou para o bloco 4228, dependendo se uma modalidade da Figura 41 ou 42 está a ser implementada. A gravação de zeros em tamanho de linha de cache pode ter sido executada por um dos caches que respondem a um dos snapshots de atualização de gravação (no entanto, em modalidades que implementam o zeramento de uma linha de cache no estado compartilhado e nenhuma das mensagens de resposta reflete uma das segmentos de cache sendo propriedade-ezero ou modificada-e-zero, então a gravação da linha de cache de zeros não é considerada como tendo sido executada por um dos caches que respondem a um dos espionagem de atualização de gravação). Se a gravação em tamanho de linha de cache de zeros não foi executada por nenhum dos caches (bloco 4128 e bloco 4228) (todas as mensagens de resposta indicam não zeradas; ou em modalidades que implementam o zeramento de uma linha de cache no compartilhamento) estado e nenhuma das mensagens de resposta refletem uma das segmentos de cache sendo propriedade-e-zero ou modificada-e-zero), então o bloco 4132 ou o bloco 4232 é executado ou seja, a interconexão 3920 (por exemplo, via gerador de gravação 3929 do controlador de espionagem QO25), ou o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de
Petição 870190044159, de 10/05/2019, pág. 167/318
153/232 acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware) reativo a uma mensagem da interconexão 3920, faz com que uma linha de cache em um dos caches (por exemplo, cache L1, cache L2, cache L3) seja configurada para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou causa uma gravação de zeros do tamanho da linha de cache na memória a jusante no endereço.
[00369] Conforme ilustrado acima, o uso de uma espia de atualização de gravação, em oposição ao uso de uma operação de RFO, é vantajoso na medida em que não requer que uma linha seja lida e devolvida ao agente emissor e exija a propriedade de os dados serem fornecidos ao agente emissor (quando as condições de 4340 e 4342 forem atendidas, o rastreamento de atualização de gravação faz com que a linha de cache seja zerada no cache de outro agente coerente). Assim, uma vantagem das modalidades que usam espionagem de atualização de gravação é que eles podem atualizar diretamente um cache local de outro agente (por exemplo, o segundo agente/agente não emissor). Por exemplo, isso permite uma comunicação relativamente rápida, como a atualização de uma variável na qual outro agente está girando.
[00370] Como indicado anteriormente, espionagem de atualização de gravação podem ser usadas em conjunto com as modalidades das Figuras 41 e 42. A título de exemplo, será descrita uma modalidade específica que implementa espionagem de atualização de gravação em uma das modalidades da Figura 41. Nesta modalidade específica, o agente emissor 3900 tenta primeiro gravar no cache L1 3905 do agente emissor 3900; e se são necessários espionagem, a
Petição 870190044159, de 10/05/2019, pág. 168/318
154/232 interconexão 3920 faz a gravação-atualização da espionagem aos caches coerentes que possa vir a acumular a linha de cache, como descrito acima. Assim, os caches L1 são implementados para responder aos comandos de gravação, conforme descrito acima; os caches L1, os caches L2 e os caches L3 (mais especificamente, os cortes de cache L3, se implementados) são implementados para responder aos espionagem de atualização de gravação, conforme descrito acima; a interconexão 3920 é implementada a espionagem de gravação-atualização sensível aos comandos de gravação (por exemplo, através do gerador de espionagem 3926 do controlador de espionagem 3925) e para responder às mensagens de resposta (por exemplo, através da espionagem respondedor 3927 do controlador de espionagem 3925) como descrito acima; e a interconexão 3920 (por exemplo, através do gerador de gravação 3929 do controlador de espionagem QO25) ou o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidade de acesso à memória 164, unidade de armazenamento de carga 340)) ou outra estrutura de hardware) reativa a uma mensagem da interconexão, é implementada para causar uma linha de cache em um dos caches (por exemplo, o cache L1 3905, o cache L2 3910 ou o cache L3 3915 (mais especificamente, a fatia do cache L3 3916 se implementada) do primeiro agente) a ser configurada para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar um cache segmento para indicar todos os zeros) ou causa uma gravação de zeros do tamanho da linha de cache na memória a jusante no endereço de memória.
[00371] Espionagem de Gravação Inválida: A Figura 44 é um diagrama de fluxo ilustrando modalidades da invenção que usam
Petição 870190044159, de 10/05/2019, pág. 169/318
155/232 espionagem de gravação inválida (também chamada de espionagem inválida se modificada) para implementar o processo de espionagem 4190 ou 4290. No contexto das Figuras 41 e 42, o fluxo passa, respectivamente, do bloco 4124 ou do bloco 4212 para o bloco 4426, que realiza o bloco 4126 ou 4226 utilizando espionagem de invalidação de gravação. A interconexão 3920 (por exemplo, através do gerador de espionagem 3926 do controlador de rastreamento 3925) é implementada para emitir espionagem de gravação inválida àqueles dos caches coerentes que podem estar armazenando a linha de cache (bloco 4426) (em outras palavras, aqueles dos caches coerentes para os quais deve ser determinado se houver um golpe). Quando há um impacto em uma linha de cache de um cache (por exemplo, o cache L1, o cache L2 e/ou a fatia do cache L3 do primeiro agente, o cache L1, o cache L2 e a fatia do cache L3 de o segundo agente) para o qual é emitida uma espionagem de gravação inválida (bloco 4440), depois que o cache é fazer com que o estado do protocolo de coerência de cache indicar inválido (mesmo que no estado atual é modificado) (bloco 4448); o cache não precisa configurar a linha de cache para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou emitir um mensagem de resposta à interconexão se a invalidação for concluída em tempo fixo (se a invalidação não for concluída em tempo fixo, então uma das modalidades fará com que as caches espiadas enviem mensagens de resposta que indiquem que a espionagem está completa). Quando não há um golpe para uma linha de cache do cache para o qual uma espionagem de gravação inválida é emitida (4440), então esse cache em uma modalidade não faz nada (bloco 4430).
Petição 870190044159, de 10/05/2019, pág. 170/318
156/232 [00372] Além disso, no contexto das Figuras 41 e 42, o fluxo passa, respectivamente, do bloco 4124 ou do bloco 4212 para o bloco 4132 ou 4232 (os blocos 4128 e 4228 não são implementados quando a espionagem gravação inválida é usada). No bloco 4132 ou 4232, o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware) por si só, a interconexão 3920 (por exemplo, através do gerador de gravação 3929 do controlador de espionagem QO25) ou do primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware ) reativo a uma mensagem da interconexão, causa uma linha de cache em um dos caches (por exemplo, o cache L1 3905, o cache L2 3910 ou o cache L3 3915 (mais especificamente, a fatia do cache L3 3916 se implementado do primeiro agente) a ser configurado para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou provoca uma gravação de zeros do tamanho da linha de cache para a memória a jusante no endereço.
[00373] Como ilustrado acima, o uso de uma espia de gravação inválida, ao contrário do uso de uma operação RFO, é vantajoso na medida em que não requer que uma linha de cache seja lida e retornada ao agente emissor porque o agente emissor será zerar os dados.
[00374] Como indicado anteriormente, a espionagem de gravação inválida pode ser usada em conjunto com as modalidades das Figuras 41 e 42. A título de exemplo, será descrita uma modalidade específica
Petição 870190044159, de 10/05/2019, pág. 171/318
157/232 que implementa espionagem invalidada por gravação em uma das modalidades da Figura 41. Nesta modalidade específica, o agente emissor 3900 tenta primeiro gravar no cache L1 3905 do agente emissor 3900; e se a espionagem for necessária, a interconexão 3920 emitirá espionagem de gravação inválida para aqueles dos caches coerentes que podem estar armazenando a linha de cache como descrito acima. Assim, os caches L1 são implementados para responder aos comandos de gravação como descrito acima; os caches L1, caches L2 e o cache L3 (mais especificamente, as fatias de cache L3, se implementadas) são implementados para responder a espionagem de gravação inválida, conforme descrito acima; a interconexão 3920 é implementada para emitir a espionagem de gravação inválida reativa aos comandos de gravação; e o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware), a interconexão 3920 (por exemplo, através do gerador de gravação 3929 do controlador de espionagem QO25) ou o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware) que responda a uma mensagem do interconexão, são implementados para causar uma linha de cache em um dos caches (por exemplo, o cache L1 3905, o cache L2 3910, ou o cache L3 3915 (mais especificamente, a fatia do cache L3 3916 se implementado) do cache primeiro agente) a ser configurado para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou causar uma gravação de zeros do tamanho da linha de cache para a memória a jusante no
Petição 870190044159, de 10/05/2019, pág. 172/318
158/232 endereço de memória.
[00375] Espionagem que invalida e grava de volta: A Figura 45 é um diagrama de fluxo ilustrando modalidades da invenção que usa espionagem, que invalida e grava de volta (também referida como espionagem de gravar de volta e invalidar), para a implementação do processo de espionagem 4190 ou 4290. No contexto das Figuras 41 e 42, o fluxo passa, respectivamente, do bloco 4124 ou do bloco 4212 para o bloco 4526, que executa o bloco 4126 ou 4226 usando uma espionagem de gravar de volta e invalidar (uma espionagem que invalida e grava de volta). A interconexão 3920 (por exemplo, através do gerador de espionagem 3926 do controlador de espionagem 3925) é implementada para emitir espionagem gravar de volta e invalidar àqueles dos caches coerentes que podem estar armazenando a linha de cache (bloco 4526) (em outras palavras, aquelas dos caches coerentes para as quais deve ser determinado se houver um acerto). Quando há um impacto em uma linha de cache de um cache (por exemplo, o cache L1, o cache L2 e/ou a fatia do cache L3 do primeiro agente, o cache L1, o cache L2 e a fatia do cache L3 de o segundo agente) ao qual tal espia é emitida (bloco 4540), então esse cache é: 1) se o estado de protocolo de coerência de cache da linha de cache for modificado (bloco 45 42) (e em algumas modalidades, Limparexpulsar), gravar de volta a linha de cache para a interconexão 3920 (bloco 4544); e independentemente 2) fazer com que o estado do protocolo de coerência de cache da linha de cache indique inválido (bloco 4548) (o cache não precisa configurar a linha de cache para indicar todos os zeros). Quando não há um golpe para uma linha de cache do cache para o qual a espionagem é emitida (bloco 4540), então o cache em uma modalidade não faz nada (o controle passa para o bloco 4552). Em certas modalidades, um cache implementado para responder a tal espião inclui o controlador de cache 4051, reativo
Petição 870190044159, de 10/05/2019, pág. 173/318
159/232 a tais espionagem, para determinar se existem ou não ocorrências de cache, gravar de volta os segmentos de cache modificadas (por exemplo, aquelas que atingem e têm um cache estado do protocolo de coerência modificado) para a interconexão 3920 e modificar os estados do protocolo de coerência de cache dos segmentos de cache para inválido.
[00376] Depois de emitir a espionagem, a interconexão 3920 (por exemplo, através do respondente de espionagem 3927 do controlador de espionagem 3925) é implementada para rastrear o recebimento de quaisquer mensagens de resposta (bloco 4552) (por exemplo, em uma modalidade gerador de espionagem 3926 indica ao respondente de espionagem 3927 informações para rastrear o recebimento de quaisquer mensagens de resposta respectivas). Se uma mensagem de resposta é recebida com os dados (bloco 4560) (isto é, os dados da linha de cache modificada), então a interconexão 3920 é opcionalmente implementada (por exemplo, através do conversor de gravação 3928 do controlador de rastreamento 3925) converter efetivamente os dados em zeros (bloco 4562). Caso contrário, a interconexão 3920 é opcionalmente implementada (por exemplo, através do gerador de gravação 3929 do controlador de rastreamento 3925) para efetivamente criar uma linha zero (bloco 4564). O controle passa dos blocos 4562 e 4564 para o bloco 4132 ou o bloco 4232 (os blocos 4128 e 4228 não são implementados quando são usadas espionagens que invalidam e gravam de volta) dependendo se uma modalidade da Figura 41 ou 42 está sendo usada implementado. No bloco 4132 ou 4232, o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware) por si só, a interconexão 3920 (por exemplo, o controlador de espionagem QO25) ou o primeiro agente (por exemplo, através da
Petição 870190044159, de 10/05/2019, pág. 174/318
160/232 unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware) que responda a uma mensagem do interconexão 3920, faz com que uma linha de cache em um dos caches (por exemplo, cache L1, cache L2, cache L3) seja configurada para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou causa uma gravação de zeros do tamanho da linha de cache na memória a jusante no endereço. Em uma modalidade, os blocos 4560 e 4562 não são implementados, e o bloco 4564 é sempre executado. Noutra modalidade, o bloco 4562 não é executado, os dados gravados de volta são enviados para o primeiro agente e o primeiro agente zera os dados. Noutra modalidade, os blocos 45 60, 45 62 e 45 64 não são executados e o primeiro agente zera os dados.
[00377] Como ilustrado acima, o uso de um espião que invalida e escreve de volta, em oposição ao uso de uma operação de RFO, é vantajoso na medida em que não requer que uma linha de cache seja lida e devolvida ao agente emissor porque o agente emissor estará zerando os dados.
[00378] Como descrito anteriormente, o acima é iniciado em resposta ao primeiro agente que emite o comando para iniciar a gravação de zeros em tamanho de linha de cache em um endereço alinhado em um limite de linha de cache (por exemplo, bloco 4112 ou 4212). Como descrito anteriormente, esse comando pode assumir a forma de um comando de gravação (por exemplo, bloco 4112 ou 4212). Em outras modalidades, este comando pode ser um comando de leitura (por exemplo, bloco 4212); Nesse caso, uma linha de cache em um dos caches (por exemplo, o cache L1, o cache L2, o cache L3)
Petição 870190044159, de 10/05/2019, pág. 175/318
161/232 é causada para ser configurada para indicar todos os zeros por: 1) a interconexão 3920 (por exemplo, o controlador de espionagem 3925) sendo implementado para responder ao comando de leitura do primeiro agente com uma resposta ao primeiro agente indicando uma linha zero (qual segmento terá seu estado de protocolo de coerência de cache configurado como modificado ou exclusivo); e 2) o primeiro agente a ser implementado para colocar o resultado de seu comando de leitura em um cache (causar um cache (por exemplo, o cache L1 3905) para configurar uma linha de cache para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar o cache segmento para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros), mas não em um arquivo de registro de arquitetura do primeiro agente.
[00379] Como indicado anteriormente, os espionagem que indicam para invalidar e gravar de volta podem ser usados em conjunto com as modalidades das Figuras 41 e 42. A título de exemplo, será descrita uma modalidade específica que implementa tais espias em uma das modalidades da Figura 41. Nesta modalidade específica, o agente emissor 3900 tenta primeiro gravar no cache L1 3905 do agente emissor 3900; e se espionagens forem necessárias, a interconexão 3920 emitirá a espionagem para os caches coerentes que podem estar armazenando a linha de cache, conforme descrito acima. Assim, os caches L1 são implementados para responder aos comandos de gravação, conforme descrito acima; os caches L1, caches L2 e o cache L3 (mais especificamente, as fatias de cache L3, se implementadas) são implementados para responder aos espionagem, conforme descrito acima; a interconexão 3920 é implementada para emitir os espionagem responsivos para gravar comandos, opcional mente implementados para converter efetivamente a zero
Petição 870190044159, de 10/05/2019, pág. 176/318
162/232 quaisquer dados recebidos que respondam aos espionagem (por exemplo, através do conversor de gravação 3928 do controlador de espionagem 3925), e opcionalmente implementados para efetivamente criar uma linha de zero se não forem recebidos dados sensíveis às espionagem (por exemplo, gerador de gravação 3929 do controlador de espionagem 3925; e o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidade de acesso de memória 164, unidade de carga-armazenamento 340) ou outra estrutura de hardware) por si só, a interconexão 3920 (por exemplo, através do controlador de espionagem QO25), ou o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidade de acesso à memória)) 164, unidade de carga-armazenamento 340) ou outra estrutura de hardware) reativa a uma mensagem da interconexão, é implementada para causar uma linha de cache em um dos caches (por exemplo, o cache L1 3905, o cache L2 3910, ou o cache L3 3915 (mais especificamente, a fatia do cache L3 3916 se implementado) do e o primeiro agente) a ser configurado para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou causar uma gravação de zeros do tamanho da linha de cache para a memória a jusante no endereço de memória.
[00380] Espionagem que grava qualquer linha de cache que golpeia, mas não envia os dados de volta para o primeiro agente e não faz com que os dados sejam lidos da memória a jusante, ou a espionagem da técnica anterior que grava linhas normalmente (um RFO): A Figura 46 é um diagrama de fluxo ilustrando modalidades da invenção que utilizam espionagem, que gravam qualquer linha de cache que atinge mas não envia os dados de volta para o primeiro
Petição 870190044159, de 10/05/2019, pág. 177/318
163/232 agente e não resulta na leitura dos dados da memória a jusante (ou espionagem da técnica anterior que grava linhas normalmente - por exemplo, uma operação RFO), para implementar o processo de espionagem 4190 ou 4290. No contexto das Figuras 41 e 42, o fluxo passa respectivamente do bloco 4124 ou bloco 4212 para o bloco 4526, que executa o bloco 4126 ou 4226 usando tal espionagem. A interconexão 3920 (por exemplo, através do gerador de espionagem 3926 do controlador de rastreamento 3925) é implementada para emitir tal espionagem àqueles dos caches coerentes que podem estar armazenando a linha de cache (bloco 4626) (em outras palavras, aqueles dos caches coerentes para os quais deve ser determinado se houver um acerto). Quando há um impacto em uma linha de cache de um cache (por exemplo, o cache L1, o cache L2 e/ou a fatia do cache L3 do primeiro agente, o cache L1, o cache L2 e a fatia do cache L3 de o segundo agente) ao qual tal espião é emitido (bloco 4640), então esse cache é para responder ao espião (4644). Em algumas modalidades, os caches são implementados para responder a tais espionagem, uma vez que o cache da técnica anterior respondería normal mente de acordo com o protocolo de coerência de cache implementado. Enquanto em algumas modalidades é utilizado um novo tipo de espião, noutro é utilizada uma espiã da técnica anterior (por exemplo, uma operação de RFO) - neste caso, incorporar a instrução de anulação da linha de cache em um design de processador existente não requer modificação ou uma pequena modificação para os caches dependendo (ver a seção acima intitulada Disparando um cache para configurar uma linha que indica todos os zeros). Quando não há um golpe para uma linha de cache do cache para o qual a espionagem é emitida 4640), então o cache em uma modalidade não faz nada (o controle passa para o bloco 4652).
[00381] Depois de emitir a espionagem, a interconexão 3920 (por
Petição 870190044159, de 10/05/2019, pág. 178/318
164/232 exemplo, através do respondente de espionagem 3927 do controlador de espionagem 3925) é implementada para rastrear a recepção de quaisquer mensagens de resposta respectivas (por exemplo, em uma modalidade o gerador de espionagem 3926 indica ao respondedor de espionagem 3927 informações para rastrear o recebimento de quaisquer mensagens de resposta respectivas). Se uma mensagem de resposta é recebida com os dados (bloco 4660) (por exemplo, os dados de uma linha de cache modificada), então a interconexão 3920 (por exemplo, através da respondente espionagem 3927 do controlador de rastreamento 3925) é implementada não enviar os dados para o agente emissor ou qualquer um dos caches do agente emissor (bloco 4662). Se uma mensagem de resposta com os dados não for recebida (4660), a interconexão 3920 (por exemplo, através do respondente de espionagem 3927 do controlador de espionagem 3925) é implementada para não ler os dados da memória a jusante, uma vez que não é necessário (bloco 4664).
[00382] O controle passa dos blocos 4662 e 4664 para o bloco 4132 ou 4232 (os blocos 4128 e 4228 não são implementados quando tal espionagem é usada) dependendo se uma modalidade da Figura 41 ou 42 está sendo implementada. No bloco 4132 ou 4232, o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) por conta própria (bloco 4232 apenas), a interconexão 3920 (por exemplo, o controlador de espionagem QO25) ou o primeiro agente (por exemplo, através da unidade de execução (por exemplo, unidades de acesso à memória 164, unidade de armazenamento de carga 340) ou outra estrutura de hardware) que responde a uma mensagem de a interconexão 3920, faz com que uma linha de cache em um dos caches (por exemplo, cache L1, cache L2, cache L3) seja configurada para indicar todos os zeros (diferentes modalidades
Petição 870190044159, de 10/05/2019, pág. 179/318
165/232 podem implementar caches para configurar a linha de cache para indicar todos zeros como anteriormente descrito na secção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou faz com que uma gravação de zeros do tamanho da linha de cache para a memória para jusante para o endereço. Em uma modalidade em que bloqueiam 4662 não é implementado (os dados são enviados de volta ao primeiro agente) e/ou o bloco 4664 não é implementado (a memória a jusante é acessada e os dados retornaram ao primeiro agente), o primeiro agente zera os dados.
[00383] Como ilustrado acima, mesmo se uma operação de RFO é utilizada, as modalidades ilustradas são vantajosas na medida em que trabalham com um design de cache existente, que suporta uma operação de RFO, com pouca ou nenhuma modificação.
[00384] Como indicado anteriormente, estes tipos de espionagem podem ser utilizados em conjunto com as modalidades das Figuras 41 e 42. A título de exemplo, será descrita uma modalidade específica que implementa tal espionagem em uma das modalidades da Figura 42. Nesta modalidade específica, o agente emissor 3900 deve emitir o comando para iniciar a gravação do tamanho da linha de cache de zeros em um endereço de memória diretamente para a interconexão 3920 (ignorando os caches do agente emissor/primeiro agente), a interconexão 3920 (por exemplo, através do gerador de espionagem 3926 do controlador de rastreamento 3925) é implementado para emitir os espionagem àqueles dos caches coerentes que podem estar armazenando a linha de cache como descrito acima; se uma mensagem de resposta for recebida com os dados (isto é, os dados da linha de cache modificada), então a interconexão 3920 é opcionalmente implementada (por exemplo, através do respondents espionagem 3927 do controlador de rastreamento 3925) para não enviar os dados para o agente emissor ou qualquer caches do agente
Petição 870190044159, de 10/05/2019, pág. 180/318
166/232 emissor; se uma mensagem de resposta com os dados não for recebida, a interconexão 3920 (por exemplo, através do respondents de espionagem 3927 do controlador de espionagem 3925) é opcionalmente implementada para não ler os dados da memória a jusante, uma vez que não é necessária; e o agente emissor (o primeiro agente) sozinho, ou o primeiro agente reativo a uma mensagem da interconexão, causa uma linha de cache em um dos caches (por exemplo, o cache L1, o cache L2, o cache L3) para ser configurado para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou causar uma gravação de zeros do cache tamanho da linha para a memória a jusante no endereço. Assim, em certas modalidades, as caches L1, caches L2 e caches L3 (mais especificamente, as fatias de cache L3, se implementadas) são implementadas para responder aos espionagem como descrito acima; a interconexão 3920 é implementada para emitir os espionagem responsivos aos comandos (por exemplo, através do gerador de espionagem 3926 do controlador de espionagem 3925) e responder aos dados responsivos dos caches (por exemplo, através do respondents de espionagem 3927 do controlador de espionagem 3925) como descrito acima; o agente emissor é implementado para enviar o comando para iniciar a gravação em tamanho de linha de cache de zeros em um endereço de memória diretamente para a interconexão 3920; e o agente emissor (o primeiro agente) sozinho, ou o primeiro agente reativo a uma mensagem da interconexão, causa uma linha de cache em um dos caches (por exemplo, o cache L1, o cache L2, o cache L3) para ser configurado para indicar todos os zeros (diferentes modalidades podem implementar caches para configurar a
Petição 870190044159, de 10/05/2019, pág. 181/318
167/232 linha de cache para indicar todos os zeros como descrito anteriormente na seção intitulada Técnicas para configurar uma linha de cache para indicar todos os zeros) ou causar uma gravação de zeros do cache do tamanho da linha para a memória a jusante no endereço. Em uma modalidade específica, o agente emissor (o primeiro agente) por si próprio faz com que uma linha de cache em um dos caches (por exemplo, o cache L1, o cache L2, o cache L3) seja configurado para indicar todos os zeros.
Vários Soquetes [00385] Como descrito anteriormente, a interconexão 3920 pode, por exemplo, representar: 1) apenas uma interconexão dentro de um CCX; 2) uma interconexão dentro e entre os CCXs; 3) interconexões separadas dentro de diferentes CCXs, bem como interconexão entre CCXs. Como discutido aqui, um sistema pode ser implementado com um ou mais dos processadores acima (cada um incluindo um ou mais CCXs) (ver a seção abaixo intitulada Arquiteturas de Computadores Exemplar). Tal sistema pode incluir um ou mais soquetes (conhecidos como um soquete de CPU ou espaço de CPU), cada um compreendendo um ou mais componentes mecânicos fornecendo conexões mecânicas e elétricas. Em sistemas com vários soquetes (por exemplo, um servidor), os soquetes são conectados por um conjunto de uma ou mais interconexões (também chamadas de interconexões de soquete para soquete). Diferentes modalidades podem implementar o conjunto de interconexões soquete-a-soquete de maneira diferente, incluindo um ou mais de um anel, múltiplos anéis, links ponto a ponto (por exemplo, links ponto-a-ponto, como Quick Path Interconnect (QPI), UltraPath Interconnect (UPI), HyperTransport (HP)), Barramento compartilhado, etc. Este conjunto de interconexões de soquete para soquete pode ser visto como parte da interconexão 3920 ou como separado dependendo da modalidade.
Petição 870190044159, de 10/05/2019, pág. 182/318
168/232
Em algumas modalidades, este conjunto de interconexões é implementado para suportar as mesmas comunicações (comandos de gravação, espionagem, mensagens de resposta, etc.) discutidas acima com relação à interconexão 3920; em que cada uma dessas comunicações pode ter o mesmo formato ou um formato diferente quando enviada por meio de uma interconexão de soquete para soquete. Em outras modalidades, uma ou mais destas comunicações (por exemplo, um ou mais dos tipos de espionagem e/ou mensagens de resposta) são convertidas quando enviados de soquete para soquete. Por exemplo, algumas modalidades podem utilizar uma espionagem de gravação-atualização dentro de um processador em uma única tomada, mas converter uma tal espionagem para uma gravação-invalidar ou espionagem gravar de volta e invalidar quando é enviado para um outro soquete. Uma vantagem de tais modalidades é que a decisão de gerar uma nova linha de cache zerada é apenas dentro de um soquete (como tal, não há necessidade de uma indicação zerada ou não zerada das outras sociedades).
Sumário de Algumas Modalidades [00386] Uma modalidade da invenção pode incluir um processador compreendendo um primeiro agente coerente, um segundo agente coerente, e uma interconexão. O primeiro agente é acoplado à interconexão por meio de um cache do primeiro agente. O segundo agente é acoplado à interconexão por meio de um cache do segundo agente. O primeiro agente é decodificar e executar uma instrução cuja execução é causar uma gravação em tamanho de linha de cache de zeros em um endereço de memória. O primeiro agente é emitir, para o cache do primeiro agente, um comando de gravação para iniciar a gravação em tamanho de linha de cache de zeros no endereço de memória. O cache do primeiro agente, quando há uma ocorrência de uma linha de cache reativa à recepção do comando de gravação e do
Petição 870190044159, de 10/05/2019, pág. 183/318
169/232 estado do protocolo de coerência de cache dessa linha de cache, é um estado modificado ou exclusivo para configurar essa linha de cache para indicar todos os zeros. O cache do primeiro agente, quando há um cache que não recebe o comando de gravação, para emitir o comando de gravação para a interconexão. A interconexão, reativa ao recebimento do comando de gravação, para emitir uma espionagem para o cache do segundo agente. A interconexão, ou o primeiro agente reativo a uma mensagem da interconexão, para fazer com que uma linha de cache no cache do primeiro agente seja configurada para indicar todos os zeros quando o comando de gravação e a espionagem não causaram a gravação da linha de cache de zeros para ser executado.
[00387] Além disso, o seguinte pode ser aplicado: Em algumas modalidades, o cache do primeiro agente, quando há uma ocorrência de uma linha de cache reativa ao recebimento do comando de gravação e do estado de protocolo de coerência de cache dessa linha de cache não é o estado modificado ou o estado exclusivo, para tornar estado de protocolo de coerência de cache dessa linha de cache ser um estado inválido e emitir o comando de gravação para a interconexão.
[00388] Outra modalidade da invenção pode incluir um processador que compreende um decodificador para decodificar uma instrução para zerar uma linha de cache. O processador também compreendendo uma unidade de execução, acoplada ao decodificador e reativa ao decodificador da instrução, para emitir um comando de gravação para iniciar uma gravação de zeros no tamanho da linha de cache em um endereço de memória. O processador também compreende um cache coerente, acoplado à unidade de execução, para receber o comando de gravação, para determinar se existe um golpe no cache coerente que responde ao comando de gravação, para
Petição 870190044159, de 10/05/2019, pág. 184/318
170/232 determinar se um estado de protocolo de coerência de cache da linha de cache de ocorrência é um estado modificado ou um estado exclusivo, para configurar uma linha de cache para indicar todos os zeros quando o estado do protocolo de coerência de cache for o estado modificado ou exclusivo e emitir o comando de gravação para uma interconexão quando houver um recebimento reativo ausente o comando de gravação. A interconexão, reativa ao recebimento do comando de gravação, para emitir uma espionagem para cada um de uma pluralidade de outros caches coerentes para os quais ele deve ser determinado se houver um golpe. A interconexão, ou a unidade de execução reativa a uma mensagem da interconexão, para fazer com que uma linha de cache em um dos caches coerentes seja configurada para indicar todos os zeros quando o comando de gravação e a espionagem não causaram a gravação de zeros na linha de cache ser executado.
[00389] Além disso, o seguinte pode ser aplicado: Em algumas modalidades, o cache coerente também faz com que o estado de protocolo de coerência de cache dessa linha de cache seja um estado inválido e emita o comando de gravação para a interconexão quando o estado do cache de acertos do cache de ocorrências segmento não é o estado modificado ou o estado exclusivo. Em algumas modalidades, o decodificador e a unidade de execução são parte de um primeiro núcleo, e a pluralidade de caches coerentes inclui um cache coerente de um segundo núcleo.
[00390] Outra modalidade da invenção pode incluir um processador que compreende um primeiro núcleo para emitir um comando de gravação sensível à execução de uma instrução de zeramento de linha de cache. O primeiro núcleo também inclui um cache de nível 1 (L1) acoplado para receber o comando de gravação, para determinar se há um acerto ou um erro no cache reativo ao comando de gravação e
Petição 870190044159, de 10/05/2019, pág. 185/318
171/232 para determinar a resposta ao acerto se um protocolo de coerência de cache O estado de uma linha de cache atingida é aquele que concede a autoridade de cache para modificar a linha de cache sem uma transmissão para outros caches. O cache L1 é configurar a linha de cache para indicar todos os zeros responsivos ao golpe quando um estado de protocolo de coerência de cache de uma linha de cache atingida concede a autoridade de cache para modificar a linha de cache sem uma transmissão para outros caches. O cache L1 para emitir o comando de gravação para a interconexão que responde à falha. A interconexão, acoplada ao primeiro núcleo e reativa ao comando de gravação, para emitir uma espionagem para aqueles de uma pluralidade de outros caches para os quais ele deve ser determinado se houver um golpe. O primeiro núcleo, a interconexão ou o primeiro núcleo reativo a uma mensagem da interconexão, para fazer com que uma linha de cache no cache ou uma da pluralidade de outros caches seja configurada para indicar todos os zeros quando o comando de gravação e a espionagem fizeram não causa a gravação da linha de cache de zeros a serem executados.
[00391] Além disso, o seguinte pode ser aplicado: Em algumas modalidades, o cache L1 também pode tornar o estado do protocolo de coerência de cache inválido e emitir o comando de gravação para uma interconexão reativa à ocorrência quando o estado do protocolo de cache coerência do cache em linha que golpeia não é aquele que concede a autoridade de cache para modificar a linha de cache sem uma transmissão para outros caches. Em algumas modalidades, cada um da pluralidade de outros caches, responsivos à espia, também podem ser implementados para determinar se há um acerto ou um erro nesse outro cache, e para determinar a resposta à ocorrência se um estado de protocolo de coerência de cache uma linha de cache que acerta nesse outro cache é aquela que concede a autoridade de
Petição 870190044159, de 10/05/2019, pág. 186/318
172/232 cache para modificar a linha de cache sem uma transmissão para outros caches. Cada um da pluralidade de outros caches para: configurar uma linha de cache nesse cache para indicar todos os zeros e emitir uma mensagem de resposta indicando zerada reativa à ocorrência quando um estado de protocolo de coerência de cache da linha de cache que atingiu esse cache é aquele que concede a autoridade de cache para modificar a linha de cache que atingiu esse cache sem uma transmissão para outros caches; e emita uma mensagem de resposta indicando não zerada, reativa à falha ou reativa à ocorrência quando o estado do protocolo de coerência de cache da linha de cache que atingiu esse cache não for aquele que concede a autoridade de cache a modificar a linha de cache que atingiu esse cache. A interconexão para determinar o recebimento de faixa das mensagens de resposta para determinar se a espionagem fez com que um dos vários caches fosse configurado para indicar todos os zeros.
[00392] Outra modalidade da invenção pode incluir um processador que compreende um primeiro agente coerente, um segundo agente coerente e uma interconexão. O primeiro agente é acoplado à interconexão por meio de um cache do primeiro agente. O segundo agente é acoplado à interconexão por meio de um cache do segundo agente. O primeiro agente é decodificar e executar uma instrução cuja execução é causar uma gravação em tamanho de linha de cache de zeros em um endereço de memória. O primeiro agente é emitir, para a interconexão, um comando. A interconexão, reativa ao recebimento do comando, é emitir uma espionagem para o cache do primeiro agente e o cache do segundo agente. O primeiro agente, a interconexão ou o primeiro agente reativo a uma mensagem da interconexão, para fazer com que uma linha de cache no cache do primeiro agente seja configurada para indicar todos os zeros quando a espionagem não
Petição 870190044159, de 10/05/2019, pág. 187/318
173/232 causou a gravação da linha de cache de zeros para ser executada.
[00393] Outra modalidade da invenção pode incluir um processador que compreende um decodificador para decodificar uma instrução para zerar uma linha de cache. O processador também compreende uma unidade de execução, acoplada ao decodificador, para emitir um comando reativo ao decodificador da instrução. A interconexão, reativa ao recebimento do comando, para emitir uma espionagem para cada um de uma pluralidade de caches coerentes para os quais ela deve ser determinada se houver uma ocorrência. A unidade de execução sozinha, a interconexão ou a unidade de execução reativa a uma mensagem da interconexão, para fazer com que uma linha de cache em uma das várias caches coerentes acopladas à unidade de execução seja configurada para indicar todos os zeros quando a espionagem não causou a gravação da linha de cache de zeros a serem executados.
[00394] Outra modalidade da invenção pode incluir um processador que compreende um primeiro núcleo para emitir um comando reativo à execução de uma instrução de zeramento de linha de cache. O processador também compreende uma interconexão, acoplada a um cache de nível 3 (L3) que é compartilhado, um cache de nível 2 (L2) do primeiro núcleo e um cache de nível 1 (L1) do primeiro núcleo, para emitir uma resposta ao comandar uma espionagem para aqueles de uma pluralidade de caches coerentes para o qual deve ser determinado se existe um golpe. Em algumas modalidades, a pluralidade de caches coerentes inclui o cache L1 do primeiro núcleo, o cache L2 do primeiro núcleo, o cache L3, um cache L1 de um segundo núcleo e um L2 do segundo núcleo. O primeiro núcleo por si só, a interconexão, ou o primeiro núcleo reativo a uma mensagem da interconexão, faz com que uma linha de cache em uma das várias caches coerentes acopladas ao primeiro núcleo seja configurada para
Petição 870190044159, de 10/05/2019, pág. 188/318
174/232 indicar todos os zeros.
[00395] Coalescimento de PTE [00396] Um núcleo de processador pode suportar um recurso de coalescência de tabela de páginas de acordo com algumas modalidades exemplares, permitindo que várias páginas de memória menores sejam reunidas em uma página de memória única, eficaz e maior. Em algumas modalidades, por exemplo, oito páginas de memória de 4KB podem ser reunidas em uma única página de memória de 32 KB. Em outras modalidades, 16 páginas de memória de 4KB podem ser reunidas em uma única página de memória de 64 KB.
[00397] As arquiteturas de computador atuais permitem páginas de memória virtual de vários tamanhos. Por exemplo, uma arquitetura x86 pode permitir páginas de 4KB, 2MB e 1GB. Um processador que implemente essa arquitetura pode fornecer um buffer de tradução lateral de instrução (TLB) para cada um desses tamanhos de página, fornecendo um mapeamento de endereços virtuais para endereços físicos. Ao tentar traduzir um endereço virtual para um físico, o processador pode pesquisar cada um dos TLB aplicáveis para determinar se algum deles contém uma entrada correspondente ao endereço virtual. Se uma entrada for encontrada (ou seja, um golpe de TLB), a entrada é recuperada do TLB no qual ela é encontrada e a tradução de um endereço virtual para um físico prossegue.
[00398] Se nenhuma entrada correspondente ao endereço virtual for encontrada em qualquer um dos TLBs presentes no processador (ou seja, uma falta de TLB), o processador pode tentar localizar uma entrada na tabela de páginas que corresponde ao endereço virtual. Se uma entrada for encontrada (ou seja, um golpe da tabela de páginas), a entrada será recuperada da tabela de páginas e inserida no TLB apropriado. A tradução de um endereço virtual para um físico
Petição 870190044159, de 10/05/2019, pág. 189/318
175/232 pode, então, ser repetida, gerando uma ocorrência de TLB.
[00399] Se nenhuma entrada correspondente ao endereço virtual for encontrada na tabela de páginas (isto é, uma tabela de tabela ausente), isso pode indicar que não há atualmente nenhum endereço físico na memória que corresponda ao endereço virtual fornecido. Nesse caso, o processador pode fazer com que a página correspondente ao endereço virtual seja carregada de outro armazenamento (por exemplo, um disco) para a memória em um endereço físico específico e pode inserir um mapeamento do endereço virtual fornecido para esse endereço físico a tabela de páginas. Uma tentativa subsequente de traduzir o endereço virtual fornecido resultará em uma ocorrência de tabela de páginas, o que fará com que uma entrada correspondente seja incluída no TLB apropriado.
[00400] Uma dificuldade com algumas arquiteturas de processador atuais é a falta de granularidade nos tamanhos de página permitidos. Por exemplo, conforme explicado acima, algumas arquiteturas de processador permitem páginas de 4KB, 2MB e 1GB, oferecendo uma distribuição relativamente grossa entre os tamanhos das páginas.
[00401] De acordo com algumas modalidades, esta dificuldade pode ser abordada pela coalescência de várias páginas menores, produzindo um tamanho de página intermediário que é, por exemplo, maior que 4KB, mas menor que 2MB. Em algumas modalidades, isto pode ser alcançado por coalescência oportunista, por exemplo, oito páginas 4KB para criar uma única página efetiva de 32KB sob certas condições. Em algumas modalidades, as oito páginas de 4KB devem ser alinhados a um limite de endereço de 32 KB.
[00402] Em algumas modalidades, as oito páginas 4KB devem ser contíguas em um ou ambos de (a) virtual; e (b) espaços de endereço físico. Por exemplo, algumas modalidades podem requerer que os bits 12-14 do endereço virtual VA e o endereço físico PA sejam iguais
Petição 870190044159, de 10/05/2019, pág. 190/318
176/232 entre si. Isto é, em algumas modalidades, as páginas menores são coalescidas em uma maior apenas se, para cada uma das páginas menores, VA [14:12] == PA [14:12].
[00403] Em algumas modalidades, páginas menores são unidas em uma maior apenas se cada uma das páginas menores tem os mesmos bits de permissão. Em algumas modalidades, quando as páginas menores são coalescidas em uma maior, o sistema operacional pode combinar os bits acessados/sujos correspondentes a cada uma das páginas menores em um único valor, por exemplo, executando uma operação OR lógica em todas as menores páginas acessadas/bits sujos. Em algumas modalidades, quando as páginas são menores coalesceram em um maior, o sistema operativo pode definir apenas a página de 4KB apropriado de bits sujos/acessados, rastreando assim que porções da página maior tenham sido acessadas e/ou sujas.
[00404] A Figura 47 é um diagrama ilustrando um recurso de coalescência de página que pode ser incluído em um processador de acordo com algumas modalidades. O bloco 4700 representa uma porção de uma tabela de páginas contendo oito entradas 4701-4708, cada uma correspondendo a páginas com tamanho 4KB. Como mostra a Figura 47, as oito entradas 4701-08 têm endereços contíguos, com os bits 12-14 dos oito endereços tomando os valores consecutivos 000, 001, 010, 011, 100, 101, 110 e 111. De acordo com algumas modalidades, como mostrado na Figura 47, essas oito páginas de 4KB podem ser combinadas em página efetiva de 32KB 4709.
[00405] Em algumas modalidades, a página efetiva de 32KB 4709 pode ser denotada incluindo um bit adicional em cada entrada de tabela de página (PTE), indicando que as oito páginas 4KB devem ser tratadas como uma página efetiva de 32KB. Em algumas modalidades, 32KB efetivos página 4709 podem ser denotados por um bit adicional na entrada de diretório de páginas correspondente às entradas da
Petição 870190044159, de 10/05/2019, pág. 191/318
177/232 tabela de páginas 4701-08, indicando que as oito páginas 4KB devem ser tratadas como uma página efetiva de 32KB. Em algumas modalidades, após cada acesso a uma das oito páginas 4KB, os endereços alinhados consecutivos das oito páginas 4KB podem ser detectados pelo hardware e tratados como uma página efetiva de 32KB.
[00406] Detectar se várias páginas menores atendem aos critérios de coalescência em uma página maior efetiva pode ser obtida usando uma variedade de métodos. Por exemplo, a Figura 48 é um diagrama de fluxo ilustrando um método para unir entradas da tabela de páginas em uma única página efetiva. Em uma falha de TLB em todos os TLBs (por exemplo, todos os TLBs de 4KB, 32KB, 2MB e 1GB), conforme mostrado na caixa 4801, o processador pode percorrer as tabelas de acordo com a estrutura hierárquica do diretório de páginas (por exemplo, usando o x86 definição da tabela de páginas), como mostrado na caixa 4802. Ao determinar a localização da entrada da tabela de páginas apropriada, o processador pode recuperar uma linha de cache contendo várias entradas da tabela de páginas (caixa 4803). Por exemplo, em algumas modalidades, o processador pode recuperar oito entradas de tabela de página em uma linha de cache.
[00407] Após a recuperação das entradas da tabela de várias páginas na linha de cache, o processador pode testar se as entradas da tabela de páginas correspondem a páginas que atendem aos requisitos de coalescência, como mostrado em 4804. Por exemplo, o processador pode testar se os endereços das páginas são consecutivos na memória virtual e/ou física. Em algumas modalidades, o processador pode ainda testar se os valores dos bits de permissão das páginas são os mesmos. Em algumas modalidades, o processador pode determinar se os endereços das páginas estão alinhados com um limite de 32KB.
Petição 870190044159, de 10/05/2019, pág. 192/318
178/232 [00408] Se as entradas da tabela de várias páginas na linha de cache atenderem aos critérios de união em uma única página combinada (por exemplo, uma página efetiva de 32KB), uma entrada correspondente à página combinada poderá ser colocada no TLB apropriado (por exemplo, TLB de 32 KB), e as entradas na linha de cache que foram combinadas em uma única entrada são invalidadas, como mostrado na caixa 4805. Se as entradas da tabela de várias páginas não atenderem aos critérios de união em uma única página combinada, a conversão de endereços de virtual para físico pode continuar, por costume, alocando uma entrada no TLB correspondente ao TLB menor (por exemplo, 4KB), conforme mostrado na caixa 4806. [00409] Em algumas modalidades, o processador pode determinar se deseja unir várias páginas menores com base no conteúdo do TLB relevante. Por exemplo, após uma falta de TLB de 4KB, o processador pode detectar se a página de 4KB correspondente pode ser combinada com entradas adicionais que estão presentes no TLB (por exemplo, sete outras entradas de TLB que correspondem às páginas de 4KB). Se a entrada correspondente ao endereço fornecido puder ser combinada com outras para criar uma página maior efetiva (por exemplo, uma página efetiva de 32KB), as entradas existentes da TLB a serem combinadas serão invalidadas e uma entrada será criada correspondendo à página efetiva em vigor. O TLB apropriado (por exemplo, no TLB correspondente a 32KB páginas). Em algumas modalidades, um TLB separado correspondente ao tamanho de página efetivo combinado não é usado e, em vez disso, as informações relacionadas à conversão de endereço virtual para físico das páginas combinadas são armazenadas no TLB correspondente ao tamanho de página menor (por exemplo, a página TLB 4KB). Em algumas modalidades, esta informação pode ser codificada no TLB correspondente ao tamanho de página menor, utilizando bits
Petição 870190044159, de 10/05/2019, pág. 193/318
179/232 adicionais reservados para esse fim.
[00410] Em algumas modalidades, os recursos acima podem ser usados em conjunto com um sistema operacional que aloca páginas usando um algoritmo otimizado para coalescência de páginas, conforme descrito acima. Os sistemas operacionais existentes possuem algoritmos projetados para alocar, por exemplo, páginas de 4KB, 2MB e/ou 1GB. Sistemas operacionais que podem ser usados em conjunto com algumas modalidades podem usar algoritmos adicionais que são projetados para alocar páginas combinadas (por exemplo, páginas efetivas de 32KB).
[00411] Os recursos de coalescência de página descritos acima não estão limitados à combinação de um determinado número de páginas de um tamanho específico, mas podem ser usados para unir vários números de páginas de vários tamanhos. Por exemplo, algumas modalidades podem coalescer 16 páginas 4KB, formando páginas combinadas efetivas de 64 KB. Algumas modalidades podem adicionalmente suportar páginas combinadas eficazes de vários tamanhos (por exemplo, páginas combinadas de 32KB e 64KB). Em algumas modalidades, páginas de vários tamanhos (por exemplo, páginas de 4KB e 32 KB) podem ser combinadas em uma única página efetiva (por exemplo, uma página efetiva de 64 KB).
Arquiteturas de Computador Exemplares [00412] As Figuras 49 - 52 são diagramas em bloco de arquiteturas de computador exemplares. Outros projetos e configurações de sistemas conhecidos nas artes para laptops, desktops, PCs de mão, assistentes digitais pessoais, estações de trabalho de engenharia, servidores, dispositivos de rede, centros de rede, comutadores, processadores embarcados, processadores de sinais digitais (DSPs), processadores de propósito geral processadores ou elementos de processamento para uso em um ambiente de servidor,
Petição 870190044159, de 10/05/2019, pág. 194/318
180/232 coprocessadores (por exemplo, coprocessadores de segurança), processadores MIC de alto rendimento, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos, aceleradores de criptografia, aceleradores de função fixa, aceleradores de aprendizado de máquina, aceleradores de rede aceleradores de visão computacional), matrizes de portas programáveis em campo ou qualquer outro processador ou dispositivo de processamento, dispositivos gráficos, dispositivos de videogame, decodificadores, microcontroladores, telefones celulares, reprodutores de mídia portáteis, dispositivos portáteis e vários outros dispositivos eletrônicos também são adequados. Em geral, uma enorme variedade de sistemas ou dispositivos eletrônicos capazes de incorporar um processador e/ou outra lógica de execução, como aqui divulgada, são geralmente adequados.
[00413] Com referência agora à Figura 49, é mostrado um diagrama em bloco de um sistema 4900 de acordo com uma modalidade da presente invenção. O sistema 4900 pode incluir um ou mais processadores 4910, 4915, que são acoplados a um centro de controlador 4920. Em uma modalidade, o centro de controlador 4920 inclui um centro de controlador de memória de gráficos (GMCH) 4990 e um Centro de Entrada/Saída (IOH) 4950 (que pode estar em chips separados); o GMCH 4990 inclui controladores de memória e gráficos aos quais estão acoplados a memória 4940 e um coprocessador 4945; o IOH 4950 pares de entrada/saída (E/S) 4960 para o GMCH 4990. Em alternativa, um ou ambos os controladores de memória e gráficas são integrados dentro do processador (tal como aqui descrito), a memória 4940 e o coprocessador 4945 é acoplado diretamente ao processador 4910 e o centro controlador 4920 em um único chip com o IOH 4950.
[00414] A natureza opcional de processadores adicionais 4915 é denotada na Figura 49 com segmentos quebradas. Cada processador
Petição 870190044159, de 10/05/2019, pág. 195/318
181/232
4910, 4915 pode incluir um ou mais dos núcleos de processamento aqui descritos e pode ser alguma versão do processador 3600.
[00415] A memória 4940 pode ser, por exemplo, memória de acesso aleatório dinâmico (DRAM), memória de mudança de estágio (PCM) ou uma combinação dos dois. Para, pelo menos, uma modalidade, o cubo do controlador 4920 comunica com o processador 4910, 4915, através de um barramento multi-gotejamento, tais como barramento de lado frontal (FSB - front-side bus), ponto-a-ponto de interface, tais como Interconexão QuickPath (QPI) ou conexão semelhante 4995.
[00416] Em uma modalidade, o coprocessador 4945 é um processador de propósito especial (incluindo, por exemplo, processadores de propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores como coprocessadores de segurança, processadores MIC de alto rendimento, GPGPU de aceleradores, tais como, por exemplo, aceleradores de gráficos ou de processamento de sinal digital (DSP) unidades, aceleradores criptográficas, aceleradores de função fixa, aceleradores de aprendizagem automática, aceleradores de rede, ou aceleradores de visão por computador), campo matrizes de portas programáveis, ou qualquer outra processador ou dispositivo de processamento). Em uma modalidade, o centro de controle 4920 pode incluir um acelerador gráfico integrado.
[00417] Pode haver uma variedade de diferenças entre os recursos físicos 49 10, 49 15 em termos de um espectro de métricas de mérito, incluindo características arquitetônicas, de microarquitetura, térmicas, de consumo de energia e similares.
[00418] Em uma modalidade, o processador 4910 executa instruções que controlam as operações de processamento de dados de um tipo geral. Embutido dentro das instruções pode ser instruções
Petição 870190044159, de 10/05/2019, pág. 196/318
182/232 do coprocessador. O processador 4910 reconhece essas instruções do coprocessador como sendo de um tipo que deve ser executado pelo coprocessador conectado 4945. Assim, o processador 4910 emite essas instruções do coprocessador (ou sinais de controle representando instruções do coprocessador) em um barramento de coprocessador ou outra interconexão, para o coprocessador 4945. Coprocessador 4945 aceita e executa as instruções recebidas do coprocessador.
[00419] Com referência agora à Figura 50, é mostrado um diagrama em bloco de um primeiro sistema exemplar mais específico 5000 de acordo com uma modalidade da presente invenção. Como mostrado na Figura 50, o sistema multiprocessador 5000 é um sistema de interconexão ponto-a-ponto e inclui um primeiro processador 5070 e um segundo processador 5080 acoplados por meio de uma interconexão ponto a ponto 5050. Cada um dos processadores 5070 e 5080 pode ser uma versão do processador 3600. Em uma modalidade da invenção, os processadores 5070 e 5080 são respectivamente processadores 4910 e 4915, enquanto o coprocessador 5038 é o coprocessador 4945. Em uma outra modalidade, processadores 5070 e 5080 são respectivamente processador 4910 coprocessador 4945.
[00420] Os processadores 5070 e 5080 são mostrados incluindo unidades de controlador de memória integrado (IMC) 5072 e 5082, respectivamente. O processador 5070 também inclui como parte das interfaces ponto-a-ponto (50) 5076 e 5078 da sua unidade controladora de barramento; da mesma forma, o segundo processador 5080 inclui as interfaces PP 5086 e 5088. Os processadores 5070, 5080 podem trocar informações através de uma interface ponto-aponto 5050 utilizando circuitos de interface PP 5078, 5088. Como mostrado em A Figura 50, IMCs 5072 e 5082 acopla os processadores às respectivas memórias, nomeadamente uma memória 5032 e uma
Petição 870190044159, de 10/05/2019, pág. 197/318
183/232 memória 5034, que podem ser partes da memória principal localmente ligadas aos respectivos processadores.
[00421] Os processadores 5070, 5080 podem cada um trocar informações com um chipset 50 90 através de interfaces PP individuais 5052, 5054 usando circuitos de interface ponto a ponto 5076, 5094, 5086, 5098. Chipset 5090 pode opcionalmente trocar informações com o coprocessador 5038 por meio de uma interface de alto desempenho 5092. Em uma modalidade, o coprocessador 5038 é um processador de propósito especial, como, por exemplo, um processador MIC de alto rendimento, um processador de rede ou comunicação, mecanismo de compressão, processador gráfico, GPGPU, processador incorporado ou semelhante.
[00422] Um cache compartilhado (não mostrado) pode ser incluído no processador ou fora de ambos os processadores, ainda conectado com os processadores via interconexão PP, de modo que uma ou ambas as informações de cache local dos processadores possam ser armazenadas no cache compartilhado se processador é colocado em um modo de baixa energia.
[00423] O chipset 5090 pode ser acoplado a um primeiro barramento 5016 através de uma interface 5096. Em uma modalidade, primeiro barramento 5016 pode ser um barramento de Interconexão de Componentes Periféricos (PCI), ou um barramento tal como um barramento PCI Express ou outro barramento de interconexão de E/S de terceira geração, embora o escopo da presente invenção não seja tão limitado.
[00424] Como mostrado na Figura 50, vários dispositivos de E/S 5014 podem ser acoplados ao primeiro barramento 5016, juntamente com uma ponte de barramento 5018 que acopla o primeiro barramento 5016 a um segundo barramento 5020. Em uma modalidade, um ou mais processadores adicionais 5015, tais como processadores de
Petição 870190044159, de 10/05/2019, pág. 198/318
184/232 propósito geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores (por exemplo, coprocessadores de segurança), processadores MIC de alto rendimento, GPGPUs, aceleradores (como por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP), aceleradores de criptografia, aceleradores de função fixa, aceleradores de aprendizado de máquina, aceleradores de rede ou aceleradores de visão de computador), matrizes de gate programáveis em campo ou qualquer outro processador ou dispositivo de processamento são acoplados em primeiro lugar ao barramento 5016. Em uma modalidade, o segundo barramento 5020 pode ser um barramento de contagem de pinos baixos (LPC - low pin count). Vários dispositivos podem ser acoplados a um segundo barramento 5020 incluindo, por exemplo, um teclado e/ou mouse 5022, dispositivos de comunicação 5027 e uma unidade de armazenamento 5028 tal como um drive de disco ou outro dispositivo de armazenamento em massa que pode incluir instruções/código e dados 5030, em uma modalidade. Além disso, uma E/S de áudio 5024 pode ser acoplada ao segundo barramento 5020. Observe que outras arquiteturas são possíveis. Por exemplo, em vez da arquitetura ponto-a-ponto da Figura 50, um sistema pode implementar um barramento multi-gotejamento ou outra arquitetura semelhante.
[00425] Referindo agora a Figura 51, é mostrado um diagrama em bloco de um segundo sistema exemplar mais específico 5100, de acordo com uma modalidade da presente invenção. Como os elementos nas Figuras 50 e 51 apresentam números de referência semelhantes, e certos aspectos da Figura 50 foram omitidos da Figura 51A fim de evitar ocultar outros aspectos da Figura 51.
[00426] A Figura 51 ilustra que os processadores 5070, 5080 podem incluir memória integrada e lógica de controle de E/S (CL)
Petição 870190044159, de 10/05/2019, pág. 199/318
185/232
5072 e 5082, respectivamente. Assim, o CL 5072, 5082 inclui unidades de controlador de memória integrado e inclui lógica de controle de E/S. A Figura 51 ilustra que não apenas as memórias 5032, 5034 acopladas ao CL 5072, 5082, mas também os dispositivos E/S 5114 também estão acoplados à lógica de controle 5072, 5082. Dispositivos de legado E/S 5115 são acoplados ao chipset 5090.
[00427] Referindo agora a Figura 52, é mostrado um diagrama em bloco de um SoC 5200 de acordo com uma modalidade da presente invenção. Elementos similares na Figura 36 apresentam números de referência semelhantes. Além disso, as caixas tracejadas são recursos opcionais em SoCs mais avançados. Na Figura 52, uma unidade de interconexão 5202 é acoplada a: um processador de aplicativo 5210 que inclui um conjunto de um ou mais núcleos 3602A-N, que incluem unidades de cache 3604A-N e unidade de cache compartilhada 3606; uma unidade de agente de sistema 3610; uma unidade controladora de barramento 3616; uma unidade controladora de memória integrada 3614; um conjunto ou um ou mais coprocessadores 5220 que pode incluir lógica de gráficos integrada, um processador de imagem, um processador de áudio e um processador de vídeo, processadores de uso geral, processadores de servidor ou elementos de processamento para uso em um ambiente de servidor, coprocessadores de segurança, processadores MIC de alto rendimento, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento digital de sinais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizado de máquina, aceleradores de rede ou aceleradores de visão de computador), matrizes de gate programáveis em campo ou qualquer outro processador ou dispositivo de processamento; uma unidade de memória de acesso aleatório estática (SRAM) 5230; uma unidade de acesso direto à memória (DMA) 5232; e uma unidade de exibição
Petição 870190044159, de 10/05/2019, pág. 200/318
186/232
5240 para acoplamento a um ou mais mostradores externos. Em uma modalidade, o(s) coprocessador(es) 5220 inclui um processador para fins especiais, tal como, por exemplo, um processador de rede ou comunicação, motor de compressão, GPGPU, um processador MIC de alto rendimento, processador incorporado ou semelhante.
[00428] As modalidades dos mecanismos aqui descritos podem ser implementadas em hardware, software, firmware ou uma combinação dessas abordagens de implementação. Modalidades da invenção podem ser implementados como programas de computador ou código de programa em execução em sistemas programáveis que compreendem, pelo menos, um processador, incluindo, por exemplo, processadores de utilização geral, processadores de servidor ou elementos de processamento para o uso em um-meio ambiente do servidor, coprocessadores (por exemplo, a segurança coprocessadores) processadores MIC de alta capacidade, GPGPUs, aceleradores (como, por exemplo, aceleradores gráficos ou unidades de processamento digital de sinais (DSP), aceleradores criptográficos, aceleradores de função fixa, aceleradores de aprendizado de máquina, aceleradores de rede ou aceleradores de visão computacional) matrizes de porta, ou qualquer outro processador ou dispositivo de processamento, um sistema de armazenamento (incluindo elementos de memória e/ou armazenamento voláteis e não voláteis), pelo menos um dispositivo de entrada e pelo menos um dispositivo de saída.
[00429] O código do programa, tal como o código 5030 ilustrado na Figura 50, pode ser aplicado às instruções de entrada para executar as funções aqui descritas e gerar informação de saída. A informação de saída pode ser aplicada a um ou mais dispositivos de saída, de maneira conhecida. Para os propósitos deste aplicativo, um sistema de processamento inclui qualquer sistema que tenha um processador, como, por exemplo; um processador de sinal digital (DSP), um
Petição 870190044159, de 10/05/2019, pág. 201/318
187/232 microcontrolador, um circuito integrado específico de aplicação (ASIC) ou um microprocessador.
[00430] O código de programa pode ser implementado em uma linguagem de programação orientada a objeto ou de alto nível para se comunicar com um sistema de processamento. O código do programa também pode ser implementado em conjunto ou em linguagem de máquina, se desejado. De fato, os mecanismos descritos aqui não são limitados em escopo a qualquer linguagem de programação específica. Em qualquer caso, a linguagem pode ser uma linguagem compilada ou interpretada.
[00431] Um ou mais aspectos de pelo menos uma modalidade pode ser implementado por instruções representativas armazenadas em um meio legível por máquina que representa vários lógica dentro do processador, que quando lida por uma máquina faz com que a máquina fabricar lógica para executar as técnicas descritas aqui em. Tais representações, conhecidas como núcleos IP podem ser armazenadas em um meio tangível, legível por máquina e fornecidas a vários clientes ou instalações de fabricação para carregar nas máquinas de fabricação que realmente fazem a lógica ou o processador.
[00432] Tais meios de armazenamento legíveis por máquina podem incluir, sem limitação, arranjos tangíveis não transitórios de artigos fabricados ou formados por uma máquina ou dispositivo, incluindo mídia de armazenamento, como discos rígidos, qualquer outro tipo de disco, incluindo disquetes, discos, discos compactos somente para leitura (CD- ROMs), discos compactos regraváveis (CD-RWs) e discos magneto-ópticos, dispositivos semicondutores, como memórias somente leitura (ROMs), memórias de acesso aleatório (RAMs), como memórias de acesso aleatório dinâmico (DRAMs), memórias de acesso aleatório estático (SRAMs), memórias de leitura programável
Petição 870190044159, de 10/05/2019, pág. 202/318
188/232 apagáveis (EPROMs), memórias flash, memórias EEPROMs (memória de leitura programável apagável), memória de mudança de estágio (PCM), magnética ou óptica cartões ou qualquer outro tipo de mídia adequado para armazenar instruções eletrônicas.
[00433] Consequentemente, as modalidades da invenção também incluem meios não transitórios, tangíveis, legíveis por máquina, contendo instruções ou contendo dados de projeto, tais como Linguagem de Descrição de Hardware (HDL - Hardware Description Language), que define estruturas, circuitos, aparelhos, processadores e/ou recursos do sistema descrito aqui. Tais modalidades podem também ser referenciadas como produtos de programa.
[00434] As instruções a serem executadas por um núcleo de processador de acordo com modalidades da invenção podem ser incorporadas em um formato de instrução amigável genérico de vetoriais, que é detalhado abaixo. Em outras modalidades, um tal formato não é utilizado e um outro formato de instruções é utilizado, no entanto, a descrição abaixo da gravação - registros de máscara, várias transformações de dados (swizzle, transmissão, etc.), se dirigindo, etc., é geralmente aplicável à descrição das modalidades da (s) instrução (s) acima. Além disso, sistemas exemplares, arquiteturas e pipelines são detalhados abaixo. As instruções podem ser executadas em tais sistemas, arquiteturas e tubagem, mas não estão limitadas àquelas detalhadas.
Conjuntos de Instruções [00435] Um conjunto de instruções pode incluir um ou mais formatos de instruções. Um determinado formato de instrução pode definir vários campos (por exemplo, número de bits, localização de bits) para especificar, entre outras coisas, a operação a ser executada (por exemplo, opcode) e o(s) operando(s) nos quais essa operação será executada e/ou outro(s) campo(s) de dados (por exemplo,
Petição 870190044159, de 10/05/2019, pág. 203/318
189/232 máscara). Alguns formatos de instruções são mais detalhados na definição de modelos de instruções (ou sub-formatos). Por exemplo, os modelos de instrução de um determinado formato de instrução podem ser definidos para ter subconjuntos diferentes dos campos do formato de instrução (os campos incluídos geralmente estão na mesma ordem, mas pelo menos alguns têm diferentes posições de bits porque há menos campos incluídos) e/ou definido para ter um determinado campo interpretado de forma diferente. Assim, cada instrução de uma ISA é expressa usando um dado formato de instrução (e, se definido, em um dado modelo de instrução daquele formato de instrução) e inclui campos para especificar a operação e os operandos. Por exemplo, uma instrução ADD exemplificativa possui um opcode específico e um formato de instrução que inclui um campo opcode para especificar que os campos opcode e operando selecionem operandos (sourcel/destination e source2); e uma ocorrência desta instrução ADD em um fluxo de instrução terá conteúdos específicos nos campos de operandos que selecionam operandos específicos. Um conjunto de extensões SIMD conhecido como Advanced Vector Extensions (AVX, AVX2 e AVX-512) e usando o esquema de código Vector Extensions (VEX - Vector Extensions') foi lançado e/ou publicado (por exemplo, Intel® 64 e IA- 32 Arquiteturas Manual do Desenvolvedor de Software, setembro de 2014, Referência de Programação de Extensões de Vetorial Avançadas Intel®, outubro de 2014 e Referência de Programação das Extensões de Conjunto de Instruções da Arquitetura Intel®, outubro de 2016).
Formatos de Instrução Exemplar [00436] Modalidades da(s) instrução(ões) descrita(s) podem ser incorporadas em diferentes formatos. Além disso, sistemas exemplares, arquiteturas e pipelines são detalhados abaixo. Modalidades da(s) instrução(ões) podem ser executadas em tais
Petição 870190044159, de 10/05/2019, pág. 204/318
190/232 sistemas, arquiteturas e arquiteturas entubadas, mas não estão limitados àqueles detalhados.
[00437] Formato de Instrução Amigável do Vetor Genérico [00438] Um formato de instrução amigável do vetor é um formato de instrução que é adequado para instruções vetoriais (por exemplo, existem certos campos específicos para operações vetoriais). Enquanto são descritas modalidades em que tanto operações vetoriais como escalares são suportadas através do formato de instrução amiga dos vetores, modalidades alternativas utilizam apenas operações vetoriais o formato de instruções vantajosas para vetores.
[00439] As Figuras 53A- 53B são diagramas em bloco ilustrando um formato de instrução amigável vetor genérico e instruções modelares dos mesmos de acordo com modalidades da invenção. A Figura 53A é um diagrama em bloco, ilustrando um formato genérico de instruções amigas dos vetores e modelos de instruções de classe A, de acordo com modalidades da invenção; enquanto que a Figura 53B é um diagrama em bloco ilustrando o formato genérico de instruções amigas dos vetores e os seus modelos de instruções de classe B de acordo com modalidades da invenção. Especificamente, um formato de instrução amigável genérico vetor 5300 para os quais são definidos modelos de instrução classe A e classe B, os quais não incluem o acesso à memória 5305 modelos de instrução e acesso à memória 5320 modelos de instrução. O termo genérico no contexto do formato de instrução amigável com vetorial refere-se ao formato de instrução que não está vinculado a nenhum conjunto de instruções específico.
[00440] Enquanto modalidades da invenção será descrito em que o formato de instrução amigável suporta o seguinte: um comprimento de operando de vetorial de 64 bits (ou tamanho) com larguras de elemento de dados de 32 bits (4 bits) ou 64 bits (8 bits) ( ou tamanhos) (e, portanto, um vetorial de 64 bits consiste em 16 elementos de
Petição 870190044159, de 10/05/2019, pág. 205/318
191/232 tamanho de palavra dupla ou, alternativamente, 8 elementos de tamanho de palavras-chave); um comprimento de operando de vetorial de 64 bits (ou tamanho) com larguras (ou tamanhos) de elementos de dados de 16 bits (2 bits) ou 8 bits (1 bit); um comprimento de operando de vetorial de 32 bits (ou tamanho) com larguras (ou tamanhos) de elementos de dados de 32 bits (4 bits), 64 bits (8 bits), 16 bits (2 bits) ou 8 bits (1 bit); e um comprimento de operando de vetorial de 16 bits (ou tamanho) com larguras (ou tamanhos) de elementos de dados de 32 bits (4 bits), 64 bits (8 bits), 16 bits (2 bits) ou 8 bits (1 bit); modalidades alternativas podem suportar tamanhos de operando vetoriais mais, menor e/ou diferente (por exemplo, operandos vetoriais de 256 bits) com mais, menor ou diferente largura de elemento de dados (por exemplo, larguras de elementos de dados de 128 bits (16 bits)).
[00441] Os modelos de instruções de classe A da Figura 53A, incluem: 1) dentro do nenhum acesso à memória 5305 modelos de instrução é mostrado um acesso sem memória, modelo de instruções operação cheia de controle de volta 5310 e um acesso sem memória, modelo de instrução dados operação de tipo 5315; e 2) modelos de instrução dentro do acesso à memória 5320 mostra-se um acesso à memória, modelo de instrução temporal 5325 e um modelo de instrução acesso à memória, não-temporal 5330. Os modelos de instrução classe B na Figura 53B incluem: 1) dentro dos modelos de instrução sem acesso à memória 5305 mostra-se um acesso sem memória, gravar controle de máscara, modelo de instruções operação cheia de controle de volta parcial 5312 e um modelo de instrução acesso sem memória, gravar controle de máscara, operação do tipo vsize 5317; e 2) modelos instrução dentro do acesso à memória 5320 mostra-se um acesso à memória, modelo de instrução gravar controle de máscara 5327.
Petição 870190044159, de 10/05/2019, pág. 206/318
192/232 [00442] O formato genérico de instrução amigável para vetoriais 5300 inclui os seguintes campos listados abaixo, na ordem ilustrada nas Figuras 53A-53B.
[00443] O campo de formato 5340 - um valor específico (um valor de identificador de formato de instrução) neste campo identifica exclusivamente o formato de instrução amigável de vetorial e, portanto, ocorrências de instruções no formato de instrução amigável de vetorial em fluxos de instrução. Como tal, este campo é opcional no sentido de que não é necessário para um conjunto de instruções que tenha apenas o formato genérico de instrução amigável para vetoriais. [00444] Campo de operação base 5342 - seu conteúdo distingue diferentes operações de base.
[00445] Campo de índice de registro 5344 - seu conteúdo, diretamente ou por meio de geração de endereço, especifica os locais dos operandos de origem e destino, sejam eles em registradores ou em memória. Estes incluem um número suficiente de bits para selecionar N registradores de um arquivo de registro PxQ (por exemplo, 32x512, 16x128, 32x1024, 64x1024). Enquanto em uma modalidade N pode ser de até três fontes e um registro de destino, modalidades alternativas podem suportar mais ou menos fontes e registros de destino (por exemplo, podem suportar até duas fontes onde uma dessas fontes também atua como destino, pode suportar até para três fontes onde uma dessas fontes também atua como o destino, pode suportar até duas fontes e um destino).
[00446] Campo modificador 5346 - seu conteúdo distingue ocorrências de instruções no formato de instrução de vetorial genérico que especificam o acesso à memória daqueles que não o fazem; isto é, entre nenhum acesso à memória 5305 modelos de instrução e acesso à memória 5320 modelos de instruções. As operações de acesso à memória leem e/ou gravam na hierarquia de memória (em
Petição 870190044159, de 10/05/2019, pág. 207/318
193/232 alguns casos especificando os endereços de origem e/ou destino usando valores nos registradores), enquanto as operações de não acesso à memória não (por exemplo, a origem e os destinos são registradores). Enquanto em uma modalidade, este campo também seleciona entre três formas diferentes de realizar cálculos de endereços de memória, modalidades alternativas podem suportar formas mais, menos ou diferentes de realizar cálculos de endereços de memória.
[00447] Campo de operação de aumento 5350 - seu conteúdo distingue qual de uma variedade de operações diferentes a serem executadas além da operação de base. Este campo é específico do contexto. Em uma modalidade da invenção, este campo é dividido em um campo de classe 5368, um campo alfa 5352 e um campo beta 5354. O campo de operação de aumento 5350 permite que grupos comuns de operações sejam executados em uma única instrução de 2, 3 ou 4 instruções.
[00448] Campo de escala 5360 - seu conteúdo permite a programação do conteúdo do campo de índice para geração de endereço de memória (por exemplo, para geração de endereço que usa 2scale * índice + base).
[00449] Campo de Deslocamento 5362A - seu conteúdo é usado como parte da geração de endereços de memória (por exemplo, para geração de endereços que usa 2scale * índice + base + deslocamento).
[00450] Campo de Fator de Deslocamento 5362B (observe que a justaposição do campo de deslocamento 5362A diretamente sobre o campo do fator de deslocamento 5362B indica que um ou outro é usado) - seu conteúdo é usado como parte da geração de endereço; especifica um fator de deslocamento que deve ser dimensionado pelo tamanho de um acesso à memória (N) - onde N é o número de bits no
Petição 870190044159, de 10/05/2019, pág. 208/318
194/232 acesso à memória (por exemplo, para geração de endereço que usa 2scale * índice + base + deslocamento dimensionado). Bits redundantes de baixa ordem são ignorados e, portanto, o conteúdo do campo do fator de deslocamento é multiplicado pelo tamanho total dos operandos de memória (N) para gerar o deslocamento final a ser usado no cálculo de um endereço efetivo. O valor de N é determinado pelo hardware do processador em tempo de execução com base no campo completo de código de operação 5374 (descrito mais adiante) e no campo de manipulação de dados 5354C. O campo de deslocamento 5362A e o campo de fator de deslocamento 5362B são opcionais no sentido de que eles não são usados para os modelos de instrução sem acesso à memória 5305 e/ou diferentes modalidades podem implementar apenas um ou nenhum dos dois.
[00451] Campo de largura de elemento de dados 5364 - seu conteúdo distingue qual de um número de larguras de elemento de dados é para ser usado (em algumas modalidades para todas as instruções; em outras modalidades para apenas algumas das instruções). Este campo é opcional no sentido de que não é necessário se apenas uma largura de elemento de dados for suportada e/ou as larguras de elementos de dados forem suportadas usando algum aspecto dos opcodes.
[00452] Campo de máscara de gravação 5370 - seu conteúdo controla, em uma base de posição de elemento de dados, se essa posição de elemento de dados no operando de vetorial de destino reflete o resultado da operação de base e operação de aumento. Os gabaritos de instrução de classe A suportam mescla de gravação e gravação, enquanto os gabaritos de instrução de classe B suportam mescla e gravação de zero. Ao mesclar, as máscaras vetoriais permitem que qualquer conjunto de elementos no destino seja protegido de atualizações durante a execução de qualquer operação
Petição 870190044159, de 10/05/2019, pág. 209/318
195/232 (especificada pela operação de base e pela operação de aumento); em outra modalidade, preservando o valor antigo de cada elemento do destino onde o bit de máscara correspondente tem um 0. Em contraste, quando as máscaras de vetorial de zeramento permitem que qualquer conjunto de elementos no destino seja zerado durante a execução de qualquer operação pela operação de base e pela operação de aumento); em uma modalidade, um elemento do destino é definido para 0 quando o bit de máscara correspondente tem um valor 0. Um subconjunto dessa funcionalidade é a capacidade de controlar o comprimento do vetorial da operação que está sendo executada (isto é, a extensão dos elementos sendo modificados, do primeiro ao último); no entanto, não é necessário que os elementos modificados sejam consecutivos. Assim, o campo de máscara de gravação 5370 permite operações vetoriais parciais, incluindo cargas, armazenamentos, aritmética, lógica, etc. Enquanto as modalidades da invenção são descritas em que o conteúdo do campo de máscara de gravação 5370 seleciona um de um número de registros de máscara de gravação que contém a máscara de gravação para ser utilizado (e, portanto, do campo de máscara de gravação 5370 indiretamente identifica que o mascaramento para ser executado), modalidades alternativas, em vez ou adicional permitir que o do campo de gravação máscara 5370 a especificar diretamente a tapar destinado a ser executada.
[00453] Campo imediato 5372 - seu conteúdo permite a especificação de um imediato. Este campo é opcional no sentido de que não está presente em uma implementação do formato amigável de vetorial genérico que não suporta imediato e não está presente em instruções que não usam um imediato.
[00454] Campo de classe 5368 - seu conteúdo distingue entre diferentes classes de instruções. Com referência às Figuras 53A-B, o
Petição 870190044159, de 10/05/2019, pág. 210/318
196/232 conteúdo deste campo seleciona entre instruções de classe A e classe B. Nas Figuras 53A-B, os quadrados de canto arredondado são usados para indicar que um valor específico está presente em um campo (por exemplo, classe A 5368A e classe B 5368B para o campo de classe 5368 respectivamente nas Figuras 53AB).
[00455] Modelos de Instrução da Classe A [00456] No caso dos modelos de instrução de acesso sem memória 5305 da classe A, o campo alfa 5352 é interpretado como um campo RS 5352A, cujo conteúdo distingue qual dos diferentes tipos de operação de aumento deve ser executado (por exemplo, a rodada 5352A.1 e a transformação de dados 5352A.2 são respectivamente especificadas para o acesso sem memória, operação de tipo arredondada 5310 e o acesso sem memória, modelos de instrução de operação de tipo de transformação de dados 5315), enquanto o campo beta 5354 distingue qual das operações do tipo especificado deve ser executada. Nos modelos de instrução sem acesso à memória 5305, o campo de escala 5360, o campo de deslocamento 5362A e a escala de deslocamento arquivada 5362B não estão presentes.
Modelos de Instrução de Acesso sem Memória - Operação Completa de Tipo de Controle Redondo [00457] No modelo de instrução de operação completa de controle redondo sem acesso à memória 5310, o campo beta 5354 é interpretado como um campo de controle redondo 5354A, cujo conteúdo fornece arredondamento estático. Enquanto nas modalidades descritas da invenção o campo de controle redondo 5354A inclui um campo de exceção de ponto flutuante (SAE) 5356 e um campo de controle de operação redondo 5358, modalidades alternativas podem suportar podem codificar estes conceitos no mesmo campo ou só tem um ou outro desses conceitos/campos (por exemplo, pode ter apenas o campo de controle de operação circular
Petição 870190044159, de 10/05/2019, pág. 211/318
197/232
5358).
[00458] O campo SAE 5356 - seu conteúdo distingue se deve ou não desabilitar o relatório de evento de exceção; quando o conteúdo 5356 do campo SAE indica que a supressão está habilitada, uma determinada instrução não relata nenhum tipo de sinalizador de exceção de ponto flutuante e não gera nenhum manipulador de exceção de ponto flutuante.
[00459] Campo de controle de operação circular 5358 - seu conteúdo distingue qual de um grupo de operações de arredondamento a executar (por exemplo, arredondado para cima, arredondado para baixo, arredondado sem zero e arredondado mais próximo). Assim, o campo de controle de operação circular 5358 permite a alteração do modo de arredondamento por instrução. Em uma modalidade da invenção, em que um processador inclui um registro de controle para especificar modos de arredondamento, o conteúdo do campo de controle da operação redonda 5350 substitui esse valor de registro.
Modelos de Instrução de Acesso Sem Memória - Operação de Tipo de Transformação de Dados [00460] No modelo de instrução de operação de tipo de transformação de dados de acesso sem memória 5315, o campo beta 5354 é interpretado como um campo de transformação de dados 5354B, cujo conteúdo distingue qual de um número de transformações de dados deve ser executado (por exemplo, sem transformação de dados, swizzle, transmissão).
[00461] No caso de um modelo de instrução de acesso à memória 5320 da classe A, o campo alfa 5352 é interpretado como um campo de golpe de expulsão 5352B, cujo conteúdo distingue qual das sugestões de expulsão deve ser usada (na Figura 53A, temporal, 5352B.1 e não temporal 5352B.2 são respectivamente especificado
Petição 870190044159, de 10/05/2019, pág. 212/318
198/232 para o acesso à memória, temporal, 5325 e o acesso à memória, não temporal 5330), enquanto que o campo beta 5354 é interpretado como um campo de manipulação de dados 5354C, cujo conteúdo distingue qual de um número de operações de manipulação de dados (também conhecidas como primitivas) deve ser executada (por exemplo, sem manipulação; transmissão; conversão ascendente de uma fonte; e conversão descendente de um destino). Os modelos de instrução de acesso à memória 5320 incluem o campo de escala 5360 e, opcionalmente, o campo de deslocamento 5362A ou o campo de escala de deslocamento 5362B.
[00462] As instruções de memória de vetorial realizam cargas vetoriais e armazenamentos vetoriais na memória, com suporte à conversão. Como com instruções vetoriais regulares, as instruções de memória de vetor transferem dados de/para a memória de uma maneira elemento de dados, com os elementos que são realmente transferidos são ditados pelo conteúdo da máscara de vetorial que é selecionada como a máscara de gravação.
Modelos de Instrução de Acesso à Memória - Temporal [00463] Dados temporais são dados que podem ser reutilizados em breve o suficiente para se beneficiar do armazenamento em cache. Este é, no entanto, um golpe, e diferentes processadores podem implementá-lo de maneiras diferentes, incluindo ignorar totalmente o golpe.
Modelos de Instrução de Acesso à Memória - Não Temporais [00464] Dados não temporais são dados improváveis de serem reutilizados em breve o suficiente para se beneficiar do cache no cache de 1 ° nível e devem ter prioridade para a exp ulsão. Este é, no entanto, um golpe, e diferentes processadores podem implementá-lo de maneiras diferentes, incluindo ignorar totalmente o golpe.
[00465] Modelos de Instrução de Classe B
Petição 870190044159, de 10/05/2019, pág. 213/318
199/232 [00466] No caso dos modelos de instrução da classe B, o campo alfa 5352 é interpretado como um campo de controle de máscara de gravação (Z) 5352C, cujo conteúdo distingue se o mascaramento de gravação controlado pelo campo de máscara de gravação 5370 deve ser uma fusão ou zeramento.
[00467] No caso dos modelos de instrução de acesso sem memória 5305 da classe B, parte do campo beta 5354 é interpretada como um campo de RL 5357A, cujo conteúdo distingue qual dos diferentes tipos de operação de aumento deve ser realizada (por exemplo, rodada 5357A.1 e vetor de comprimento (VSIZE) 5357A.2 são respectivamente especificado para o acesso sem memória, gravar controle máscara, modelo de instruções parcial rodada tipo de controle de funcionamento 5312 e o acesso sem memória, gravar controle máscara, modelo de instruções tipo VSIZE 5317), enquanto que o resto do campo beta 5354 distingue qual das operações do tipo especificado é para ser realizada. Nos modelos de instrução sem acesso à memória 5305, o campo de escala 5360, o campo de deslocamento 5362A e a escala de deslocamento arquivada 5362B não estão presentes.
[00468] No acesso sem memória, controle de máscara de gravação, operação de tipo de controle circular parcial 5310 modelo de instrução, o restante do campo beta 5354 é interpretado como um campo de operação circular 5359A e relatório de evento de exceção está desabilitado (uma instrução dada não reporta qualquer tipo de sinalizador de exceção de ponto flutuante e não gera nenhum manipulador de exceção de ponto flutuante).
[00469] Campo de controle de operação circular 5359A - assim como o campo de controle de operação circular 5358, seu conteúdo distingue qual de um grupo de operações de arredondamento a executar (por exemplo, arredondamento para cima, arredondamento
Petição 870190044159, de 10/05/2019, pág. 214/318
200/232 para baixo, arredondamento sem zero e arredondamento mais próximo). Assim, o campo de controle de operação circular 5359A permite a mudança do modo de arredondamento por instrução. Em uma modalidade da invenção, em que um processador inclui um registro de controle para especificar modos de arredondamento, o campo de operação de controle redondo 5350 substitui o conteúdo do valor de registro.
[00470] No acesso sem memória, gravar controle de máscara, tipo de operação VSIZE 5317 modelo de instrução, o resto do campo beta 5354 é interpretado como um campo de comprimento vetor 5359B, cujo distingue o conteúdo que um de um número de vetorial de dados os comprimentos devem ser executados em (por exemplo, 128, 256 ou 512Bytes).
[00471] No caso de um modelo de instrução de acesso à memória 5320 da classe B, parte do campo beta 5354 é interpretada como um campo de transmissão 5357B, cujo conteúdo distingue se a operação de manipulação de dados de tipo de difusão deve ou não ser executada, enquanto o resto do campo beta 5354 é interpretado como o campo de comprimento de vetorial 5359B. Os modelos de instrução de acesso à memória 5320 incluem o campo de escala 5360 e, opcionalmente, o campo de deslocamento 5362A ou o campo de escala de deslocamento 5362B.
[00472] No que diz respeito ao formato de instrução amigável genérica de vetoriais 5300, um campo de código de operação completo 5374 é mostrado incluindo o campo de formato 5340, o campo de operação de base 5342 e o campo de largura de elemento de dados 5364. Enquanto uma modalidade é mostrada onde o campo de código de operação completo 5374 inclui todos esses campos, o campo de código de operação completo 5374 inclui menos que todos esses campos em modalidades que não suportam todos eles. O
Petição 870190044159, de 10/05/2019, pág. 215/318
201/232 campo completo de código de operação 5374 fornece o código de operação (opcode).
[00473] O campo de operação de aumento 5350, o campo de largura de elemento de dados 5364 e o campo de máscara de gravação 5370 permitem que esses recursos sejam especificados em uma base por instrução no formato genérico de instrução compatível com vetoriais.
[00474] A combinação de campo de máscara de gravação e campo de largura de elemento de dados cria instruções digitadas na medida em que permitem que a máscara seja aplicada com base em diferentes larguras de elemento de dados.
[00475] Os vários modelos de instruções encontrados na classe A e na classe B são benéficos em diferentes situações. Em algumas modalidades da invenção, diferentes processadores ou diferentes núcleos dentro de um processador podem suportar apenas classe A, apenas classe B, ou ambas as classes. Por exemplo, um núcleo fora de ordem de uso geral de alto desempenho destinado à computação de propósito geral pode suportar apenas a classe B, um núcleo destinado principalmente para computação gráfica e/ou científica (rendimento) pode suportar apenas classe A e um núcleo pretendido para ambos podem suportar ambos (claro, um núcleo que possui uma mistura de modelos e instruções de ambas as classes, mas nem todos os modelos e instruções de ambas as classes estão dentro do escopo da invenção). Além disso, um único processador pode incluir vários núcleos, todos suportando a mesma classe ou em que diferentes núcleos suportam classes diferentes. Por exemplo, em um processador com gráficos separados e núcleos de uso geral, um dos núcleos gráficos destinados principalmente a computação gráfica e/ou científica pode suportar apenas classe A, enquanto um ou mais núcleos de uso geral podem ser núcleos de uso geral de alto
Petição 870190044159, de 10/05/2019, pág. 216/318
202/232 desempenho com execução fora de ordem e registrar renomeamento destinada a computação de propósito geral que suporte apenas classe B. Outro processador que não possui um núcleo gráfico separado, pode incluir mais núcleos de ordem geral ou fora de ordem que suportem ambos classe A e classe B. Evidentemente, as características de uma classe podem também ser implementadas na outra classe em diferentes modalidades da invenção. Programas escritos em uma linguagem de alto nível seriam colocados (por exemplo, compilados justamente ou estaticamente compilados) em uma variedade de formas executáveis diferentes, incluindo: 1) um formulário tendo apenas instruções da (s) classe (s) suportada (s) pelo processador alvo para execução; ou 2) uma forma possuindo rotinas alternativas escritas usando combinações diferentes das instruções de todas as classes e tendo código de fluxo de controle que seleciona as rotinas a serem executadas com base nas instruções suportadas pelo processador que está atualmente executando o código.
Formato de Instrução Amigável de Vector Específico Exemplar [00476] A Figura 54A é um diagrama em bloco ilustrando um formato de instrução amigável de vetorial específico exemplar de acordo com modalidades da invenção. A Figura 54A mostra um formato específico de instrução amigável para vetoriais 5400, que é específico no sentido de especificar a localização, tamanho, interpretação e ordem dos campos, bem como valores para alguns desses campos. O formato específico de instrução amigável para vetoriais 5400 pode ser usado para estender o conjunto de instruções x86 e, assim, alguns dos campos são semelhantes ou iguais aos usados no conjunto de instruções x86 existente e sua extensão (por exemplo, AVX). Esse formato permanece consistente com o campo de codificação de prefixo, o campo de Bit de código de operação real, o campo MOD R/M, o campo SIB, o campo de deslocamento e os
Petição 870190044159, de 10/05/2019, pág. 217/318
203/232 campos imediatos do conjunto de instruções x86 existente com extensões. Os campos da Figura 53 nos quais os campos do mapa da Figura 54 são ilustrados.
[00477] Deve ser entendido que, embora modalidades da invenção são descritas com referência à específico vetor de formato de instrução amigável 5400 no escopo do formato de instrução amigável genérico vetor 5300 para fins ilustrativos, o invento não está limitado ao formato de instrução específico para uso de vetoriais 5400, exceto quando reivindicado. Por exemplo, o formato genérico de instrução amigável para vetoriais 5300 contempla uma variedade de tamanhos possíveis para os vários campos, enquanto que o formato de instrução amigável para vetoriais específico 5400 é mostrado como tendo campos de tamanhos específicos. A título de exemplo específico, enquanto o campo de largura de elemento de dados 5364 é ilustrado como um campo de um bit no formato de instrução amigável de vetoriais 5400, a invenção não é tão limitada (isto é, o formato de instrução amigável de vetoriais 5300 contempla outros tamanhos do campo de largura do elemento de dados 5364).
[00478] O formato genérico de instruções de vetoriais 5300 inclui os seguintes campos listados abaixo, na ordem ilustrada na Figura 54A.
[00479] Prefixo EVEX (Bits 0-3) 54 02 - é codificado em um formulário de quatro bits.
[00480] Formato do campo 5340 (EVEX Bit 0, bits [7: 0]) - o primeiro Bit (EVEX Bit 0) é o campo de formato 5340 e contém 0x62 (o valor único usado para distinguir o formato de instrução amigável vetor em uma modalidade da invenção).
[00481] Os bits de segundo quarto (EVEX Bits 1-3) incluem um número de campos de bit que fornecem capacidade específica.
[00482] Campo REX 5405 (EVEX Bit 1, bits [7-5]) - consiste em um campo de bit EVEX.R (EVEX Bit 1, bit [7] - R), campo de bit EVEX.X
Petição 870190044159, de 10/05/2019, pág. 218/318
204/232 (EVEX Bit 1, bit [6] - X) e 53 57BEX Bit 1, bit [5] - B). Os campos de bit EVEX.R, EVEX.X e EVEX.B fornecem a mesma funcionalidade que os campos de bit VEX correspondentes e são codificados usando a forma de complemento 1s, ou seja, ZMMO é codificado como 1111B, ZMM15 é codificado como 0000B. Outros campos das instruções codificam os três bits inferiores dos índices de registro como é conhecido na técnica (rrr, xxx e bbb), de modo que Rrrr, Xxxx e Bbbb podem ser formados pela adição de EVEX.R, EVEX.X, e EVEX.B.
[00483] REX' campo 5310 - esta é a primeira parte do campo REX' 53 10 e é o EVEX.R 'campo de bits (EVEX Bit 1, bit [4] - R') que é usado para codificar o superior 16 ou inferior 16 do conjunto de 32 registros prolongados. Em uma modalidade da invenção, este bit, juntamente com outros como indicado abaixo, é armazenado no formato bit invertido para distinguir (no bem conhecido modo x86 de 32 bits) da instrução BOUND, cujo Bit real de código de operação é 62, mas não aceita no campo MOD R/M (descrito abaixo) o valor de 11 no campo MOD; modalidades alternativas da invenção não armazenam este e os outros bits indicados abaixo no formato invertido. Um valor de 1 é usado para codificar os 16 registros inferiores. Em outras palavras, o R'Rrrr é formado pela combinação de EVEX.R', EVEX.R e o outro RRR de outros campos.
[00484] Campo de mapa de código de operação 5415 (EVEX Bit 1, bits [3: 0] - mmmm) - seu conteúdo codifica um Bit de código de operação principal implícito (OF, OF 38 ou OF 3).
[00485] Campo de largura de elemento de dados 5364 (EVEX Bit 2, bit [7] - W) - é representado pela notação EVEX.W. EVEX.W é usado para definir a granularidade (tamanho) do tipo de dados (elementos de dados de 32 bits ou elementos de dados de 64 bits).
[00486] EVEX.vvvv 5420 (Evex Bit 2, bits [6: 3] - vvvv ) - o papel de EVEX.vvvv podem incluir o seguinte: 1) EVEX.vvvv codifica o primeiro
Petição 870190044159, de 10/05/2019, pág. 219/318
205/232 operando registro fonte, especificado em invertido (Complemento 1s) e é válido para instruções com 2 ou mais operandos fonte; 2) EVEX.vvvv codifica o operando do registrador de destino, especificado no formulário de complemento 1s para certos desvios de vetorial; ou 3) EVEX.vvvv não codifica nenhum operando, o campo é reservado e deve conter 1111b. Assim, o campo EVEX.vvvv 5420 codifica os 4 bits de baixa ordem do primeiro especificador de registro de fonte armazenado na forma invertida (complemento 1s). Dependendo da instrução, um campo de bit EVEX extra diferente é usado para estender o tamanho do especificador para 32 registradores.
[00487] EVEX.U 5368 Campo de classe (EVEX Bit 2, bit [2] -U) - Se EVEX.U = 0, indica a classe A ou EVEX.U0; se EVEX.U = 1, indica a classe B ou EVEX.U1.
[00488] Campo de codificação de prefixo 5425 (EVEX Bit 2, bits [1: 0] -pp) - fornece bits adicionais para o campo de operação de base. Além de fornecer suporte para as instruções SSE legadas no formato de prefixo EVEX, isso também tem a vantagem de compactar o prefixo SIMD (em vez de exigir um Bit para expressar o prefixo SIMD, o prefixo EVEX requer apenas 2Bits). Em uma modalidade, para suportar instruções SSE antigas que utilizam um prefixo SIMD (66H, F2H, F3H) tanto no formato legado como no formato de prefixo EVEX, estes prefixos SIMD legacy são codificados no campo de codificação de prefixo SIMD; e em tempo de execução são expandidos para o prefixo SIMD legado antes de serem fornecidos ao PLA do decodificador (para que o PLA possa executar o formato legado e EVEX dessas instruções legadas sem modificação). Embora instruções mais recentes possam usar o conteúdo do campo de codificação de prefixo EVEX diretamente como uma extensão opcode, certas modalidades expandem-se de maneira similar para consistência, mas permitem que significados diferentes sejam
Petição 870190044159, de 10/05/2019, pág. 220/318
206/232 especificados por esses prefixos SIMD herdados. Uma modalidade alternativa pode reprojetar o PLA para suportar as codificações de prefixo SIMD de 2Bits e, portanto, não requer a expansão.
[00489] Campo alfa 5352 (EVEX Bit 3, bit [7] - EH; também conhecido como EVEX.EH, EVEX.rs, EVEX.RL, EVEX.wr/te mask control e EVEX.N; também ilustrado com a) - conforme descrito anteriormente, esse campo é específico do contexto.
[00490] Campo Beta 5354 (EVEX Bit 3, bits [6: 4] -SSS, também conhecido como EVEX.S2-0, EVEX.r2-0, EVEX.rrl, EVEX.LL0, EVEX.LLB; também ilustrado com βββ) - como descrito anteriormente, este campo é específico do contexto.
[00491] REX' campo 5310 - este é o restante de REX' campo e é o EVEX.V 'campo de bits (EVEX Bit 3, bits [3] - V) que pode ser usado para codificar quer a superior 16 ou menor 16 do conjunto de 32 registradores estendido. Este bit é armazenado no formato bit invertido. Um valor de 1 é usado para codificar os 16 registros inferiores. Em outras palavras, o VVVVV é formado pela combinação de EVEX.V', EVEX.vvvv.
[00492] Campo de máscara de gravação 5370 (EVEX Bit 3, bits [2: 0] - kkk) - seu conteúdo especifica o índice de um registrador nos registros de máscara de gravação como descrito anteriormente. Em uma modalidade da invenção, o valor específico EVEX.kkk = 000 tem um comportamento especial que implica que nenhuma máscara de gravação é usada para a instrução particular (isto pode ser implementado de várias maneiras incluindo o uso de uma máscara de gravação ligada a todos ou hardware que ignora o hardware de mascaramento).
[00493] Campo de Opcode Real 5430 (Bit 4) também é conhecido como o Bit opcode. Parte do opcode é especificada neste campo.
[00494] Campo MOD R/M 5440 (Bit 5) inclui o campo MOD 5442, o
Petição 870190044159, de 10/05/2019, pág. 221/318
207/232 campo Reg 5444 e o campo R/M 5446. Como descrito anteriormente, o conteúdo 5442 do campo MOD distingue entre acesso à memória e operações de acesso à memória. O papel do campo Reg 5444 pode ser resumido em duas situações: codificação do operando de registro de destino ou de um operando de registro de fonte, ou ser tratado como uma extensão opcode e não usado para codificar qualquer operando de instrução. A função do campo R/M 5446 pode incluir o seguinte: codificar o operando de instrução que referencia um endereço de memória ou codificar o operando de registrador de destino ou um operando de registrador de fonte.
[00495] Bit de Escala, índice, Base (SIB) (Bit 6) - Como descrito anteriormente, o conteúdo de 5350 do campo de escala é usado para geração de endereço de memória. SIB.xxx 5454 e SIB.bbb 5456 - o conteúdo destes campos foi previamente referido em relação aos índices de registro Xxxx e Bbbb.
[00496] Campo de deslocamento 5362A (Bits 7-10) - quando o campo MOD 5442 contém 10, os bits 7-10 são o campo de deslocamento 5362A, e funciona da mesma forma que o deslocamento legado de 32 bits (disp32) e funciona na granularidade de Bit.
[00497] Campo do fator de deslocamento 5362B (Bit 7) - quando o campo MOD 54 42 contém 01, o Bit 7 é o campo do fator de deslocamento 5362B. A localização desse campo é a mesma que a do conjunto de instruções x86 herdado, o deslocamento de 8 bits (disp8), que funciona na granularidade dos bits. Como disp8 é um sinal estendido, ele só pode endereçar entre -128 e 127 bits de offsets; em termos de 64 segmentos de cache de bits, disp8 usa 8 bits que podem ser definidos para apenas quatro valores realmente úteis -128, -64, 0 e 64; uma vez que um intervalo maior é geralmente necessário, o disp32 é usado; no entanto, disp32 requer 4 bits. Em contraste com disp8 e
Petição 870190044159, de 10/05/2019, pág. 222/318
208/232 disp32, o campo do fator de deslocamento 53 62B é uma reinterpretação de disp8; quando se utiliza o campo do fator de deslocamento 53 62B, o deslocamento real é determinado pelo conteúdo do campo do fator de deslocamento multiplicado pelo tamanho do acesso do operando de memória (N). Este tipo de deslocamento é referido como disp8 * N. Isso reduz o comprimento médio da instrução (um único Bit usado para o deslocamento, mas com um alcance muito maior). Tal deslocamento comprimido é baseado na suposição de que o deslocamento efetivo é múltiplo da granularidade do acesso à memória e, portanto, os bits redundantes de baixa ordem do deslocamento de endereço não precisam ser codificados. Em outras palavras, o campo do fator de deslocamento 53 62B substitui o deslocamento de 8 bits do conjunto de instruções x86 legado. Assim, o campo do fator de deslocamento 53 62B é codificado da mesma forma que um deslocamento de 8 bits do conjunto de instruções x86 (portanto, não há alterações nas regras de codificação ModRM/SIB) com a única exceção de disp8 ser sobrecarregado para disp8 * N. Em outras palavras, não há alterações nas regras de codificação ou comprimentos de codificação, mas apenas na interpretação do valor de deslocamento por hardware (que precisa dimensionar o deslocamento pelo tamanho do operando de memória para obter um deslocamento de endereço Bit). O campo imediato 5372 opera conforme descrito anteriormente.
[00498] Campo Opcode Completo [00499] A Figura 54B é um diagrama em bloco ilustrando os campos do vetor específico formato de instrução amigável 5400 que compõem o campo opcode completo 5374 de acordo com uma modalidade da invenção. Especificamente, o campo de opcode completo 5374 inclui o campo de formato 5340, o campo de operação de base 5342 e o campo de largura de elemento de dados (W) 5364.
Petição 870190044159, de 10/05/2019, pág. 223/318
209/232
O campo de operação de base 5342 inclui o campo de codificação de prefixo 5425, o campo de mapa de opcode 5415 e o campo real opcode 5430.
[00500] Campo de índice de Registro [00501] A Figura 54C é um diagrama em bloco ilustrando os campos do formato específico de instrução amigável de vetoriais 5400 que compõem o campo de índice de registro 5344 de acordo com uma modalidade da invenção. Especificamente, o campo de índice de registro 5344 inclui o campo REX 5405, campo REX' 5410, o campo Modr/M.reg 5444, o Modr/Mr/m campo de 5446, o campo VVVV 5420, campo xxx 5454 e o campo bbb 5456.
[00502] Campo de Operação de Aumento [00503] A Figura 54D é um diagrama em bloco ilustrando os campos do formato específico de instrução amigável de vetoriais 5400 que compõem o campo de operação de aumento 5350 de acordo com uma modalidade da invenção. Quando o campo da classe (U) 5368 contém 0, significa EVEX.U0 (classe A 5368A); quando contém 1, significa EVEX.U1 (classe B 5368B). Quando U = 0 e o campo MOD 5442 contém 11 (significando uma operação sem acesso à memória), o campo alfa 5352 (EVEX Bit 3, bit [7] - EH) é interpretado como o campo rs 5352A. Quando o campo rs 53 52A contiver um 1 (volta 5352A.1), o campo beta 5354 (EVEX Bit 3, bits [6: 4] - SSS) é interpretado como o campo de controle redondo 5354A. O campo de controle redondo 5354A inclui um campo SAE de um bit 5356 e um campo de operação circular de dois bit 5358. Quando o campo rs 5352A contém um 0 (transformação de dados 5352A.2), o campo beta 5354 (EVEX Bit 3, bits [6: 4] - SSS) é interpretado como um campo de transformação de dados de três bits 5354B. Quando U = 0 e o campo MOD 5442 contém 00, 01 ou 10 (significando uma operação de acesso à memória), o campo alfa 5352 (EVEX Bit 3, bit [7] - EH) é
Petição 870190044159, de 10/05/2019, pág. 224/318
210/232 interpretado como a dica de despejo (EH) campo 5352B e o campo beta 5354 (EVEX Bit 3, bits [6: 4] - SSS) é interpretado como um campo de manipulação de dados de três bits 5354C.
[00504] Quando U = 1, o campo alfa 5352 (EVEX Bit 3, bit [7] - EH) é interpretado como o campo de controle de máscara de gravação (Z) 5352C. Quando U = 1 e o campo MOD 5442 contém 11 (significando uma operação sem acesso à memória), parte do campo beta 53 54 (EVEX Bit 3, bit [4] - S0) é interpretada como o campo RL 5357A; quando contém 1 (round 5357A.1) o resto do campo beta 5354 (EVEX Bit 3, bit [6-5] - S2-1) é interpretado como o campo de operação circular 5359A, enquanto que quando o RL campo 5357A contém 0 (VSIZE 5357.A2) o resto do campo beta 5354 (EVEX Bit 3, bit [6-5] S2-1) é interpretado como o campo de comprimento de vetorial 5359B (EVEX Bit 3, bit [6-5] - L1-0). Quando U = 1 e o campo MOD 5442 contém 00, 01 ou 10 (significando uma operação de acesso à memória), o campo beta 5354 (EVEX Bit 3, bits [6: 4] - SSS) é interpretado como o comprimento do campo vetorial 5359B (EVEX Bit 3, bit [6-5] - L1-0) e o campo de transmissão 5357B (EVEX Bit 3, bit [4] -B).
Arquitetura de Registro Exemplar [00505] A Figura 55 é um diagrama em bloco de uma arquitetura de registro 5500 de acordo com uma modalidade da invenção. Na modalidade ilustrada, existem 32 registros vetoriais 5510 que têm 512 bits de largura; esses registradores são referenciados como zmmO a zmm31 (o conjunto de registros zmm). Outras modalidades podem incluir, em vez do conjunto de registro zmm, um conjunto de dezesseis registros vetoriais com 256 bits de largura; esses registradores são referenciados como ymmO a ymm15 (o conjunto de registradores ymm). Outras modalidades podem incluir, em vez do conjunto de registro de zmm ou conjunto de registro de ymm, um conjunto de
Petição 870190044159, de 10/05/2019, pág. 225/318
211/232 dezesseis registros vetorial que têm 128 bits de largura; esses registradores são referências como xmmO a xmm15 (o conjunto de registradores xmm). Na Figura 55, os 256 bits de menor ordem dos registradores de 16 zmm inferiores são sobrepostos nos registradores ymmO-15, e os 128 bits de menor ordem dos registradores de 16 zmm inferiores (os 128 bits de menor ordem dos registradores ymm) são sobrepostos nos registradores xmmO-15.
[00506] O formato de instrução amigável de vetoriais específico 5400 opera nesses arquivos de registro sobrepostos, conforme ilustrado na tabela abaixo.
Comprimento de Vector Ajustável Classe Operações Registradores
Modelos de Instrução que não incluem o campo de comprimento de vetor 5359B A (Figura 53 A; U=0) 5310, 5315, 5325,5330 Registradores zmm (o comprimento do vetor é 64 bits)
B (Figura 53B; U=1) 5312 Registradores zmm (o comprimento do vetor é 64 bits)
Modelos de Instrução que incluem o campo de comprimento de vetor 5359B B (Figura 53B; U=1) 5317, 5327 Registradores zmm, ymm ou xmm (o comprimento do vetor é 64 bits, 32 bits ou 16 bits) dependendo do campo de comprimento do vetor 5359B
[00507] Em outras palavras, o campo de comprimento de vetorial 5359B seleciona entre um comprimento máximo e um ou mais outros comprimentos menores, onde cada comprimento menor é a metade do comprimento do comprimento anterior; e modelos de instruções sem o campo de comprimento de vetorial 5359B operam no comprimento máximo do vetorial. Além disso, em uma modalidade, os modelos de instruções de classe B do formato específico 5400 de instruções adaptadas a vetores operam em dados de ponto flutuante de precisão simples/dupla empacotados ou escalares e dados inteiros escalares
Petição 870190044159, de 10/05/2019, pág. 226/318
212/232 ou empacotados. Operações escalares são operações executadas na posição do elemento de dados de ordem mais baixa em um registrador zmm/ymm/xmm; as posições de elemento de dados de ordem superior são deixadas as mesmas que eram antes da instrução ou zeragem dependendo da modalidade.
[00508] Registros de máscara de gravação 5515 - na modalidade ilustrada, existem 8 registros de máscara de gravação (kO a k7), cada um com 64 bits de tamanho. Em uma modalidade alternativa, os registros de máscara de gravação 5515 têm 16 bits de tamanho. Em uma modalidade, o registrador de máscara vetorial kO não pode ser usado como uma máscara de gravação; quando a codificação que normalmente indicaria kO é usada para uma máscara de gravação, ela seleciona uma máscara de gravação com segmento de OxFFFF, desabilitando efetivamente o mascaramento de gravação para essa instrução.
[00509] Registros de propósito geral 5525 - na modalidade ilustrada, há dezesseis registradores de uso geral de 64 bits que são usados juntamente com os modos de endereço x86 existentes para endereçar operandos de memória. Esses registradores são referenciados pelos nomes RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSPeR8aR15.
[00510] Arquivo de registro de pilha de ponto flutuante escalar (pilha x87) 5545, no qual é apelidado o arquivo de registro simples inteiro empacotado MMX 5550 - na modalidade ilustrada, a pilha x87 é uma pilha de oito elementos usada para executar flutuação escalar operações de ponto em dados de ponto flutuante de 32/64/80 bits usando a extensão do conjunto de instruções x87; enquanto os registradores MMX são usados para executar operações em dados inteiros empacotados de 64 bits, bem como para manter operandos para algumas operações executadas entre os registradores MMX e
Petição 870190044159, de 10/05/2019, pág. 227/318
213/232
XMM.
[00511] As modalidades alternativas da invenção podem utilizar registros mais amplos ou mais estreitos. Adicionalmente, modalidades alternativas da invenção podem usar mais, menos, ou diferentes arquivos de registros e registradores.
Emulação (incluindo tradução binária, morfeamento de código, etc.) [00512] Em alguns casos, um conversor de instruções pode ser usado 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, usando tradução binária estática, tradução binária dinâmica incluindo compilação dinâmica), transformar, emular, ou converter uma instrução para uma ou mais outras instruções a serem processadas pelo núcleo. O conversor de instruções pode ser implementado em software, hardware, firmware ou uma combinação dos mesmos. O conversor de instruções pode estar no processador, fora do processador ou parte e parte do processador.
[00513] A Figura 56 é um diagrama em bloco contrastando o uso de um conversor de instruções de software para converter instruções binárias em um conjunto de instruções de origem para instruções binárias em um conjunto de instruções de destino de acordo com modalidades da invenção. Na modalidade ilustrada, o conversor de instruções é um conversor de instruções de software, embora, em alternativa, o conversor de instruções possa ser implementado em software, firmware, hardware ou várias combinações dos mesmos. A Figura 56 mostra um programa em uma linguagem de alto nível 5602 pode ser compilado usando um compilador x86 5604 para gerar código binário x86 5606 que pode ser executado nativamente por um processador com pelo menos um núcleo de conjunto de instruções x86 5616. O processador com pelo menos um núcleo do conjunto de
Petição 870190044159, de 10/05/2019, pág. 228/318
214/232 instruções x86 5616 representa qualquer processador que possa desempenhar substancialmente as mesmas funções que um processador Intel com pelo menos um núcleo de conjunto de instruções x86 executando de maneira compatível ou processando (1) uma parte substancial do conjunto de instruções da Intel núcleo de conjunto de instruções x86 ou (2) versões de código objeto de aplicativos ou outro software destinado a ser executado em um processador Intel com pelo menos um núcleo de conjunto de instruções x86, para atingir substancialmente o mesmo resultado que um processador Intel com pelo menos uma instrução x86 set core. O compilador x86 5604 representa um compilador que é operável para gerar código binário x86 5606 (por exemplo, código objeto) que pode, com ou sem processamento de ligação adicional, ser executado no processador com pelo menos um núcleo de conjunto de instruções x86 5616. Similarmente, a Figura 56 mostra que o programa na linguagem de alto nível 5602 pode ser compilado usando um compilador de conjunto de instruções alternativo 5608 para gerar código binário de conjunto de instruções alternativo 5610 que pode ser executado nativamente por um processador sem pelo menos um núcleo de conjunto de instruções x86 5614 (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 5612 é usado para converter o código binário x86 5606 em código que pode ser executado nativamente pelo processador sem um núcleo de conjunto de instruções x86 5614. Esse código convertido provavelmente não é o mesmo que o conjunto de instruções alternativas binário código 5610 porque um conversor de instruções capaz disso é difícil de fazer; no entanto, o código convertido realizará a operação geral e será composto de instruções do conjunto de
Petição 870190044159, de 10/05/2019, pág. 229/318
215/232 instruções alternativas. Assim, o conversor de instruções 5612 representa software, firmware, hardware ou uma combinação dos mesmos que, por emulação, simulação ou qualquer outro processo, permite que um processador ou outro dispositivo eletrônico que não tenha um processador ou núcleo de conjunto de instruções x86 execute o código binário x86 5606.
[00514] A Figura 57 ilustra uma visão geral conceituai de um centro de dados 5700 que geral mente pode ser representativo de um centro de dados ou outro tipo de rede de computação em/para o qual uma ou mais técnicas descritas aqui podem ser implementadas de acordo com várias modalidades. Como mostrado na Figura 57, o centro de dados 5700 pode geralmente conter uma pluralidade de racks, cada um dos quais pode alojar equipamento de computação compreendendo um conjunto respectivo de recursos físicos. No exemplo particular não limitative representado na Figura 57, o centro de dados 5700 contém quatro racks 5702A a 5702D, que abrigam equipamentos de computação compreendendo os respectivos conjuntos de recursos físicos (PCRs) 5705A a 5705D. De acordo com este exemplo, um conjunto coletivo de recursos físicos 5706 do centro de dados 5700 inclui os vários conjuntos de recursos físicos 5705A a 5705D que são distribuídos entre os racks 5702A a 5702D. Os recursos físicos 5706 podem incluir recursos de vários tipos, tal como - por exemplo processadores, coprocessadores, aceleradores, matrizes de portas de campo programável (FPGA), memória e armazenamento. As modalidades não estão limitadas a estes exemplos.
[00515] O centro de dados ilustrativo 5700 difere de centro de dados típicos de várias maneiras. Por exemplo, na modalidade ilustrativa, as placas de circuito (sleds) nas quais componentes, como CPUs, memória e outros componentes são colocados, são projetados para um desempenho térmico aumentado. Em particular,
Petição 870190044159, de 10/05/2019, pág. 230/318
216/232 na modalidade ilustrativa, os sleds são mais rasos que os painéis típicos. Em outras palavras, os sleds são mais curtos da frente para trás, onde os ventiladores estão localizados. Isso diminui o comprimento do caminho que o ar deve percorrer pelos componentes da placa. Além disso, os componentes do sled estão mais espaçados do que em placas de circuito típicas, e os componentes estão dispostos para reduzir ou eliminar o sombreado (ou seja, um componente no caminho do fluxo de ar de outro componente). Na modalidade ilustrativa, os componentes de processamento, tais como os processadores, estão localizados no lado superior de um sled, enquanto a memória próxima, tal como os DIMMs, estão localizados no lado inferior do sled. Como resultado do fluxo de ar aprimorado fornecido por este projeto, os componentes podem operar em frequências e níveis de energia mais altos do que em sistemas típicos, aumentando assim o desempenho. Além disso, os sleds são configurados para corresponder às cegas com cabos de energia e de comunicação de dados em cada rack 5702A, 5702B, 5702C, 5702D, aumentando a sua capacidade para ser rapidamente removido, atualizado, reinstalado e/ou substituído. Da mesma forma, os componentes individuais localizados nos sleds, como processadores, aceleradores, memória e unidades de armazenamento de dados, são configurados para serem facilmente atualizados devido ao aumento do espaçamento entre eles. Na modalidade ilustrativa, os componentes incluem adicionalmente características de atestado de hardware para provar a sua autenticidade.
[00516] Além disso, na modalidade ilustrativa, o centro de dados 5700 utiliza uma arquitetura de rede única (tecido) que suporta múltiplas outras arquiteturas de rede, incluindo Ethernet e Omni-Path. Os sleds, na modalidade ilustrativa, são acoplados a comutadores através de fibras ópticas, que proporcionam maior largura de banda e
Petição 870190044159, de 10/05/2019, pág. 231/318
217/232 menor latência do que cabeamento típico de pares twister (por exemplo, Categoria 5, Categoria 5e, Categoria 6, etc.). Devido à alta largura de banda, interconexões de baixa latência e arquitetura de rede, o centro de dados 5700 pode, em uso, reunir recursos, como memória, aceleradores (por exemplo, aceleradores gráficos, FPGAs, ASICs, etc.) e unidades de armazenamento de dados que são desagregados fisicamente e os fornecem para computar recursos (por exemplo, processadores) conforme necessário, permitindo que os recursos de computação acessem os recursos em pool como se fossem locais. O centro de dados ilustrativo 5700 também recebe informações de uso para os vários recursos, prevê o uso de recursos para diferentes tipos de cargas de trabalho com base no uso de recursos anteriores e realoca dinamicamente os recursos com base nessas informações.
[00517] Os racks 5702A, 5702B, 5702C, 5702D do centro de dados 5700 podem incluir recursos de projeto físico que facilitam a automação de uma variedade de tipos de tarefas de manutenção. Por exemplo, o centro de dados 5700 pode ser implementado usando racks projetados para serem acessados por robôs, e para aceitar e abrigar sleds de recursos manipuláveis por robôs. Além disso, na modalidade ilustrativa, os racks 5702A, 5702B, 5702C, 5702D incluem fontes de alimentação integradas que recebem uma tensão maior do que a típica para fontes de energia. A tensão aumentada permite que as fontes de energia forneçam energia adicional aos componentes em cada sled, permitindo que os componentes operem em frequências mais altas do que as típicas. A Figura 58 ilustra uma configuração lógica exemplificativa de um rack 202 do centro de dados 5700. Como mostrado na Figura 58, o rack 5802 pode geralmente abrigar uma pluralidade de sleds, cada um dos quais pode compreender um conjunto respectivo de recursos físicos. No exemplo particular não
Petição 870190044159, de 10/05/2019, pág. 232/318
218/232 limitativo representado na Figura 58, o rack 5802 abriga sleds 5804-1A 5804-4 compreendendo os respectivos conjuntos de recursos físicos 58 05-1A 58 05-4, cada um dos quais constitui uma parcela do conjunto coletivo de recursos físicos 58 06 englobados em rack 5802. Em relação à Figura 1, se o rack 5802 for representativo de - por exemplo - rack 102A, então os recursos físicos 5806 podem corresponder aos recursos físicos 105A compreendidos no rack 102A. No contexto deste exemplo, os recursos físicos 105A podem, portanto, ser constituídos pelos respectivos conjuntos de recursos físicos, incluindo recursos de armazenamento físico 5805-1, recursos de aceleração física 5805-2, recursos de memória física 5804-3 e recursos físicos de computação 58 05-5 compreendidos nos sleds 5804-1A 5804-4 do rack 5802. As modalidades não estão limitadas a este exemplo. Cada sled pode conter um pool de cada um dos vários tipos de recursos físicos (por exemplo, computação, memória, acelerador, armazenamento). Por ter sleds roboticamente acessíveis e manipuláveis por robôs que compreendem recursos desagregados, cada tipo de recurso pode ser atualizado independentemente um do outro e com sua própria taxa de atualização otimizada.
[00518] A Figura 59 ilustra um exemplo de um centro de dados 5900 que pode geral mente ser representativo de um em/para o qual uma ou mais técnicas aqui descritas podem ser implementadas de acordo com várias modalidades. No exemplo particular não limitativo representado na Figura 59, centro de dados 5900 compreende racks 5902-1A 5902-32. Em várias modalidades, as cremalheiras do centro de dados 5900 podem ser dispostas de tal modo a definir e/ou acomodar várias vias de acesso. Por exemplo, como mostrado na Figura 59, os racks do centro de dados 5900 podem ser dispostos de modo a definir e/ou acomodar vias de acesso 5911 A, 5911B, 5911C e 5911 D. Em algumas modalidades, a presença de tais vias de acesso
Petição 870190044159, de 10/05/2019, pág. 233/318
219/232 pode geralmente permitir que equipamentos de manutenção automatizados, como equipamentos de manutenção robótica, acessem fisicamente o equipamento de computação alojado nos diversos racks do centro de dados 5900 e executem tarefas de manutenção automatizadas (por exemplo, sled, atualize um sled). Em várias modalidades, as dimensões das vias de acesso 5911 A, 5911B, 5911C e 5911 D, as dimensões dos racks 5902-1A 5902-32, e/ou um ou mais outros aspectos da disposição física dos dados o centro 5900 pode ser selecionado para facilitar tais operações automatizadas. As modalidades não são limitadas neste contexto.
[00519] Figura 60 ilustra um exemplo de um centro de dados 6000 que pode geralmente ser representativo de um em/para o qual uma ou mais técnicas aqui descritas podem ser implementadas de acordo com várias modalidades. Como mostrado na Figura 60, o centro de dados 6000 pode apresentar um tecido óptico 6012. O tecido óptico 6012 pode compreender geralmente uma combinação de meios de sinalização ópticos (tal como cablagem óptica) e infraestrutura de comutação óptica através da qual qualquer sled particular no centro de dados 6000 pode enviar sinais para (e receber sinais de) cada um dos outros sleds no centro de dados 6000. A conectividade de sinalização que o tecido óptico 6012 proporciona a qualquer sled dado pode incluir conectividade tanto a outros sleds em um mesmo rack como sleds em outros racks. No exemplo particular não limitativo representado na Figura 60, centro de dados 6000 inclui quatro racks 6002A a 6002D. Racks 6002A a 6002D alojam os respectivos pares de sleds 6004A-1 e 6004A-2, 6004B-1 e 6004B-2, 6004C-1 e 6004C-2 e 6004D-1 e 6004D-2. Assim, neste exemplo, o centro de dados 6000 compreende um total de oito sleds. Através de tecido óptico 6012, cada um desses sleds pode possuir conectividade de sinalização com cada um dos outros sete sleds no centro de dados 6000. Por exemplo, através de
Petição 870190044159, de 10/05/2019, pág. 234/318
220/232 tecido óptico 6012, o sled 6004A-1 no rack 6002A pode possuir conectividade de sinalização com sled 6004A-2 no rack 6002A, assim como os seis outros sleds 6004B-1, 6004B-2, 6004C-1, 6004C-2, 6004D-1 e 6004D-2 que são distribuídos entre os outros racks 6002B, 6002C e 6002D do centro de dados 6000. As modalidades não se limitam a este exemplo.
[00520] A Figura 5 ilustra uma visão geral de um esquema de conectividade 500 que geral mente pode ser representativo da conectividade de camada de enlace que pode ser estabelecida em algumas modalidades entre os vários sleds de um centro de dados, como qualquer exemplo de centro de dados 5700, 5900 e 6000 das FIGs. 57, 59 e 60. O esquema de conectividade 6100 pode ser implementado usando uma malha óptica que possui uma infraestrutura de comutação óptica de modo duplo 6114. A infraestrutura de comutação óptica de modo duplo 61 geralmente pode compreender uma infraestrutura de comutação capaz de receber comunicações de acordo com múltiplos protocolos de camada de ligação através de um mesmo conjunto unificado de meios de sinalização óptica, e comutando adequadamente tais comunicações. Em várias modalidades, a infraestrutura de comutação óptica de modo duplo 6114 pode ser implementada utilizando um ou mais comutadores ópticos de modo duplo 6115. Em várias modalidades, os comutadores ópticos de modo duplo 6115 podem geralmente compreender comutadores de alto raio. Em algumas modalidades, os comutadores ópticos de modo duplo 6115 podem compreender comutadores de camadas múltiplas, tais como comutadores de quatro camadas. Em várias modalidades, os comutadores ópticos de modo duplo 6115 podem apresentar fotónica de silício integrada que lhes permite mudar comunicações com latência significativamente reduzida em comparação com dispositivos de comutação convencionais. Em
Petição 870190044159, de 10/05/2019, pág. 235/318
221/232 algumas modalidades, os comutadores ópticos de modo duplo 6115 podem constituir comutadores de folhas 6130 em uma arquitetura de coluna de folha, incluindo adicionalmente um ou mais comutadores de coluna óptica de modo duplo 6120.
[00521] Em várias modalidades, os comutadores ópticos de modo duplo podem ser capazes de receber comunicações de protocolo Ethernet portadoras de protocolo de Internet (pacotes IP) e comunicações de acordo com um segundo protocolo de camada de ligação de computação de alto desempenho (HPC), Omni-Path Architecture, Infiniband) via mídia de sinalização óptica de um tecido óptico. Como refletido na Figura 61 A, em relação a qualquer par particular de sleds 6104A e 6104B que possuam conectividade de sinalização óptica com a tela óptica, o esquema de conectividade 6100 pode assim fornecer suporte para conectividade de camada de enlace através de enlaces Ethernet e enlaces HPC. Assim, as comunicações Ethernet e HPC podem ser suportadas por uma única malha de comutação de alta largura de banda e baixa latência. As modalidades não estão limitadas a este exemplo.
[00522] A Figura 61B ilustra uma visão geral de uma arquitetura de rack 600 que pode ser representativa de uma arquitetura de qualquer um dos racks descritos nas FIGs. 57 a 60 de acordo com algumas modalidades. Como refletido na Figura 61B, arquitetura de rack 600 pode geralmente apresentar uma pluralidade de espaços de sled nos quais sleds podem ser inseridos, cada um dos quais pode ser acessível por robôs através de uma região de acesso de rack 601. No exemplo particular não limitativo representado na Figura 61B, arquitetura de rack 6100 apresenta cinco espaços de sled 6103-1A 6103-5. Espaços de sled 6103-1A 6103-5 apresentam os respectivos módulos de conectores multiuso (MPCMs) 6116-1A 6116-5. A Figura 6 1C é um diagrama detalhado de uma porção da arquitetura de rack
Petição 870190044159, de 10/05/2019, pág. 236/318
222/232
6100 da Figura 61B. Como mostrado na Figura 61C, quando uma corrediça é inserida em qualquer um dos espaços de deslizamento 6103-1A 6103-5, o MPCM correspondente (por exemplo, MPCM 61163) pode acoplar-se a uma contrapartida MPCM 6120 do sled inserido. Esse acoplamento pode fornecer conectividade ao sled inserido para infraestrutura de sinalização e infraestrutura de energia do rack no qual ele está hospedado.
[00523] Incluídos entre os tipos de sleds a serem acomodados pela arquitetura de rack 6100 podem ser um ou mais tipos de sleds que apresentam recursos de expansão. A Figura 62 ilustra um exemplo de um sled 6204 que pode ser representativo de um sled de tal tipo. Como mostrado na Figura 62, sled 6204 pode compreender um conjunto de recursos físicos 6205, bem como um MPCM 6216 concebido para acoplar com um homólogo MPCM quando o sled 6204 é inserido em um espaço de sled tal como qualquer um dos espaços de sled 603-1A 603 -5 da Figura 61 A. O sled 6204 também pode apresentar um conector de expansão 6217. O conector de expansão 6217 geralmente pode compreender um soquete, tempo ou outro tipo de elemento de conexão capaz de aceitar um ou mais tipos de módulos de expansão, como um sled de expansão 6218 Por acoplamento com um conector homólogo no sled de expansão 6218, o conector de expansão 6217 pode fornecer recursos físicos 6205 com acesso a recursos de computação suplementares 6205B que residem no sled de expansão 6218. As modalidades não são limitadas neste contexto.
[00524] A Figura 63 ilustra um exemplo de uma arquitetura de rack 800 que pode ser representativa de uma arquitetura de rack que pode ser implementada de modo a fornecer suporte para sleds com capacidades de expansão, tal como o sled 6204 da Figura 62. No exemplo particular não limitativo representado na Figura 63, a
Petição 870190044159, de 10/05/2019, pág. 237/318
223/232 arquitetura de rack 6300 inclui sete espaços de sled 6303-1A 6303-7, que apresentam os respectivos MPCM 6316-1A 6316-7. Espaços de sled 6303-1A 6303-7 incluem respectivas regiões primárias 6303-1A para 6303-7A e respectivas regiões de expansão 6303-1B a 6303-7B. Em relação a cada espaço de sled, quando o MPCM correspondente é acoplado a um equivalente MPCM de um sled inserido, a região primária pode geralmente constituir uma região do espaço de sled que acomoda fisicamente o sled inserido. A região de expansão pode geralmente constituir uma região do espaço de sled que pode acomodar fisicamente um módulo de expansão, tal como o trilho de expansão 6218 da Figura 62, no caso em que o sled inserido é configurado com tal módulo.
[00525] A Figura 64 ilustra um exemplo de um rack 902 que pode ser representativo de um rack implementado de acordo com a arquitetura de rack 800 da Figura 8 de acordo com algumas modalidades. No exemplo particular não limitativo representado na Figura 64, o rack 6402 apresenta sete espaços de sled 6403-1A 64037, que incluem respectivas regiões primárias 6403-1A a 6403-7A e respectivas regiões de expansão 6403-1B a 6403-7B. Em várias modalidades, o controle de temperatura no rack 6402 pode ser implementado usando um sistema de resfriamento de ar. Por exemplo, como refletido na Figura 64, o rack 6402 pode apresentar uma pluralidade de ventiladores 6419 que estão geralmente dispostos para proporcionar arrefecimento a ar dentro dos vários espaços deslizantes 6403-1A 6403-7. Em algumas modalidades, a altura do espaço do sled é maior que a altura do servidor 1U convencional. Em tais modalidades, os ventiladores 6419 podem geralmente compreender ventiladores de arrefecimento de diâmetro grande e relativamente lentos quando comparados com os ventiladores utilizados nas configurações de rack convencionais. A operação de ventiladores de
Petição 870190044159, de 10/05/2019, pág. 238/318
224/232 refrigeração de diâmetro maior em velocidades mais baixas pode aumentar a vida útil do ventilador em relação aos ventiladores de arrefecimento de diâmetro menor que operam em velocidades mais altas, enquanto ainda fornece a mesma quantidade de resfriamento. Os sleds são fisicamente mais rasos que as dimensões convencionais do rack. Além disso, os componentes são dispostos em cada sled para reduzir o sombreamento térmico (ou seja, não dispostos em série na direção do fluxo de ar). Como resultado, os sleds mais largos e rasos permitem um aumento no desempenho do dispositivo porque os dispositivos podem ser operados em um envelope térmico maior (por exemplo, 250W) devido ao resfriamento aprimorado (ou seja, sem sombreamento térmico, mais espaço entre dispositivos, mais espaço para dissipadores de calor maiores, etc.).
[00526] Os MPCMs 6416-1A 6416-7 podem ser configurados para fornecer aos sleds inseridos acesso à energia fornecida pelos respectivos módulos de energia 6420-1A 6420-7, cada um dos quais pode consumir energia de uma fonte de energia externa 6421. Em várias modalidades, a fonte de energia externa 6421 pode fornecer energia de corrente alternada (CA) ao rack 6402, e os módulos de energia 6420-1A 6420-7 podem ser configurados para converter essa energia CA para corrente contínua (DC) para ser originado para inserir sleds. Em algumas modalidades, por exemplo, os módulos de energia 6420-1A 6420-7 podem ser configurados para converter energia CA de 277 volts em energia DC de 12 volts para fornecimento a sleds inseridos através dos respectivos MPCMs 6416-1A 6416-7. As modalidades não estão limitadas a este exemplo.
[00527] Os MPCMs 6416-1A 6416-7 também podem ser configurados para fornecer sleds inseridos com conectividade de sinalização óptica a uma infraestrutura de comutação óptica de modo duplo 6414, que pode ser a mesma - ou similar a - modo dual
Petição 870190044159, de 10/05/2019, pág. 239/318
225/232 infraestrutura de comutação óptica 514 da Figura 5. Em várias modalidades, os conectores ópticos contidos nos MPCMs 6416-1A 6416-7 podem ser projetados para acoplar os conectores ópticos correspondentes contidos nos MPCMs de sleds inseridos para fornecer conectividade de sinalização óptica aos sleds à infraestrutura de comutação óptica de modo duplo 6414 através dos respectivos comprimentos de cabeamento óptico 6422-1A 6422-7. Em algumas modalidades, cada comprimento de cabeamento óptico pode se estender de seu MPCM correspondente a um tear de interconexão óptica 6423 que é externo aos espaços de sled do rack 6402. Em várias modalidades, o sled de interconexão óptica 6423 pode ser disposto para passar um poste de suporte ou outro tipo de elemento de suporte de carga do rack 6402. As modalidades não estão limitadas neste contexto. Como os sleds inseridos se conectam a uma infraestrutura de comutação óptica via MPCMs, os recursos normalmente gastos na configuração manual do cabeamento do rack para acomodar um sled recém-inserido podem ser salvos.
[00528] A Figura 65 ilustra um exemplo de um sled 6504 que pode ser representativo de um sled concebido para utilização em conjunto com o suporte 6402 da Figura 64, de acordo com algumas modalidades. O sled 6504 pode apresentar um MPCM 6516 que compreende um conector óptico 6516A e um conector de alimentação 6516B, e que é projetado para acoplar com um equivalente MPCM de um espaço de sled em conjunto com a inserção de MPCM 6516 naquele espaço de sled. O acoplamento MPCM 6516 com tal contraparte MPCM pode fazer com que o conector de energia 6516 se acople com um conector de energia compreendido na contraparte MPCM. Isto pode geralmente permitir que os recursos físicos 6505 para o sled 6504 para fonte de energia de uma fonte externa, via conector de energia 6516 e mídia de transmissão de energia 6524 que
Petição 870190044159, de 10/05/2019, pág. 240/318
226/232 condutivamente conecte o conector de energia 6516 a recursos físicos 6505.
[00529] O sled 6504 também pode incluir circuitos de interface de rede óptica de modo duplo 6526. O circuito de interface de rede óptica de modo duplo 6526 geralmente pode compreender um circuito que é capaz de se comunicar através de mídia de sinalização óptica de acordo com cada um dos múltiplos protocolos de camada de enlace suportado pela infraestrutura de comutação óptica de modo duplo 6414 da Figura 64. Em algumas modalidades, os circuitos de interface de rede óptica de modo duplo 6526 podem ser capazes tanto de comunicações de protocolo Ethernet como de comunicações de acordo com um segundo protocolo de alto desempenho. Em várias modalidades, os circuitos de interface de rede óptica de modo duplo 6526 podem incluir um ou mais módulos de transceptor óptico 6527, cada um dos quais pode ser capaz de transmitir e receber sinais ópticos sobre cada um ou mais canais ópticos. As modalidades não são limitadas neste contexto.
[00530] O acoplamento MPCM 6516 com uma contraparte MPCM de um espaço de sled em um determinado rack pode fazer com que o conector óptico 6516A se acople com um conector óptico compreendido na contraparte MPCM. Isso pode geralmente estabelecer conectividade óptica entre o cabeamento óptico do circuito de interface de rede óptica de sled e de modo duplo 6526, através de cada um de um conjunto de canais óticos 6525. O circuito de interface de rede óptica de modo duplo 6526 pode se comunicar com os recursos físicos 6505 de sled 6504 via meios de sinalização elétricos 6528. Além das dimensões dos sleds e arranjo dos componentes nos sleds para proporcionar resfriamento aprimorado e permitir operação em um envelope térmico relativamente maior (por exemplo, 250W), conforme descrito acima com referência à Figura 64, em algumas
Petição 870190044159, de 10/05/2019, pág. 241/318
227/232 modalidades, um sled pode incluir um ou mais recursos adicionais para facilitar o resfriamento a ar, como um heatpipe e/ou dissipadores de calor dispostos para dissipar o calor gerado por recursos físicos 6505. É digno de nota que embora o sled de exemplo 6504 representado na FIGURA 65 não possui um conector de expansão, qualquer sled dado que apresenta os elementos de desenho do sled 6504 também pode apresentar um conector de expansão de acordo com algumas modalidades. As modalidades não são limitadas neste contexto.
[00531] A Figura 66 ilustra um exemplo de um centro de dados 6600 que pode geral mente ser representativo de um em/para o qual uma ou mais técnicas aqui descritas podem ser implementadas de acordo com várias modalidades. Como refletido na Figura 66, um quadro de gestão de infraestrutura físico 6650A pode ser implementado para facilitar a gestão de uma infraestrutura físico 6600A do centro de dados 6600. Em várias modalidades, uma função de quadro de gestão de infraestrutura físico 6650A pode ser para gerir as funções de manutenção automática dentro do centro de dados 6600, como o uso de equipamentos de manutenção robótica para atender equipamentos de computação dentro da infraestrutura física 6600A. Em algumas modalidades, a infraestrutura física 6600A pode apresentar um sistema de telemetria avançado que realiza relatórios de telemetria suficientemente robustos para suportar o gerenciamento automatizado remoto da infraestrutura física 6600A. Em várias modalidades, as informações de telemetria fornecidas por um sistema de telemetria avançado podem suportar recursos como capacidades de previsão/prevenção de falhas e capacidade de planejamento de capacidade. Em algumas modalidades, a estrutura de gerenciamento de infraestrutura física 6650A também pode ser configurada para gerenciar a autenticação de componentes de infraestrutura física
Petição 870190044159, de 10/05/2019, pág. 242/318
228/232 usando técnicas de atestado de hardware. Por exemplo, os robôs podem verificar a autenticidade dos componentes antes da instalação analisando as informações coletadas de uma etiqueta de identificação por radiofrequência (RFID) associada a cada componente a ser instalado. As modalidades não são limitadas neste contexto.
[00532] Como mostrado na Figura 66, a infraestrutura física 6600A do centro de dados 6600 pode compreender um tecido óptico 6612, que pode incluir uma infraestrutura de comutação óptica de modo duplo 6614. O tecido óptico 6612 e a infraestrutura de comutação óptica de modo duplo 6614 podem ser os mesmos como - ou semelhante a - tecido óptico 412 da Figura 4 e infraestrutura de comutação óptica de modo duplo 514 da Figura 5, respectivamente, e podem fornecer conectividade multiprotocolo de alta largura de banda, baixa latência entre sled de centro de dados 6600. Como discutido acima, com referência à Figura 1, em várias modalidades, a disponibilidade de tal conectividade pode tornar possível desagregar e dinamicamente agrupar recursos, tais como aceleradores, memória e armazenamento. Em algumas modalidades, por exemplo, um ou mais sleds de acelerador agrupados 6630 podem ser incluídos entre a infraestrutura física 6600A do centro de dados 6600, cada um dos quais pode compreender um conjunto de recursos de acelerador como coprocessadores e/ou FPGAs, por exemplo - disponível globalmente para outros sleds através de tecido óptico 6612 e infraestrutura de comutação opcional de modo duplo 6614.
[00533] Em outro exemplo, em várias modalidades, um ou mais sleds de armazenamento agrupados 6632 podem ser incluídos entre a infraestrutura física 6600A do centro de dados 6600, cada um dos quais pode compreender um conjunto de recursos de armazenamento que está disponível global mente acessível para outros sleds através de tecido óptico 6612 e infraestrutura de comutação óptica de modo
Petição 870190044159, de 10/05/2019, pág. 243/318
229/232 duplo 6614. Em algumas modalidades, tais sleds de armazenamento agrupados 6632 podem compreender conjuntos de dispositivos de armazenamento de estado sólido, como drives de estado sólido (SSDs). Em várias modalidades, um ou mais sleds de processamento de alta performance 6634 podem ser incluídos na infraestrutura física 6600A do centro de dados 6600. Em algumas modalidades, sleds de processamento de alta performance 6634 podem compreender conjuntos de processadores de alto desempenho, como bem como recursos de resfriamento que aprimoram o resfriamento do ar para produzir um envelope térmico maior de até 250W ou mais. Em várias modalidades, qualquer dado de sled de alto processamento de desempenho 6634 pode caracterizar uma expansão de conector 6617 que pode aceitar um sled de expansão de memória distante, de tal modo que a memória distante que é localmente disponível para que o sled de alto processamento de desempenho 6634 é desagregado dos processadores e perto da memória compreendida naquele sled. Em algumas modalidades, um sled de processamento de desempenho de alta performance 6634 pode ser configurado com memória distante usando um suporte de expansão que compreende armazenamento SSD de baixa latência. A infraestrutura óptica permite que recursos de computação em um sled utilizem recursos de acelerador remoto/FPGA, memória e/ou SSD que são desagregados em um sled localizado no mesmo rack ou em qualquer outro rack no centro de dados. Os recursos remotos podem ser localizados um comutador saltando ou dois comutadores saltando para longe na arquitetura de rede de folha espinhal descrita acima com referência à Figura 61. As modalidades não são limitadas neste contexto.
[00534] Em várias modalidades, uma ou mais camadas de captação pode ser aplicada para os recursos físicos de infraestrutura físico 6600A, a fim de definir uma infraestrutura virtual, tal como uma
Petição 870190044159, de 10/05/2019, pág. 244/318
230/232 infraestrutura definida por software 6600B. Em algumas modalidades, os recursos de computação virtual 6636 do modo de infraestrutura definida por software 6600B podem ser alocados para apoiar a prestação de serviços em nuvem 6640. Em várias modalidades, em particular conjuntos de recursos de computação virtual 6636 podem ser agrupados para provisão para serviços em nuvem 6640 sob a forma de serviços SDI 6638. Exemplos de serviços em nuvem 6640 podem incluir - sem limitação - serviços de software como serviço (SaaS) 6642, serviços de plataforma como serviço (PaaS) 6644 e infraestrutura como serviços (laaS) 6646.
[00535] Em algumas modalidades, o gerenciamento de infraestrutura definida por software 6600B pode ser conduzido usando uma estrutura virtual de gerenciamento de infraestrutura 6650B. Em várias modalidades, o quadro de gerenciamento de infraestruturas virtuais 6650B pode ser projetado para implementar técnicas de carga de trabalho de impressão digital e/ou técnicas de aprendizado de máquina em conjunto com o gerenciamento de alocação de recursos de computação virtual 6636 e/ou serviços SDI 6638 para serviços de nuvem 6640. Em algumas modalidades, a estrutura virtual de gerenciamento de infraestrutura pode usar/consultar dados de telemetria em conjunto com a execução de tal alocação de recursos. Em várias modalidades, uma estrutura de gerenciamento de aplicativo/serviço 6650C pode ser implementada para fornecer capacidades de gerenciamento de QoS para serviços em nuvem 6640. As modalidades não são limitadas neste contexto.
[00536] Operações em diagramas de fluxo podem ter sido descritas com referência a modalidades exemplares de outras figuras. No entanto, deve entender-se que as operações dos diagramas de fluxo podem ser realizadas por modalidades da invenção para além das discutidas com referência a outras figuras, e as modalidades da
Petição 870190044159, de 10/05/2019, pág. 245/318
231/232 invenção discutidas com referência a outras figuras podem realizar operações diferentes das discutidas com referência aos diagramas de fluxo. Além disso, enquanto os diagramas de fluxo nas figuras mostram uma ordem particular de operações realizadas por certas modalidades da invenção, deve ser entendido que tal ordem é exemplar (por exemplo, modalidades alternativas podem realizar as operações em uma ordem diferente, combinar certas operações, sobrepor certas operações, etc.).
[00537] Uma ou mais partes da modalidade da invenção pode ser implementada utilizando-se diferentes combinações de software, firmware e/ou hardware. As modalidades podem ser implementadas utilizando um dispositivo eletrônico que armazena e transmite (internamente e/ou com outros dispositivos eletrônicos através de uma rede) código (que é composto por instruções de software e que é por vezes referido como código de programa de computador ou um programa de computador) e/ou dados usando mídia legível por máquina (também chamada de mídia legível por computador), como mídia de armazenamento legível por máquina (por exemplo, discos magnéticos, discos ópticos, memória somente leitura (ROM), dispositivos de memória flash, memória de mudança de estágio) e máquina Meios de transmissão legíveis (também designados por portadora) (por exemplo, sinais elétricos, ópticos, de rádio, acústicos ou outros tipos de sinais propagados - como ondas portadoras, sinais infravermelhos). Assim, um dispositivo eletrônico (por exemplo, um computador) pode incluir hardware e software, como um conjunto de um ou mais processadores acoplados a uma ou mais mídias de armazenamento legíveis por máquina para armazenar código para execução no conjunto de processadores e/ou armazenamento de dados. Por exemplo, um dispositivo eletrônico pode incluir memória não volátil contendo o código, já que a memória não volátil pode
Petição 870190044159, de 10/05/2019, pág. 246/318
232/232 persistir código/dados mesmo quando o dispositivo eletrônico é desligado (quando a energia é removida) e, enquanto o dispositivo eletrônico é conectado, parte do código a ser executado pelo(s) processador(es) desse dispositivo eletrônico é tipicamente copiada da memória não volátil mais lenta para a memória volátil (por exemplo, memória de acesso aleatório dinâmica (DRAM), memória de acesso aleatório estática (SRAM) ) desse dispositivo eletrônico. Dispositivos eletrônicos típicos também incluem um conjunto ou uma ou mais interfaces de rede física para estabelecer conexões de rede (para transmitir e/ou receber código e/ou dados usando sinais de propagação) com outros dispositivos eletrônicos.
[00538] Embora a invenção tenha sido descrita em termos de várias modalidades, os versados na técnica irão reconhecer que a invenção não está limitada às modalidades descritas, pode ser praticada com modificações e alterações dentro do espírito e escopo das reivindicações anexas. Portanto, a descrição deve ser considerada como ilustrativa em vez de limitativa.

Claims (4)

  1. REIVINDICAÇÕES
    1. Processador caracterizado pelo fato de que compreendendo:
    um decodificador para decodificar uma instrução para zerar uma linha de cache;
    uma unidade de execução, acoplada ao decodificador e reativa à decodificação da instrução, para emitir um comando de gravação para iniciar uma gravação de zeros no tamanho da linha de cache em um endereço de memória;
    um cache coerente, acoplado à unidade de execução, para receber o comando de gravação, para determinar se há um golpe no cache coerente reativo ao comando de gravação, para determinar se um estado de protocolo de coerência de cache da linha de cache com golpe é um estado modificado ou um estado exclusivo, para configurar uma linha de cache para indicar todos os zeros quando o estado do protocolo de coerência de cache é o estado modificado ou o estado exclusivo, e para emitir o comando de gravação em direção a uma interconexão quando houver uma recepção não reativa ao comando de gravação;
    a interconexão, reativa à recepção do comando de gravação, para emitir uma espionagem para cada um de uma pluralidade de outros caches coerentes para os quais deve ser determinado se há um golpe, em que a interconexão, ou a unidade de execução reativa a uma mensagem da interconexão, leva uma linha de cache em um dos caches coerentes a ser configurada para indicar todos os zeros quando o comando de gravação e a espionagem não levaram a gravação de zeros no tamanho da linha de cache a ser realizada.
  2. 2. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que o cache coerente também leva esse
    Petição 870190044159, de 10/05/2019, pág. 248/318
    2/2 estado do protocolo de coerência de cache da linha de cache a ser um estado inválido e emite o comando de gravação em direção à interconexão quando o estado do protocolo de coerência de cache da linha de cache com golpe não é o estado modificado ou o estado exclusivo.
  3. 3. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que o decodificador e a unidade de execução são parte de um primeiro núcleo e em que a pluralidade de caches coerentes inclui um cache coerente de um segundo núcleo.
  4. 4. Processador caracterizado pelo fato de que compreende: um decodificador para decodificar uma instrução para zerar uma linha de cache;
    uma unidade de execução, acoplada ao decodificador, para emitir um comando reativo ao decodificador da instrução;
    uma interconexão, reativa à recepção do comando, para emitir uma espionagem para cada um de uma pluralidade de caches coerentes para os quais deve ser determinado se há um golpe, em que a unidade de execução por si só, a interconexão ou a unidade de execução reativa a uma mensagem da interconexão, levam uma linha de cache em um da pluralidade de caches coerentes acoplados à unidade de execução a ser configurada para indicar todos os zeros quando a espionagem não levou a gravação de zeros na linha de cache a ser realizada.
BR112019009566A 2016-12-12 2016-12-12 aparelhos e métodos para uma arquitetura de processador BR112019009566A2 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2016/066242 WO2018111228A1 (en) 2016-12-12 2016-12-12 Apparatuses and methods for a processor architecture

Publications (1)

Publication Number Publication Date
BR112019009566A2 true BR112019009566A2 (pt) 2019-08-06

Family

ID=62559007

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112019009566A BR112019009566A2 (pt) 2016-12-12 2016-12-12 aparelhos e métodos para uma arquitetura de processador

Country Status (10)

Country Link
EP (2) EP3552108B1 (pt)
JP (1) JP7095208B2 (pt)
KR (1) KR20190086669A (pt)
CN (1) CN109952566A (pt)
BR (1) BR112019009566A2 (pt)
DE (1) DE112016007516T5 (pt)
ES (1) ES2895266T3 (pt)
PL (1) PL3552108T3 (pt)
TW (2) TWI751222B (pt)
WO (1) WO2018111228A1 (pt)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180150256A1 (en) 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10929139B2 (en) 2018-09-27 2021-02-23 Qualcomm Incorporated Providing predictive instruction dispatch throttling to prevent resource overflows in out-of-order processor (OOP)-based devices
CN110032407B (zh) 2019-03-08 2020-12-22 创新先进技术有限公司 提升cpu并行性能的方法及装置和电子设备
US11210100B2 (en) 2019-01-08 2021-12-28 Apple Inc. Coprocessor operation bundling
GB2581140A (en) 2019-01-31 2020-08-12 Ernst & Young Gmbh System and method of obtaining audit evidence
US10983797B2 (en) 2019-05-28 2021-04-20 International Business Machines Corporation Program instruction scheduling
TWI748513B (zh) * 2020-06-12 2021-12-01 鴻海精密工業股份有限公司 資料處理方法、系統、電子裝置及存儲介質
US11314657B1 (en) * 2020-12-02 2022-04-26 Centaur Technology, Inc. Tablewalk takeover
CN113626205B (zh) * 2021-09-03 2023-05-12 海光信息技术股份有限公司 处理器、物理寄存器管理方法及电子装置
TWI779923B (zh) * 2021-11-11 2022-10-01 南亞科技股份有限公司 圖案驗證系統及其操作方法
CN115858420B (zh) * 2023-02-23 2023-05-12 芯砺智能科技(上海)有限公司 用于支持多处理器架构的系统缓存架构和芯片

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03231345A (ja) * 1990-02-06 1991-10-15 Fujitsu Ltd キャッシュ装置
GB2260429B (en) * 1991-10-11 1995-05-24 Intel Corp Versatile cache memory
US5551001A (en) * 1994-06-29 1996-08-27 Exponential Technology, Inc. Master-slave cache system for instruction and data cache memories
US5809548A (en) * 1996-08-30 1998-09-15 International Business Machines Corporation System and method for zeroing pages with cache line invalidate instructions in an LRU system having data cache with time tags
US6374330B1 (en) * 1997-04-14 2002-04-16 International Business Machines Corporation Cache-coherency protocol with upstream undefined state
CN1230721A (zh) * 1998-02-17 1999-10-06 国际商业机器公司 具有指令和数据的悬停(h)状态的高速缓存相关协议
US6345339B1 (en) * 1998-02-17 2002-02-05 International Business Machines Corporation Pseudo precise I-cache inclusivity for vertical caches
US6178461B1 (en) * 1998-12-08 2001-01-23 Lucent Technologies Inc. Cache-based compaction technique for internet browsing using similar objects in client cache as reference objects
JP4123621B2 (ja) * 1999-02-16 2008-07-23 株式会社日立製作所 主記憶共有型マルチプロセッサシステム及びその共有領域設定方法
KR100373849B1 (ko) * 2000-03-13 2003-02-26 삼성전자주식회사 어소시어티브 캐시 메모리
US6745297B2 (en) * 2000-10-06 2004-06-01 Broadcom Corporation Cache coherent protocol in which exclusive and modified data is transferred to requesting agent from snooping agent
US7454577B2 (en) * 2005-02-10 2008-11-18 International Business Machines Corporation Data processing system and method for efficient communication utilizing an Tn and Ten coherency states
US7290094B2 (en) 2005-05-17 2007-10-30 International Business Machines Corporation Processor, data processing system, and method for initializing a memory block to an initialization value without a cache first obtaining a data valid copy
US7707361B2 (en) * 2005-11-17 2010-04-27 Apple Inc. Data cache block zero implementation
US7451277B2 (en) * 2006-03-23 2008-11-11 International Business Machines Corporation Data processing system, cache system and method for updating an invalid coherency state in response to snooping an operation
US7475196B2 (en) 2006-03-23 2009-01-06 International Business Machines Corporation Processor, data processing system, and method for initializing a memory block in a data processing system having multiple coherency domains
US7484042B2 (en) * 2006-08-18 2009-01-27 International Business Machines Corporation Data processing system and method for predictively selecting a scope of a prefetch operation
CN101944012B (zh) * 2009-08-07 2014-04-23 威盛电子股份有限公司 指令处理方法以及其所适用的超纯量管线微处理器
US9424190B2 (en) * 2011-08-19 2016-08-23 Freescale Semiconductor, Inc. Data processing system operable in single and multi-thread modes and having multiple caches and method of operation
US9684603B2 (en) * 2015-01-22 2017-06-20 Empire Technology Development Llc Memory initialization using cache state
WO2016141817A1 (zh) * 2015-03-06 2016-09-15 华为技术有限公司 数据备份装置及方法

Also Published As

Publication number Publication date
EP3552108B1 (en) 2021-08-18
CN109952566A (zh) 2019-06-28
EP3552108A4 (en) 2020-07-15
DE112016007516T5 (de) 2019-10-02
KR20190086669A (ko) 2019-07-23
TWI751222B (zh) 2022-01-01
ES2895266T3 (es) 2022-02-18
EP3889787B1 (en) 2023-11-01
EP3552108A1 (en) 2019-10-16
PL3552108T3 (pl) 2022-01-03
WO2018111228A1 (en) 2018-06-21
TW202219748A (zh) 2022-05-16
JP2020513605A (ja) 2020-05-14
JP7095208B2 (ja) 2022-07-05
TW201823971A (zh) 2018-07-01
EP3889787A1 (en) 2021-10-06

Similar Documents

Publication Publication Date Title
US20220237123A1 (en) Apparatuses and methods for a processor architecture
TWI810166B (zh) 用於異質計算之系統,方法,及設備
BR112019009566A2 (pt) aparelhos e métodos para uma arquitetura de processador
US20190205244A1 (en) Memory system, method and computer program products
JP7164267B2 (ja) ヘテロジニアスコンピューティングのためのシステム、方法及び装置

Legal Events

Date Code Title Description
B11A Dismissal acc. art.33 of ipl - examination not requested within 36 months of filing
B11Y Definitive dismissal - extension of time limit for request of examination expired [chapter 11.1.1 patent gazette]
B350 Update of information on the portal [chapter 15.35 patent gazette]