BR102022023763A2 - Aparelho e método para detecção de constante durante operações de compactação - Google Patents

Aparelho e método para detecção de constante durante operações de compactação Download PDF

Info

Publication number
BR102022023763A2
BR102022023763A2 BR102022023763-8A BR102022023763A BR102022023763A2 BR 102022023763 A2 BR102022023763 A2 BR 102022023763A2 BR 102022023763 A BR102022023763 A BR 102022023763A BR 102022023763 A2 BR102022023763 A2 BR 102022023763A2
Authority
BR
Brazil
Prior art keywords
memory block
memory
data block
compression
constant
Prior art date
Application number
BR102022023763-8A
Other languages
English (en)
Inventor
James David Guilford
Vinodh Gopal
Daniel Frederick Cutter
Kirk Yap
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 BR102022023763A2 publication Critical patent/BR102022023763A2/pt

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/213Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
    • G06F18/2132Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods based on discrimination criteria, e.g. discriminant analysis
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B31/00Arrangements for the associated working of recording or reproducing apparatus with related apparatus
    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16YINFORMATION AND COMMUNICATION TECHNOLOGY SPECIALLY ADAPTED FOR THE INTERNET OF THINGS [IoT]
    • G16Y10/00Economic sectors
    • G16Y10/75Information technology; Communication
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction

Abstract

Aparelho e método para detectar um bloco de dados constante são descritos no presente documento. Uma modalidade de aparelho inclui conjunto de circuitos de compactação para realizar operações de compactação em um bloco de memória; conjunto de circuitos de detecção de constante para, simultaneamente à realização das operações de compactação no bloco de memória, determinar que o bloco de memória é um bloco de dados constante composto apenas por ocorrências repetidas de um valor constante; e conjunto de circuitos de controlador para associar uma primeira indicação com o bloco de memória com base na determinação, a primeira indicação utilizável para controlar se devem ser abortadas as operações de compactação ou descartado um bloco de memória compactado gerado a partir das operações de compactação.

Description

APARELHO E MÉTODO PARA DETECÇÃO DE CONSTANTE DURANTE OPERAÇÕES DE COMPACTAÇÃO CAMPO DA TÉCNICA
[001] As modalidades da invenção descritas no presente documento referem-se, de maneira geral, à otimização das operações de compactação de dados. Em particular, a revelação se refere à extensão de arquitetura para a detecção de constante (ou constantes) durante as operações de compactação de dados.
ANTECEDENTES DA TÉCNICA
[002] O uso de compactação no nível da página para criar hierarquia ou camadas de memória, tal como em uma implementação Linux ZSWAP, está se tornando cada vez mais importante. Durante as trocas de página de memória, em vez de enviar as páginas trocadas para o disco, as mesmas são compactadas e armazenadas em memória. A ideia é aumentar a capacidade efetiva de memória ao mesmo tempo em que alcançar um desempenho melhor do que trocar diretamente para uma camada de memória mais lenta. A meta de desempenho ideal é maximizar a economia de memória por meio da compactação de página, ao mesmo tempo em que minimizar os impactos de desempenho para aplicativos em comparação com sistemas que utilizam grande capacidade de memória, mas sem compactação. O principal requisito para alcançar isso, naturalmente, é a compactação e descompactação de baixa latência.
[003] Normalmente, sistemas que utilizam a compactação no nível da página tendem a usar algoritmos de compactação relativamente leves, tais como Lempel-Ziv-Oberhumer (LZO). Esta classe de algoritmos tem a vantagem de maior velocidade ao custo de compactação reduzida. Estudos mostraram que o uso de LZO com base em software normalmente gera uma quantidade modesta (~4 %) de economia de memória. Outros algoritmos mais agressivos, tais como Deflate, oferecem melhores taxas de compactação, mas sofrem com o aumento de latências de compactação e descompactação. Esses algoritmos mais agressivos também tendem a dificultar a implementação com base em software. Qualquer otimização que possa melhorar as latências associadas às operações de compactação/descompactação é, portanto, altamente desejável.
BREVE DESCRIÇÃO DOS DESENHOS
[004] A invenção pode ser mais bem compreendida referindo- se à descrição que se segue e desenhos anexos que são usados para ilustrar as modalidades da invenção. Nos desenhos:
[005] A Figura 1A é um diagrama de blocos que ilustra um processador exemplificativo no qual modalidades da presente invenção podem ser implementadas;
[006] A Figura 1B é um diagrama de blocos que ilustra outro processador exemplificativo no qual modalidades da presente invenção podem ser implementadas;
[007] A Figura 2A ilustra várias operações de memória implementadas em um processador;
[008] A Figura 2B ilustra uma modalidade de uma operação de detecção de constante em relação a outras operações de memória;
[009] A Figura 3A ilustra as operações associadas à compactação e descompactação de um bloco de dados não constante de acordo com uma modalidade;
[010] A Figura 3B ilustra as operações associadas à compactação e descompactação de um bloco de dados constante de acordo com uma modalidade;
[011] A Figura 3C ilustra as operações associadas à compactação e descompactação de um bloco de dados não constante de acordo com outra modalidade;
[012] A Figura 4 ilustra campos para preservar estados parciais durante a realização de operações de detecção de constante de acordo com uma modalidade;
[013] A Figura 5 é um diagrama de fluxo que ilustra as operações associadas à compactação e à detecção de constante de um bloco de dados de acordo com uma modalidade;
[014] A Figura 6 é outro diagrama de fluxo que ilustra as operações associadas à compactação e detecção de constante de um bloco de dados de acordo com uma modalidade;
[015] A Figura 7 é um diagrama de fluxo que ilustra as operações associadas à descompactação de um bloco de dados de acordo com uma modalidade;
[016] A Figura 8 ilustra exemplos de blocos de dados constantes e não constantes de acordo com modalidades da presente invenção;
[017] A Figura 9 é um fluxograma que ilustra uma modalidade da operação de detecção de constante;
[018] A Figura 10 ilustra detalhes de um descritor de tarefa e um registro de conclusão de acordo com uma modalidade;
[019] A Figura 11A é um diagrama de blocos que ilustra tanto uma pipeline em ordem exemplificativa quanto um renomeamento de registrador exemplificativo, pipeline de emissão/execução fora de ordem de acordo com modalidades da invenção;
[020] A Figura 11B é um diagrama em blocos que ilustra tanto uma modalidade exemplificativa de um núcleo de arquitetura em ordem quanto um renomeamento de registrador exemplificativo, um núcleo de arquitetura de emissão/execução fora de ordem a serem incluídos em um processador de acordo com modalidades da invenção;
[021] A Figura 12 é um diagrama de blocos de um processador de núcleo único e um processador de múltiplos núcleos com controlador de memória e gráficos integrados de acordo com modalidades da invenção;
[022] A Figura 13 ilustra um diagrama de blocos de um sistema de acordo com uma modalidade da presente invenção.
[023] A Figura 14 ilustra um diagrama de blocos de um segundo sistema de acordo com uma modalidade da presente invenção.
[024] A Figura 15 ilustra um diagrama de blocos de um terceiro sistema de acordo com uma modalidade da presente invenção.
[025] A Figura 16 ilustra um diagrama de blocos de um sistema em um chip (SoC) de acordo com uma modalidade da presente invenção e
[026] A Figura 17 ilustra 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 de fonte em instruções binárias em um conjunto de instruções-alvo de acordo com modalidades da invenção. DESCRIÇÃO DETALHADA
[027] Modalidades de aparelho e método para detectar valor constante (ou valores constantes) em um bloco de dados durante a compactação desse bloco de dados são descritas no presente documento. Na descrição a seguir, vários detalhes específicos são apresentados para fornecer uma compreensão completa das modalidades da invenção. Uma pessoa versada na técnica pertinente perceberá, entretanto, que a invenção pode ser praticada sem um ou mais dos detalhes específicos, ou com outros métodos, componentes, materiais, etc. Em outros exemplos, estruturas, materiais ou operações bem conhecidas não são mostrados ou descritos em detalhes para evitar obscurecer os aspectos da invenção.
[028] Referências no decorrer desse relatório descritivo a "uma (1) modalidade" ou "uma modalidade" significam que um recurso, estrutura ou característica particular descrita em conexão com a modalidade está incluída em pelo menos uma modalidade da presente invenção. Assim, as ocorrências do sintagma “em uma (1) modalidade” ou “em uma modalidade” em vários lugares no decorrer deste relatório descritivo não estão necessariamente se referindo à mesma modalidade. Além disso, os recursos estruturas ou características particulares podem ser combinados de qualquer maneira adequada em uma ou mais modalidades. Para maior clareza, os componentes individuais nas Figuras no presente documento podem ser referenciados por seus rótulos nas Figuras, em vez de um número de referência específico.
[029] No uso típico de memória, um número significativo de páginas de memória, também denominadas no presente documento como blocos de memória ou blocos de dados, é composto de ocorrências repetidas da mesma sequência de bits (por exemplo, um valor constante). Por exemplo, uma página de memória típica de 4096 bytes (4 KB) pode incluir 4096 (4K) ocorrências do mesmo byte constante (por exemplo, 0x00 ou 0xFF). Devido à sua natureza repetitiva, realizar a compactação e/ou descompactação nessas páginas de memória consome recursos valiosos que, de outra forma, poderiam ser economizados.
[030] As modalidades da presente invenção melhoram vantajosamente o desempenho de compactação e descompactação para página de memória com custo de área e complexidade de projeto mínimos. Por exemplo, um acelerador que realiza a operação de compactação pode ser aumentado com uma nova funcionalidade de detecção de constante. Durante uma operação de compactação, tal como a compactação Deflate ou qualquer método de compactação embutido, o bloco ou fluxo de dados de entrada é verificado para constatar se contém o mesmo valor constante repetidamente. Uma indicação é então associada ao bloco de dados com base no resultado. Por exemplo, um campo agregado em um registro de conclusão pode ser atualizado com o resultado da verificação. A partir daí, o sistema operacional ou software do sistema pode verificar esse campo e decidir de forma inteligente se deve manter o bloco de dados compactado ou representá-lo com metadados que sinalizam um bloco de dados constante. O recurso de detecção de constante pode ser ativado em várias tarefas por meio do estado salvar/restaurar.
[031] De acordo com uma modalidade, em vez de compactar um bloco de dados constante com um algoritmo de compactação e armazená-los na memória, alguns bits extras de metadados são mantidos em uma estrutura de dados para identificar esses blocos de dados como blocos especiais de constantes que podem ser regenerados a partir de muito menos dados armazenados. Isso não apenas diminui a latência associada à compactação e descompactação, mas também melhora a capacidade de compactação, pois é necessário menos espaço de memória para armazenamento.
[032] De acordo com uma modalidade, uma funcionalidade de detecção de constante é adicionada para aumentar as operações de compactação realizadas por um acelerador de hardware. Por exemplo, uma verificação pode ser realizada em um bloco de dados ou fluxo de dados de entrada para constatar se o mesmo é composto de ocorrências repetidas da mesma constante, que pode ser uma cadeia de bits de qualquer comprimento especificado (por exemplo, byte (8 bits), palavra (16 bits), palavra dupla (32 bits), etc.). Se o bloco de dados for composto apenas por ocorrências repetidas da mesma constante, o mesmo é considerado um bloco de dados constante. Por outro lado, se o bloco de dados incluir valores diferentes da mesma constante, o mesmo não é um bloco de dados constante.
[033] A verificação de constantes repetidas em um bloco de dados, de acordo com uma modalidade, é realizada separadamente de sua compactação. Assim, a verificação pode ser realizada a qualquer momento antes, depois ou durante a compactação do bloco de dados. Em algumas modalidades, o resultado da verificação é fornecido como informações suplementares associadas ao bloco de dados e é utilizável pelo sistema operacional (SO) ou outro software/hardware de sistema para controlar operações subsequentes (por exemplo, armazenamento, descompactação, etc.) associadas ao mesmo. Por exemplo, de acordo com uma modalidade, se o resultado da detecção de constante indicar que o bloco de dados não é um bloco de dados constante, as operações de compactação prosseguem normalmente e o bloco de dados compactado é armazenado na hierarquia de memória (por exemplo, memória ou cache do sistema). Por outro lado, se o resultado indicar que o bloco de dados é um bloco de dados constante, informações (por exemplo, metadados) podem ser associadas ou anexadas ao bloco de dados para sinalizar ao SO e/ou outro software/hardware de sistema que a forma compactada do bloco de dados pode ser descartada para economizar ou liberar espaço de memória. Além disso, os metadados podem ser armazenados em uma estrutura de dados (por exemplo, um diretório ou um armazenamento temporário de entrada) para serem usados posteriormente para regenerar o bloco de dados. Em algumas situações, o resultado da verificação pode até mesmo fazer com que a operação de compactação seja abortada.
[034] Em uma modalidade, em vez de emitir tarefas separadas para compactar o bloco de dados e verificar se há constante (ou constantes), o que incorre em latência adicional, a detecção de constante do bloco de dados é realizada automática e simultaneamente à compactação do bloco de dados. Ou seja, em resposta a uma solicitação para compactar um bloco de dados, um acelerador de hardware conduz tanto as operações de verificação de constante quanto as operações de compactação no bloco de dados e emite um bloco de dados compactado, bem como o resultado da verificação de constante. O bloco de dados compactado e o resultado emitidos podem ser armazenados na hierarquia de memória ou em outros locais de armazenamento. O sistema operacional e/ou outro software/hardware de sistema podem usar posteriormente esse resultado para determinar se devem manter ou descartar o bloco de dados compactado.
[035] A Figura 1A ilustra um processador exemplificativo no qual as modalidades da invenção podem ser implementadas. A CPU 155 pode incluir um ou mais núcleos de processador. Os detalhes de um núcleo de processador único (“Núcleo 0”) são ilustrados na Figura 1 por simplicidade. Será entendido, no entanto, que cada núcleo mostrado na Figura 1 pode ter o conjunto de componentes igual ou similar ao Núcleo 0. Por exemplo, cada núcleo pode incluir cache de Nível 1 (L1) 112 e cache de Nível 2 (L2) 111 dedicado para armazenar instruções e dados de acordo com uma política de gerenciamento de cache especificada. O cache L1 112 pode incluir adicionalmente um cache de instruções 120 para armazenar instruções e um cache de dados 121 para armazenar dados. As instruções e os dados armazenados dentro dos vários cache de processador são gerenciados na granularidade de linhas de cache que podem ter um tamanho fixado (por exemplo, 64, 128, 512 Bytes de comprimento). Os dados podem ser armazenados temporariamente no arquivo de registrador 152 durante a execução de instruções. O arquivo de registrador 152 pode incluir registradores de propósito geral (GPRs), registradores de vetor, registradores de máscara, etc. Cada núcleo de processador inclui adicionalmente uma unidade de busca de instruções 110 para buscar instruções da memória principal 102 e/ou um cache compartilhado de Nível 3 (L3) 116; um decodificador ou unidade de decodificação 130 para decodificar as instruções (por exemplo, decodificar instruções de programa em micro-operações ou "uops"); uma unidade de execução 140 para executar as instruções e uma unidade de regravação 150 para retirar instruções e reescrever os resultados.
[036] A unidade de busca de instrução 110 inclui vários componentes bem conhecidos que incluem um ponteiro de próxima instrução 103 para armazenar o endereço da próxima instrução a ser obtida a partir da memória 102 (ou um dos caches); um armazenamento temporário de busca de tradução de instrução (ITLB) 104 para armazenar um mapa de endereços de instrução virtual para físico usados recentemente para melhorar a velocidade de tradução de endereço; uma unidade de previsão de ramificação 102 para prever especulativamente endereços de ramificação de instrução e armazenamentos temporários alvo de ramificação (BTBs) 101 para armazenar endereços de ramificação e endereços alvo. Uma vez que tenham sido buscadas, as instruções são transmitidas para os estágios restantes do pipeline de instrução que inclui a unidade de decodificação 130, a unidade de execução 140 e a unidade de regravação 150. A estrutura e a função de cada uma dentre essas unidades são bem entendidas por aqueles de habilidade comum na técnica e não serão descritas aqui em detalhes para evitar obscurecer os aspectos pertinentes das modalidades diferentes da invenção.
[037] O núcleo do processador pode incluir um acelerador 160 para realizar operações de compactação e descompactação. O acelerador 160 pode ser implementado em hardware, software ou uma combinação dos mesmos e pode ser acoplado de forma comunicativa aos núcleos 0-N e à memória do sistema 102 através da interconexão 170. Em operação, o acelerador 160 pode receber um bloco de dados e gerar de forma responsiva um bloco de dados compactado realizando operações de compactação no bloco de dados de acordo com um algoritmo de compactação tal como LZO, Deflate ou qualquer método de compactação embutido. Além disso, o acelerador 160 pode realizar operações de descompactação em um bloco de dados compactado para gerar um bloco de dados não compactado.
[038] A Figura 1B ilustra outro processador exemplificativo no qual as modalidades da presente invenção podem ser implementadas. Na Figura 1B, um ou mais núcleos do processador 155 podem incluir cada um seu próprio acelerador 162 para realizar as operações de compactação e/ou descompactação descritas no presente documento. O acelerador 162 pode ser implementado em vez de ou em adição ao acelerador 160 da Figura 1A.
[039] A Figura 2A ilustra várias operações de memória implementadas em um processador, tal como o processador 155 das Figuras 1A e 1B. Uma operação de cópia de memória 202 é usada para copiar uma página de memória da memória para o cache ou vice-versa. A mesma também pode ser usada para copiar uma página de memória de uma memória ou cache para outro local dentro da mesma memória ou cache. Uma operação de compactação 204 pega uma página de memória da memória ou cache, compacta a mesma e armazena a página compactada resultante em um local dentro da memória ou cache. Uma operação de descompactação associada 208 pega uma página compactada da memória ou cache, descompacta a mesma e armazena o resultado descompactado em um local dentro da memória ou cache. Operações adicionais, como descriptografia 206 e filtragem 210, também podem ser realizadas com a operação de descompactação 208. As operações de memória também podem incluir várias outras operações especializadas 212 que são realizadas em páginas da memória ou cache.
[040] A Figura 2B ilustra uma modalidade da operação/funcionalidade de detecção de constante em relação às outras operações de memória. Especificamente, a operação de detecção de constante 220 é realizada separadamente e juntamente com a operação de compactação 204. A mesma pode ser executada em páginas de memória da memória ou cache. A saída da operação de detecção de constante 220 pode ser armazenada na memória ou cache e/ou fornecida para complementar a operação de compactação 204, conforme detalhado abaixo.
[041] As Figuras 3A-3C ilustram várias operações de um acelerador de acordo com modalidades da presente invenção. Um versado na técnica reconhecerá que alguns elementos são omitidos intencionalmente para não obscurecer os aspectos principais. Outros elementos, embora ilustrados, podem ser opcionais e, portanto, podem ser omitidos para acomodar a implementação desejada. Os números de referência que são compartilhados em várias figuras são usados para denotar o mesmo elemento ou elementos semelhantes. Na Figura 3A, as operações associadas à compactação e/ou descompactação de um bloco de dados não constante são ilustradas. Em contraste, as Figuras 3B e 3C ilustram as operações de compactação e/ou descompactação de um bloco de dados constante.
[042] Com referência agora à Figura 3A, um acelerador 360 pode incluir conjunto de circuitos de compactação 362, conjunto de circuitos de detecção de constante 364, conjunto de circuitos de preenchimento 366, conjunto de circuitos de descompactação 368 e conjunto de circuitos de controle 370. De acordo com uma modalidade, alguns dos conjuntos de circuitos (por exemplo, conjunto de circuitos de compactação ou conjunto de circuitos de descompactação) e as operações associadas aos mesmos podem ser implementados por aceleradores separados. Um bloco de dados de entrada 310, tal como uma página de memória, é recebido pelo acelerador 360 para ser compactado. O bloco de dados de entrada 310 pode ser identificado por um descritor de tarefa ou solicitação de tarefa a ser processada pelo acelerador 360. O descritor de tarefa pode ser emitido por, por exemplo, um dos núcleos de processador 0-N ilustrados nas Figuras 1A-B ou do controlador de memória 172. Conforme observado acima, o bloco de dados de entrada 310 é um bloco de dados não constante, o que significa que o mesmo não é composto por uma constante de repetição. O bloco de dados de entrada 310 recebido pelo acelerador é processado pelo conjunto de circuitos de compactação 362 para gerar um bloco de dados compactado 320. Em uma modalidade, o bloco de dados de entrada 310 é compactado de acordo com um algoritmo de compactação específico (por exemplo, LZO ou Deflate) especificado pelo descritor de tarefa. Alternativamente, nenhum algoritmo de compactação é especificado e o bloco de dados de entrada 310 é compactado através do algoritmo de compactação padrão implementado pelo acelerador.
[043] Em seguida, o bloco compactado 320 é armazenado em um local na hierarquia de memória 340, tal como a memória do sistema 102 ou um dos caches 116 ou 111 das Figuras 1A-1B. Como parte da conclusão das operações de compactação no bloco de dados de entrada 310, de acordo com uma modalidade, é gerado um registro de conclusão 322. O registro de conclusão pode incluir várias informações, tais como o endereço de memória associado ao bloco de dados 310 e/ou o local de armazenamento do bloco compactado 320. De acordo com uma modalidade, o registro de conclusão 322 também pode incluir um campo de bloco constante ou campo agregado para indicar se o bloco de dados associado ao registro de conclusão é um bloco de dados constante. O campo pode ser inicializado ou definido com um valor padrão indicando que o bloco de dados associado não é um bloco de dados constante. O registro de conclusão 322, ou as informações contidas no mesmo, podem ser armazenados no diretório 342 da hierarquia de memória 340. Em algumas modalidades, o registro de conclusão 322 pode ser armazenado em vez disso em uma estrutura de dados fora da hierarquia de memória (não mostrada). A Figura 10 ilustra os detalhes de um descritor de tarefa 1010 e um registro de conclusão 1020 de acordo com uma modalidade. O campo de bloco constante ou campo agregado pode ser implementado em uma das partes não utilizadas do registro de conclusão 1020 e/ou um campo existente.
[044] Concomitantemente com a execução das operações de compactação pelo conjunto de circuitos de compactação 362, de acordo com uma modalidade, o bloco de dados de entrada 310 é recebido e verificado pelo conjunto de circuitos de detecção de constante 364 para determinar se o mesmo é um bloco de dados constante. O resultado dessa verificação é fornecido ao conjunto de circuitos de controlador 370. Em uma modalidade, quando o resultado indica que o bloco de dados de entrada 310 não é um bloco de dados constante, nenhuma ação adicional é tomada. Alternativamente, o conjunto de circuitos de controlador 370 pode atualizar o registro 322 para indicar que o bloco de dados compactado 320 não é um bloco de dados constante. Em algumas modalidades, o conjunto de circuitos de controlador 370 atualiza o registro de conclusão gerado pelo conjunto de circuitos de compactação 362 antes de o mesmo ser armazenado no diretório 342.
[045] Depois disso, uma solicitação de dados (isto é, bloco de dados 310) é emitida pelo SO ou um aplicativo. A solicitação pode especificar os dados solicitados por meio de um endereço de memória, que é usado para realizar uma pesquisa no diretório 342 para encontrar um registro ou entrada correspondente. Se o endereço de memória na solicitação corresponder ao endereço de memória no registro associado ao bloco de dados 310, o campo de bloco constante é verificado para constatar se os dados solicitados são um bloco de dados constante. Quando o campo indica que o bloco de dados 310 não é um bloco de dados constante, o bloco de dados compactado 320 é recuperado (isto é, lido da memória) e enviado para o acelerador 360. Consequentemente, o conjunto de circuitos de descompactação 368 executa a operação de descompactação no bloco de dados compactado 320 para gerar o bloco de dados de saída 312 que é usado para preencher a solicitação.
[046] A Figura 3B ilustra as operações de compactação e descompactação de um bloco de dados constante por um acelerador de acordo com uma modalidade. Conforme ilustrado, o bloco de dados de entrada 314 é recebido pelo acelerador 360 para ser compactado. O bloco de dados de entrada 314, nesse caso, é um bloco de dados constante. Ou seja, o mesmo é composto por uma sequência de bits repetida (por exemplo, um byte, palavra ou palavra dupla constante etc.). Semelhante à descrição acima em relação à Figura 3A, o bloco de dados de entrada 314 pode ser identificado por um descritor de tarefa ou solicitação de tarefa enviada ao acelerador 360 por um dos núcleos de processador 0-N ou pelo controlador de memória 172. O bloco de dados de entrada 314 é recebido e compactado pelo conjunto de circuitos de compactação 362 de acordo com um algoritmo de compactação (por exemplo, LZO ou Deflate) para gerar um bloco de dados compactado 324. O bloco de dados compactado 324 é então armazenado na hierarquia de memória 340 e é gerado um registro de conclusão 326 associado ao bloco compactado 324. O registro de conclusão 326, ou informações contidas no mesmo, é armazenado no diretório 342 ou outra estrutura de dados. As informações armazenadas no registro de conclusão podem incluir o endereço de memória associado ao bloco de dados de entrada 314, a localização do bloco de dados compactado 324 e/ou uma indicação se o bloco de dados de entrada 314 é um bloco de dados constante. Em algumas modalidades, o valor constante associado ao bloco de dados constante também é armazenado no registro de conclusão 326.
[047] Concomitantemente com a execução das operações de compactação pelo conjunto de circuitos de compactação 362, de acordo com uma modalidade, o bloco de dados de entrada 314 é recebido e verificado pelo conjunto de circuitos de detecção de constante 364 para determinar se o mesmo é um bloco de dados constante. O resultado da verificação é fornecido ao conjunto de circuitos de controlador 370. No caso do bloco de dados 314, o resultado indica que o mesmo é um bloco de dados constante e, em resposta, o conjunto de circuitos de controlador 370 atualiza o registro de conclusão 326 de acordo. Por exemplo, o campo de dados constante do registro 326 pode ser atualizado para um valor que indica que o bloco de dados 314 é um bloco de dados constante. Alternativamente, ou além disso, uma indicação de que o bloco de dados 314 é um bloco de dados constante é anexado ou associado ao próprio bloco de dados de entrada 314.
[048] Independentemente de como a indicação está anexada ou associada ao bloco de dados de entrada 314, a indicação é utilizável pelo sistema operacional ou hardware/software do sistema para decidir como lidar com o bloco compactado 324. Por exemplo, o SO pode fazer com que o bloco de dados compactado 324 seja descartado ou removido da hierarquia de memória 340 ou de outra forma sobrescrito por outros dados. Em alguns casos, o SO pode simplesmente ignorar a indicação e tratar o bloco de dados compactado 324 normalmente, como se o mesmo fosse gerado a partir de um bloco de dados não constante.
[049] Após as operações de compactação e detecção de constante serem realizadas no bloco de dados 314, uma solicitação de dados para o bloco de dados 314 pode ser subsequentemente emitida pelo OS ou um aplicativo. Em resposta à solicitação, uma pesquisa é realizada no diretório 342 para encontrar o registro 326 associado ao bloco de dados 314. O campo de bloco constante do registro 326 é verificado para constatar se o bloco de dados 314 é um bloco de dados constante. Uma vez que o bloco de dados 314 é um bloco de dados constante, uma solicitação é enviada ao acelerador 360 para gerar o bloco de dados solicitado a partir de uma constante. Por exemplo, a constante que é armazenada no registro 326 pode ser fornecida ao conjunto de circuitos de preenchimento 366 do acelerador 360 que a utiliza para gerar o bloco de dados de saída 316. Por exemplo, se o valor constante for um valor de byte, o conjunto de circuitos de preenchimento pode gerar um bloco de dados (por exemplo, uma página de memória de 4 KB) preenchendo-o com várias ocorrências (por exemplo, 4K) do valor de byte. Alternativamente, o SO/software pode decidir ignorar a indicação de que o bloco de dados 314 é um bloco de dados constante. Nesse caso, o bloco compactado 324 é fornecido ao conjunto de circuitos de descompactação 368 do acelerador 360 e descompactado com o algoritmo/método de descompactação apropriado para gerar o bloco de dados de saída 316, conforme indicado pelas setas tracejadas.
[050] A Figura 3C é um diagrama de blocos que ilustra as operações associadas à compactação/descompactação de um bloco de dados constante de acordo com outra modalidade. Tal como na Figura 3B, um bloco de dados constante de entrada 314 é recebido pelo acelerador 360 para ser compactado de acordo com um algoritmo de compactação. Concomitantemente com as operações de compactação, o bloco de dados de entrada 314 é verificado pelo conjunto de circuitos de detecção de constante 364 para constatar se o mesmo é um bloco de dados constante. O resultado da verificação é fornecido ao conjunto de circuitos de controlador 370.
[051] Em seguida, devido ao resultado indicar que o bloco de dados de entrada 314 é um bloco de dados constante, o conjunto de circuitos de controlador 370 então consulta o conjunto de circuitos de compactação para determinar se a compactação do bloco de dados de entrada 314 foi concluída. Dependendo do algoritmo de compactação usado, as operações de compactação podem incluir vários estágios. Por exemplo, no caso da compactação Deflate, há pelo menos um primeiro estágio, no qual o código/árvore Huffman é gerado, e um segundo estágio, no qual o bloco de dados é compactado com base no código/árvore Huffman gerado. Se for constatado que o bloco de dados de entrada 314 é um bloco de dados constante antes que todas as operações de compactação (estágios) tenham terminado, o conjunto de circuitos de controlador pode instruir o conjunto de circuitos de compactação 362 a abortar quaisquer operações (estágios) de compactação restantes. Em uma modalidade, o conjunto de circuitos de compactação 362 pode receber o resultado da detecção de constante diretamente do conjunto de circuitos de controlador 370 ou do conjunto de circuitos de detecção de constante 364. Com base no resultado, o conjunto de circuitos de compactação 362 pode abortar automaticamente quaisquer operações de compactação ainda pendentes. Em algumas modalidades, o conjunto de circuitos de compactação 362 pode pausar após completar um certo número de operações ou após estágios específicos para aguardar o resultado da detecção de constante. Por exemplo, no caso de compactação Deflate, o conjunto de circuitos de compactação 370 pode pausar após completar o primeiro estágio para aguardar o resultado da detecção de constante antes de decidir se deve continuar ou abortar o segundo estágio.
[052] De acordo com algumas modalidades, além de instruir o conjunto de circuitos de compactação 362 para abortar a compactação, o conjunto de circuitos de controlador 370 pode atualizar o registro 326 no diretório 342 para associar o bloco de dados 314 a uma indicação de bloco constante. Conforme observado acima, um campo no registro 326 pode ser atualizado para indicar que o bloco de dados 314 é um bloco de dados constante.
[053] Depois disso, quando o bloco de dados 314 é solicitado, o sistema operacional e/ou software executa uma pesquisa no diretório 342 e determina a partir do registro 326 que o bloco de dados solicitado é um bloco de dados constante. De acordo com uma modalidade, o sistema operacional e/ou software solicitam então ao acelerador 360 para gerar o bloco de dados solicitado a partir do valor constante associado ao bloco de dados 314. O valor constante pode ser fornecido na solicitação ao acelerador 360 ou pode ser pesquisado de outra fonte (por exemplo, um armazenamento temporário ou diretório 342 de entrada). Por conseguinte, o conjunto de circuitos de preenchimento 366 do acelerador 360 gera o bloco de dados de saída 316 usando o valor constante. Por exemplo, o conjunto de circuitos de preenchimento 366 pode preencher um bloco de dados (por exemplo, uma página de 4 KB) com várias ocorrências (por exemplo, 4K) do valor constante. Vale a pena observar que, uma vez que a compactação do bloco de dados 314 foi abortada, não há nenhum bloco de dados compactado armazenado na hierarquia de memória 340. Como tal, diferentemente das operações ilustradas na Figura 3B, o bloco de dados de saída 316 na Figura 3C só pode ser gerado a partir do valor constante.
[054] De acordo com uma modalidade, um campo tal como um campo agregado no registro de conclusão é usado para indicar se um bloco de dados é um bloco de dados constante. Em uma modalidade, o campo agregado é inicialmente escrito como "0". Quando a funcionalidade de detecção de constante estiver habilitada, a “soma” agregada será gravada como “1” se todos os bytes no bloco de dados de entrada forem os mesmos. Caso contrário, a “soma” agregada é gravada como “0” se algum dos bytes de entrada for diferente. Os dados que são comparados são a entrada para a compactação Deflate ou compactação zero zcomp se a compactação embutida estiver habilitada. Em uma modalidade, se o bloco de entrada for de tamanho zero, o mesmo é considerado “todos iguais” e, portanto, a “soma” agregada será gravada como “1”. Observe- se que, embora o registro de conclusão possa mostrar que todos os bytes no bloco de dados de entrada são o mesmo byte, o valor real do byte pode não ser necessariamente armazenado no registro de conclusão, mas ser pesquisado de outra fonte, como um armazenamento temporário de entrada. Em uma modalidade, a funcionalidade de detecção de constante está sempre habilitada.
[055] Em algumas modalidades, as operações de compactação e/ou as operações de detecção de constante realizadas em um bloco de dados são divididas em várias tarefas dependentes, em que cada tarefa opera em uma respectiva porção do bloco de dados. Para habilitar a detecção de constante através de várias tarefas, uma estrutura de dados (estrutura de estado) pode ser usada para passar o estado da detecção de constante entre diferentes tarefas. Por exemplo, o estado da detecção de constante pode precisar ser passado do final da tarefa N para o início da próxima tarefa N+1. Para isso, uma estrutura de dados acessível pelas diferentes tarefas pode ser usada para armazenar o estado da detecção de constante. A Figura 4 ilustra os campos exemplificativos para preservar o estado parcial das operações de detecção de constante entre várias tarefas de acordo com uma modalidade. A estrutura de dados pode incluir um campo de valor de referência 402, um campo válido de valor de referência (campo válido) 404 e/ou um campo já visto de valor diferente (campo visto) 406. O campo de valor de referência 402, como o nome sugere, armazena o valor de referência (isto é, a constante) com o qual todos os outros valores no bloco de dados são comparados. O tamanho do campo depende do tamanho do valor de referência. Se a detecção de constante for implementada para verificar se há um byte constante, o campo de valor de referência simplesmente armazena o primeiro byte do bloco ou fluxo de dados de entrada. Quanto ao campo válido 404, o mesmo armazena uma indicação se o valor (por exemplo, um byte constante) armazenado no campo de valor de referência 402 é válido. Por exemplo, no início da verificação, o campo válido 404 não está definido. Então, à medida que o primeiro valor (byte) do bloco de dados é armazenado no campo de valor de referência 402, o campo válido 404 é definido para indicar que as operações de detecção de constante podem começar a usar o valor de referência para comparar com valores subsequentes. O campo visto 406 armazena uma indicação sobre se um valor diferente do valor de referência foi detectado no bloco de dados ou em qualquer porção do mesmo. Um valor definido indica que o bloco de dados de entrada não é um bloco de dados constante.
[056] A Tabela 420 ilustra as possíveis interpretações de várias combinações do campo válido 404 e campo visto 406. Se o campo válido e o campo visto estiverem ambos não definidos (por exemplo, “0”), isso significa que o valor do byte de referência deve ser ignorado e que nenhum valor foi visto anteriormente. Esse cenário pode ocorrer durante a inicialização antes que qualquer operação de detecção de constante seja realizada. Quando o campo válido 404 está definido (por exemplo, "1") enquanto o campo visto não está definido (por exemplo, "0"), o mesmo sinaliza que o valor de referência é válido e que todos os valores verificados até agora são todos iguais ao valor de referência. Em outras palavras, a detecção de constante está em andamento e todas as partes do bloco de dados até agora contêm ocorrências do valor de referência. Em uma modalidade, quando um valor diferente do valor de referência é detectado, o campo visto 406 é alterado para um bit definido ("1") e o bit no campo válido 404 é limpo ("0"). Além disso, o campo de valor de referência 402 pode ser limpo. Assim, um campo visto definido 406 significa que pelo menos um valor diferente do valor de referência foi detectado no bloco de dados. Consequentemente, quando uma tarefa subsequente vê um campo visto definido 406, a tarefa pode simplesmente abortar para economizar recursos. Embora o valor de referência seja muitas vezes denominado no presente documento como um byte, o mesmo também pode incluir outros tamanhos com base na implementação desejada. Por exemplo, o campo de valor de referência 402 pode ser estendido para conter uma palavra de referência (16 bits) ou palavra dupla (32 bits), etc. Em tais implementações, a detecção de constante realizada em um bloco de dados de 4 KB pode verificar 2K ocorrências de uma palavra de referência ou para 1K ocorrências de uma palavra dupla de referência. Assim, modalidades diferentes da função de detecção de constante podem ser implementadas para verificar constantes de tamanhos diferentes. De acordo com uma modalidade, se o tamanho do bloco de dados não for um múltiplo integral do tamanho do valor de referência, pode ser gerado um erro e as operações de detecção de constante abortadas.
[057] A Figura 5 é um fluxograma que ilustra as operações associadas à compactação e detecção de constante de um bloco de dados de acordo com uma modalidade. O método 500 pode ser implementado em qualquer um dos sistemas descritos no presente documento. Por exemplo, o método 500 pode ser implementado em um acelerador, tal como o acelerador 360 das Figuras 3A-3C. O método 500 começa no bloco Início. Em 502 um bloco de dados de entrada é recebido. O bloco de dados de entrada pode ser um bloco de dados constante ou um bloco de dados não constante. Em 504, o bloco de dados de entrada é compactado para gerar um bloco de dados compactado e verificado quanto a constantes repetidas. A compactação do bloco de dados e a verificação de constantes repetidas são, de acordo com uma modalidade, realizadas simultaneamente e em paralelo. Por exemplo, o bloco de dados de entrada pode ser compactado através do conjunto de circuitos de compactação enquanto ao mesmo tempo uma cópia do bloco de dados de entrada é verificada pelo conjunto de circuitos de detecção de constante quanto a constantes repetidas. Em 506, é feita uma determinação sobre se o bloco de dados de entrada é um bloco de dados constante. Isto é, se o bloco de dados de entrada é composto apenas por ocorrências repetidas de um valor constante (ou seja, uma sequência de bits repetitiva). Se o bloco de dados de entrada não for um bloco de dados constante, então, em 510, o bloco de dados compactado é armazenado na hierarquia de memória, tal como a memória de sistema ou cache. No entanto, se for considerado que o bloco de dados de entrada é um bloco de dados constante em 506, então em 508, o bloco de dados de entrada e/ou o bloco de dados compactado é associado a uma indicação de bloco constante. Conforme detalhado acima, em uma modalidade, uma indicação pode ser armazenada no registro de conclusão que foi gerado a partir da compactação do bloco de dados de entrada. Em seguida, em 510, o bloco de dados compactado é armazenado na hierarquia de memória.
[058] A Figura 6 é um fluxograma que ilustra as operações associadas à compactação e detecção de constante de um bloco de dados de acordo com uma modalidade. O método 600 pode ser implementado em qualquer um dos sistemas descritos no presente documento. Especificamente, o método 600 pode ser implementado em qualquer acelerador capaz de realizar operações de compactação, tal como o acelerador 360 das Figuras 3A-3C. O método 600 começa no bloco “INÍCIO”. Em 602 um bloco de dados de entrada é recebido. O bloco de dados de entrada pode ser um bloco de dados constante ou um bloco de dados não constante. Em 604, uma ou mais operações de compactação são executadas no bloco de dados de entrada. Ao mesmo tempo, uma ou mais operações de detecção de constante também são executadas no bloco de dados de entrada para verificar se há constantes repetidas. De acordo com uma modalidade, as operações de compactação são realizadas simultânea, mas separadamente das operações de detecção de constante. Por exemplo, um acelerador pode incluir lógica/conjunto de circuitos de compactação separados e lógica/conjunto de circuitos de detecção de constante para realizar essas operações. Em 606, é feita uma determinação sobre se o bloco de dados de entrada é um bloco de dados constante. Conforme observado acima, um bloco de dados de entrada é um bloco de dados constante se for composto apenas por ocorrências repetidas de um valor constante (ou seja, uma sequência de bits repetida). Se o bloco de dados de entrada não for um bloco de dados constante, em 610, um bloco de dados compactado gerado a partir de operações de compactação é armazenado na hierarquia de memória, tal como a memória do sistema ou o cache. Se, no entanto, for determinado que o bloco de dados de entrada é um bloco de dados constante em 606, então em 608, é feita uma determinação sobre se as operações de compactação realizadas no bloco de dados de entrada foram concluídas. Se as operações de compactação já estiverem concluídas, então o bloco de dados compactado será armazenado em 610. Por outro lado, se as operações de compactação adicionalmente ainda não tiverem sido concluídas, a operação de compactação será abortada. Por exemplo, alguns algoritmos de compactação, tais como Deflate, realizam a compactação em vários estágios. Se for determinado que o bloco de dados de entrada é um bloco de dados constante antes que todos os estágios de compactação tenham sido concluídos, quaisquer estágios restantes ainda a serem executados serão abortados em 612.
[059] Voltando agora à Figura 7, que ilustra um fluxograma das operações associadas à descompactação de um bloco de dados de acordo com uma modalidade. O método 700 pode ser implementado em qualquer um dos sistemas descritos no presente documento. Especificamente, o método 700 pode ser implementado em qualquer acelerador capaz de realizar operações de descompactação e/ou preenchimento, tal como o acelerador 360 das Figuras 3A-3C. O método 700 começa no bloco “INÍCIO”. Em 702, uma solicitação para um bloco de dados é detectada. Em 704, é feita uma determinação sobre se o bloco de dados solicitado é um bloco de dados constante. Em uma modalidade, isso é determinado pesquisando-se o status do bloco de dados solicitado. Por exemplo, o endereço de memória do bloco de dados solicitado pode ser usado para pesquisar um diretório (por exemplo, diretor 360) para obter um registro (por exemplo, 320 ou 324) associado ao bloco de dados solicitado. O registro, de acordo com uma modalidade, contém um campo que indica se o bloco de dados associado é um bloco de dados constante. Em 706, se o bloco de dados solicitado não for um bloco de dados constante, uma versão compactada do bloco de dados solicitado é recuperada e descompactada para gerar o bloco de dados solicitado. No entanto, se o bloco de dados solicitado for de fato um bloco de dados constante, de modo que o mesmo seja composto de várias ocorrências de um valor constante, então em GGQ08, esse valor constante é usado para gerar o bloco de dados solicitado. Em uma modalidade, o valor constante é fornecido pelo registro obtido do diretório durante a pesquisa. Um conjunto de circuitos de preenchimento pode preencher um armazenamento temporário com ocorrências repetidas do valor constante para gerar o bloco de dados solicitado. Independentemente de como o bloco de dados solicitado é gerado, o mesmo é emitido para atender à solicitação de dados em 710.
[060] A Figura 8 ilustra exemplos de blocos de dados constante e não constante de acordo com uma modalidade. Cada uma das linhas mostradas na Figura 8 representa um bloco de dados. Conforme observado acima, cada bloco de dados pode ser uma página de memória. Embora um tamanho típico de uma página de memória seja 4 KB, outro tamanho (por exemplo, 8 KB, 16 Kb, etc.) também pode ser usado dependendo da implementação desejada. Conforme definido no presente documento, um bloco de dados constante é composto por uma sequência de bits de repetição de um tamanho específico, enquanto um bloco de dados não constante não é. Para ilustrar, o bloco de dados 802 é um exemplo de um bloco de dados constante porque o mesmo é composto de ocorrências repetidas do byte constante 0x00 (sequência de bits "00000000"). Da mesma forma, os blocos de dados 804 e 806 contêm ocorrências repetidas do byte constante 0x11 (sequência de bits "11111111") e 0x96 (sequência de bits "1001010"), respectivamente. Como tal, os mesmos também são blocos de dados constantes. Em contrapartida, o bloco de dados 808 compreende 0xAA (sequência de bits "10101010") no primeiro byte, 0x55 (sequência de bits 01010101) no segundo byte, 0xAA ("10101010") novamente no terceiro byte, 0x55 ("01010101") novamente no quarto byte, e assim por diante. Uma vez que o bloco de dados 808 contém mais de um valor de byte (0xAA e 0x55), o mesmo não é um bloco de dados constante, embora alguns dos valores de byte sejam repetidos. Vale a pena observar que o bloco de dados 808 pode ser considerado um bloco de palavra constante, uma vez que o primeiro valor de palavra 0xAA55 é repetido em todo o bloco de dados 808.
[061] A Figura 9 é um fluxograma que ilustra uma modalidade da operação de detecção de constante. O método 900 pode ser realizado pelo conjunto de circuitos de detecção de constante 364 das Figuras 3A- 3C. Em 902, é detectado um fluxo de entrada no qual a detecção de constante deve ser realizada. Conforme descrito acima, a detecção de constante em um bloco de dados pode ser dividida em várias tarefas. Assim, o fluxo de entrada referido no presente documento pode ser todo o bloco de dados ou apenas uma parte dele (por exemplo, parte de 1 KB de um bloco de 4 KB). Para implementar a detecção de constante através de várias tarefas, os campos em uma estrutura de estado são usados para preservar os vários estados/progresso da detecção. Os detalhes desses campos são descritos acima em relação à Figura 4. Em 904, é feita uma determinação sobre se o campo visto na estrutura de estado foi definido. Em caso afirmativo, então em 908, a detecção de constante é abortada porque mais de um valor constante já foi encontrado no bloco de dados. Se o campo visto não estiver definido, o campo válido será verificado em 906. Se o campo válido não foi definido, então em 910, o campo válido é definido e um valor de referência é armazenado no campo de valor de referência da estrutura de estado. Se a detecção de constante for implementada para verificar bytes constantes, o primeiro byte do fluxo de entrada será armazenado no campo de valor de referência. Se a detecção de constante estiver configurada para verificar se há palavras constantes, então a primeira palavra do fluxo de entrada será armazenada e assim por diante. Em 912, uma verificação é realizada para constatar se o valor atual (por exemplo, o primeiro byte do fluxo de entrada) é o único valor restante a ser verificado. Em caso afirmativo, então a detecção de constante está concluída. Por outro lado, se houver mais valores a serem verificados, o próximo valor (por exemplo, o próximo byte) é definido como o valor atual em 914 e comparado com o valor de referência em 918. Voltando a 906, se o campo válido já estiver definido, a operação segue direto para 918 sem precisar definir o campo de valor de referência. Se o valor atual for o mesmo que o valor de referência, então em 912 o valor atual é verificado novamente para ver se é o último valor no fluxo de entrada a ser verificado e, em caso afirmativo, a detecção de constante está concluída. No entanto, se, em 918, o valor atual for diferente do valor de referência, isso indica que o fluxo de entrada contém mais de um valor constante e, portanto, o bloco de dados constante falha. Como tal, em 920, o campo visto é definido de modo a notificar quaisquer operações de verificação de constante subsequentes que mais de um valor constante já foi detectado. Opcionalmente, em 922, o campo válido e/ou o campo de valor de referência na estrutura de estado são limpos. EXEMPLOS
[062] Os seguintes são implementações exemplificativas de diferentes modalidades da invenção.
[063] Exemplo 1. Um aparelho que inclui conjunto de circuitos de compactação para realizar operações de compactação em um bloco de memória; conjunto de circuitos de detecção de constante para, simultaneamente à realização das operações de compactação no bloco de memória, determinar que o bloco de memória é um bloco de dados constante composto apenas por ocorrências repetidas de um valor constante e conjunto de circuitos de controlador para associar uma primeira indicação ao bloco de memória com base na determinação. A primeira indicação é utilizável para controlar se as operações de compactação devem ser abortadas ou descartado um bloco de memória
[064] Exemplo 2. O aparelho do Exemplo 1, em que o conjunto de circuitos de controlador deve associar a primeira indicação ao bloco de memória associando-se a primeira indicação a um endereço de memória do bloco de memória.
[065] Exemplo 3. O aparelho do Exemplo 1, incluindo adicionalmente conjunto de circuitos de preenchimento para, em resposta a uma solicitação do bloco de memória, gerar uma cópia do bloco de memória utilizando o valor constante quando o bloco de memória está associado à primeira indicação.
[066] Exemplo 4. O aparelho do Exemplo 3, incluindo adicionalmente conjunto de circuitos de descompactação para, em resposta à solicitação do bloco de memória, gerar a cópia do bloco de memória descompactando-se o bloco de memória compactado quando o bloco de memória não está associado à primeira indicação.
[067] Exemplo 5. O aparelho do Exemplo 1, em que as operações de compactação incluem pelo menos uma primeira operação para analisar o bloco de memória para gerar parâmetros de compactação e uma segunda operação para gerar o bloco de memória com base nos parâmetros de compactação.
[068] Exemplo 6. O aparelho do Exemplo 5, em que o conjunto de circuitos de compactação deve abortar a segunda operação em resposta à determinação de que o bloco de memória é um bloco de dados constante.
[069] Exemplo 7. O aparelho do Exemplo 1, que inclui adicionalmente uma unidade de armazenamento para armazenar o bloco de memória compactado, em que a unidade de armazenamento é uma memória de sistema ou um cache.
[070] Exemplo 8. O aparelho do Exemplo 1, em que o bloco de memória é uma página de memória.
[071] Exemplo 9. O aparelho do Exemplo 1, em que o bloco de memória contém M bits, o valor constante contém N bits e o bloco de memória contém M/N ocorrências do valor constante.
[072] Exemplo 10. O aparelho do Exemplo 9, em que N é um dentre 8, 16 ou 32.
[073] Exemplo 11. O aparelho do Exemplo 1, em que as operações de compactação são realizadas com base em um esquema de compactação DEFLATE ou Lempel-Ziv-Oberhumer (LZO).
[074] Exemplo 12. O aparelho do Exemplo 1, em que determinar que o bloco de memória é um bloco de dados constante inclui adicionalmente dividir o bloco de memória em uma pluralidade de blocos de memória menores e determinar que cada um da pluralidade de blocos de memória menores também é composto apenas por ocorrências repetidas do valor constante.
[075] Exemplo 13. O aparelho do Exemplo 12, em que o valor constante é armazenado em uma estrutura de estado e comparado com valores em cada um da pluralidade de blocos de memória menores.
[076] Exemplo 14. Um método que inclui: executar operações de compactação em um bloco de memória; determinar que o bloco de memória é um bloco de dados constante composto apenas por ocorrências repetidas de um valor constante, em que a determinação é realizada simultaneamente às operações de compactação no bloco de memória; e associar uma primeira indicação ao bloco de memória com base na determinação, em que a primeira indicação é utilizável para controlar se as operações de compactação devem ser abortadas ou descartado um bloco de memória compactado gerado a partir das operações de
[077] Exemplo 15. O método do Exemplo 14, em que associar a primeira indicação ao bloco de memória inclui adicionalmente associar a primeira indicação a um endereço de memória do bloco de memória.
[078] Exemplo 16. O método do Exemplo 14, que inclui adicionalmente em resposta a uma solicitação do bloco de memória, gerar uma cópia do bloco de memória utilizando o valor constante quando o bloco de memória está associado à primeira indicação.
[079] Exemplo 17. O método do Exemplo 16, que inclui adicionalmente em resposta à solicitação do bloco de memória, gerar a cópia do bloco de memória descompactando-se o bloco de memória compactado quando o bloco de memória não está associado à primeira indicação.
[080] Exemplo 18. O método do Exemplo 14, em que as operações de compactação incluem pelo menos uma primeira operação para analisar o bloco de memória para gerar parâmetros de compactação e uma segunda operação para gerar o bloco de memória com base nos parâmetros de compactação.
[081] Exemplo 19. O método do Exemplo 18, que inclui adicionalmente abortar a segunda operação em resposta à determinação de que o bloco de memória é um bloco de dados constante.
[082] Exemplo 20. O método do Exemplo 14, que inclui adicionalmente armazenar o bloco de memória compactado em uma unidade de armazenamento, sendo que a unidade de armazenamento compreende uma memória de sistema ou um cache.
[083] Exemplo 21. O método do Exemplo 14, em que o bloco de memória é uma página de memória.
[084] Exemplo 22. O método do Exemplo 14, em que o bloco de memória contém M bits, o valor constante compreende N bits e o bloco de memória contém M/N ocorrências do valor constante.
[085] Exemplo 23. O método do Exemplo 22, em que N é um dentre 8, 16 ou 32.
[086] Exemplo 24. O método do Exemplo 14, em que as operações de compactação são realizadas com base em um esquema de compactação DEFLATE ou Lempel-Ziv-Oberhumer (LZO).
[087] Exemplo 25. O método do Exemplo 14, em que determinar que o bloco de memória é um bloco de dados constante inclui adicionalmente dividir o bloco de memória em uma pluralidade de blocos de memória menores e determinar que cada um da pluralidade de blocos de memória menores também é composto apenas por ocorrências repetidas do valor constante.
[088] Exemplo 26. O método do Exemplo 25, que inclui adicionalmente: armazenar o valor constante em uma estrutura de estado e comparar o valor constante com valores em cada um da pluralidade de blocos de memória menores.
[089] Exemplo 27. Um sistema de memória cache compartilhada que compreende meios para realizar um método conforme revelado em qualquer um dos Exemplos anteriores.
[090] Exemplo 28. Um aparelho que compreende meios para realizar um método conforme revelado em qualquer um dos Exemplos anteriores.
[091] Exemplo 29. Armazenamento legível por máquina que inclui instrução legível por máquina que, quando executada, implementa um método ou realiza um aparelho ou sistema conforme revelado em qualquer um dos Exemplos anteriores. ARQUITETURAS DE PROCESSADOR E TIPOS DE DADOS EXEMPLIFICATIVOS
[092] A Figura 11A é um diagrama de blocos que ilustra tanto uma pipeline em ordem exemplificativa quanto um renomeamento de registrador exemplificativo, pipeline de emissão/execução fora de ordem de acordo com modalidades da invenção. A Figura 11B é um diagrama de blocos que ilustra tanto uma modalidade exemplificativa de um núcleo de arquitetura em ordem quanto um renomeamento de registrador exemplificativo, um núcleo de arquitetura de emissão/execução fora de ordem a serem incluídos em um processador de acordo com modalidades da invenção. As caixas de linhas sólidas nas Figuras 11A-B ilustram a pipeline em ordem e o núcleo em ordem, enquanto a adição opcional das caixas de linhas tracejadas ilustra o renomeamento de registrador, 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.
[093] Na Figura 11A, uma pipeline de processador 1100 inclui um estágio de busca 1102, um estágio de decodificação de comprimento 1104, um estágio de decodificação 1106, um estágio de alocação 1108, um estágio de renomeamento 1110, um estágio de agendamento (também conhecido como uma expedição ou emissão) 1112, um estágio de leitura de registro/leitura de memória 1114, um estágio de execução 1116, um estágio de gravação novamente/gravação de memória 1118, um estágio de manipulação de exceção 1122 e um estágio de confirmação 1124.
[094] A Figura 11B mostra o núcleo do processador 1190 que inclui um hardware de front end 1130 acoplado a um hardware de mecanismo de execução 1150 e ambos são acoplados a um hardware de memória 1170. O núcleo 1190 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 palavra de instrução muito longa (VLIW) ou um tipo de núcleo híbrido ou alternativo. Ainda como outra opção, o núcleo 1190 pode ser um núcleo de fins específicos como, por exemplo, um núcleo de rede ou comunicação, mecanismo de compactação, núcleo de coprocessador, núcleo de unidade de processamento de gráficos de computação para fins gerais (GPGPU), núcleo de gráficos ou semelhantes.
[095] O hardware de front end 1130 inclui um hardware de previsão de ramificação 1132 acoplado a um hardware de cache de instruções 1134, que é acoplado a um armazenamento temporário à parte de tradução de instruções (TLB) 1136, que é acoplado a um hardware de busca de instruções 1138, que é acoplado a um hardware de decodificação 1140. O hardware de decodificação 1140 (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. O hardware de decodificação 1140 pode ser implementado usando vários mecanismos diferentes. Os exemplos de mecanismos adequados incluem, porém sem limitação, tabelas de pesquisa, implementaçõ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 1190 inclui uma ROM de microcódigo ou outro meio que armazena microcódigo para certas macroinstruções (por exemplo, no hardware de decodificação 1140 ou dentro do hardware de front end 1130). O hardware de decodificação 1140 é acoplado a um hardware de renomeamento/alocação 1152 no hardware do mecanismo de execução 1150.
[096] O hardware do mecanismo de execução 1150 inclui o hardware de renomeamento/alocação 1152 acoplado a um hardware de desativação 1154 e um conjunto de um ou mais hardware de agendador 1156. O hardware de agendador 1156 representa qualquer número de agendadores diferentes, que incluem estações de reservas, janela de instrução central, etc. O hardware de agendador 1156 é acoplado ao hardware de arquivo (ou arquivos) de registrador físico 1158. Cada um dos hardwares de arquivo (ou arquivos) de registrador físico 1158 representa um ou mais arquivos de registrador físico, em que aqueles diferentes armazenam um ou mais tipos de dados diferentes, tai como número inteiro escalar, ponto de flutuante escalar, número inteiro empacotado, ponto flutuante empacotado, número inteiro de vetor, ponto flutuante de vetor, situação (por exemplo, um ponteiro de instrução que é o endereço da próxima instrução a ser executada), etc. Em uma modalidade, o hardware de arquivo (ou arquivos) de registrador físico 1158 compreende um hardware de registrador de vetor, um hardware de registrador de máscara de gravação e um hardware de registrador escalar. Esse hardware de registrador pode fornecer registradores de vetor de arquitetura, registradores de máscara de vetor e registradores de propósito geral. O hardware de arquivo (ou arquivos) de registrador físico 1158 é sobreposto pelo hardware de desativação 1154 para ilustrar várias maneiras nas quais o renomeamento de registrador e a execução fora de ordem podem ser implementadas (por exemplo, com uso de um armazenamento temporário (ou armazenamentos temporários) de reordenamento e um arquivo (ou arquivos) de registrador de desativação; com uso de um arquivo (ou arquivos) futuro, um armazenamento temporário (ou armazenamentos temporários) de histórico e um arquivo (ou arquivos) de registrador de desativação; com o uso de mapas de registrador e um grupamento de registradores; etc.). O hardware de desativação 1154 e o hardware de arquivo (ou arquivos) de registrador físico 1158 são acoplados ao agrupamento (ou agrupamentos) de execução 1160. O agrupamento (ou agrupamentos) de execução 1160 inclui um conjunto de um ou mais hardwares de execução 1162 e um conjunto de um ou mais hardwares de acesso à memória 1164. O hardware de execução 1162 pode realizar várias operações (por exemplo, deslocamentos, adição, subtração, multiplicação) e em vários tipos de dados (por exemplo, ponto flutuante escalar, número inteiro empacotado ponto flutuante empacotado, número inteiro de vetor, ponto flutuante de vetor). Embora algumas modalidades possam incluir vários hardwares de execução dedicados a funções ou conjuntos de funções específicas, outras modalidades podem incluir apenas um hardware de execução ou múltiplos hardwares de execução que realizam todas as funções. O hardware de agendador 1156, hardware de arquivo (ou arquivos) de registrador físico 1158, e agrupamento (ou agrupamentos) de execução 1160 são mostrados como sendo, possivelmente, plurais porque em determinadas modalidades criam pipelines separados para determinados tipos de dados/operações (por exemplo, um pipeline de número inteiro escalar, um pipeline de ponto flutuante escalar/número inteiro empacotado/ponto flutuante empacotado/número inteiro de vetor/ponto flutuante de vetor, e/ou um pipeline de acesso a memória em que cada um tem seu próprio hardware de agendador, hardware de arquivo (ou arquivos)o de registrador físico, e/ou agrupamento de execução - e no caso de um pipeline de acesso a memória separado, determinadas modalidades são implementadas, nas quais apenas o agrupamento de execução desse pipeline tem o hardware de acesso a memória 1164). Deve ser entendido também que quando pipelines separados são usados, um ou mais dentre esses pipelines podem estar fora de ordem de emissão/execução e o restante em ordem.
[097] O conjunto de hardware de acesso à memória 1164 é acoplado ao hardware de memória 1170, que inclui um hardware TLB de dados 1172 acoplado a um hardware de cache de dados 1174 acoplado a um hardware de cache de nível 2 (L2) 1176. Em uma modalidade exemplificativa, o hardware de acesso à memória 1164 pode incluir um hardware de carregamento, um hardware de endereço de armazenamento e um hardware de armazenamento de dados, cada um dos quais é acoplado ao hardware TLB de dados 1172 no hardware de memória 1170. O hardware de cache de instruções 1134 é adicionalmente acoplado a um hardware de cache de nível 2 (L2) 1176 no hardware de memória 1170. O hardware de cache de L2 1176 é acoplado a um ou mais outros níveis de cache e, eventualmente, a uma memória principal.
[098] A título de exemplo, a arquitetura de núcleo de emissão/execução fora de ordem e de renomeamento de registrador exemplificativa pode implementar o pipeline 1100 conforme segue: 1) a busca de instruções 1138 realiza os estágios de busca e decodificação de comprimento 1102 e 1104; 2) o hardware de decodificação 1140 realiza o estágio de decodificação 1106; 3) o hardware de renomeamento/alocador 1152 realiza o estágio de alocação 1108 e o estágio de renomeamento 1110; 4) o hardware de agendamento 1156 realiza o estágio de agendamento 1112; 5) o hardware de arquivo (ou arquivos) de registrador físico 1158 e o hardware de memória 1170 realizam o estágio de leitura de registrador/leitura de memória 1114; o agrupamento de execução 1160 realiza o estágio de execução 1116; 6) o hardware de memória 1170 e o hardware de arquivo (ou arquivos) de registrador físico 1158 realizam o estágio de regravação/gravação de memória 1118; 7) vários hardwares podem estar envolvidos no estágio de tratamento de exceção 1122 e 8) o hardware de desativação 1154 e o hardware de arquivo (ou arquivos) de registrador físico 1158 realizam o estágio de confirmação 1124.
[099] O núcleo 1190 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 versões mais novas); o conjunto de instruções de MIPS de Tecnologias MIPS de Sunnyvale, CA; o conjunto de instruções ARM (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 1190 inclui lógica para suportar uma extensão de conjunto de instruções de dados empacotados (por exemplo, AVX1, AVX2, e/ou alguma forma do formato de instrução amigável de vetor genérico (U=0 e/ou U=1), descrita abaixo), permitindo, assim, que as operações usadas por vários aplicativos multimídia sejam realizadas com uso de dados empacotados.
[100] Deve-se compreender que o núcleo pode suportar multithreading (executar dois ou mais conjuntos paralelos de operações ou sequências) e pode fazer isso de várias maneiras incluindo multithreading segmentado por tempo, multithreading simultâneo (em que um único núcleo físico fornece um núcleo lógico para cada um dos módulos para os quais o núcleo físico realiza multithreading simultâneo) ou uma combinação dos mesmos (por exemplo, busca e decodificação segmentada por tempo e multithreading simultâneo posteriormente tal como na tecnologia Hyperthreading da Intel®).
[101] Embora o renomeamento de registrador seja descrito no contexto de execução fora de ordem, deve-se compreender que o renomeamento de registrador pode ser usado em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também inclua hardwares de instrução e de cache de dados separados 1134/1174 e um hardware de cache L2 compartilhado 1176, 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.
[102] 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 as modalidades da invenção. As caixas em linha sólida na Figura 12 ilustram um processador 1200 com um único núcleo 1202A, um agente de sistema 1210, um conjunto de um ou mais hardwares de controlador de barramento 1216, enquanto a adição opcional das caixas em linha tracejada ilustra um processador alternativo 1200 com múltiplos núcleos 1202A-N, um conjunto de um ou mais hardware de controlador de memória integrada 1214 no hardware de agente de sistema 1210 e lógica de propósito especial 1208.
[103] Dessa forma, implementações diferentes do processador 1200 podem incluir: 1) uma CPU com a lógica de propósito especial 1208 que é lógica gráfica e/ou científica (capacidade) integrada (que pode incluir um ou mais núcleos) e sendo que os núcleos 1202A-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-N que são um grande número de núcleos de propósito geral destinados principalmente para gráfica e/ou científica (capacidade) e 3) um coprocessador com os núcleos 1202A-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 implementado em um ou mais chips. O processador 1200 pode ser uma parte de e/ou pode ser implementado em um ou mais substratos que usam qualquer uma dentre várias tecnologias de processo, tais como, por exemplo, BiCMOS, CMOS ou NMOS.
[104] A hierarquia de memória inclui um ou mais níveis de cache dentro dos núcleos, um conjunto ou um ou mais hardwares de cache compartilhados 1206 e memória externa (não mostrada) acoplada ao conjunto de hardware de controlador de memória integrada 1214. O conjunto de hardware 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. Enquanto em uma modalidade um hardware de interconexão com base em anel 1212 interconecta a lógica de gráficos integrada 1208, o conjunto de hardware de cache compartilhado 1206 e o hardware do agente de sistema 1210/hardware controlador de memória integrado 1214, modalidades alternativas podem usar qualquer número de técnicas bem conhecidas para interconectando tal hardware. Em uma modalidade, a coerência é mantida entre um ou mais hardwares de cache 1206 e núcleos 1202-A-N.
[105] Em algumas modalidades, um ou mais dentre os núcleos 1202A-N têm capacidade de realizar multithreading. A unidade de agente de sistema 1210 inclui aqueles componentes que coordenam e operam os núcleos 1202A-N. O hardware de agente de sistema 1210 pode incluir, por exemplo, uma unidade de controle de potência (PCU) e um hardware 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. O hardware de exibiu�ão tem como objetivo acionar um ou mais visores conectados externamente.
[106] Os núcleos 1202A-N podem ser homogêneos ou heterogêneos em termos de arquitetura de conjunto de instruções, ou seja, dois ou mais dentre os núcleos 1202A-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 um conjunto de instruções diferente. Em uma modalidade, os núcleos 1202A-N são heterogêneos e incluem tanto os núcleos “pequenos” quanto os núcleos “grandes” descritos abaixo.
[107] 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, concentradores 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, são, de modo geral, adequadas.
[108] 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 podem estar em chips separados); o GMCH 1390 inclui controladores de memória e gráficos para os quais são memória acoplada 1340 e um coprocessador 1345; o IOH 1350 acopla os dispositivos de entrada/saída (I/O) 1360 ao GMCH 1390. Alternativamente, um ou ambos os controladores de memória e gráficos sã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.
[109] 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.
[110] 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 ou conexão semelhante 1395.
[111] Em uma modalidade, o coprocessador 1345 é um processador de propósito especial tal como, por exemplo, um processador de MIC de alto rendimento, um processador de rede ou comunicação, mecanismo de compactação, processador de gráficos, GPGPU, processador embutido ou similares. Em uma modalidade, o concentrador de controlador 1320 pode incluir um acelerador de gráficos integrado.
[112] 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.
[113] 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.
[114] 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 uma modalidade da invenção, os processadores 1470 e 1480 são, respectivamente, 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.
[115] Os processadores 1470 e 1480 são mostrados incluindo os hardwares de controlador de memória integrada (IMC) 1472 e 1482, respectivamente. O processador 1470 também inclui como parte de seus hardwares 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 IMCs 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 de principal anexadas localmente aos respectivos processadores.
[116] 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 circuitos integrados 1490 pode trocar informações, opcionalmente, com o coprocessador 1438 através de uma interface de alto desempenho 1439. Em uma modalidade, o coprocessador 1438 é um processador de propósito especial tal como, por exemplo, um processador de MIC de alto rendimento, um processador de rede ou comunicação, mecanismo de compactação, processador de gráficos, GPGPU, processador embutido ou similares.
[117] Um cache compartilhado (não mostrado) pode ser incluído no processador ou na parte de fora de ambos os processadores, ainda conectado com os processadores por meio de interconexão P a P, de modo que qualquer uma ou ambas as informações de cache local dos processadores possam ser armazenados no cache compartilhado se um processador for colocado em um modo de baixa potência.
[118] O conjunto de chips 1490 pode ser acoplado a um primeiro barramento 1416 através 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 tal como um barramento PCI Express ou outro barramento de interconexão de I/O de terceira geração, embora o escopo da presente invenção não seja limitado a isso.
[119] Como mostrado na Figura 14, vários dispositivos de I/O 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, tais como coprocessadores, processadores de MIC de alto rendimento, GPGPU’s, aceleradores (tais como, por exemplo, aceleradores de gráficos ou hardwares de processamento de sinal digital (DSP)), matrizes 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 pinagem reduzida (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 um hardware de armazenamento de dados 1428 tal 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, um I/O de áudio 1424 pode ser acoplado 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 implementar um barramento multiponto ou outra arquitetura.
[120] 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 de modo a evitar obscurecer outros aspectos da Figura 15.
[121] A Figura 15 ilustra que os processadores 1470, 1480 podem incluir memória integrada e lógica de controle de I/O (“CL”) 1472 e 1482, respectivamente. Assim, a CL 1472, 1482 inclui hardware controlador de memória integrada e inclui lógica de controle de I/O. A Figura 15 ilustra que não apenas as memórias 1432, 1434 são acopladas à CL 1472, 1482, mas que os dispositivos de I/O 1514 também são acoplados à lógica de controle 1472, 1482. Os dispositivos de I/O legados 1515 são acoplados ao conjunto de chips 1490.
[122] 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 semelhantes. Também, as caixas de linha tracejada são recursos opcionais em SoCs mais avançados. Na Figura 16, um hardware de interconexão 1602 é acoplado a: um processador de aplicativo 1610 que inclui um conjunto de um ou mais núcleos 1202A-N e hardware de cache compartilhado 1206; um hardware de agente de sistema 1210; um hardware controlador de barramento 1216; um hardware de controlador de memória integrado 1214; um conjunto ou 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; um hardware de memória de acesso aleatório estático (SRAM) 1630; um hardware de acesso direto à memória (DMA) 1632; e um hardware de exibição 1640 para acoplamento 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.
[123] As modalidades dos mecanismos revelados no presente documento podem ser implementadas em hardware, software, firmware ou em uma combinação de tais abordagens de implementação. As modalidades da invenção podem ser implementadas 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.
[124] O código de programa, tal 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 tal como, por exemplo, um processador de sinal digital (DSP), um microcontrolador, um circuito integrado de aplicação específica (ASIC) ou um microprocessador.
[125] O código de programa pode ser implementado em uma linguagem de programação processual em nível elevado ou orientada a objeto para se comunicar com um sistema de processamento. O código do programa pode ser implementado em linguagem de máquina ou assembly, 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.
[126] Um ou mais aspectos, de pelo menos uma modalidade, podem ser implementados por dados representativos armazenados em um meio legível por máquina que representa várias lógicas dentro do 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.
[127] Essa mídia de armazenamento legível por máquina pode incluir, 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 tais como discos rígidos, qualquer outro tipo de disco incluindo disquetes, discos ópticos, memórias apenas de leitura de disco compacto (CD-ROMs), discos regraváveis compactos (CD-RWs), e discos magneto-ópticos, dispositivos semicondutores como memórias de apenas 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 apenas de leitura programáveis e apagáveis (EPROMs), memórias flash, memórias apenas de 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.
[128] 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. Essas modalidades também podem ser denominadas como produtos de programa.
[129] Em alguns casos, um conversor de instrução pode ser usado para converter uma instrução de um conjunto de instruções fonte 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), morfologia, emular, ou de outro modo, converter uma instrução para uma ou mais outras instruções a serem processadas pelo núcleo. O conversor de instrução pode ser implementado 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.
[130] 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 em 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 implementado 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 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 forma semelhante, 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 da Intel 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.
[131] Embora algumas modalidades tenham sido descritas em referência a implementações particulares, outras implementações são possíveis de acordo com algumas modalidades. Adicionalmente, a disposição e/ou ordem dos elementos de circuito ou outros recursos ilustrados nos desenhos e/ou descritos no presente documento não precisam ser dispostos do modo particular ilustrado e descrito. Muitas outras disposições são possíveis para algumas modalidades.
[132] Em cada sistema mostrado na Figura, os elementos em alguns casos podem cada um ter o mesmo número de referência ou um número de referência diferente para sugerir que os elementos representados poderiam ser diferentes e/ou similares. Contudo, um elemento pode ser flexível o suficiente para ter diferentes implementações e trabalhar com alguns ou todos os sistemas mostrados ou descritos no presente documento. Os vários elementos mostrados nas figuras podem ser os mesmos ou diferentes. O elemento denominado como um primeiro elemento e o elemento chamado de um segundo elemento são arbitrários.
[133] Na descrição e reivindicações a seguir, os termos “acoplado” e “conectado”, junto com seus derivados, podem ser usados. Deve-se compreender que esses termos não são concebidos como sinônimos entre si. Em vez disso, nas modalidades particulares, “conectado” pode ser usado para indicar que dois ou mais elementos estão em contato físico e/ou elétrico direto entre si. “Acoplado” pode significar que dois ou mais elementos estão em contato elétrico ou físico direto. No entanto, o termo “acoplado”, também pode significar que dois ou mais elementos não estão em contato direto entre si, mas ainda assim cooperam ou interagem entre si.
[134] Uma modalidade é uma implementação ou exemplo das invenções. A referência no relatório descritivo a "uma modalidade”, "uma (1) modalidade”, “algumas modalidades” ou "outras modalidades" significa que um recurso, estrutura ou característica particular descrita em conexão com as modalidades está incluída em pelos menos algumas modalidades, mas não necessariamente todas as modalidades, das invenções. As várias aparições de "uma modalidade”, "uma (1) modalidade" ou “algumas modalidades” não se referem todas, necessariamente, às mesmas modalidades.
[135] Nem todos os componentes, recursos, estruturas, características, etc. descritos e ilustrados no presente documento precisam estar incluídos em uma modalidade ou modalidades particulares. Se o relatório descritivo declara que um componente, recurso, estrutura ou característica “pode”, “tem probabilidade”, “tem possibilidade” ou “poderia” ser incluído, por exemplo, não é exigido que aquele componente, recurso, estrutura ou característica particular esteja incluído. Se o relatório descritivo ou reivindicação se refere e "um" elemento, isso não significa que há apenas um desse elemento. Se o relatório descritivo ou as reivindicações se referem a um elemento "adicional", isso não impede haver mais de um do elemento adicional.
[136] A descrição acima das modalidades ilustradas da invenção, incluindo o que é descrito no Resumo, não é destinada a ser exaustiva ou a limitar a invenção às formas precisas reveladas. Embora modalidades específicas e exemplos para a invenção sejam descritos no presente documento para fins ilustrativos, várias modificações equivalentes são possíveis dentro do escopo da invenção, como os versados na técnica reconhecerão.
[137] Estas modificações podem ser feitas à invenção à luz da descrição detalhada acima. Os termos usados nas reivindicações a seguir não devem ser interpretados como limitando a invenção às modalidades específicas reveladas no relatório descritivo e nos desenhos. Em vez disso, o escopo da invenção deve ser determinado inteiramente pelas reivindicações a seguir, que devem ser interpretadas de acordo com as doutrinas estabelecidas de interpretação de reivindicações.

Claims (25)

  1. Aparelho, caracterizado pelo fato de que compreende: conjunto de circuitos de compactação para realizar operações de compactação em um bloco de memória; conjunto de circuitos de detecção de constante para, simultaneamente à realização das operações de compactação no bloco de memória, determinar que o bloco de memória é um bloco de dados constante composto apenas por instâncias repetidas de um valor constante e conjunto de circuitos de controlador para associar uma primeira indicação ao bloco de memória com base na determinação, em que a primeira indicação é utilizável para controlar se devem ser abortadas as operações de compactação ou descartado um bloco de memória compactado gerado a partir das operações de compactação.
  2. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que o conjunto de circuitos de controlador deve associar a primeira indicação ao bloco de memória associando-se a primeira indicação a um endereço de memória do bloco de memória.
  3. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: preencher o conjunto de circuitos para, em resposta a uma solicitação pelo bloco de memória, gerar uma cópia do bloco de memória usando o valor constante quando o bloco de memória estiver associado à primeira indicação.
  4. Aparelho, de acordo com a reivindicação 3, caracterizado pelo fato de que compreende adicionalmente: conjunto de circuitos de descompactação para, em resposta à solicitação pelo bloco de memória, gerar a cópia do bloco de memória descompactando o bloco de memória compactado quando o bloco de memória não está associado à primeira indicação.
  5. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que as operações de compactação compreendem pelo menos uma primeira operação para analisar o bloco de memória para gerar parâmetros de compactação e uma segunda operação para gerar o bloco de memória com base nos parâmetros de compactação.
  6. Aparelho, de acordo com a reivindicação 5, caracterizado pelo fato de que o circuito de compactação deve abortar a segunda operação em resposta à determinação de que o bloco de memória é um bloco de dados constante
  7. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: unidade de armazenamento para armazenar o bloco de memória compactado, sendo que a unidade de armazenamento compreende uma memória de sistema ou um cache.
  8. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que o bloco de memória compreende uma página de memória.
  9. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que o bloco de memória compreende M bits, o valor constante compreende N bits e o bloco de memória compreende M/N ocorrências do valor constante.
  10. Aparelho, de acordo com a reivindicação 9, caracterizado pelo fato de que N compreende um dentre 8, 16 e 32.
  11. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que as operações de compactação são realizadas com base em um esquema de compactação DEFLATE ou Lempel–Ziv–Oberhumer (LZO).
  12. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que determinar que o bloco de memória é um bloco de dados constante compreende adicionalmente dividir o bloco de memória em uma pluralidade de blocos de memória menores e determinar que cada um da pluralidade de blocos de memória menores também é composto apenas por instâncias repetidas do valor constante.
  13. Aparelho, de acordo com a reivindicação 12, caracterizado pelo fato de que o valor constante é armazenado em uma estrutura de estado e comparado com valores em cada um da pluralidade de blocos de memória menores.
  14. Método, caracterizado pelo fato de que compreende: realizar operações de compactação em um bloco de memória; determinar que o bloco de memória é um bloco de dados constante composto apenas por instâncias repetidas de um valor constante, em que a determinação é realizada simultaneamente às operações de compactação no bloco de memória e associar uma primeira indicação ao bloco de memória com base na determinação, em que a primeira indicação é utilizável para controlar se devem ser abortadas as operações de compactação ou descartado um bloco de memória compactado gerado a partir das operações de compactação.
  15. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que associar a primeira indicação ao bloco de memória compreende adicionalmente associar a primeira indicação a um endereço de memória do bloco de memória.
  16. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que compreende adicionalmente: em resposta a uma solicitação pelo bloco de memória, gerar uma cópia do bloco de memória usando o valor constante quando o bloco de memória estiver associado à primeira indicação.
  17. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que compreende adicionalmente: em resposta à solicitação pelo bloco de memória, gerar a cópia do bloco de memória descompactando o bloco de memória compactado quando o bloco de memória não está associado à primeira indicação.
  18. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que as operações de compactação compreendem pelo menos uma primeira operação para analisar o bloco de memória para gerar parâmetros de compactação e uma segunda operação para gerar o bloco de memória com base nos parâmetros de compactação.
  19. Método, de acordo com a reivindicação 18, caracterizado pelo fato de que compreende adicionalmente: abortar a segunda operação em resposta à determinação de que o bloco de memória é um bloco de dados constante.
  20. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que compreende adicionalmente: armazenar o bloco de memória compactado em uma unidade de armazenamento, sendo que a unidade de armazenamento compreende uma memória de sistema ou um cache.
  21. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que o bloco de memória compreende uma página de memória.
  22. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que o bloco de memória compreende M bits, o valor constante compreende N bits e o bloco de memória compreende M/N ocorrências do valor constante.
  23. Método, de acordo com a reivindicação 22, caracterizado pelo fato de que N compreende um dentre 8, 16 e 32.
  24. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que as operações de compactação são realizadas com base em um esquema de compactação DEFLATE ou Lempel–Ziv–Oberhumer (LZO)
  25. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que determinar que o bloco de memória é um bloco de dados constante compreende adicionalmente dividir o bloco de memória em uma pluralidade de blocos de memória menores e determinar que cada um da pluralidade de blocos de memória menores também é composto apenas por instâncias repetidas do valor constante.
BR102022023763-8A 2021-12-22 2022-11-22 Aparelho e método para detecção de constante durante operações de compactação BR102022023763A2 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US17/559,989 2021-12-22

Publications (1)

Publication Number Publication Date
BR102022023763A2 true BR102022023763A2 (pt) 2023-07-04

Family

ID=

Similar Documents

Publication Publication Date Title
US10776190B2 (en) Hardware apparatuses and methods for memory corruption detection
JP6143872B2 (ja) 装置、方法、およびシステム
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369511B (zh) 用于基于通道的跨步存储操作的指令和逻辑
TW202240387A (zh) 用於異質計算之系統,方法,及設備
KR101839479B1 (ko) 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들
KR101787851B1 (ko) 다중 페이지 크기 변환 색인 버퍼(tlb)용 장치 및 방법
WO2013095392A1 (en) Systems and method for unblocking a pipeline with spontaneous load deferral and conversion to prefetch
US20170286118A1 (en) Processors, methods, systems, and instructions to fetch data to indicated cache level with guaranteed completion
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
CN111353156A (zh) 可缩放多密钥总存储器加密引擎
EP4002131A2 (en) Sequestered memory for selective storage of metadata corresponding to cached data
US20190102302A1 (en) Processor, method, and system for cache partitioning and control for accurate performance monitoring and optimization
US10761979B2 (en) Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value
CN1253801C (zh) 具有流水线的计算电路的存储器系统以及提供数据的方法
US10069512B2 (en) Systems, methods, and apparatuses for decompression using hardware and software
US9229874B2 (en) Apparatus and method for compressing a memory address
US9342303B2 (en) Modified execution using context sensitive auxiliary code
EP4020172A1 (en) Processor instructions for data compression and decompression
EP4020232A1 (en) Compressed cache memory with parallel decompress on fault
BR102022023763A2 (pt) Aparelho e método para detecção de constante durante operações de compactação
TW202225978A (zh) 用於具有大的碼覆蓋區的工作負載的動態共享快取劃分
US20230198548A1 (en) Apparatus and method for constant detection during compress operations
CN116821008B (zh) 具有提高的高速缓存命中率的处理装置及其高速缓存设备
TW202416131A (zh) 用於壓縮操作期間的常數偵測之設備及方法