BR102020019663A2 - algoritmo de remoção de linha de cache à base de prioridade de tecnologia de alocação de cache flexível - Google Patents

algoritmo de remoção de linha de cache à base de prioridade de tecnologia de alocação de cache flexível Download PDF

Info

Publication number
BR102020019663A2
BR102020019663A2 BR102020019663-4A BR102020019663A BR102020019663A2 BR 102020019663 A2 BR102020019663 A2 BR 102020019663A2 BR 102020019663 A BR102020019663 A BR 102020019663A BR 102020019663 A2 BR102020019663 A2 BR 102020019663A2
Authority
BR
Brazil
Prior art keywords
priority
cache
lru
llc
field
Prior art date
Application number
BR102020019663-4A
Other languages
English (en)
Inventor
Akhilesh Kumar
Neha GHOLKAR
Original Assignee
Intel Corporation
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corporation filed Critical Intel Corporation
Publication of BR102020019663A2 publication Critical patent/BR102020019663A2/pt

Links

Images

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/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • 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/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • 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
    • 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/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

A presente invenção refere-se a um algoritmo de remoção de linha de cache. Em um exemplo, um sistema inclui um cache de último nível (LLC) que tem múltiplas vias, cada uma alocada a uma dentre múltiplas prioridades, sendo que cada uma tem vias mínima e máxima para ocupar, um circuito de controle de cache (CCC) para armazenar uma linha de cache de entrada (CL) que tem uma prioridade de solicitante para uma CL inválida, se houver, de outro modo, quando a prioridade de solicitante for uma prioridade mais baixa e tiver uma ocupação de um ou mais, ou quando a ocupação está em um máximo, para remover uma CL menos utilizada recentemente (LRU) da prioridade de solicitante, de outro modo, quando a ocupação estiver entre um mínimo e um máximo, para remover uma CL LRU da prioridade de solicitante ou de uma prioridade mais baixa, de outro modo, quando a ocupação for menor que o mínimo, para remover uma CL LRU, se houver, da prioridade mais baixa, e de outro modo, para remover uma CL LRU de uma prioridade mais alta.

Description

ALGORITMO DE REMOÇÃO DE LINHA DE CACHE À BASE DE PRIORIDADE DE TECNOLOGIA DE ALOCAÇÃO DE CACHE FLEXÍVEL CAMPO DA INVENÇÃO
[0001] O campo da invenção refere-se, em geral, à arquitetura de processador de computador e, mais especificamente, a um algoritmo de remoção à base de prioridade de tecnologia de alocação de cache flexível (Flex-CAT) aprimorada para divisão de cache.
HISTÓRICO
[0002] A multilocação é uma solução comprovada para alcançar alta utilização do sistema e economia de custos por meio de compartilhamento de espaço. Em ambientes de nuvem, a multilocação pode ser alcançada por meio de virtualização, em que cada núcleo hospeda uma máquina virtual (VM) que executa aplicativos de usuário. Os paradigmas de computação emergentes, como Função como um Serviço (FaaS), empregam a conteinerização para executar múltiplas funções leves independentes em contêineres. Em um ambiente multilocatário típico, os trabalhos de prioridade alta (HP) coexistem com os trabalhos de prioridade baixa (LP) no mesmo recurso de computação, como um processador de múltiplos núcleos ou um núcleo. Os trabalhos de HP são trabalhos sensíveis à latência, enquanto os trabalhos de LP tendem a ter prazos flexíveis. Alguns trabalhos de HP exigem determinismo de desempenho, além de baixa latência. Os usuários que enviam trabalhos entram em acordos de nível de serviço (SLAs) de qualidade de serviço (QoS) com provedores de serviços de nuvem (CSPs) e dependem dos mesmos para atender às garantias de latência ou determinismo de desempenho. Os CSPs precisam atender aos SLAs mediante a limitação da variação de desempenho ou até a degradação de trabalhos de QoS ou HP causada por outros trabalhos de LP colocalizados.
BREVE DESCRIÇÃO DOS DESENHOS
[0003] A presente invenção é ilustrada a título de exemplo, e não de limitação, nas Figuras dos desenhos anexos, nos quais referências similares indicam elementos similares e nos quais:
[0004] A Figura 1 é um diagrama de blocos que ilustra componentes de processamento para executar instruções, de acordo com algumas modalidades;
[0005] A Figura 2 é um diagrama de blocos que ilustra um sistema que inclui um sistema de múltiplos núcleos para executar máquinas virtuais, de acordo algumas modalidades;
[0006] A Figura 3 é um esquema de divisão de cache exemplificativo, de acordo algumas modalidades;
[0007] A Figura 4 é um diagrama de blocos que ilustra remoções de linha de cache, de acordo algumas modalidades;
[0008] A Figura 5 é um fluxograma de blocos que ilustra um processo realizado por um circuito de controle de cache em resposta a uma solicitação de preenchimento de cache, de acordo algumas modalidades;
[0009] A Figura 6 é um fluxograma que ilustra um circuito de controle de cache que processa uma solicitação de preenchimento de cache, de acordo algumas modalidades;
[0010] As Figuras 7A a 7B são diagramas de blocos que ilustram um formato de instrução favorável de vetor genérico e modelos de instrução do mesmo, de acordo algumas modalidades da invenção;
[0011] A Figura 7A é um diagrama de blocos que ilustra um formato de instrução favorável de vetor genérico e modelos de instrução de classe A do mesmo, de acordo algumas modalidades da invenção;
[0012] A Figura 7B é um diagrama de blocos que ilustra o formato de instrução favorável de vetor genérico e modelos de instrução de classe B do mesmo, de acordo algumas modalidades da invenção;
[0013] A Figura 8A é um diagrama de blocos que ilustra um formato de instrução favorável de vetor específico exemplificativo, de acordo algumas modalidades da invenção;
[0014] A Figura 8B é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico que constituem o campo de código de operação completo, de acordo com uma modalidade;
[0015] A Figura 8C é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico que constituem o campo de índice de registro, de acordo com uma modalidade;
[0016] A Figura 8D é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico que constituem o campo de operação de aumento, de acordo com uma modalidade;
[0017] A Figura 9 é um diagrama de blocos de uma arquitetura de registro de acordo com uma modalidade;
[0018] A Figura 10A é um diagrama de blocos que ilustra tanto uma pipeline em ordem exemplificativa como uma pipeline de emissão/execução fora de ordem de renomeação de registro exemplificativa, de acordo algumas modalidades;
[0019] A Figura 10B é um diagrama de blocos que ilustra tanto uma modalidade exemplificativa de um núcleo de arquitetura em ordem como uma renomeação de registro exemplificativa, núcleo de arquitetura de emissão/execução fora de ordem a ser incluído em um processador, de acordo com algumas modalidades;
[0020] As Figuras 11A-B ilustram um diagrama de blocos de uma arquitetura de núcleo em ordem exemplificativa mais específica, cujo núcleo pode ser um dentre vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou de tipos diferentes) em um chip;
[0021] A Figura 11A é um diagrama de blocos de um único núcleo de processador, juntamente com sua conexão à rede de interconexão em matriz e com seu subconjunto local do cache de Nível 2 (L2), de acordo algumas modalidades;
[0022] A Figura 11B é uma vista expandida de parte do núcleo de processador na Figura 11A de acordo algumas modalidades;
[0023] A Figura 12 é um diagrama de blocos de um processador que pode ter mais de um núcleo, pode ter um controlador de memória integrado e pode ter gráficos integrados, de acordo algumas modalidades;
[0024] As Figuras 13 a 16 são diagramas de blocos de arquiteturas de computador exemplificativas;
[0025] A Figura 13 mostra um diagrama de blocos de um sistema, de acordo com algumas modalidades;
[0026] A Figura 14 é um diagrama de blocos de um primeiro sistema exemplificativo mais específico, de acordo com algumas modalidades;
[0027] A Figura 15 é um diagrama de blocos de um segundo sistema exemplificativo mais específico, de acordo com algumas modalidades;
[0028] A Figura 16 é um diagrama de blocos de um Sistema em um Chip (SoC), de acordo com algumas modalidades; e
[0029] A Figura 17 é um diagrama de blocos que contrasta o uso de um conversor de instrução de software para converter instruções binárias em um conjunto de instruções-origem em instruções binárias em um conjunto de instruções-alvo, de acordo algumas modalidades.
DESCRIÇÃO DETALHADA DAS MODALIDADES
[0030] Na descrição a seguir, são apresentados inúmeros detalhes específicos. Entretanto, é entendido que algumas modalidades podem ser praticadas sem esses detalhes específicos. Em outras circunstâncias, circuitos, estruturas e técnicas bem conhecidas não foram mostradas em detalhes a fim de não obscurecer o entendimento desta descrição.
[0031] As referências no relatório descritivo a “uma(1) modalidade”, “uma modalidade”, “uma modalidade de exemplo”, etc., indicam que a modalidade descrita pode incluir um recurso, estrutura ou característica, mas cada modalidade pode não necessariamente incluir o recurso, estrutura ou característica. Ademais, tais frases não estão necessariamente se referindo à mesma modalidade. Adicionalmente, quando um recurso, estrutura ou característica é descrita sobre uma modalidade, é sugerido que está dentro do conhecimento de um versado na técnica afetar tal recurso, estrutura ou característica sobre outras modalidades se explicitamente descrito.
[0032] Conforme mencionado acima, os provedores de serviços de nuvem (CSPs) precisam atender aos acordos de nível de serviço (SLAs) mediante a limitação da variação de desempenho e degradação da qualidade de serviço (QoS) de trabalhos de alto desempenho (HP) causadas por trabalhos de baixo desempenho colocalizados (LP). Em particular, as modalidades reveladas descrevem a Tecnologia de Alocação de Cache Flexível (Flex-CAT), uma solução arquitetônica que limita as remoções de cache de último nível (LLC) de HP causadas por trabalhos de LP. A abordagem Flex-CAT determina dinamicamente o número ideal de vias por conjunto, dependendo da utilização de linhas de cache (CLs) em cada conjunto de cache por várias prioridades. Os limites (número mínimo e máximo de vias) são especificados em registros específicos de modelo (MSRs) que fornecem dicas para selecionar uma vítima para remoção no momento do preenchimento de cache LLC.
[0033] Vantajosamente, Flex-CAT fornece uma interface fácil de configurar, mas flexível para especificar divisões de cache. Flex-CAT oferece suporte a um esquema de divisão de cache dinâmica que toma decisões de remoção de LLC conduzidas por prioridade com base em dados em tempo real para gerenciar divisões em granularidade fina. Flex-CAT ajuda a satisfazer as demandas de provedores de serviços de nuvem por recursos arquitetônicos para satisfazer as garantias de QoS, como determinismo de desempenho e isolamento entre trabalhos de alto desempenho e baixo desempenho. Conforme usado aqui, os trabalhos de baixo desempenho são às vezes denominados como “vizinhos barulhentos”.
[0034] Abordagens alternativas e inferiores tentaram abordar a disparidade entre os trabalhos de HP e LP que compartilham recursos atribuindo conjuntos separados de vias a núcleos e limitando os trabalhos de HP e LP a núcleos específicos. Mas tais abordagens apresentam várias desvantagens. Por exemplo, não há noção de prioridade em tais mecanismos. Algumas tais abordagens isolam os trabalhos de HP de trabalhos de LP mediante a alocação de um conjunto dedicado de vias através de todos os conjuntos de cache e para os núcleos de HP, mas tais recursos dedicados, quando não estão trabalhando em cargas de trabalho de HP, não podem ser usados por cargas de trabalho de LP. Adicionalmente, algumas tais abordagens saturam certos conjuntos de cache limitados (ou seja, x conjuntos) mais que outros (por exemplo, N-x conjuntos onde N = número total de conjuntos de cache). A alocação de via uniforme para trabalhos de HP acionada pela saturação desses x conjuntos pode levar ao excesso de provisionamento em N-x conjuntos e subutilização daqueles N-x. Além disso, a atribuição de menos vias do que o máximo aos núcleos reduz a associatividade, o que causa perdas de conflito maiores e leva à degradação do desempenho. As abordagens que usam alocação estática de vias de cache fixo para núcleos não deixam espaço para flexibilidade no momento de remoções e preenchimentos de cache.
[0035] As modalidades reveladas, por outro lado, fornecem uma interface flexível para especificar prioridades e divisões de cache dinamicamente. As prioridades são enumeradas em ordem crescente. As divisões de cache flexíveis podem ser especificadas em termos do número máximo e mínimo de vias por prioridade. Ao contrário de algumas outras abordagens, flex-CAT não exige software para especificar as vias exatas de cache alocadas para cada divisão.
[0036] Suportando tais especificações de divisão de cache e prioridade dinâmica, há registros de classe de serviço (CLOS) que contêm os seguintes valores por CLOS:
  • • Prioridade de CLOS P: Pn bits
  • • Número máximo de vias ocupadas pela prioridade P: mxwn bits
  • • Número mínimo de vias ocupadas pela prioridade P: mnwn bits
[0037] Por exemplo, considera-se que o número máximo de prioridades seja 4. Portanto, Pn = log(4) = 2; Considera-se que o número máximo de vias seja 16. Portanto, mxwn=mnwn=log(16) = 4.
[0038] Considera-se CLOS[0]: (0,12,4) e CLOS[1]: (1,4,1)
Figure img0001
[0039] De acordo com as modalidades aqui reveladas, o solicitante é o proprietário da CL que se espera que seja preenchida no LLC. Considera-se que a prioridade do solicitante seja PF. PL é a prioridade mais baixa e PH é a prioridade mais alta no sistema. Considera-se que loc seja o local final para a CL do solicitante determinado por Flex-CAT. A ocupação do solicitante O[PF] é o número de CLs ocupadas pelo solicitante no conjunto de cache indexado.
[0040] Flex-CAT é um novo algoritmo de remoção que realiza a divisão de cache conduzida por prioridade na granularidade de conjunto de cache. O mesmo prioriza CLs de LP para remoção, desde que a ocupação do solicitante esteja sob alocação de via máxima (mxw). Quando a ocupação do solicitante atinge sua alocação máxima, Flex-CAT prioriza autorremoções em relação a outras remoções prioritárias para ficar dentro dos limites da divisão. Nos cenários limitados, quando nenhuma vítima pode ser encontrada nas duas etapas anteriores, Flex-CAT escolhe uma CL de HP para remoção para encontrar um local para o preenchimento de cache de entrada. Essa ideia fundamental de Flex-CAT é representada na Figura 4.
[0041] O algoritmo detalhado é representado nos fluxogramas das Figuras 4 a 6, e descrito abaixo. No momento do preenchimento de LLC, as modalidades reveladas contam com um algoritmo de hash convencional para determinar o índice de conjunto de cache para a linha de cache de entrada do solicitante.
[0042] Depois de indexar no conjunto de cache adequado, Flex-CAT primeiro procura por uma entrada de LLC inválida no conjunto de cache indexado. Se o conjunto de cache estiver cheio e nenhum local inválido for encontrado, Flex-CAT determina uma CL vítima que precisa ser removido do LLC. Isso assegura que Flex-CAT seja habilitado apenas para conjuntos de cache que estão saturados e nenhuma carga de trabalho é penalizada desnecessariamente quando não há contenção. Flex-CAT varre todo o conjunto de cache e determina o índice da CL LRU, sua idade e a ocupação para cada prioridade no sistema.
[0043] Quando a ocupação do solicitante está sob alocação mínima (O[PF]<PF[mnw]), Flex-CAT prioriza CLs LP LRU para remoção para aumentar sua ocupação. Quando a ocupação do solicitante alcança a alocação mínima, mas ainda está sob a alocação máxima (PF[mnw]≤O[PF]<PF[mxw]), Flex-CAT também adiciona sua CL LRU à lista de candidatos enquanto procura a vítima LRU entre as prioridades. Uma vez que a ocupação do solicitante alcança a alocação máxima, Flex-CAT ignora os candidatos LP LRU e seleciona LRU do solicitante (LRUF) como a CL vítima para assegurar que a ocupação do solicitante nunca viole o limite superior (PF[mxw]). Se nenhuma vítima for encontrada nas etapas anteriores (quando todas as linhas pertencem a proprietários de prioridade mais alta), Flex-CAT recorre às remoções de HP.
[0044] As etapas seguidas pelo Flex-CAT após a indexação no conjunto de cache correto são representadas no fluxograma descrito abaixo e ilustrado nas Figuras 5 e 6.
[0045] A Figura 1 é um diagrama de blocos que ilustra componentes de processamento para executar instruções, de acordo algumas modalidades. Conforme ilustrado, o armazenamento 101 armazena instrução (ou instruções) 103 a serem executadas. Conforme descrito mais abaixo, em algumas modalidades, o sistema 100 (também denominado no presente documento como “sistema de computação”) é um processador SIMD para processar simultaneamente múltiplos elementos de vetores de dados compactados, incluindo matrizes.
[0046] Em operação, a instrução (ou instruções) 103 é buscada a partir do armazenamento 101 pelo conjunto de circuitos de busca 105. A instrução é decodificada pelo conjunto de circuitos de decodificação 109. O conjunto de circuitos de decodificação 109 decodifica a instrução buscada 107 em uma ou mais operações. Em algumas modalidades, essa decodificação inclui a geração de uma pluralidade de micro-operações a serem realizadas pelo conjunto de circuitos de execução (como o conjunto de circuitos de execução 117). O conjunto de circuitos de decodificação 109 também decodifica sufixos e prefixos de instrução (se usados).
[0047] Em algumas modalidades, renomeação de registro, alocação de registro e/ou circuito de agendamento 113 fornece funcionalidade para um ou mais dentre: 1) renomear valores de operando lógico para valores de operando físico (por exemplo, uma tabela de alias de registro, em algumas modalidades), 2) alocar bits de situação e sinalizadores para a instrução decodificada e 3) agendar a instrução decodificada 111 para execução no conjunto de circuitos de execução 117 de um grupamento de instruções (por exemplo, com o uso de uma estação de reserva em algumas modalidades).
[0048] Os registros (arquivo de registro) e/ou memória 115 armazenam dados como operandos da instrução 111 a serem operados pelo conjunto de circuitos de execução 117. Os tipos de registro exemplificativos incluem registros de máscara de gravação, registros de dados compactados, registros de propósito geral e registros de ponto flutuante, conforme descrito e ilustrado adicionalmente abaixo, pelo menos em relação à Figura 9.
[0049] Em algumas modalidades, o circuito de writeback 119 confirma o resultado da execução da instrução. O conjunto de circuitos de execução 117 e o sistema 100 são adicionalmente ilustrados e descritos em relação às Figuras 2 a 4, 10A-B e 11A-B.
[0050] A Figura 2 é um diagrama de blocos que ilustra um sistema que inclui um processador de múltiplos núcleos para executar máquinas virtuais, de acordo algumas modalidades. Conforme mostrado, o sistema de computação 200 inclui processador de múltiplos núcleos 202, que inclui núcleo 0 206A, núcleo 1 206B e até o núcleo N 206N, e que compartilham o cache de último nível LLC 204. Em conjunto, os recursos do processador 202 podem servir como parte de uma plataforma de computação de um provedor de serviços de nuvem (CSP) para fornecer serviços de rede para um ou mais clientes. Por exemplo, conforme mostrado, os núcleos 0, 1 a N suportam VM0 210A, VM1 210B até VMN 210N. VM0 210A suporta aplicativo de VNF 0 212A (aplicativo de função de rede virtual) e SO convidado 0 214A. De modo similar, VM1 210B suporta aplicativo de VNF 1 212B e SO convidado 1 214B. De modo semelhante, VMN 210N suporta aplicativo de VNF 212N e SO convidado N 214N. Em operação, as máquinas virtuais são iniciadas e gerenciadas com o uso de hipervisor/VMM 208. O sistema operacional 214 também pode ser chamado para gerenciar o sistema.
[0051] Em algumas modalidades, o circuito de controle de cache 201, trabalhando em conjunto com o hipervisor/VMM 208, implanta os esquemas de divisão de cache aqui descritos.
[0052] Em algumas modalidades, o circuito de monitoramento de cache 203 mantém estatísticas e heurísticas relacionadas a solicitações de acesso de cache, como a proporção de solicitações de preenchimento de cache de baixa prioridade que resulta na remoção de linhas de cache de alta prioridade. O circuito de monitoramento de cache 203 é opcional, conforme indicado por sua borda tracejada, na medida em que poderia, em vez disso, ser incorporado no processador 202. Em alguns exemplos, o sistema de computação 200 é uma plataforma de computação autônoma e, em outros exemplos, é acoplado a outras plataformas de computação através de uma rede (não mostrada).
[0053] Em algumas modalidades, o sistema de computação 200 é um nó em um datacenter para suportar VMs que executam separadamente um ou mais aplicativos de VNF, incluindo, por exemplo, um provedor de serviços de nuvem, um serviço de rede de banco de dados, um serviço de hospedagem de site da web, um serviço de rede de roteamento, um serviço de email, um serviço de firewall, um serviço de nome de domínio (DNS), um serviço de cache, um serviço de tradução de endereço de rede (NAT) ou um serviço de rede de varredura de vírus. As VMs 210A a 210N no sistema de computação 200 podem ser gerenciadas ou controladas por um hipervisor ou gerenciador de máquina virtual (VMM), como hipervisor/VMM 208. Em outras modalidades, o sistema de computação 200 pode ser configurado como um servidor mais convencional que tem os vários recursos de computação mencionados acima contidos no mesmo compartimento físico, chassi ou contêiner.
[0054] De acordo com algumas modalidades, uma máquina virtual é um computador de software que, como um computador físico, executa um sistema operacional e aplicativos. Algumas máquinas virtuais são configuradas por um conjunto de arquivos de configuração e são apoiadas pelos recursos físicos de um host. Além disso, um hipervisor ou VMM é um software, firmware ou hardware de computador que cria e gerencia máquinas virtuais. Um computador no qual um hipervisor executa uma ou mais máquinas virtuais é chamado de computador host e cada máquina virtual é chamada de máquina convidada. O hipervisor ou VMM apresenta os sistemas operacionais convidados com uma plataforma operacional virtual e gerencia a execução dos sistemas operacionais convidados. Vários casos de uma variedade de sistemas operacionais podem compartilhar os recursos de hardware virtualizados: por exemplo, os casos de Linux®, Windows® e macOS® podem ser todos executados em um único processador físico com múltiplos núcleos.
[0055] Em alguns exemplos, conforme mostrado na Figura 2, pelo menos alguns dos recursos de computação para o sistema de computação 200 podem incluir elementos de processamento, como CPU/núcleos 206A, 206B a 206N que têm um cache de último nível compartilhado (LLC) 204.
[0056] LLC 204, em alguns exemplos, é externo ao processador 202. De acordo com alguns exemplos, LLC 204 compartilhado pode ser tipos de memória de acesso relativamente rápido para servir como um LLC compartilhado para CPUs/núcleos 206A a 206N para minimizar a latência de acesso. Os tipos de memória de acesso relativamente rápido incluídos no LLC 204 compartilhado podem incluir, porém sem limitação, tipos de memória voláteis ou não voláteis. Os tipos voláteis de memória podem incluir, sem limitação, memória de acesso aleatório estática (SRAM) ou memória de acesso aleatório dinâmica (DRAM), RAM de tiristor (TRAM) ou RAM de capacitor zero (ZRAM). Os tipos não voláteis de memória podem incluir, sem limitação, tipos endereçáveis por byte ou bloco de memória não volátil que tem uma estrutura de memória de ponto cruzado tridimensional (3- D) que inclui material de mudança de fase de calcogeneto (por exemplo, vidro de calcogeneto) doravante denominada de “memória de ponto cruzado 3-D”. Os tipos não voláteis de memória podem incluir também outros tipos de memória não volátil endereçável por byte ou bloco, como, porém sem limitação, memória flash NAND de nível de múltiplo limiar, memória flash NOR, memória de mudança de fase de nível único ou múltiplo (PCM), memória resistiva, memória de nanofio, memória de acesso aleatório de transistor ferroelétrico (FeTRAM), memória de acesso aleatório magneto-resistiva (MRAM) que incorpora tecnologia de memristor, MRAM de torque de transferência de spin (STT-MRAM) ou uma combinação de qualquer uma acima.
[0057] A Figura 3 ilustra esquemas de divisão de cache LLC exemplificativos, de acordo com algumas modalidades. Conforme mostrado, o esquema 300 é um exemplo de um esquema que pode ser usado como LLC 204 compartilhado do sistema de computação 200, conforme mostrado na Figura 2. Aqui, LLC 304 é mostrado como um cache associativo de conjunto de 8 vias, com cada uma das vias de cache 302 que contém 8 linhas de cache. Algumas linhas de cache de LLC 304 foram alocadas para aplicativos de baixa prioridade 306, alguns foram alocadas para aplicativos de alta prioridade 310 e algumas são inválidas 308. Para facilitar a discussão, o LLC 354 compartilhado é mostrado como um cache associativo de conjunto de 8 vias, com cada uma das vias que contém 1 linha de cache. Algumas linhas de cache de LLC 354 foram alocadas para aplicativos de baixa prioridade 356, alguns foram alocadas para aplicativos de alta prioridade 360 e algumas são inválidas 358. As ilustrações da Figura 3 não se destinam a limitar as modalidades reveladas a qualquer geometria particular; outros esquemas podem incluir mais ou menos conjuntos, mais ou menos vias dentro dos conjuntos, mais ou menos linhas de cache dentro de cada via e assim por diante. Por exemplo, o LLC 204 pode ser um cache associativo de conjunto de N vias, com cada um dos conjuntos que tem M linha de cache, onde N e M são números inteiros positivos começando com 1.
[0058] Em operação, conforme descrito adicionalmente abaixo, o LLC 204 deve ser novamente dividido dinamicamente de acordo com as necessidades dos aplicativos que compartilham o LLC. Vantajosamente, as modalidades reveladas procuram minimizar a ocorrência de uma linha de cache alocada para um aplicativo de alta prioridade de ser removida por um aplicativo de baixa prioridade.
[0059] A Figura 4 é um diagrama de blocos que ilustra remoções de linha de cache, de acordo algumas modalidades do algoritmo Flex-CAT. De acordo com as modalidades reveladas, Flex-CAT é um novo algoritmo de remoção que realiza a divisão de cache conduzida por prioridade na granularidade de conjunto de cache. Conforme mostrado, o esquema 400 mostra aplicativos cujas prioridades se incluem em algum lugar ao longo de uma faixa de prioridades 402. Os arcos 404, 406 e 408 ilustram remoções de linha de cache que criam espaço para uma solicitação para preencher uma linha de cache com uma linha de cache de entrada a partir de um núcleo de solicitante. Algumas remoções, como a remoção 408, removem alocação de prioridade mais baixa para criar espaço para uma alocação de prioridade mais alta. Algumas remoções são autorremoções, ilustradas como arco 406 (por exemplo, uma prioridade que já alocou um número máximo de vias realiza a autorremoção para criar espaço para uma CL de entrada). Quando a ocupação do solicitante atinge sua alocação máxima, Flex-CAT prioriza autorremoções em relação a outras remoções prioritárias para ficar dentro dos limites da divisão. Nos cenários limitados, quando nenhuma vítima pode ser encontrada nas duas etapas anteriores, Flex-CAT escolhe uma CL de HP para remoção para encontrar um local para o preenchimento de cache entrante. Flex-CAT busca maximizar a remoção de CLs LP, como a remoção 408, e minimizar a remoção de CLs HP, como a remoção 404.
[0060] A Figura 5 é um fluxograma de blocos que ilustra um processo realizado por um circuito de controle de cache em resposta a uma solicitação de preenchimento de cache, de acordo algumas modalidades. Por exemplo, o fluxo 500 pode ser realizado pelo circuito de controle de cache (CCC) 201 da Figura 2. Conforme mostrado, o fluxo 500 começa em 501, onde o CCC deve receber, de um solicitante, uma solicitação de preenchimento de cache de entrada com uma prioridade de solicitante. Por exemplo, o solicitante pode ser um dos núcleos 206A, 206B até 206N da Figura 2, e uma linha de cache de entrada pode ser recuperada da memória, como a memória 115 da Figura 1. A prioridade de solicitante pode refletir a prioridade atribuída ao aplicativo em execução no núcleo de solicitação. Na operação 502, o CCC deve determinar se há alguma linha de cache inválida (CLs) no LLC. Se for assim, na operação 504, o CCC deve gravar a CL de entrada no local da linha de cache inválida e, em 505, no local que foi encontrado, o fluxo termina. Mas se a operação 502 indicar que não existem CLs inválidas, o CCC em 506 deve, para cada prioridade no sistema, determinar a prioridade (P), o índice da CL LRU com prioridade P (LRUp), a idade do LRUp e o número de vias ocupadas pela prioridade. Na operação 508, o CCC deve determinar se a prioridade de solicitante (Pr) é a prioridade mais baixa. Se for assim, o CCC deve determinar na operação 510 se a ocupação da prioridade de solicitante (O[Pr]) é igual a zero e, em caso afirmativo, o fluxo faz a transição para a operação 524, durante a qual uma CL de prioridade mais alta (Ph) deve ser removida para criar espaço para a CL de entrada (Pr).
[0061] A operação 524 representa um cenário de uma linha de cache de prioridade alta que é removida para criar espaço para uma linha de cache de prioridade mais baixa, um cenário que as modalidades reveladas procuram minimizar, exceto no caso acima mencionado. Em algumas modalidades, o conjunto de circuitos de monitoramento de cache, como o circuito de monitoramento de cache 203 da Figura 2, mantém respostas de rastreamento heurístico para solicitações de preenchimento de cache, incluindo casos de operação 524. Em algumas modalidades, o CCC monitora a heurística e, se necessário, ajusta dinamicamente o número mínimo e máximo de vias atribuídas a cada prioridade para modular a agressividade de aplicativos de prioridade mais alta na remoção de aplicativos de prioridade mais baixa, eventualmente levando à operação 524. Em algumas modalidades, o circuito de monitoramento de cache 203 faz com que o LLC seja novamente dividido ou, em algumas modalidades, o conjunto de circuitos de monitoramento de cache, quando a heurística mantida, como ocorrências de operação 524, excede um limiar predeterminado, faz com que os limites nas vias associadas a várias prioridades sejam ajustados. Por exemplo, o número de vias atribuídas a aplicativos de prioridade alta pode ser diminuído para reduzir a remoção recorrente, agressiva e completa de aplicativo de prioridade baixa, levando à ocorrência repetitiva da operação 524. Mas se o CCC na operação 510 determinar que a ocupação de solicitante é diferente de zero, o CCC na operação 514 deve remover a CL menos utilizada recentemente da prioridade de solicitante.
[0062] Voltando à operação 508, se o CCC determinar que a prioridade de solicitante não é a prioridade mais baixa, o CCC na operação 512 deve determinar se a ocupação da prioridade do solicitante está no máximo, caso em que o CCC na operação 514 deve remover a CL menos utilizada recentemente da prioridade de solicitante. Na operação 515, um local foi encontrado e o fluxo termina.
[0063] Voltando à operação 512, se o CCC determinar que a ocupação da prioridade de solicitante não está no máximo, o CCC determina na operação 516 se a ocupação da prioridade de solicitante é menor que o máximo e maior ou igual ao mínimo para a prioridade de solicitante, e, em caso afirmativo, o fluxo faz a transição para a operação 518, mas se não for o caso, o fluxo faz a transição para o fluxo 520. O CCC na operação 518 deve remover uma CL LRU que tem uma prioridade igual à prioridade de solicitante (Pr) ou prioridade mais baixa (Pl), então, em 519, um local foi encontrado e o fluxo termina. Na operação 520, o CCC tenta remover uma CL LRU que tem uma prioridade mais baixa que a prioridade de solicitante. Se houver tal linha, o local em 522 é determinado como sendo diferente de NULO e o fluxo realiza a transição para 523, onde um local foi encontrado e o fluxo termina. Mas se não houver tal CL, o local em 522 que é igual a NULO, o fluxo realiza a transição para a operação 524 para remover uma CL LRU com uma prioridade mais alta que a prioridade de solicitante. Então, um local que foi encontrado em 525, o fluxo termina.
[0064] A Figura 6 é um diagrama de fluxo que ilustra um método realizado por um circuito de controle de cache (CCC) que processa uma solicitação de preenchimento de cache, de acordo com algumas modalidades. Por exemplo, o fluxo 600 pode ser realizado pelo circuito de controle de cache (CCC) 201 da Figura 2. Conforme mostrado, o CCC na operação 605 deve receber uma solicitação para armazenar uma linha de cache de entrada (CL) que tem uma prioridade de solicitante das prioridades múltiplas no cache de último nível (LLC). Na operação 610, quando existe uma linha de cache inválida (CL) no LLC, armazena-se a linha de cache de entrada (CL) na CL inválida. Na operação 615, quando a prioridade de solicitante é uma mais baixa dentre as múltiplas prioridades e tem uma ocupação de um ou mais, ou quando a ocupação está em um máximo para a prioridade de solicitante, armazena-se a CL de entrada no lugar de uma CL menos utilizada recentemente (LRU) da prioridade de solicitante. Na operação 620, quando a ocupação está entre um mínimo e o máximo para a prioridade de solicitante, armazena-se a CL de entrada no lugar de uma CL LRU da prioridade de solicitante ou de uma prioridade mais baixa. Na operação 625, quando a ocupação é menor que o mínimo e existe uma CL que tem a prioridade mais baixa, armazena-se a CL de entrada no lugar de uma CL LRU que tem a prioridade mais baixa. Na operação 630, quando não existe CL inválida ou CL com o solicitante ou prioridade mais baixa, armazena-se a CL de entrada no lugar de uma CL LRU de uma prioridade mais alta
Conjuntos de instruções
[0065] Um conjunto de instruções pode incluir um ou mais formatos de instrução. 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 realizada (por exemplo, código de operação) e o operando (ou operandos) em que essa operação deve ser realizada e/ou outro campo (ou campos) de dados (por exemplo, máscara). Alguns formatos de instrução não estão em funcionamento apesar da definição de modelos de instrução (ou subformatos). Por exemplo, os modelos de instrução de um determinado formato de instrução podem ser definidos para terem subconjuntos diferentes dos campos do formato de instrução (os campos incluídos estão tipicamente na mesma ordem, mas pelo menos alguns têm posições de bit diferentes, devido ao fato de que há menos campos incluídos) e/ou podem ser definidos para terem um determinado campo interpretado de forma diferente. Desse modo, cada instrução de uma ISA é expressa com uso de um determinado formato de instrução (e, caso definida, em um determinado modelo dentre os modelos de instrução desse formato de instrução) e inclui campos para especificar a operação e os operandos. Por exemplo, uma instrução de ADD exemplificativa tem um código de operação específico e um formato de instrução que inclui um campo de código de operação para especificar tais campos de código de operação e operando para selecionar operandos (origem1/destino e origem2); e uma ocorrência dessa instrução de ADD em um fluxo de instrução terá conteúdo específico nos campos de operando que selecionam operandos específicos. Um conjunto de extensões de SIMD denominado como as Extensões de Vetor Avançadas (AVX) (AVX1 e AVX2) e que usa o esquema de codificação de Extensões de Vetor (VEX), foi lançado e/ou publicado (por exemplo, consultar Intel® 64 e Manual do Desenvolvedor de Software de Arquiteturas IA32, setembro de 2014; e consultar Referência a Programação de Extensões de Vetor Avançadas Intel®, outubro de 2014).
Formatos de Instrução Exemplificativos
[0066] As modalidades da instrução (ou instruções) descritas no presente documento podem ser incorporadas em formatos diferentes. Adicionalmente, sistemas, arquiteturas e pipelines exemplificativos são detalhados abaixo. As modalidades da instrução (ou instruções) podem ser executadas em tais sistemas, arquiteturas e pipelines, mas não estão limitadas àqueles detalhados.
FORMATO DE INSTRUÇÃO FAVORÁVEL DE VETOR GENÉRICO
[0067] Um formato de instrução favorável de vetor é um formato de instrução que é adequado para as instruções de vetor (por exemplo, há determinados campos específicos para operações de vetor). Embora sejam descritas modalidades em que tanto as operações de vetor quanto escalares são suportadas através do formato de instrução favorável de vetor, as modalidades alternativas usam apenas operações de vetor no formato de instrução favorável de vetor.
[0068] As Figuras 7A a 7B são diagramas de blocos que ilustram um formato de instrução favorável de vetor genérico e modelos de instrução do mesmo, de acordo algumas modalidades da invenção. A Figura 7A é um diagrama de blocos que ilustra um formato de instrução favorável de vetor genérico e modelos de instrução de classe A do mesmo de acordo com algumas modalidades da invenção; enquanto a Figura 7B é um diagrama de blocos que ilustra o formato de instrução favorável de vetor genérico e modelos de instrução de classe B do mesmo de acordo com algumas modalidades da invenção. Especificamente, um formato de instrução favorável de vetor genérico 700 para o qual são definidos modelos de instrução de classe A e classe B, dos quais ambos incluem modelos de instrução sem acesso de memória 705 e modelos de instrução com acesso de memória 720. O termo genérico no contexto do formato de instrução favorável de vetor se refere ao formato de instrução que não é ligado a qualquer conjunto de instruções específico.
[0069] Serão descritas modalidades da invenção em que o formato de instrução favorável de vetor suporta o seguinte: um comprimento (ou tamanho) de operando de vetor de 64 bytes com larguras (ou tamanhos) de elemento de dados de 32 bits (4 bytes) ou 64 bits (8 bytes) (e, desse modo, um vetor de 64 bytes consiste em 16 elementos de tamanho duplo de palavra ou, alternativamente, 8 elementos de tamanho quádruplo de palavra); um comprimento (ou tamanho) de operando de vetor de 64 bytes com larguras (ou tamanhos) de elemento de dados de 16 bits (2 bytes) ou 8 bits (1 byte); um comprimento (ou tamanhos) de operando de vetor de 32 bytes com larguras (ou tamanhos) de elemento de dados de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) ou 8 bits (1 byte); e um comprimento (ou tamanho) de operando de vetor de 16 bytes com larguras (ou tamanhos) de elemento de dados de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) ou 8 bits (1 byte); as modalidades alternativas podem suportar tamanhos de operando de vetor maiores, menores e/ou diferentes (por exemplo, operandos de vetor de 256 bytes) com larguras de elemento de dados maiores, menores ou diferentes (por exemplo, larguras de elemento de dados de 128 bits (16 bytes)).
[0070] Os modelos de instrução de classe A na Figura 7A incluem: 1) dentro dos modelos de instrução sem acesso de memória 705, é mostrado um modelo de instrução de operação do tipo controle de arredondamento completo sem acesso de memória 710 e um modelo de instrução de operação do tipo transformada de dados sem acesso de memória 715; e 2) dentro dos modelos de instrução de acesso de memória 720 é mostrado um modelo de instrução temporal de acesso de memória 725 e um modelo de instrução não temporal de acesso de memória 730. Os modelos de instrução de classe B na Figura 7B incluem: 1) dentro dos modelos de instrução sem acesso de memória 705, é mostrado um modelo de instrução de operação do tipo controle de arredondamento parcial de controle de máscara de gravação sem acesso de memória 712 e um modelo de instrução de operação do tipo vsize de controle de máscara de gravação sem acesso de memória 717; e 2) dentro dos modelos de instrução de acesso de memória 720, é mostrado um modelo de instrução de controle de máscara de gravação de acesso de memória 727.
[0071] O formato de instrução favorável de vetor genérico 700 inclui os seguintes campos listados abaixo na ordem ilustrada nas Figuras 7A-7B.
[0072] Campo de formato 740 - um valor específico (um valor identificador de formato de instrução) nesse campo identifica exclusivamente o formato de instrução favorável de vetor e, dessa forma, ocorrências de instruções no formato de instrução favorável de vetor nas correntes de instrução. Como tal, esse campo é opcional no sentido de que não é necessário para um conjunto de instruções que tem apenas o formato de instrução favorável de vetor genérico.
[0073] Campo de operação de base 742 - seu conteúdo distingue operações de base diferentes.
[0074] Campo de índice de registro 744 - seu conteúdo, diretamente ou através de geração de endereço, especifica as localizações dos operandos de origem e destino, estejam nos registros ou na memória. Esses incluem um número suficiente de bits para selecionar N registros a partir de um arquivo de registro de PxQ (por exemplo, 32x512, 16x128, 32x1024, 64x1024). Embora, em uma modalidade, N possa ser de até três origens e um registro de destino, modalidades alternativas podem suportar mais ou menos registros de origens e destino (por exemplo, podem suportar até duas origens em que uma dentre essas origens também atua como o destino, podem suportar até três origens em que uma dentre essas origens também atua como o destino, podem suportar até duas origens e um destino).
[0075] Campo de modificador 746 - seu conteúdo distingue ocorrências de instruções no formato de instrução de vetor genérico que especifica o acesso de memória daquelas que não o fazem; ou seja, entre modelos de instrução sem acesso de memória 705 e modelos de instrução com acesso de memória 720. Operações com acesso de memória leem e/ou gravam para a hierarquia de memória (em alguns casos que especificam os endereços de origem e/ou destino com o uso valores nos registros), enquanto operações sem acesso de memória (por exemplo, a de origem e destinos são registros). Embora em uma modalidade esse campo também selecione dentre três maneiras diferente de realizar cálculos de endereço de memória, modalidades alternativas podem suportar mais, menos ou diferentes maneiras de realizar cálculos de endereço de memória.
[0076] Campo de operação de aumento 750 - seu conteúdo distingue qual dentre uma variedade de operações diferentes deve ser realizada além daquela operação de base. Esse campo é específico de contexto. Em algumas modalidades, esse campo é dividido em um campo de classe 768, um campo alfa 752 e um campo beta 754. O campo de operação de aumento 750 permite que grupos comuns de operações sejam realizados em uma instrução única em vez de 2, 3 ou 4 instruções.
[0077] Campo de escala 760 – seu conteúdo permite o escalonamento do conteúdo do campo de índice para a geração de endereço de memória (por exemplo, para geração de endereço que usa 2escala * índice + base).
[0078] Campo de Deslocamento 762A - seu conteúdo é usado como parte de geração de endereço de memória (por exemplo, para geração de endereço que usa 2escala * índice + base + deslocamento).
[0079] Campo de Fator de Deslocamento 762B (observa-se que a justaposição do campo de deslocamento 762A diretamente sobre o campo de fator de deslocamento 762B indica que um ou o outro é usado) - seu conteúdo é usado como parte de geração de endereço; especifica um fator de deslocamento que deve ser escalonado pelo tamanho de um acesso de memória (N) - em que N é o número de bytes no acesso de memória (por exemplo, para a geração de endereço que usa 2escala * índice + base + deslocamento escalonado). Os bits de ordem baixa redundantes são ignorados e, então, o conteúdo do campo de fator de deslocamento é multiplicado pelo tamanho total de operandos de memória (N) a fim de gerar o deslocamento final a ser usado no cálculo de um endereço eficaz. O valor de N é determinado pelo hardware de processador no tempo de execução com base no campo de código de operação completo 774 (descrito anteriormente no presente documento) e no campo de manipulação de dados 754C. O campo de deslocamento 762A e o campo de fator de deslocamento 762B são opcionais no sentido em que os mesmos não são usados para os modelos de instrução sem acesso de memória 705 e/ou modalidades diferentes podem implantar um ou nenhum dentre os dois.
[0080] Campo de largura de elemento de dados 764 - seu conteúdo distingue um dentre um número de larguras de elemento de dados a ser usado (em algumas modalidades para todas as instruções; em outras modalidades apenas para algumas das instruções). Esse campo é opcional no sentido em que não é necessário se apenas uma largura de elemento de dados for suportada e/ou larguras de elemento de dados forem suportadas com o uso de algum aspecto dos códigos de operação.
[0081] Campo de máscara de gravação 770 - seu conteúdo controla, em uma base por posição de elemento de dados, independentemente de a posição de elemento de dados no operando de vetor de destino refletir o resultado da operação de base e operação de aumento. Os modelos de instrução de classe A suportam mascaramento de gravação e mesclagem, enquanto modelos de instrução de classe B suportam tanto mesclagem como mascaramento de gravação e anulação. Durante a mesclagem, as máscaras de vetor permitem que qualquer conjunto de elementos no destino seja protegido contra atualizações durante a execução de qualquer operação (especificada pela operação de base e pela operação de aumento); em uma outra modalidade, preservar o valor anterior de cada elemento do destino em que o bit de máscara correspondente tem um 0. Por outro lado, durante a anulação, as máscaras de vetor permitem que qualquer conjunto de elementos no destino seja anulado durante a execução de qualquer operação (especificada pela operação-base e pela operação de aumento); em uma modalidade, um elemento do destino é configurado para 0 quando o bit de máscara correspondente tiver um valor de 0. Um subconjunto dessa funcionalidade é a capacidade de controlar o comprimento de vetor da operação que é realizada (ou seja, a extensão dos elementos que são modificados, do primeiro ao último); no entanto, não é necessário que os elementos que são modificados sejam consecutivos. Desse modo, o campo de máscara de gravação 770 permite operações de vetor parciais, que inclui carregamentos, armazenamentos, aritmética, lógica, etc. Embora sejam descritas modalidades da invenção em que o conteúdo do campo de máscara de gravação 770 seleciona um dentre vários registros de máscara de gravação que contêm a máscara de gravação a ser usada (e, desse modo, o conteúdo do campo de máscara de gravação 770 identifica indiretamente tal mascaramento a ser realizado), modalidades alternativas, em vez disso ou adicionalmente, permitem que o conteúdo do campo de gravação de máscara 770 especifique diretamente o mascaramento a ser realizado.
[0082] Campo imediato 772 - seu conteúdo permite a especificação de um imediato. Esse campo é opcional no sentido de que não está presente em uma implantação do formato favorável de vetor genérico que não suporta imediato e não está presente em instruções que não usam um imediato.
[0083] Campo de classe 768 - seu conteúdo distingue entre diferentes classes de instruções. Com referência às Figuras 7A a 7B, os conteúdos desse campo selecionam entre instruções de classe A e classe B. Nas Figuras 7A a 7B, quadrados de cantos redondos são usados para indicar que um valor específico está presente em um campo (por exemplo, classe A 768A e classe B 768B para campo de classe 768 respectivamente nas Figuras 7A a 7B).
Modelos de instrução de Classe A
[0084] No caso dos modelos de instrução sem acesso de memória 705 da classe A, o campo alfa 752 é interpretado como um campo RS 752A, cujo conteúdo distingue qual dentre os diferentes tipos de operação de aumento devem ser realizados (por exemplo, arredondamento 752A.1 e transformada de dados 752A.2 são respectivamente especificados para os modelos de instrução da operação do tipo arredondamento sem acesso de memória 710 e da operação do tipo transformada de dados sem acesso de memória 715), enquanto o campo beta 754 distingue quais das operações do tipo especificado devem ser realizadas. Nos modelos de instrução sem acesso de memória 705, o campo de escala 760, o campo de deslocamento 762A e o campo de fator de deslocamento 762B não estão presentes.
Modelos de Instrução Sem Acesso de Memória - Operação do Tipo Controle de Arredondamento Completo
[0085] No modelo de instrução de operação do tipo controle de arredondamento completo sem acesso de memória 710, o campo beta 754 é interpretado como um campo de controle de arredondamento 754A, cujo conteúdo (ou conteúdos) fornece arredondamento estático. Embora nas modalidades descritas da invenção o campo de controle de arredondamento 754A inclua um campo suprimir todas as exceções de ponto de flutuação (SAE) 756 e um campo de controle de operação de arredondamento 758, as modalidades alternativas podem codificar ambos os conceitos no mesmo campo ou ter apenas um desses conceitos/campos (por exemplo, podem ter apenas o campo de controle de operação de arredondamento 758).
[0086] Campo de SAE 756 - seu conteúdo distingue a possibilidade de desativar ou não o relatório de evento de exceção; quando o conteúdo do campo de SAE 756 indicar que a supressão está habilitada, uma determinada instrução não relata qualquer tipo de sinalizador de exceção de ponto de flutuação e não cria qualquer manipulador de exceção de ponto de flutuação.
[0087] Campo de controle de operação de arredondamento 758 - seu conteúdo distingue qual dentre um grupo de operações de arredondamento realizar (por exemplo, Arredondar para cima, Arredondar para baixo, Arredondar para zero e Arredondar para o mais próximo). Desse modo, o campo de controle de operação de arredondamento 758 permite a alteração do modo de arredondamento em uma base por instrução. Em algumas modalidades, um processador inclui um registro de controle para especificar modos de arredondamento e o conteúdo do campo de controle de operação de arredondamento 750 substitui aquele valor de registro.
Modelos de Instrução Sem Acesso de Memória - Operação do Tipo Transformada de Dados
[0088] No modelo de instrução de operação do tipo transformada de dados sem acesso de memória 715, o campo beta 754 é interpretado como um campo de transformada de dados 754B, cujo conteúdo distingue qual dentre várias transformadas de dados deve ser realizada (por exemplo, nenhuma transformada de dados, efetuar swizzling, difusão).
[0089] No caso de um modelo de instrução com acesso de memória 720 de classe A, o campo alfa 752 é interpretado como um campo de dica de remoção 752B, cujo conteúdo distingue qual dentre as dicas de remoção devem ser usadas (na Figura 7A, temporal 752B.1 e não temporal 752B.2 são especificadas respectivamente para o modelo de instrução temporal 725 com acesso de memória e o modelo de instrução não temporal 730 com acesso de memória), enquanto o campo beta 754 é interpretado como um campo de manipulação de dados 754C, cujo conteúdo distingue qual dentre várias operações de manipulação de dados (também conhecidas como primitivas) deve ser realizada (por exemplo, nenhuma manipulação; difusão; conversão ascendente de uma origem; e conversão descendente de um destino). Os modelos de instrução com acesso de memória 720 incluem o campo de escala 760, e, opcionalmente, o campo de deslocamento 762A ou o campo de fator de deslocamento 762B.
[0090] As instruções de memória de vetor realizam carregamentos de vetor e armazenamentos de vetor na memória, com suporte de conversão. Assim como com instruções de vetor regular, as instruções de memória de vetor transferem dados a partir de/para a memória de uma maneira no sentido de elemento de dados, em que os elementos que são realmente transferidos são ditados pelo conteúdo da máscara de vetor que é selecionada como a máscara de gravação.
Modelos de Instrução Com Acesso de memória - Temporal
[0091] Os dados temporais são dados propensos a serem reutilizados cedo o suficiente para se beneficiar do armazenamento em cache. Isso é, no entanto, uma dica, e diferentes processadores podem implantar os mesmos de diferentes maneiras, incluindo ignorar a dica inteiramente.
Modelos de Instrução Com Acesso de memória - Não Temporal
[0092] Os dados não temporais são dados não propensos a serem reutilizados cedo o suficiente para se beneficiar do armazenamento em cache no cache de 1º nível e devem receber prioridade para remoção. Isso é, no entanto, uma dica, e diferentes processadores podem implantar os mesmos de diferentes maneiras, incluindo ignorar a dica inteiramente.
Modelos de Instrução de Classe B
[0093] No caso dos modelos de instrução de classe B, o campo alfa 752 é interpretado como um campo de controle de máscara de gravação (Z) 752C, cujo conteúdo distingue a possibilidade de o mascaramento de gravação controlado pelo campo de máscara de gravação 770 ser uma mesclagem ou uma anulação.
[0094] No caso dos modelos de instrução sem acesso de memória 705 da classe B, parte do campo beta 754 é interpretado como um campo RL 757A, cujo conteúdo distingue quais dentre os diferentes tipos de operação de aumento devem ser realizados (por exemplo, arredondamento 757A.1 e comprimento de vetor (VSIZE) 757A.2 são respectivamente especificados para os modelos de instrução da operação do tipo controle de arredondamento parcial de controle de máscara de gravação sem acesso de memória 712 e o modelo de instrução da operação do tipo VSIZE de controle de máscara de gravação sem acesso de memória 717), enquanto o restante do campo beta 754 distingue quais dentre as operações do tipo especificado devem ser realizadas. Nos modelos de instrução sem acesso de memória 705, o campo de escala 760, o campo de deslocamento 762A e o campo de fator de deslocamento 762B não estão presentes.
[0095] No modelo de instrução da operação do tipo controle de arredondamento parcial de controle de máscara de gravação sem acesso de memória 710, o restante do campo beta 754 é interpretado como um campo de operação de arredondamento 759A e o relatório de evento de exceção é desabilitado (uma determinada instrução não relata qualquer tipo de sinalizador de exceção de ponto de flutuação e não cria qualquer manipulador de exceção de ponto de flutuação).
[0096] Campo de controle de operação de arredondamento 759A - assim como o campo de controle de operação de arredondamento 758, seu conteúdo distingue qual dentre um grupo de operações de arredondamento deve ser realizada (por exemplo, Arredondamento para cima, Arredondamento para baixo, Arredondamento para zero e Arredondamento para o mais próximo). Dessa forma, o campo de controle de operação de arredondamento 759A permite a alteração do modo de arredondamento em uma base por instrução. Em algumas modalidades, um processador inclui um registro de controle para especificar modos de arredondamento e o conteúdo do campo de controle de operação de arredondamento 750 substitui aquele valor de registro.
[0097] No modelo de instrução da operação do tipo VSIZE de controle de máscara de gravação sem acesso de memória 717, o restante do campo beta 754 é interpretado como um campo de comprimento de vetor 759B, cujo conteúdo distingue qual dentre vários comprimentos de vetor de dados deve ser realizado (por exemplo, 128, 256 ou 512 bytes).
[0098] No caso de um modelo de instrução com acesso de memória 720 de classe B, parte do campo beta 754 é interpretada como um campo de difusão 757B, cujo conteúdo distingue a possibilidade de a operação de manipulação de dados do tipo difusão ser ou não realizada, enquanto o restante do campo beta 754 é interpretado como o campo de comprimento de vetor 759B. Os modelos de instrução com acesso de memória 720 incluem o campo de escala 760, e, opcionalmente, o campo de deslocamento 762A ou o campo de fator de deslocamento 762B.
[0099] Em relação ao formato de instrução favorável de vetor genérico 700, é mostrado um campo de código de operação completo 774 incluindo o campo de formato 740, o campo de operação de base 742 e o campo de largura de elemento de dados 764. Embora seja mostrada uma modalidade em que o campo de código de operação completo 774 inclui todos esses campos, o campo de código de operação completo 774 inclui menos que todos esses campos nas modalidades que não suportam todos dos mesmos. O campo de código de operação completo 774 fornece o código de operação (opcode).
[00100] O campo de operação de aumento 750, o campo de largura de elemento de dados 764 e o campo de máscara de gravação 770 permitem que esses recursos sejam especificados em uma base por instrução no formato de instrução favorável de vetor genérico.
[00101] A combinação de campo de máscara de gravação e campo de largura de elemento de dados cria instruções digitadas nas quais permitem que a máscara seja aplicada com base em larguras de elemento de dados diferentes.
[00102] Os vários modelos de instrução constatados dentro da classe A e da classe B são benéficos em situações diferentes. Em algumas modalidades da invenção, os processadores diferentes ou núcleos diferentes dentro de um processador podem suportar apenas classe A, apenas classe B ou ambas classes. Por exemplo, um núcleo fora de ordem de propósito geral de alto desempenho destinado para computação de propósito geral pode suportar apenas classe B, um núcleo destinado principalmente para computação gráfica e/ou científica (produtividade) pode suportar apenas classe A, e um núcleo destinado para ambos pode suportar ambos (evidentemente, um núcleo que tem alguma mistura de modelos e instruções de ambas as classes, porém, nem todos os modelos e instruções de ambas as classes estão dentro do âmbito da invenção). Ademais, um processador único pode incluir múltiplos núcleos, em que todos suportam a mesma classe ou nos quais núcleos diferentes suportam classes diferentes. Por exemplo, em um processador com núcleos de gráficos e de propósito geral separados, um dentre os núcleos de gráficos destinados principalmente para computação gráfica e/ou científica pode suportar apenas classe A, enquanto um ou mais dentre os núcleos de propósito geral podem ser núcleos de propósito geral de alto desempenho com renomeação de registro e execução fora de ordem destinadas para computação de propósito geral que suporta apenas classe B. Um outro processador que não tem um núcleo de gráficos separado, pode incluir núcleos de propósito geral em ordem ou fora de ordem que suportam tanto a classe A quanto classe B. Evidentemente, os recursos de uma classe também podem ser implantados em outra classe nas modalidades diferentes da invenção. Os programas gravados em uma linguagem de alto nível seriam colocados (por exemplo, compilados a tempo ou estatisticamente) em uma variedade de formas executáveis diferentes, incluindo: 1) uma forma que tem apenas instruções da classe (ou classes) suportada pelo processador-alvo para a execução; ou 2) uma forma que tem rotinas alternativas gravadas com o uso de combinações diferentes das instruções de todas as classes e que tem código de fluxo de controle que seleciona as rotinas para executar com base nas instruções suportadas pelo processador está executando atualmente o código.
Formato de Instrução Favorável de Vetor Específico Exemplificativo
[00103] A Figura 8A é um diagrama de blocos que ilustra um formato de instrução favorável de vetor específico exemplificativo, de acordo algumas modalidades da invenção. A Figura 8A mostra um formato de instrução favorável de vetor específico 800 que é específico no sentido de que especifica o local, tamanho, interpretação e ordem dos campos, assim como valores para alguns desses campos. O formato de instrução favorável de vetor específico 800 pode ser usado para estender o conjunto de instruções x86 e, dessa forma, alguns dos campos são similares ou iguais àquele usados no conjunto de instruções x86 existente e na extensão do mesmo (por exemplo, AVX). Esse formato permanece consistente com o campo de codificação de prefixo, o campo de byte de código de operação real, campo de R/M de MOD, campo SIB, campo de deslocamento e campos imediatos do conjunto de instruções x86 existente com extensões. Os campos da Figura 7A ou 7B nos quais os campos do mapa da Figura 8A são ilustrados.
[00104] Deve ser entendido que, embora as modalidades da invenção sejam descritas com referência ao formato de instrução favorável de vetor específico 800 no contexto do formato de instrução favorável de vetor genérico 700 para propósitos ilustrativos, a invenção não é limitada ao formato de instrução favorável de vetor específico 800 exceto quando reivindicado. Por exemplo, o formato de instrução favorável de vetor genérico 700 contempla uma variedade de tamanhos possíveis para os vários campos, enquanto o formato de instrução favorável de vetor específico 800 é mostrado com campos de tamanhos específicos. A título de exemplo específico, embora o campo de largura de elemento de dados 764 seja ilustrado como um campo de um bit no formato de instrução favorável de vetor específico 800, a invenção não é assim limitada (ou seja, o formato de instrução favorável de vetor genérico 700 contempla outros tamanhos do campo de largura de elemento de dados 764).
[00105] O formato de instrução favorável de vetor genérico 800 inclui os seguintes campos listados abaixo na ordem ilustrada na Figura 8A.
[00106] O prefixo de EVEX 802 (Bytes 0 a 3) é codificado em uma forma de quatro bytes.
[00107] Campo de formato 740 (EVEX Byte 0, bits [7:0]) - o primeiro byte (EVEX Byte 0) é o campo de formato 740 e contém 0x62 (o valor exclusivo usado para distinguir o formato de instrução favorável de vetor em algumas modalidades).
[00108] O segundo até o quarto bytes (EVEX Bytes 1 a 3) incluem vários campos de bit que fornecem capacidade específica.
[00109] Campo de REX 805 (EVEX Byte 1, bits [7-5]) - consiste em um campo de bit EVEX.R (EVEX Byte 1, bit [7] - R), campo de bit EVEX.X (EVEX byte 1, bit [6] - X) e campo de bit EVEX.B (EVEX byte 1, bit[5] - B). Os campos de bit EVEX.R, EVEX.X e EVEX.B fornecem a mesma funcionalidade que os campos de bits VEX correspondentes, e são codificadas com o uso de forma de complemento de 1s, isto é, ZMM0 é codificado como 1111B, ZMM15 é codificado como 0000B. Outros campos das instruções codificam os três bits inferiores dos índices de registro conforme é conhecido na técnica (rrr, xxx e bbb), de modo que Rrrr, Xxxx e Bbbb possam ser formados adicionando-se EVEX.R, EVEX.X e EVEX.B.
[00110] REX’ 810A - esse é a primeira parte do campo de REX’ 810 e é o campo de bit EVEX.R’ (EVEX Byte 1, bit [4] R’) que é usado para codificar os 16 superiores ou 16 inferiores dentre o conjunto de 32 registros estendidos. Em algumas modalidades, esse bit, juntamente com outros conforme indicado abaixo, é armazenado no formato invertido de bit para se distinguir (no modo de 32 bits x86 bem conhecido) da instrução BOUND, cujo byte de código de operação real é 62, porém, não aceita no campo de R/M de MOD (descrito abaixo) o valor de 11 no campo de MOD; as modalidades alternativas da invenção não armazenam isso e os outros bits indicados abaixo no formato invertido. Um valor de 1 é usado para codificar os 16 registros inferiores. Em outras palavras, R’Rrrr é formado combinando-se EVEX.R’, EVEX.R e o outro RRR de outros campos.
[00111] Campo de mapa de código de operação 815 (EVEX byte 1, bits [3:0] - mmmm) - seu conteúdo codifica um byte de código de operação resultante implicado (0F, 0F 38, ou 0F 3).
[00112] Campo de largura de elemento de dados 764 (EVEX byte 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 64 bits).
[00113] Campo EVEX.vvvv 820 (EVEX Byte 2, bits [6:3]- vvvv) - o papel de EVEX.vvvv pode incluir o seguinte: 1) EVEX.vvvv codifica o primeiro operando de registro de origem, especificado na forma invertida (complemento de 1s) e é valido para instruções com 2 ou more operandos de origem; 2) EVEX.vvvv codifica o operando de registro de destino, especificado na forma de complemento 1s para certos deslocamentos de vetor; ou 3) EVEX.vvvv não codifica qualquer operando, o campo é reservado e deve conter 1111b. Desse modo, o campo EVEX.vvvv 820 codifica os 4 bits de ordem inferior do primeiro especificador de registro de origem armazenado na forma invertida (complemento de 1s). Dependendo da instrução, um campo de bit EVEX diferente extra é usado para estender o tamanho de especificador para 32 registros.
[00114] Campo de classe EVEX.U 768 (EVEX byte 2, bit [2]-U) - Se EVEX.U = 0, o mesmo indica classe A ou EVEX.U0; se EVEX.U = 1, o mesmo indica classe B ou EVEX.U1.
[00115] Campo de codificação de prefixo 825 (EVEX byte 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 de SSE herdadas no formato de Prefixo de EVEX, isso também tem o benefício de compactar o Prefixo SIMD (em vez de exigir um byte para expressar o Prefixo SIMD, o Prefixo de EVEX exige apenas 2 bits). Em uma modalidade, para suportar instruções de SSE herdadas que usam um Prefixo SIMD (66H, F2H, F3H) tanto no formato herdado quanto no formato de Prefixo de EVEX, esses prefixos SIMD herdados são codificados no campo de codificação de prefixo SIMD; e no tempo de execução são expandidos no prefixo SIMD herdado antes de serem fornecidos para o PLA do decodificador (de modo que o PLA possa executar tanto o formato herdado quanto de EVEX dessas instruções herdadas sem modificação). Embora instruções mais novas possa usar o Conteúdo do campo de codificação de prefixo EVEX diretamente como uma extensão de código de operação, determinadas modalidades se expandem de uma maneira semelhante para consistência, porém, permitem que significados diferentes sejam especificados por esses prefixos SIMD herdados. Uma modalidade alternativa pode projetar novamente o PLA para suportar as codificações de prefixo SIMD de 2 bits, e, desse modo, não exige a expansão.
[00116] Campo alfa 752 (EVEX byte 3, bit [7] – EH; também conhecido como controle de máscara de gravação EVEX.EH, EVEX.rs, EVEX.RL, EVEX.write mask control e EVEX.N; também ilustrado com α) – conforme descrito anteriormente, esse campo é específico de contexto.
[00117] Campo Beta 754 (EVEX byte 3, bits [6:4]-SSS, também conhecido como EVEX.s2 a 0, EVEX.r2 a 0, EVEX.rr1, EVEX.LL0, EVEX.LLB; também ilustrado com βββ) – conforme descrito anteriormente, esse campo é específico de contexto.
[00118] REX’ 810B - esse é o restante do campo REX’ 810 e é o campo de bit EVEX.V’ (EVEX Byte 3, bit [3] V’) que pode ser usado para codificar os 16 superiores ou 16 inferiores do conjunto de 32 registros estendidos. Esse bit é armazenado no formato invertido de bit. Um valor de 1 é usado para codificar os 16 registros inferiores. Em outras palavras, V’VVVV é formado por meio da combinação de EVEX.V’, EVEX.vvvv.
[00119] Campo de máscara de gravação 770 (EVEX byte 3, bits [2:0]-kkk) - seu conteúdo especifica o índice de um registro nos registros de máscara de gravação conforme anteriormente descrito. Em algumas modalidades, 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 (isso pode ser implantado em uma variedade de maneiras incluindo o uso de uma máscara de gravação fisicamente conectada a todos ou ao hardware que desvia do hardware de mascaramento).
[00120] Campo de código de operação real 830 (Byte 4) também é conhecido como os bytes de código de operação. Parte do código de operação é especificada nesse campo.
[00121] Campo de R/M de MOD 840 (Bytes 5) inclui campo de MOD 842, campo de Reg 844 e campo de R/M 846. Conforme descrito anteriormente, o conteúdo do campo de MOD 842 distingue entre as operações com acesso de memória e sem acesso de memória. O papel do campo de Reg 844 pode ser resumido por duas situações: codificar o operando de registro de destino ou um operando de registro de origem ou ser tratado como uma extensão de código de operação e não usado para codificar qualquer operando de instrução. A função do campo de R/M 846 pode incluir o seguinte: codificar o operando de instrução que faz referência a um endereço de memória ou codificar o operando de registro de destino ou um operando de registro de origem.
[00122] O byte de Escala, Índice, Base (SIB) 850 (Byte 6) inclui SS 852 relacionado à escala. Conforme descrito anteriormente, o conteúdo do campo de escala 750 é usado para geração de endereço de memória. SIB.xxx 854 e SIB.bbb 856 - o conteúdo desses campos foi anteriormente mencionado em relação aos índices de registro Xxxx e Bbbb.
[00123] Campo de deslocamento 762A (Bytes 7 a 10) - quando o campo de MOD 842 contém 10, os bytes 7 a 10 são o campo de deslocamento 762A, e funciona da mesma forma que o deslocamento de 32 bits herdados (disp32) e funciona em granularidade de byte.
[00124] Campo de fator de deslocamento 762B (Byte 7) - quando o campo de MOD 842 contém 01, o byte 7 é o campo de fator de deslocamento 762B. A localização desse campo é igual àquela do deslocamento de 8 bits de conjunto de instruções x86 herdadas (disp8), que funciona na granularidade de bytes. Visto que disp8 é estendido com sinal, o mesmo pode endereçar entre -128 e 127 desvios de bytes; em termos de linhas de cache de 64 bytes, disp8 usa 8 bits que podem ser definidos apenas para quatro valores realmente úteis -128, -64, 0 e 64; visto que uma faixa maior é frequentemente necessário, disp32 é usado; entretanto, disp32 exige 4 bytes. Em contraste ao disp8 e ao disp32, o campo de fator de deslocamento 762B é uma reinterpretação de disp8; durante o uso do campo de fator de deslocamento 762B, o deslocamento real é determinado pelo conteúdo do campo de fator de deslocamento multiplicado pelo tamanho do acesso de operando de memória (N). Esse tipo de deslocamento é denominado como disp8*N. Isso reduz o comprimento de instrução médio (um único byte é usado para o deslocamento, porém, com uma faixa muito maior). Tal deslocamento compactado tem como base a suposição de que o deslocamento eficaz é múltiplo da granularidade do acesso de memória e, por conseguinte, os bits redundantes de ordem baixa do desvio de endereço não precisam ser codificados. Em outras palavras, o campo de fator de deslocamento 762B substitui o deslocamento de 8 bits de conjunto de instruções x86 herdadas. Desse modo, o campo de fator de deslocamento 762B é codificado da mesma forma que um deslocamento de 8 bits de conjunto de instruções x86 (então, sem alteração nas regras de codificação de ModRM/SIB) com a única exceção de que disp8 é sobrecarregado a disp8*N. Em outras palavras, não há alterações nas regras de codificação ou comprimentos de codificação, porém, apenas na interpretação do valor de deslocamento por hardware (que precisa escalonar o deslocamento pelo tamanho do operando de memória para obter um desvio de endereço no sentido de bytes). O campo imediato 772 opera conforme descrito anteriormente.
Campo de código de operação completo
[00125] A Figura 8B é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico 800 que constituem o campo de código de operação completo 774 de acordo algumas modalidades. Especificamente, o campo de código de operação completo 774 inclui o campo de formato 740, o campo de operação de base 742 e o campo de largura de elemento de dados (W) 764. O campo de operação de base 742 inclui o campo de codificação de prefixo 825, o campo de mapeamento de código de operação 815 e o campo de código de operação real 830.
Campo de Índice de Registro
[00126] A Figura 8C é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico 800 que constituem o campo de índice de registro 744 de acordo algumas modalidades. Especificamente, o campo de índice de registro 744 inclui o campo REX 805, o campo REX’ 810, o campo MODR/M.reg 844, o campo MODR/M.r/m 846, o campo VVVV 820, o campo xxx 854 e o campo bbb 856.
Campo de Operação de Aumento
[00127] A Figura 8D é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico 800 que constituem o campo de operação de aumento 750 de acordo algumas modalidades. Quando o campo de classe (U) 768 contém 0, significa EVEX.U0 (classe A 768A); quando contém 1, significa EVEX.U1 (classe B 768B). Quando U=0 e o campo de MOD 842 contém 11 (que significa operação sem acesso de memória), o campo alfa 752 (EVEX byte 3, bit [7] - EH) é interpretado como o campo de rs 752A. Quando o campo de rs 752A contém um 1 (arredondamento 752A.1), o campo beta 754 (EVEX byte 3, bits [6:4] SSS) é interpretado como o campo de controle de arredondamento 754A. O campo de controle de arredondamento 754A inclui um campo de SAE de um bit 756 e um campo de operação de arredondamento de dois bits 758. Quando o campo de rs 752A contém um 0 (transformada de dados 752A.2), o campo beta 754 (EVEX byte 3, bits [6:4] SSS) é interpretado como um campo de transformada de dados de três bits 754B. Quando U=0 e o campo de MOD 842 contém 00, 01 ou 10 (que significa uma operação com acesso de memória), o campo alfa 752 (EVEX byte 3, bit [7] - EH) é interpretado como o campo de dica de remoção (EH) 752B e o campo beta 754 (EVEX byte 3, bits [6:4] SSS) é interpretado como um campo de manipulação de dados de três bits 754C.
[00128] Quando U=1, o campo alfa 752 (EVEX byte 3, bit [7] - EH) é interpretado como o campo de controle de máscara de gravação (Z) 752C. Quando U=1 e o campo de MOD 842 contém 11 (que significa operação sem acesso de memória), parte do campo beta 754 (EVEX byte 3, bit [4]- S0) é interpretada como o campo de RL 757A; quando contém um 1 (arredondamento 757A.1), o restante do campo beta 754 (EVEX byte 3, bit [6-5]- S2-1) é interpretado como o campo de operação de arredondamento 759A, enquanto quando o campo de RL 757A contém um 0 (VSIZE 757.A2), o restante do campo beta 754 (EVEX byte 3, bit [6-5]- S2-1) é interpretado como o campo de comprimento de vetor 759B (EVEX byte 3, bit [6-5]- L1-0). Quando U=1 e o campo de MOD 842 contém 00, 01, ou 10 (que significa uma operação com acesso de memória), o campo beta 754 (EVEX byte 3, bits [6:4] SSS) é interpretado como o campo de comprimento de vetor 759B (EVEX byte 3, bit [6- 5] L1-0) e o campo de difusão 757B (EVEX byte 3, bit [4] B).
Arquitetura de Registro Exemplificativa
[00129] A Figura 9 é um diagrama de blocos de uma arquitetura de registro 900 de acordo algumas modalidades. Na modalidade ilustrada, há 32 registros de vetor 910 que têm 512 bits de amplitude; esses registros são chamados de zmm0 a zmm31. Os 256 bits de ordem inferior dos 16 registros zmm inferiores são sobrepostos em registros ymm0-15. Os 128 bits de ordem inferior dos 16 registros zmm inferiores (os 128 bits de ordem inferior dos registros ymm) são sobrepostos nos registros xmm0-15. O formato de instrução favorável de vetor específico 800 opera nesse arquivo de registro sobreposto, conforme ilustrado na Tabela 2 abaixo.
Figure img0002
[00130] Em outras palavras, o campo de comprimento de vetor 759B seleciona entre um comprimento máximo e um ou mais outros comprimentos mais curtos, em que cada tal comprimento mais curto é metade do comprimento do comprimento anterior; e modelos de instruções sem o campo de comprimento de vetor 759B operam no comprimento de vetor máximo. Adicionalmente, em uma modalidade, os modelos de instrução de classe B do formato de instrução favorável de vetor específico 800 operam em dados de ponto de flutuação de precisão única/dupla compactados ou escalares e dados de número inteiro compactados ou escalares. As operações escalares são operações realizadas na posição de elemento de dados de ordem mais inferior em um registro zmm/ymm/xmm; as posições de elemento de dados de ordem superior são deixadas iguais à medida que foram antes da instrução ou anuladas dependendo da modalidade.
[00131] Registros de máscara de gravação 915 na modalidade ilustrada, há 8 registros de máscara de gravação (k0 a k7), cada um com 64 bits de tamanho. Em uma modalidade alternativa, os registros de máscara de gravação 915 têm 16 bits de tamanho. Conforme anteriormente descrito, em algumas modalidades, o registro de máscara de vetor k0 não pode ser usado como uma máscara de gravação; quando a codificação que indicaria normalmente k0 é usada para uma máscara de gravação, a mesma seleciona uma máscara de gravação fisicamente conectada de 0xFFFF, desabilitando de modo eficaz o mascaramento de gravação para aquela instrução.
[00132] Registros de propósito geral 925 na modalidade ilustrada, há dezesseis registros de propósito geral de 64 bits que são usados juntamente com os modos de endereçamento x86 existentes para endereçar operandos de memória. Esses registros são chamados pelos nomes RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP e R8 a R15.
[00133] Arquivo de registro de pilha de ponto de flutuação escalar (pilha x87) 945, em que recebe o alias arquivo de registro plano de número inteiro compactado de MMX 950 na modalidade ilustrada, a pilha x87 é uma pilha de oito elementos usada para realizar operações de ponto de flutuação escalar em dados de ponto de flutuação de 32/64/80 bits com o uso da extensão de conjunto de instruções x87; enquanto os registros de MMX são usados para realizar operações em dados de número inteiro compactados de 64 bits, bem como para manter operandos para algumas operações realizadas entre os registros de MMX e XMM.
[00134] As modalidades alternativas podem usar registros mais amplos ou mais estreitos. Adicionalmente, as modalidades podem usar mais, menos ou diferentes arquivos de registro e registros.
Arquiteturas de Núcleo, Processadores e Arquiteturas de Computador Exemplificativas
[00135] Núcleos de processador podem ser implantados em formas diferentes, para propósitos diferentes, e em processadores diferentes. Por exemplo, implantações de tais núcleos podem incluir: 1) um núcleo em ordem de propósito geral destinado para computação de propósito geral; 2) um núcleo fora de ordem de propósito geral de alto desempenho destinado para computação de propósito geral; 3) um núcleo de propósito específico destinado principalmente para computação gráfica e/ou científica (produtividade). Implantações de processadores diferentes podem incluir: 1) uma CPU que inclui um ou mais núcleos em ordem de propósito geral destinado para computação de propósito geral e/ou um ou mais núcleos fora de ordem de propósito geral destinados para computação de propósito geral; e 2) um coprocessador que inclui um ou mais núcleos de propósito especiais destinados principalmente para gráficos e/ou científico (produtividade). Tais processadores diferentes resultam em arquiteturas de sistema de computador diferentes, 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 que uma CPU (em tal caso, tal coprocessador é, às vezes, denominado como lógica de propósito específico, como lógica gráfica e/ou científica (produtividade) integrada, ou como núcleos de propósito específico); e 4) um sistema em um chip que pode incluir na mesma matriz a CPU descrita (às vezes denominada como o núcleo (ou núcleos) de aplicativo ou processador (ou processadores) de aplicativo), o coprocessador descrito acima e funcionalidade adicional. As arquiteturas de núcleo exemplificativas são descritas a seguir, seguidas pelas descrições de processadores e arquiteturas de computador exemplificativas.
Arquiteturas de Núcleo Exemplificativas Diagrama de blocos de núcleo em ordem e fora de ordem
[00136] A Figura 10A é um diagrama de blocos que ilustra tanto uma pipeline em ordem exemplificativa quanto uma pipeline de emissão/execução fora de ordem de renomeação de registro exemplificativa de acordo com algumas modalidades da invenção. A Figura 10B é um diagrama de blocos que ilustra tanto uma modalidade exemplificativa de um núcleo de arquitetura em ordem quanto um núcleo de arquitetura de emissão/execução fora de ordem de renomeação de registro exemplificativo a serem incluídos em um processador de acordo com algumas modalidades da invenção. A caixas de linha contínua nas Figuras 10A a B ilustram a pipeline em ordem e o núcleo em ordem, enquanto a adição opcional das caixas de linha tracejada ilustra a renomeação de registro, pipeline 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.
[00137] Na Figura 10A, uma pipeline de processador 1000 inclui um estágio de busca 1002, um estágio de decodificação de comprimento 1004, um estágio de decodificação 1006, um estágio de alocação 1008, um estágio de renomeação 1010, um estágio de agendamento (também conhecido como uma expedição ou emissão) 1012, um estágio de leitura de registro/leitura de memória 1014, um estágio de execução 1016, um estágio de writeback/gravação de memória 1018, um estágio de manipulação de exceção 1022 e um estágio de confirmação 1024.
[00138] A Figura 10B mostra o núcleo de processador 1090 que inclui uma unidade de extremidade frontal 1030 acoplada a uma unidade de motor de execução 1050 e ambas são acopladas a uma unidade de memória 1070. O núcleo 1090 pode ser um núcleo de computação de conjunto de instruções reduzido (RISC), um núcleo de computação de conjunto de instruções complexo (CISC), um núcleo de instrução muito longo (VLIW) ou um tipo de núcleo híbrido ou alternativo. Ainda como outra opção, o núcleo 1090 pode ser um núcleo de propósito específico como, por exemplo, um núcleo de rede ou comunicação, motor de compressão, núcleo de coprocessador, núcleo de unidade de processamento de gráficos de computação de propósito geral (GPGPU), núcleo de gráficos ou similares.
[00139] A unidade de front-end 1030 inclui uma unidade de previsão de ramificação 1032 acoplada a uma unidade de cache de instrução 1034 que é acoplada a um armazenamento temporário de instrução de tradução à parte (TLB) 1036 que é acoplado a uma unidade de busca de instrução 1038 que é acoplada a uma unidade de decodificação 1040. A unidade de decodificação 1040 (ou decodificador) pode decodificar instruções e gerar como uma saída uma ou mais micro-operações, pontos de inserção de microcódigo, macroinstruções, outras instruções ou outros sinais de controle que são decodificados ou que refletem de outro modo ou são derivados das instruções originais. A unidade de decodificação 1040 pode ser implantada com uso de vários mecanismos diferentes. Os exemplos de mecanismos adequados incluem, porém sem limitação, tabelas de pesquisa, implantações de hardware, arranjos lógicos programáveis (PLAs), memórias somente de leitura de microcódigo (ROMs), etc. Em uma modalidade, o núcleo 1090 inclui uma ROM de microcódigo ou outro meio que armazena microcódigo para certas macroinstruções (por exemplo, na unidade de decodificação 1040 ou dentro da unidade de front-end 1030). A unidade de decodificação 1040 é acoplada a uma unidade de renomeação/alocação 1052 na unidade de mecanismo de execução 1050.
[00140] A unidade de mecanismo de execução 1050 inclui a unidade de renomeação/alocação 1052 acoplada a uma unidade de desativação 1054 e um conjunto de uma ou mais unidades (ou unidade) de agendador 1056. A unidade (ou unidades) de agendador 1056 representa qualquer número de agendadores diferentes, que inclui estações de reserva, janela de instrução central, etc. A unidade (ou unidades) de agendador 1056 é acoplada à unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1058. Cada uma das unidades de arquivo (ou arquivos) de registro físico 1058 representa um ou mais arquivos de registro físicos, em que aqueles diferentes armazenam um ou mais tipos de dados diferentes, como número inteiro escalar, ponto de flutuação escalar, número inteiro compactado, ponto de flutuação compactado, número inteiro de vetor, ponto de flutuação de vetor, situação (por exemplo, um apontador de instrução que é o endereço da próxima instrução a ser executada), etc. Em uma modalidade, a unidade de arquivo (ou arquivos) de registro físico 1058 compreende uma unidade de registros de vetor, uma unidade de registros de máscara de gravação e uma unidade de registros escalares. Essas unidades de registro podem fornecer registros de vetor arquitetônicos, registros de máscara de vetor e registros de propósito geral. A unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1058 é sobreposta pela unidade de desativação 1054 para ilustrar várias maneiras nas quais a renomeação de registro e a execução fora de ordem podem ser implantadas (por exemplo, com uso de um armazenamento (ou armazenamentos) temporário de reordenamento e um arquivo (ou arquivos) de registro de desativação; com uso de um arquivo (ou arquivos) futuro, um armazenamento (ou armazenamentos) temporário de histórico e um arquivo (ou arquivos) de registro de desativação; com uso de mapas de registro e um grupamento de registros; etc.). A unidade de desativação 1054 e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1058 são acopladas ao agrupamento (ou agrupamentos) de execução 1060. O agrupamento (ou agrupamentos) de execução 1060 inclui um conjunto de uma ou mais unidades de execução 1062 e um conjunto de uma ou mais unidades de acesso de memória 1064. As unidades de execução 1062 podem realizar várias operações (por exemplo, turnos, adição, subtração, multiplicação) e em vários tipos de dados (por exemplo, ponto de flutuação escalar, número inteiro compactado, ponto de flutuação compactado, número inteiro de vetor, ponto de flutuação de vetor). Embora algumas modalidades possam incluir várias unidades de execução dedicadas a funções ou conjuntos de funções específicas, outras modalidades podem incluir apenas uma unidade de execução ou múltiplas unidades de execução que realizam todas as funções. A unidade (ou unidades) de agendador 1056, unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1058, e agrupamento (ou agrupamentos) de execução 1060 são mostrados como sendo, possivelmente, plurais devido ao fato de que certas modalidades criam pipelines separadas para certos tipos de dados/operações (por exemplo, uma pipeline de número inteiro escalar, um ponto de flutuação escalar/número inteiro compactado/ponto de flutuação compactado/número inteiro de vetor/pipeline de ponto de flutuação de vetor e/ou uma pipeline de acesso de memória, em que cada um tem sua própria unidade de agendador, unidade (ou unidades) de arquivo (ou arquivos) de registro físico e/ou agrupamento de execução - e no caso de uma pipeline de acesso de memória separada, são implantadas certas modalidades em que apenas o agrupamento de execução dessa pipeline tem a unidade (ou unidades) de acesso de memória 1064). Deve ser entendido também que quando pipelines separadas são usadas, uma ou mais dentre essas pipelines podem ser emissão/execução fora de ordem e o restante em ordem.
[00141] O conjunto de unidades de acesso de memória 1064 é acoplado à unidade de memória 1070 que inclui uma unidade de TLB de dados 1072 acoplada a uma unidade de cache de dados 1074 acoplada a uma unidade de cache 1076 de nível 2 (L2). Em uma modalidade exemplificativa, as unidades de acesso de memória 1064 podem incluir uma unidade de carga, uma unidade de endereço de armazenamento e uma unidade de dados de armazenamento, em que cada uma é acoplada à unidade de TLB de dados 1072 na unidade de memória 1070. A unidade de cache de instrução 1034 é acoplada adicionalmente a uma unidade de cache 1076 de nível 2 (L2) na unidade de memória 1070. A unidade de cache de L2 1076 é acoplada a um ou mais outros níveis de cache e, eventualmente, a uma memória principal.
[00142] A título de exemplo, a arquitetura de núcleo de emissão/execução fora de ordem e de renomeação de registro fora de ordem exemplificativa pode implantar a pipeline 1000 conforme exposto a seguir: 1) a unidade de busca de instrução 1038 realiza a busca e os estágios de decodificação de comprimento 1002 e 1004; 2) a unidade de decodificação 1040 realiza o estágio de decodificação 1006; 3) a unidade de renomeação/alocação 1052 realiza o estágio de alocação 1008 e o estágio de renomeação 1010; 4) a unidade (ou unidades) de agendador 1056 realiza o estágio de agendamento 1012; 5) a unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1058 e a unidade de memória 1070 realizam o estágio de leitura de registro/leitura de memória 1014; o agrupamento de execução 1060 realiza o estágio de execução 1016; 6) a unidade de memória 1070 e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1058 realizam o estágio de write back/leitura de memória 1018; 7) várias unidades podem estar envolvidas no estágio de manipulação de exceção 1022; e 8) a unidade de desativação 1054 e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico 1058 realizam o estágio de confirmação 1024.
[00143] O núcleo 1090 pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86 (com algumas extensões que foram adicionadas a novas versões); o conjunto de instruções de MIPS de Tecnologias MIPS de Sunnyvale, CA; o conjunto de instruções (com extensões adicionais opcionais como NEON) de ARM Holdings de Sunnyvale, CA), incluindo a instrução (ou instruções) descrita no presente documento. Em uma modalidade, o núcleo 1090 inclui lógica para suportar uma extensão de conjunto de instruções de dados compactados (por exemplo, AVX1, AVX2), permitindo, dessa forma, que as operações usadas por vários aplicativos de multimídia sejam realizadas com uso de dados compactados.
[00144] Deve-se compreender que o núcleo pode suportar múltiplos encadeamentos (executar dois ou mais conjuntos paralelos de operações ou encadeamentos) e pode fazer isso de várias maneiras incluindo múltiplos encadeamentos segmentados por tempo, múltiplos encadeamentos simultâneos (em que um único núcleo físico fornece um núcleo lógico para cada um dentre os encadeamentos que o núcleo físico está múltiplos encadeamentos simultaneamente) ou uma combinação dos mesmos (por exemplo, busca e decodificação segmentada por tempo e múltiplos encadeamentos simultâneos, doravante, como na tecnologia Intel® Hyperthreading).
[00145] Embora a renomeação de registro seja descrita no contexto de execução fora de ordem, deve-se compreender que a renomeação de registro pode ser usada em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também inclua unidades de instrução e de cache de dados separadas 1034/1074 e uma unidade de cache L2 compartilhado 1076, modalidades alternativas podem ter um único cache interno tanto para instruções quanto para dados, tal como, por exemplo, um cache interno de nível 1 (L1), ou múltiplos 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. Alternativamente, todo o cache pode ser externo ao núcleo e/ou ao processador.
Arquitetura de Núcleo em Ordem Exemplificativa Específica
[00146] As Figuras 11A a B ilustram um diagrama de blocos de uma arquitetura de núcleo em ordem exemplificativa mais específica, cujo núcleo pode ser um dentre vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou de tipos diferentes) em um chip. Os blocos de lógica se comunicam através de uma rede de interconexão de alta largura de banda (por exemplo, a rede em anel) com alguma lógica de função fixada, interfaces de E/S de memória e outras lógicas de E/S necessárias, dependendo do aplicativo.
[00147] A Figura 11A é um diagrama de blocos de um núcleo de processador único, junto com sua conexão à rede de interconexão em matriz 1102 e com seu subconjunto local do cache de Nível 2 (L2) 1104, de acordo com algumas modalidades da invenção. Em uma modalidade, um decodificador de instrução 1100 suporta o conjunto de instrução x86 com uma extensão de conjunto de instrução de dados compactados. Um cache L1 1106 permite acessos de baixa latência à memória de cache nas unidades de vetor e escalar. Embora em uma modalidade (para simplificar o projeto), uma unidade escalar 1108 e uma unidade de vetor 1110 usem conjuntos de registros separados (respectivamente, registros escalares 1112 e registros de vetor 1114) e dados transferidos entre as mesmas são gravados na memória e, então, relidos a partir de um cache de nível 1 (L1) 1106, as modalidades alternativas da invenção podem usar uma abordagem diferente (por exemplo, usar um conjunto de registros único ou incluir uma trajetória de comunicação que permite que dados sejam transferidos entre os dois arquivos de registro sem serem gravados ou relidos).
[00148] O subconjunto local do cache de L2 1104 é parte de um cache de L2 global que é divido em subconjuntos locais separados, um por núcleo de processador. Cada núcleo de processador tem uma trajetória de acesso direto ao seu próprio subconjunto local do cache de L2 1104. Dados lidos por um núcleo de processador são armazenados em seu subconjunto de cache de L2 1104 e podem ser acessados rapidamente, em paralelo com outros núcleos de processador que seus próprios subconjuntos de cache de L2 locais. Dados gravados por um núcleo de processador são armazenados em seu próprio subconjunto de cache de L2 1104 e é descartado de outros subconjuntos, se necessário. A rede em anel garante a coerência para dados compartilhados. A rede em anel é bidirecional para permitir que o agente de tais núcleos de processador, caches de L2 e outros blocos lógicos se comuniquem entre si dentro do chip. Cada trajetória de dados em anel tem amplitude de 1012 bits por direção.
[00149] A Figura 11B ilustra uma vista expandida de parte do núcleo de processador na Figura 11A, de acordo com algumas modalidades da invenção. A Figura 11B inclui uma parte de cache de dados de L1 1106A do cache de L1 1106, bem como mais detalhes sobre a unidade de vetor 1110 e os registros de vetor 1114. Especificamente, a unidade de vetor 1110 é uma unidade de processamento de vetor de amplitude 16 (VPU) (consultar a ALU de amplitude 16 1128), que executa uma ou mais dentre as instruções de número inteiro, flutuação de precisão única e flutuação de precisão dupla. A VPU suporta swizzling das entradas de registro com a unidade de swizzling 1120, conversão numérica com as unidades de conversão numérica 1122A e 1122B e replicação com unidade de replicação 1124 na entrada de memória. Os registros de máscara de gravação 1126 permitem prever as gravações de vetor resultantes.
[00150] A Figura 12 é um diagrama de blocos de um processador 1200 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 algumas modalidades da invenção. As caixas de linha contínua na Figura 12 ilustram um processador 1200 com um único núcleo 1202A, um agente de sistema 1210, um conjunto de uma ou mais unidades de controlador de barramento 1216, enquanto a adição opcional das caixas de linha tracejada ilustra um processador alternativo 1200 com múltiplos núcleos 1202A a 1202N, um conjunto de uma ou mais unidades de controlador de memória integrada 1214 na unidade de agente de sistema 1210 e lógica de propósito específico 1208.
[00151] Dessa forma, as implantações diferentes do processador 1200 podem incluir: 1) uma CPU com a lógica de propósito específico 1208 que é lógica gráfica e/ou científica (produtividade) integrada (que pode incluir um ou mais núcleos) e sendo que os núcleos 1202A a N são um ou mais núcleos de propósito geral (por exemplo, núcleos em ordem de propósito geral, núcleos fora de ordem de propósito geral, uma combinação dos dois); 2) um coprocessador com os núcleos 1202A a N que são um grande número de núcleos de propósito geral destinados principalmente para gráfica e/ou científica (produtividade); e 3) um coprocessador com os núcleos 1202A a N que são um grande número de núcleos em ordem de propósito geral. Dessa forma, o processador 1200 pode ser um processador de propósito geral, coprocessador ou processador de propósito específico como, por exemplo, um processador de rede ou comunicação, um mecanismo de compactação, um processador de gráficos, GPGPU (unidade de processamento de gráficos de propósito geral), um coprocessador de núcleo de alto rendimento integrado (MIC) (incluindo 30 ou mais núcleos), processador embutido ou similares. O processador pode ser implantado em um ou mais chips. O processador 1200 pode ser uma parte de e/ou pode ser implantado em um ou mais substratos que usam qualquer uma dentre várias tecnologias de processo, como, por exemplo, BiCMOS, CMOS ou NMOS.
[00152] 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 compartilhado 1206 e memória externa (não mostrada) acoplada ao conjunto de unidades de controlador de memória integrada 1214. O conjunto de unidades de cache compartilhado 1206 pode incluir um ou mais caches de nível médio, tais como o nível 2 (L2), o nível 3 (L3), o nível 4 (L4) ou outros níveis de cache, um cache de último nível (LLC) e/ou combinações dos mesmos. Embora em uma modalidade uma unidade de interconexão baseada em anel 1212 interconecte a lógica gráfica integrada 1208 (lógica gráfica integrada 1208 é um exemplo de e é também denominada aqui como lógica de propósito específico), o conjunto de unidades de cache compartilhado 1206 e a unidade de agente de sistema 1210/unidade (ou unidades) de controle de memória integrada 1214, modalidades alternativas podem usar qualquer número de técnicas bem conhecidas para interconectar tais unidades. Em uma modalidade, a coerência é mantida entre uma ou mais unidades de cache 1206 e núcleos 1202-A-N.
[00153] Em algumas modalidades, um ou mais dentre os núcleos 1202A-N têm capacidade de realizar o encadeamento múltiplo. A unidade de agente de sistema 1210 inclui aqueles componentes que coordenam e operam os núcleos 1202A-N. A unidade de agente de sistema 1210 pode incluir, por exemplo, uma unidade de controle de potência (PCU) e uma unidade exibição. A PCU pode ser ou incluir a lógica e os componentes necessários para regular o estado de potência dos núcleos 1202A-N e a lógica de gráficos integrada 1208. A unidade exibição tem como objetivo acionar um ou mais visores conectados externamente.
[00154] Os núcleos 1202A a N podem ser homogêneos ou heterogêneos em termos de conjunto de instruções de arquitetura, ou seja, dois ou mais dentre os núcleos 1202A a N podem ter capacidade para executar o mesmo conjunto de instruções, enquanto outros podem ter capacidade para executar apenas um subconjunto desse conjunto de instruções ou de um conjunto de instruções diferente.
Arquiteturas de Computador Exemplificativas
[00155] As Figuras 13 a 16 são diagramas de blocos de arquiteturas de computador exemplificativas. Outros modelos e configurações de sistema conhecidos nas técnicas para computadores do tipo laptop, computadores do tipo desktops, PCs portáteis, assistentes pessoais digitais, estações de trabalho de engenharia, servidores, dispositivos de rede, hubs de rede, comutadores, processadores embutidos, processadores de sinal digital (DSPs), dispositivos de gráficos, dispositivos de vídeo game, decodificadores de sinais, microcontroladores, telefones celulares, reprodutores de mídia transportáveis, dispositivos portáteis e vários outros dispositivos eletrônicos também são adequados. Em geral, uma grande variedade de sistemas ou dispositivos eletrônicos com a capacidade para incorporar um processador e/ou outra lógica de execução, conforme revelado no presente documento, é, de modo geral, adequada.
[00156] Referindo-se, agora, à Figura 13, um diagrama de blocos de um sistema 1300 é mostrado de acordo com uma modalidade da presente invenção. O sistema 1300 pode incluir um ou mais processadores 1310, 1315, que são acoplados a um concentrador de controlador 1320. Em uma modalidade, o concentrador de controlador 1320 inclui um concentrador de controlador de memória gráfica (GMCH) 1390 e um concentrador de Entrada/Saída (IOH) 1350 (que pode estar em chips separados); o GMCH 1390 inclui controladores de memória e gráficos aos quais é acoplada a memória 1340 e um coprocessador 1345; o IOH 1350 acopla os dispositivos de entrada/saída (E/S) 1360 ao GMCH 1390. Alternativamente, um ou ambos os controladores de memória e gráficos estão integrados dentro do processador (conforme descrito no presente documento), a memória 1340 e o coprocessador 1345 são acoplados diretamente ao processador 1310 e ao concentrador de controlador 1320 em um único chip com o IOH 1350.
[00157] A natureza opcional de processadores adicionais 1315 é representada na Figura 13 com linhas cortadas. Cada processador 1310, 1315 pode incluir um ou mais dos núcleos de processamento descritos no presente documento e podem ser alguma versão do processador 1200.
[00158] A memória 1340 pode ser, por exemplo, memória de acesso aleatório dinâmica (DRAM), memória de mudança de fase (PCM) ou uma combinação das duas. Para pelo menos uma modalidade, o concentrador de controlador 1320 se comunica com o processador (ou processadores) 1310, 1315 através de um barramento multiponto, como um barramento frontal (FSB), interface ponto a ponto como Interconexão QuickPath (QPI) ou conexão semelhante 1395.
[00159] Em uma modalidade, o coprocessador 1345 é um processador de finalidade especial como, por exemplo, um processador de MIC de alto rendimento, um processador de rede ou comunicação, compressão de motor, processador de gráficos, GPGPU, processador embutido ou similar. Em uma modalidade, o concentrador de controlador 1320 pode incluir um acelerador de gráficos integrado.
[00160] Pode haver várias diferenças entre os recursos físicos 1310, 1315 em termos de um espectro de métrica de mérito que inclui características arquitetônicas, microarquitetônicas, térmicas, de consumo de potência e similares.
[00161] Em uma modalidade, o processador 1310 executa instruções que controlam operações de processamento de dados de um tipo geral. As instruções de coprocessador podem estar embutidas nas instruções. O processador 1310 reconhece essas instruções de coprocessador como sendo de um tipo que poderia ser executado pelo coprocessador 1345 anexado. Consequentemente, o processador 1310 emite essas instruções de coprocessador (ou sinais de controle que representam instruções de coprocessador) em um barramento de coprocessador ou outra interconexão, para o coprocessador 1345. O coprocessador (ou coprocessadores) 1345 aceita e executa as instruções de coprocessador recebidas.
[00162] Referindo-se agora à Figura 14, é mostrado um diagrama de blocos de um primeiro sistema exemplificativo mais específico 1400 de acordo com uma modalidade da presente invenção. Conforme mostrado na Figura 14, o sistema de multiprocessador 1400 é um sistema de interconexão ponto a ponto e inclui um primeiro processador 1470 e um segundo processador 1480 acoplados através de uma interconexão ponto a ponto 1450. Cada um dos processadores 1470 e 1480 pode ser alguma versão do processador 1200. Em algumas modalidades, os processadores 1470 e 1480 são respectivamente os processadores 1310 e 1315, enquanto o coprocessador 1438 é o coprocessador 1345. Em outra modalidade, os processadores 1470 e 1480 são, respectivamente, o processador 1310 e o coprocessador 1345.
[00163] Os processadores 1470 e 1480 são mostrados incluindo as unidades de controlador de memória integrada (IMC) 1472 e 1482, respectivamente. O processador 1470 também inclui como parte de suas unidades de controlador de barramento as interfaces ponto a ponto (P-P) 1476 e 1478; de modo similar, o segundo processador 1480 inclui interfaces P-P 1486 e 1488. Os processadores 1470, 1480 podem trocar informações através de uma interface ponto a ponto (P-P) 1450 com uso de circuitos de interface P-P 1478, 1488. Conforme mostrado na Figura 14, os MCHs 1472 e 1482 acoplam os processadores às respectivas memórias, a saber, uma memória 1432 e uma memória 1434, que podem ser porções de memória principal fixadas localmente aos respectivos processadores.
[00164] Os processadores 1470, 1480 podem trocar, cada um, informações com um conjunto de chips 1490 através de interfaces P-P individuais 1452, 1454 com uso de circuitos de interface ponto a ponto 1476, 1494, 1486, 1498. O conjunto de chips 1490 pode trocar informações, opcionalmente, com o coprocessador 1438 através de uma interface de alto desempenho 1492. Em uma modalidade, o coprocessador 1438 é um processador de finalidade especial como, por exemplo, um processador de MIC de alto rendimento, um processador de rede ou comunicação, compressão de motor, processador de gráficos, GPGPU, processador embutido ou semelhantes.
[00165] Um cache compartilhado (não mostrado) pode estar incluído em qualquer processador ou estar fora de ambos os processadores, ainda conectados com os processadores por meio da interconexão P-P, de modo que qualquer uma ou ambas as informações de cache local dos processadores possam ser armazenadas no cache compartilhado se um processador for colocado em um modo de baixa potência.
[00166] O conjunto de chips 1490 pode ser acoplado a um primeiro barramento 1416 por meio de uma interface 1496. Em uma modalidade, o primeiro barramento 1416 pode ser um barramento de Interconexão de Componente Periférico (PCI) ou um barramento como um barramento expresso de PCI ou outro barramento de interconexão de E/S de terceira geração, embora o escopo da presente invenção não seja limitado ao mesmo.
[00167] Conforme mostrado na Figura 14, vários dispositivos de E/S 1414 podem ser acoplados ao primeiro barramento 1416, juntamente com uma ponte de barramento 1418 que acopla o primeiro barramento 1416 a um segundo barramento 1420. Em uma modalidade, um ou mais processadores adicionais 1415, como coprocessadores, processadores de MIC de alto rendimento, GPGPUs, aceleradores (como, por exemplo, aceleradores de gráficos ou unidades de processamento de sinal digital (DSP)), arranjos de porta programável em campo ou qualquer outro processador são acoplados ao primeiro barramento 1416. Em uma modalidade, o segundo barramento 1420 pode ser um barramento de contagem de pinos baixa (LPC). Vários dispositivos podem ser acoplados a um segundo barramento 1420 que inclui, por exemplo, um teclado e/ou mouse 1422, dispositivos de comunicação 1427 e uma unidade de armazenamento de dados 1428 como uma unidade de disco magnético ou outro dispositivo de armazenamento em massa que pode incluir instruções/código e dados 1430, em uma modalidade. Adicionalmente, uma E/S de áudio 1424 pode ser acoplada ao segundo barramento 1420. Observa-se que outras arquiteturas são possíveis. Por exemplo, ao invés da arquitetura ponto a ponto da Figura 14, um sistema pode implantar um barramento multiponto ou outra arquitetura.
[00168] Referindo-se agora à Figura 15, é mostrado um diagrama de blocos de um segundo sistema exemplificativo mais específico 1500 de acordo com uma modalidade da presente invenção. Elementos semelhantes nas Figuras 14 e 15 apresentam números de referência semelhantes e certos aspectos da Figura 14 foram omitidos da Figura 15 para evitar obscurecer outros aspectos da Figura 15.
[00169] A Figura 15 ilustra que os processadores 1470, 1480 podem incluir memória integrada e lógica de controle de E/S (“CL”) 1572 e 1582, respectivamente. Dessa forma, a CL 1572, 1582 inclui unidades de controlador de memória integrada e inclui lógica de controle de E/S. A Figura 15 ilustra que não apenas as memórias 1432, 1434 são acopladas à CL 1572, 1582, mas que os dispositivos de E/S 1514 também são acoplados à lógica de controle 1572, 1582. Os dispositivos de E/S herdados 1515 são acoplados ao conjunto de chips 1490.
[00170] Referindo-se agora à Figura 16, é mostrado um diagrama de blocos de um SoC 1600 de acordo com uma modalidade da presente invenção. Os elementos semelhantes na Figura 12 apresentam referências numéricas iguais. Também, as caixas de linha tracejada são recursos opcionais em SoCs mais avançados. Na Figura 16, uma unidade (ou unidades) de interconexão 1602 é acoplada a: um processador de aplicativo 1610 que inclui um conjunto de um ou mais núcleos 1202A a N, que incluem unidades de cache 1204A a N e unidade (ou unidades) de cache compartilhado 1206; uma unidade de agente de sistema 1210; uma unidade (ou unidades) de controlador de barramento 1216; uma unidade (ou unidades) de controlador de memória integrada 1214; um conjunto de um ou mais coprocessadores 1620 que podem incluir lógica de gráficos integrada, um processador de imagem, um processador de áudio e um processador de vídeo, uma unidade de memória de acesso aleatório estática (SRAM) 1630; um unidade com acesso de memória direto (DMA) 1632; e uma unidade de exibição 1640 para se acoplar a um ou mais visores externos. Em uma modalidade, o coprocessador (ou coprocessadores) 1620 inclui um processador de propósito específico como, por exemplo, um processador de rede ou comunicação, mecanismo de compactação, GPGPU, um processador de MIC de alto rendimento, um processador embutido ou similares.
[00171] As modalidades dos mecanismos revelados no presente documento podem ser implantadas em hardware, software, firmware ou em uma combinação de tais abordagens de implantação. As modalidades da invenção podem ser implantadas como programas de computador ou código de programa em sistemas programáveis que compreendem pelo menos um processador, um sistema de armazenamento (que inclui 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.
[00172] O código de programa, como o código 1430 ilustrado na Figura 14, pode ser aplicado às instruções de entrada para realizar as funções descritas no presente documento e gerar informações de saída. As informações de saída podem ser aplicadas a um ou mais dispositivos de saída, de maneira conhecida. Para os fins deste pedido, um sistema de processamento inclui qualquer sistema que tem um processador como, por exemplo, um processador de sinal digital (DSP), um microcontrolador, um circuito integrado de aplicação específica (ASIC) ou um microprocessador.
[00173] O código de programa pode ser implantado em uma linguagem de programação processual em nível elevado ou orientada por objeto para se comunicar com um sistema de processamento. O código do programa pode ser implantado em linguagem de máquina ou montagem, caso desejado. De fato, os mecanismos descritos no presente documento não se limitam em relação ao escopo a qualquer linguagem de programação particular. De qualquer modo, a linguagem pode ser uma linguagem compilada ou interpretada.
[00174] Um ou mais aspectos de pelo menos uma modalidade podem ser implantados por instruções representativas armazenadas em uma mídia legível por máquina que representa várias lógicas no processador, que, quando lidas por uma máquina, fazem com que a máquina fabrique lógica para realizar as técnicas descritas no presente documento. Tais representações conhecidas como “núcleos de IP” podem ser armazenadas em uma mídia legível por máquina tangível e fornecidas a vários clientes ou instalações de fabricação para carregar as máquinas de fabricação que, de fato, produzem a lógica ou o processador.
[00175] Tal mídia de armazenamento legível por máquina pode incluir, porém sem limitação, disposições tangíveis e não transitórias 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 ópticos, memórias somente leitura de disco compacto (CD-ROMs), discos regraváveis compactos (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âmicas (DRAMs), memórias de acesso aleatório estáticas (SRAMs), memórias somente leitura programáveis e apagáveis (EPROMs), memórias rápidas, memórias somente leitura eletricamente programáveis e apagáveis (EEPROMs), memória de mudança de fase (PCM), cartões magnéticos ou ópticos ou qualquer outro tipo de mídia adequada para armazenar instruções eletrônicas.
[00176] Consequentemente, as modalidades da invenção também incluem mídia legível por máquina, tangível e não transitória que contém instruções ou dados de modelo, como Linguagem de Descrição de Hardware (HDL) que define estruturas, circuitos, aparelhos, processadores e/ou recursos de sistema descritos no presente documento. Tais modalidades também podem ser denominadas como produtos de programa.
Emulação (incluindo translação binária, transformação de código, etc.)
[00177] Em alguns casos, um conversor de instrução pode ser usado para converter uma instrução de um conjunto de instruções de origem para um conjunto de instruções alvo. Por exemplo, o conversor de instrução pode traduzir (por exemplo, com o uso de tradução binária estática, tradução binária dinâmica que inclui compilação dinâmica), transformar, emular ou de outro modo converter uma instrução em uma ou mais outras instruções a serem processadas pelo núcleo. O conversor de instrução pode ser implantado em software, hardware, firmware ou em uma combinação dos mesmos. O conversor de instrução pode estar no processador, fora do processador ou parte no processador e parte fora do processador.
[00178] A Figura 17 é um diagrama de blocos que contrasta o uso de um conversor de instrução de software para converter instruções binárias em um conjunto de instruções fonte para instruções binárias em um conjunto de instruções alvo de acordo com modalidades da invenção. Na modalidade ilustrada, o conversor de instrução é um conversor de instrução de software, embora alternativamente o conversor de instrução possa ser implantado em software, firmware, hardware ou várias combinações dos mesmos. A Figura 17 mostra um programa em uma linguagem de nível elevado 1702 que pode ser compilado com uso de um compilador x86 1704 para gerar código binário x86 1706 que pode ser executado nativamente por um processador com pelo menos um núcleo de conjunto de instruções x86 1716. O processador com pelo menos um núcleo de conjunto de instruções x86 1716 representa qualquer processador que pode realizar substancialmente as mesmas funções que um processador da Intel com pelo menos um núcleo de conjunto de instruções x86 executando-se compativelmente ou, de outra forma, processando-se (1) uma porção substancial do conjunto de instruções do Núcleo de conjunto de instruções x86 da Intel ou (2) versões de código de objeto de aplicativos ou outro software destinadas a serem executadas em um Processador da Intel com pelo menos um núcleo de conjunto de instruções x86, a fim de alcançar substancialmente o mesmo resultado que um processador da Intel com pelo menos um núcleo de conjunto de instruções x86. O compilador x86 1704 representa um compilador que é operável para gerar código binário x86 1706 (por exemplo, código de 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ção x86 1716. De modo similar, a Figura 17 mostra o programa na linguagem de alto nível 1702 que pode ser compilado com uso de um compilador de conjunto de instruções alternativo 1708 para gerar código binário de conjunto de instruções alternativo 1710 que pode ser executado nativamente por um processador sem pelo menos um núcleo de conjunto de instruções x86 1714 (por exemplo, um processador com núcleos que executam o conjunto de instruções de MIPS de Tecnologias MIPS de Sunnyvale, CA, EUA e/ou que executam o conjunto de instruções ARM de ARM Holdings de Sunnyvale, CA, EUA). O conversor de instrução 1712 é usado para converter o código binário x86 1706 em código que pode ser executado nativamente pelo processador sem um núcleo de conjunto de instruções x86 1714. Esse código convertido não tem probabilidade de ser igual ao código binário do conjunto de instruções alternativo 1710 devido ao fato de que um conversor de instrução com capacidade para isso é difícil de se produzir; contudo, o código convertido irá realizar a operação geral e será constituído de instruções do conjunto de instruções alternativo. Dessa forma, o conversor de instrução 1712 representa software, firmware, hardware ou uma combinação dos mesmos que, através de emulação, simulação ou qualquer outro processo, permite que um processador ou outro dispositivo eletrônico que não tem um processador ou núcleo de conjunto de instrução x86 execute o código binário x86 1706.
EXEMPLOS ADICIONAIS
[00179] O Exemplo 1 inclui um sistema exemplificativo que compreende: um processador que compreende um ou mais núcleos, um cache de último nível (LLC) que tem múltiplas vias, cada via alocada para uma dentre múltiplas prioridades, cada prioridade associada a um registro de classe de serviço (CLOS) que especifica o número mínimo e máximo de vias para ocupar, um circuito de controle de cache (CCC) para armazenar uma linha de cache de entrada (CL) que tem uma prioridade de solicitante dentre as múltiplas prioridades, em uma CL inválida, se houver, no LLC, de outro modo, quando a prioridade de solicitante é uma mais baixa dentre as múltiplas prioridades e tem uma ocupação de um ou mais, ou quando a ocupação está no máximo para a prioridade de solicitante, o CCC deve armazenar a CL de entrada no lugar de uma CL menos utilizada recentemente (LRU) da prioridade de solicitante, de outro modo, quando a ocupação está entre um mínimo e o máximo para a prioridade de solicitante, o CCC deve armazenar a CL de entrada no lugar de uma CL LRU da prioridade de solicitante ou de uma prioridade mais baixa, de outro modo, quando a ocupação é menor que o mínimo, o CCC deve armazenar a CL de entrada no lugar de uma CL LRU, se houver, que tem a prioridade mais baixa, de outro modo, quando não existem candidatos de remoção que tem a prioridade de solicitante ou a prioridade mais baixa, o CCC deve armazenar a CL de entrada no lugar de uma CL LRU que tem uma prioridade mais alta que a prioridade de solicitante.
[00180] O Exemplo 2 inclui a substância do sistema exemplificativo do Exemplo 1, em que o LLC compreende múltiplos conjuntos de vias, em que a pluralidade de vias faz parte de um dentre os múltiplos conjuntos, e em que o CCC, antes de determinar onde armazenar a CL de entrada, deve determinar, com base em um algoritmo de hash realizado em um endereço lógico da CL de entrada, quais dentre os múltiplos conjuntos incluem a CL de entrada.
[00181] O Exemplo 3 inclui a substância do sistema exemplificativo do Exemplo 1, que compreende adicionalmente um circuito de monitoramento de cache para manter heurística relacionada a remoções de cache LLC, em que, quando mais que uma porcentagem limiar de linhas de cache que tem uma alta prioridade é removida para criar espaço para preencher uma CL de entrada com uma prioridade menor, o registro de CLOS para a prioridade alta deve ser atualizado para aumentar as vias mínima e máxima para ocupar.
[00182] O Exemplo 4 inclui a substância do sistema exemplificativo do Exemplo 1, em que cada uma dentre a pluralidade de vias compreende N CLs, em que N é um número inteiro positivo maior ou igual a um.
[00183] O Exemplo 5 inclui a substância do sistema exemplificativo do Exemplo 1, em que o CCC, mediante o armazenamento da CL de entrada no lugar da CL LRU, se houver, que tem a prioridade menor, deve causar a liberação de outras CLs, se houver, em uma via que contém a CL LRU.
[00184] O Exemplo 6 inclui a substância do sistema exemplificativo do Exemplo 1, em que o um ou mais núcleos devem, cada um, implantar uma máquina virtual, e em que o CCC compreende um hipervisor.
[00185] O Exemplo 7 inclui a substância do sistema exemplificativo do Exemplo 1, em que o processador é um dentre múltiplos processadores em um data center de um provedor de serviços de nuvem.
[00186] O Exemplo 8 inclui um método exemplificativo realizado por um circuito de controle de cache (CCC) em um sistema que compreende um processador que tem um ou mais núcleos, um cache de último nível (LLC) que tem múltiplas vias, cada via alocada para uma dentre múltiplas prioridades, cada prioridade associada a um registro de classe de serviço (CLOS) que especifica o número mínimo e máximo de vias para ocupar, sendo que o método compreende: receber uma solicitação para armazenar uma linha de cache de entrada (CL) que tem uma prioridade de solicitante dentre as múltiplas prioridades no LLC, armazenar a CL de entrada em uma CL inválida no LLC, se existir, de outro modo, quando a prioridade de solicitante é uma mais baixa dentre as múltiplas prioridades e tem uma ocupação de um ou mais, ou quando a ocupação está em um máximo para a prioridade de solicitante, armazenar a CL de entrada no lugar de uma CL menos utilizada recentemente (LRU) da prioridade de solicitante, de outro modo, quando a ocupação está entre um mínimo e o máximo para a prioridade de solicitante, armazenar a CL de entrada no lugar de uma CL LRU da prioridade de solicitante ou uma prioridade mais baixa, de outro modo, quando a ocupação é menor que o mínimo, armazenar a CL de entrada no lugar de uma CL LRU, se houver, que tem a prioridade mais baixa, de outro modo, quando não existem candidatos de remoção que tem a prioridade de solicitante ou a prioridade mais baixa, armazenar a CL de entrada no lugar de uma CL LRU que tem uma prioridade mais alta que a prioridade de solicitante.
[00187] O Exemplo 9 inclui a substância do método exemplificativo do Exemplo 8, em que o LLC compreende múltiplos conjuntos de vias, em que a pluralidade de vias faz parte de um dentre os múltiplos conjuntos, e em que o CCC, antes de determinar onde armazenar a CL de entrada, deve determinar, com base em um algoritmo de hash realizado em um endereço lógico da CL de entrada, quais dentre os múltiplos conjuntos incluem a CL de entrada.
[00188] O Exemplo 10 inclui a substância do método exemplificativo do Exemplo 8, que mantém, com o uso de um conjunto de circuitos de monitoramento de cache LLC, heurística relacionada a remoções de cache LLC, em que, quando mais que uma porcentagem limiar de linhas de cache que tem uma prioridade alta é removida para criar espaço para preencher uma CL de entrada com uma prioridade menor, atualiza um registro de CLOS para a prioridade alta para aumentar as vias mínima e máxima para ocupar.
[00189] O Exemplo 11 inclui a substância do método exemplificativo do Exemplo 8, em que cada uma dentre a pluralidade de vias compreende N CLs, em que N é um número inteiro positivo maior ou igual a um.
[00190] O Exemplo 12 inclui a substância do método exemplificativo do Exemplo 8, em que o CCC, mediante o armazenamento da CL de entrada no lugar da CL LRU, se houver, que tem a prioridade menor, deve causar a liberação de outras CLs, se houver, em uma via que contém a CL LRU.
[00191] O Exemplo 13 inclui a substância do método exemplificativo do Exemplo 8, em que o um ou mais núcleos devem, cada um, implantar uma máquina virtual, e em que o CCC compreende um hipervisor.
[00192] O Exemplo 14 inclui a substância do método exemplificativo do Exemplo 8, em que o processador é um dentre múltiplos processadores em um data center de um provedor de serviços de nuvem.
[00193] O Exemplo 15 inclui um meio legível por computador não transitório exemplificativo que contém instruções para quais um circuito de controle de cache (CCC) em um sistema que compreende um processador que tem um ou mais núcleos, um cache de último nível (LLC) que tem múltiplas vias, cada via alocada para uma dentre múltiplas prioridades, cada prioridade associada a um registro de classe de serviço (CLOS) que especifica o número mínimo e máximo de vias para ocupar, deve responder: quando o LLC contém uma linha de cache inválida (CL), armazenando uma CL de entrada que tem uma prioridade de solicitante das múltiplas prioridades na CL inválida, de outro modo, quando a prioridade de solicitante é uma mais baixa dentre as múltiplas prioridades e tem uma ocupação de um ou mais, ou quando a ocupação está em um máximo para a prioridade de solicitante, armazenando a CL de entrada no lugar de uma CL menos utilizada recentemente (LRU) da prioridade de solicitante, de outro modo, quando a ocupação está entre um mínimo e o máximo para a prioridade de solicitante, armazenado a CL de entrada no lugar de uma CL LRU da prioridade de solicitante ou de uma prioridade mais baixa, de outro modo, quando a ocupação é menor que o mínimo, armazenando a CL de entrada no lugar de uma CL LRU, se houver, que tem a prioridade mais baixa, de outro modo, quando não existem candidatos de remoção que tem a prioridade de solicitante ou a prioridade mais baixa, armazenando a CL de entrada no lugar de uma CL LRU que tem uma prioridade mais alta que a prioridade de solicitante.
[00194] O Exemplo 16 inclui a substância do meio legível por computador não transitório exemplificativo do Exemplo 15, em que o LLC compreende múltiplos conjuntos de vias, em que a pluralidade de vias faz parte de um dentre os múltiplos conjuntos, e em que o CCC, em resposta adicional às instruções, deve, antes de determinar onde armazenar a CL de entrada, determinar, com base em um algoritmo de hash realizado em um endereço lógico da CL de entrada, quais dentre os múltiplos conjuntos incluem a CL de entrada.
[00195] O Exemplo 17 inclui a substância do meio legível por computador não transitório exemplificativo do Exemplo 15, em que o processador é um dentre múltiplos processadores em um data center de um provedor de serviços de nuvem.
[00196] O Exemplo 18 inclui a substância do meio legível por computador não transitório exemplificativo do Exemplo 15, em que cada uma dentre a pluralidade de vias compreende N CLs, em que N é um número inteiro positivo maior ou igual a um.
[00197] O Exemplo 19 inclui a substância do meio legível por computador não transitório exemplificativo do Exemplo 15, em que o CCC, mediante o armazenamento da CL de entrada no lugar da CL LRU, se houver, que tem a prioridade menor, deve causar a liberação de outras CLs, se houver, em uma via que contém a CL LRU.
[00198] O Exemplo 20 inclui a substância do meio legível por computador não transitório exemplificativo do Exemplo 15, em que o um ou mais núcleos devem, cada um, implantar uma máquina virtual, e em que o CCC compreende um hipervisor.

Claims (20)

  1. Sistema caracterizado por compreender:
    um cache de último nível (LLC) que tem uma pluralidade de vias, cada via alocada a uma dentre múltiplas prioridades, cada prioridade associada a um registro de classe de serviço (CLOS) que especifica número mínimo e máximo de vias para ocupar;
    um circuito de controle de cache (CCC) para:
    quando existe uma linha de cache inválida (CL) no LLC, armazenar uma linha de cache de entrada (CL) que tem uma prioridade de solicitante que é uma dentre múltiplas prioridades para uma CL inválida;
    quando a prioridade de solicitante é uma mais baixa dentre as múltiplas prioridades e tem uma ocupação de um ou mais, ou quando a ocupação está em um máximo para a prioridade de solicitante, armazenar a CL de entrada no lugar de uma CL menos utilizada recentemente (LRU) da prioridade de solicitante;
    quando a ocupação está entre um mínimo e o máximo para a prioridade de solicitante, armazenar a CL de entrada no lugar de uma CL LRU de solicitante ou de uma prioridade mais baixa;
    quando a ocupação é menor que o mínimo e existe uma CL que tem a prioridade mais baixa, armazenar a CL de entrada no lugar de uma CL LRU que tem a prioridade mais baixa; e
    quando não existe CL inválida ou CL com o solicitante ou prioridade mais baixa, armazenar a CL de entrada no lugar de uma CL LRU de uma prioridade mais alta.
  2. Sistema, de acordo com a reivindicação 1, caracterizado pelo fato de que o LLC compreende múltiplos conjuntos de vias, em que a pluralidade de vias faz parte de um dentre os múltiplos conjuntos, e em que o CCC, antes de determinar onde armazenar a CL de entrada, deve determinar, com base em um algoritmo de hash realizado em um endereço lógico da CL de entrada, quais dentre os múltiplos conjuntos incluem a CL de entrada.
  3. Sistema, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente um circuito de monitoramento de cache para manter heurística relacionada a remoções de cache LLC, em que, quando mais que uma porcentagem limiar de linhas de cache que tem uma prioridade mais alta é removida para criar espaço para preencher uma CL de entrada com uma prioridade mais baixa, o registro de CLOS para a prioridade mais alta deve ser atualizado para aumentar as vias mínima e máxima para ocupar.
  4. Sistema, de acordo com a reivindicação 1, caracterizado pelo fato de que cada uma dentre a pluralidade de vias compreende N CLs, em que N é um número inteiro positivo maior ou igual a um.
  5. Sistema, de acordo com a reivindicação 1, caracterizado pelo fato de que o CCC, mediante o armazenamento da CL de entrada no lugar da CL LRU, se houver, que tem a prioridade mais baixa, deve causar a liberação de outras CLs, se houver, em uma via que contém a CL LRU.
  6. Sistema, de acordo com qualquer uma das reivindicações 1 a 5, caracterizado pelo fato de que compreende adicionalmente um processador que incorpora o LLC e o CCC e que compreende um ou mais núcleos, cada um dentre o um ou mais núcleos para implantar uma máquina virtual, e em que o CCC compreende um hipervisor.
  7. Sistema, de acordo com a reivindicação 6, caracterizado pelo fato de que o processador é um dentre uma pluralidade de processadores em um data center de um provedor de serviços de nuvem.
  8. Método realizado por um circuito de controle de cache (CCC) em um sistema que compreende um cache de último nível (LLC) que tem uma pluralidade de vias, cada via alocada a uma dentre múltiplas prioridades, cada prioridade associada a um registro de classe de serviço (CLOS) que especifica número mínimo e máximo de vias para ocupar, sendo que o método é caracterizado por compreender:
    receber uma solicitação para armazenar uma linha de cache de entrada (CL) que tem uma prioridade de solicitante dentre as múltiplas prioridades no LLC;
    quando existe uma CL inválida no LLC, armazenar a CL de entrada para a CL inválida;
    quando a prioridade de solicitante é uma mais baixa dentre as múltiplas prioridades e tem uma ocupação de um ou mais, ou quando a ocupação está em um máximo para a prioridade de solicitante, armazenar a CL de entrada no lugar de uma CL menos utilizada recentemente (LRU) da prioridade de solicitante;
    quando a ocupação está entre um mínimo e o máximo para a prioridade de solicitante, armazenar a CL de entrada no lugar de uma CL LRU de solicitante ou de uma prioridade mais baixa;
    quando a ocupação é menor que o mínimo e existe uma CL que tem a prioridade mais baixa, armazenar a CL de entrada no lugar de uma CL LRU que tem a prioridade mais baixa; e
    quando não existe CL inválida ou CL com o solicitante ou prioridade mais baixa, armazenar a CL de entrada no lugar de uma CL LRU de uma prioridade mais alta.
  9. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que o LLC compreende múltiplos conjuntos de vias, em que a pluralidade de vias faz parte de um dentre os múltiplos conjuntos, e em que o CCC, antes de determinar onde armazenar a CL de entrada, deve determinar, com base em um algoritmo de hash realizado em um endereço lógico da CL de entrada, qual dentre os múltiplos conjuntos inclui a CL de entrada.
  10. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que mantém, com o uso de um conjunto de circuitos de monitoramento de cache LLC, heurística relacionada a remoções de cache LLC, em que, quando mais que uma porcentagem limiar de linhas de cache que tem uma prioridade mais alta é removida para criar espaço para preencher uma CL de entrada com uma prioridade mais baixa, atualiza um registro de CLOS para a prioridade mais alta para aumentar as vias mínima e máxima para ocupar.
  11. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que cada uma dentre a pluralidade de vias compreende N CLs, em que N é um número inteiro positivo maior ou igual a um.
  12. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que o CCC, mediante o armazenamento da CL de entrada no lugar da CL LRU, se houver, que tem a prioridade mais baixa, deve causar a liberação de outras CLs, se houver, em uma via que contém a CL LRU.
  13. Método, de acordo com qualquer uma das reivindicações 8 a 12, caracterizado pelo fato de que o sistema compreende adicionalmente um processador que incorpora o LLC e o CCC e que tem um ou mais núcleos, sendo que cada um dentre o um ou mais núcleos implanta uma máquina virtual, e em que o CCC compreende um hipervisor.
  14. Método, de acordo com a reivindicação 13, caracterizado pelo fato de que o processador é um dentre uma pluralidade de processadores em um data center de um provedor de serviços de nuvem.
  15. Meio legível por computador não transitório contendo instruções para quais um circuito de controle de cache (CCC) em um sistema que compreende um cache de último nível (LLC) que tem uma pluralidade de vias, cada via alocada a uma dentre múltiplas prioridades, cada prioridade associada a um registro de classe de serviço (CLOS) que especifica número mínimo e máximo de vias para ocupar, caracterizado por dever responder:
    receber uma solicitação para armazenar uma linha de cache de entrada (CL) que tem uma prioridade de solicitante dentre as múltiplas prioridades no LLC;
    quando existe uma CL inválida no LLC, armazenar a CL de entrada para a CL inválida;
    quando a prioridade de solicitante é uma mais baixa dentre as múltiplas prioridades e tem uma ocupação de um ou mais, ou quando a ocupação está em um máximo para a prioridade de solicitante, armazenar a CL de entrada no lugar de uma CL menos utilizada recentemente (LRU) da prioridade de solicitante;
    quando a ocupação está entre um mínimo e o máximo para a prioridade de solicitante, armazenar a CL de entrada no lugar de uma CL LRU de solicitante ou de uma prioridade mais baixa;
    quando a ocupação é menor que o mínimo e existe uma CL que tem a prioridade mais baixa, armazenar a CL de entrada no lugar de uma CL LRU que tem a prioridade mais baixa; e
    quando não existe CL inválida ou CL com o solicitante ou prioridade mais baixa, armazenar a CL de entrada no lugar de uma CL LRU de uma prioridade mais alta.
  16. Meio legível por computador não transitório, de acordo com a reivindicação 15, caracterizado pelo fato de que o LLC compreende múltiplos conjuntos de vias, em que a pluralidade de vias faz parte de um dentre os múltiplos conjuntos, e em que o CCC, em resposta adicional às instruções, deve, antes de determinar onde armazenar a CL de entrada, determinar, com base em um algoritmo de hash realizado em um endereço lógico da CL de entrada, quais dentre os múltiplos conjuntos incluem a CL de entrada.
  17. Meio legível por computador não transitório, de acordo com a reivindicação 15, caracterizado pelo fato de que o sistema compreende adicionalmente um processador que incorpora o LLC e o CCC, e em que o processador é um dentre uma pluralidade de processadores em um data center de um provedor de serviços de nuvem.
  18. Meio legível por computador não transitório, de acordo com a reivindicação 15, caracterizado pelo fato de que cada uma dentre a pluralidade de vias compreende N CLs, em que N é um número inteiro positivo que é maior ou igual a um.
  19. Meio legível por computador não transitório, de acordo com a reivindicação 15, caracterizado pelo fato de que o CCC, mediante o armazenamento da CL de entrada no lugar da CL LRU, se houver, que tem a prioridade mais baixa, deve causar a liberação de outras CLs, se houver, em uma via que contém a CL LRU.
  20. Meio legível por computador não transitório, de acordo com qualquer uma das reivindicações 15 a 19, caracterizado pelo fato de que o sistema compreende adicionalmente um processador que incorpora o LLC e o CCC, e que compreende um ou mais núcleos, sendo que o um ou mais núcleos implantam, cada um, uma máquina virtual, e em que o CCC compreende um hipervisor.
BR102020019663-4A 2019-11-26 2020-09-26 algoritmo de remoção de linha de cache à base de prioridade de tecnologia de alocação de cache flexível BR102020019663A2 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/696,548 US11656997B2 (en) 2019-11-26 2019-11-26 Flexible cache allocation technology priority-based cache line eviction algorithm
US16/696,548 2019-11-26

Publications (1)

Publication Number Publication Date
BR102020019663A2 true BR102020019663A2 (pt) 2021-06-08

Family

ID=72659026

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102020019663-4A BR102020019663A2 (pt) 2019-11-26 2020-09-26 algoritmo de remoção de linha de cache à base de prioridade de tecnologia de alocação de cache flexível

Country Status (5)

Country Link
US (2) US11656997B2 (pt)
EP (2) EP3828714B1 (pt)
JP (1) JP2021086612A (pt)
CN (2) CN117609109A (pt)
BR (1) BR102020019663A2 (pt)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113821324B (zh) * 2021-09-17 2022-08-09 海光信息技术股份有限公司 处理器的高速缓存系统、方法、设备和计算机介质
US20230236973A1 (en) * 2022-01-21 2023-07-27 Centaur Technology, Inc. Cat aware loads and software prefetches
US11947462B1 (en) 2022-03-03 2024-04-02 Apple Inc. Cache footprint management

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7725657B2 (en) 2007-03-21 2010-05-25 Intel Corporation Dynamic quality of service (QoS) for a shared cache
US8677071B2 (en) * 2010-03-26 2014-03-18 Virtualmetrix, Inc. Control of processor cache memory occupancy
WO2012095957A1 (ja) 2011-01-12 2012-07-19 富士通株式会社 キャッシュメモリ装置,キャッシュメモリの制御装置,情報処理装置,キャッシュメモリの制御方法,及びキャッシュメモリ装置の閾値決定プログラム
US9582430B2 (en) * 2015-03-27 2017-02-28 Intel Corporation Asymmetric set combined cache
US9734070B2 (en) 2015-10-23 2017-08-15 Qualcomm Incorporated System and method for a shared cache with adaptive partitioning

Also Published As

Publication number Publication date
EP4307130A3 (en) 2024-05-01
EP4307130A2 (en) 2024-01-17
EP3828714A1 (en) 2021-06-02
CN117609109A (zh) 2024-02-27
CN112948285A (zh) 2021-06-11
US20230409485A1 (en) 2023-12-21
JP2021086612A (ja) 2021-06-03
US11656997B2 (en) 2023-05-23
US20210157739A1 (en) 2021-05-27
EP3828714B1 (en) 2024-04-03

Similar Documents

Publication Publication Date Title
US10409597B2 (en) Memory management in secure enclaves
US20200004953A1 (en) Encoded inline capabilities
KR101964350B1 (ko) 다중 레지스터 메모리 액세스 명령어들, 프로세서들, 방법들 및 시스템들
KR101597774B1 (ko) 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들
BR102020019657A2 (pt) aparelhos, métodos e sistemas para instruções de um acelerador de operações de matriz
BR102020019667A2 (pt) método e aparelho para criptografia de memória total multichave baseada em derivação de chave dinâmica
BR102020019663A2 (pt) algoritmo de remoção de linha de cache à base de prioridade de tecnologia de alocação de cache flexível
KR101817459B1 (ko) 1들을 최하위 비트들이 되도록 풀링하면서 비트들을 좌측으로 시프팅하기 위한 명령어
US20230109637A1 (en) Aperture access processors, methods, systems, and instructions
US10671744B2 (en) Lightweight trusted execution for internet-of-things devices
JP2018500660A (ja) ベクトルインデックスロードおよびストアのための方法および装置
EP3709159B1 (en) Processing vectorized guest physical address translation instructions
KR20140113557A (ko) 시스템 호출을 위한 강건하고 높은 성능의 명령어들
WO2019105566A1 (en) Systems and methods for clustering sub-pages of physical memory pages
KR20130112909A (ko) 권한 레벨에 관계없는 세그먼트 레지스터 판독 및 기입용 시스템, 장치, 및 방법
US20200019403A1 (en) Flexible instruction set disabling
US20160170767A1 (en) Temporary transfer of a multithreaded ip core to single or reduced thread configuration during thread offload to co-processor
CN116166369A (zh) 基于硬件识别指令来启用主机穿透
US20220414022A1 (en) Apparatus, system, and method for secure memory access control
CN111512309A (zh) 用于抵抗交叉特权线性探查的系统、方法和装置
KR20170094147A (ko) 스핀-루프 점프를 수행하기 위한 장치 및 방법
CN113849427A (zh) 用于处理器中的细粒度地址空间选择的系统、装置和方法

Legal Events

Date Code Title Description
B03A Publication of a patent application or of a certificate of addition of invention [chapter 3.1 patent gazette]