BR102020019657A2 - aparelhos, métodos e sistemas para instruções de um acelerador de operações de matriz - Google Patents

aparelhos, métodos e sistemas para instruções de um acelerador de operações de matriz Download PDF

Info

Publication number
BR102020019657A2
BR102020019657A2 BR102020019657-0A BR102020019657A BR102020019657A2 BR 102020019657 A2 BR102020019657 A2 BR 102020019657A2 BR 102020019657 A BR102020019657 A BR 102020019657A BR 102020019657 A2 BR102020019657 A2 BR 102020019657A2
Authority
BR
Brazil
Prior art keywords
input
dimensional
instruction
multiplication
temporary storage
Prior art date
Application number
BR102020019657-0A
Other languages
English (en)
Inventor
Zeev Sperber
Amit Gradstein
Simon Rubanovich
Gavri BERGER
Saeed KHAROUF
Ron Schneider
Sagi MELLER
Jose YALLOUZ
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 BR102020019657A2 publication Critical patent/BR102020019657A2/pt

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

A presente invenção refere-se a sistemas, métodos e aparelhos relacionados a um acelerador de operações de matriz. Em uma modalidade, um processador inclui um circuito acelerador de operações de matriz que inclui uma grade bidimensional de circuitos fundidos de multiplicação e acumulação que é comutável para um modo de agendamento para execução de uma única instrução decodificada, em que o circuito acelerador de operações de matriz carrega um primeiro armazenamento temporário da grade bidimensional de circuitos de multiplicação e acumulação fundidos de uma primeira pluralidade de registros que representa uma primeira matriz bidimensional de entrada, verifica se um segundo armazenamento temporário da grade bidimensional de circuitos de multiplicação e acumulação fundidos armazena uma matriz bidimensional de entrada imediatamente anterior que é a mesma que uma segunda matriz bidimensional de entrada a partir de uma segunda pluralidade de registros que representa a primeira matriz bidimensional de entrada e, quando o segundo armazenamento temporário da grade bidimensional de circuitos de multiplicação e acumulação fundidos armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução de uma instrução anterior.

Description

APARELHOS, MÉTODOS E SISTEMAS PARA INSTRUÇÕES DE UM ACELERADOR DE OPERAÇÕES DE MATRIZ CAMPO DA INVENÇÃO
[0001] A revelação se refere geralmente à arquitetura de processador de computador e, mais especificamente, a aparelhos, sistemas e métodos para executar instruções para realizar uma operação de matriz usando um circuito acelerador de operações de matriz.
HISTÓRICO
[0002] Um processador, ou conjunto de processadores, executa instruções de um conjunto de instruções, por exemplo, a arquitetura do conjunto de instruções (ISA). O conjunto de instruções é a parte da arquitetura do computador relacionada à programação e geralmente inclui os tipos de dados nativos, instruções, arquitetura de registro, modos de endereçamento, arquitetura de memória, manipulação de interrupção e exceção e entrada e saída externa (I/O). Deve-se notar que o termo instrução neste documento pode se referir a uma macroinstrução, por exemplo, uma instrução que é fornecida ao processador para execução, ou a uma microinstrução, por exemplo, uma instrução que resulta das macroinstruções de decodificação do decodificador de um processador.
BREVE DESCRIÇÃO DOS DESENHOS
[0003] A presente revelação é ilustrada a título de exemplo, e não de limitação, nas Figuras dos desenhos anexos, nos quais referências similares indicam elementos similares e nos quais:
[0004] A Figura 1A ilustra uma modalidade de blocos configurados de acordo com modalidades da revelação.
[0005] A Figura 1B ilustra uma modalidade de blocos configurados de acordo com modalidades da revelação.
[0006] A Figura 2 ilustra diversos exemplos de armazenamento de matriz de acordo com modalidades da revelação.
[0007] A Figura 3 ilustra uma modalidade de um sistema que utiliza um acelerador de operações de matriz (bloco) de acordo com modalidades da revelação.
[0008] As Figuras 4 e 5 mostram diferentes modalidades de como a memória é compartilhada usando um acelerador de operações de matriz.
[0009] A Figura 6 ilustra uma modalidade de operação de acumulação de multiplicação de matriz que usa blocos (“TMMA”).
[0010] A Figura 7 ilustra uma modalidade de um subconjunto da execução de uma iteração de uma instrução de acumulação de multiplicação fundida em cadeia.
[0011] A Figura 8 ilustra uma modalidade de um subconjunto da execução de uma iteração de uma instrução de acumulação de multiplicação fundida em cadeia.
[0012] A Figura 9 ilustra uma modalidade de um subconjunto da execução de uma iteração de uma instrução de acumulação de multiplicação fundida em cadeia.
[0013] A Figura 10 ilustra uma modalidade de um subconjunto da execução de uma iteração de instrução de acumulação de multiplicação fundida em cadeia.
[0014] A Figura 11 ilustra implementações de SIMD de potência de dois em tamanho em que os acumuladores usam tamanhos de entrada que são maiores que as entradas para os multiplicadores de acordo com uma modalidade.
[0015] A Figura 12 ilustra uma modalidade de um sistema que utiliza conjuntos de circuitos de operações de matriz.
[0016] A Figura 13 ilustra uma modalidade de um pipeline de núcleo de processador que suporta operações de matriz que usam blocos.
[0017] A Figura 14 ilustra uma modalidade de um pipeline de núcleo de processador que suporta operações de matriz que usam blocos.
[0018] A Figura 15 ilustra um exemplo de uma matriz expressada em formato de linha principal e formato de coluna principal.
[0019] A Figura 16 ilustra um exemplo de uso de matrizes (blocos).
[0020] A Figura 17 ilustra uma modalidade de um método de uso de matrizes (blocos).
[0021] A Figura 18 ilustra suporte para configuração do uso de blocos de acordo com uma modalidade.
[0022] A Figura 19 ilustra uma modalidade de uma descrição das matrizes (blocos) que devem ser suportadas.
[0023] As Figuras 20(A) a 20(D) ilustram exemplos de registro (ou registros).
[0024] A Figura 21 ilustra uma modalidade de um sistema que utiliza um acelerador de operações de matriz (bloco) de acordo com modalidades da revelação.
[0025] A Figura 22 ilustra um circuito acelerador de operações de matriz que compreende uma grade bidimensional de circuitos de elemento de processamento de acordo com modalidades da revelação.
[0026] A Figura 23 ilustra conjunto de circuitos de despacho de um circuito acelerador de operações de matriz de acordo com modalidades da revelação.
[0027] A Figura 24 ilustra conjunto de circuitos de agendamento de conjunto de circuitos de despacho de um circuito acelerador de operações de matriz de acordo com modalidades da revelação.
[0028] A Figura 25 ilustra conjunto de circuitos de agendamento, de conjunto de circuitos de despacho de um circuito acelerador de operações de matriz, que é comutável a partir de um modo de agendamento de linha de base para um modo de agendamento que reutiliza uma matriz de entrada de acordo com modalidades da revelação.
[0029] A Figura 26 ilustra conjunto de circuitos de despacho de um circuito acelerador de operações de matriz para múltiplas passagens de acordo com modalidades da revelação.
[0030] A Figura 27 ilustra conjunto de circuitos de agendamento de conjunto de circuitos de despacho de um circuito acelerador de operações de matriz para múltiplas passagens de acordo com modalidades da revelação.
[0031] A Figura 28 ilustra pseudocódigo para conjuntos de circuitos de operações de matriz de acordo com modalidades da revelação.
[0032] A Figura 29 ilustra um método de processamento de uma instrução de operação de matriz de acordo com modalidades da revelação.
[0033] A Figura 30A é um diagrama de blocos que ilustra um formato de instrução amigável de vetor genérico e modelos de instrução de classe A do mesmo de acordo com modalidades da revelação.
[0034] A Figura 30B é um diagrama de blocos que ilustra o formato de instrução amigável de vetor genérico e modelos de instrução de classe B do mesmo de acordo com modalidades da revelação.
[0035] A Figura 31A é um diagrama de blocos que ilustra campos para os formatos de instrução amigável de vetor genérico nas Figuras 30A e 30B de acordo com modalidades da revelação.
[0036] A Figura 31B é um diagrama de blocos que ilustra os campos do formato de instrução amigável de vetor específico na Figura 31A que compõem um campo de código operacional completo de acordo com uma modalidade da revelação.
[0037] A Figura 31C é um diagrama de blocos que ilustra os campos do formato de instrução amigável de vetor específico na Figura 31A que compõem um índice de registro campo de acordo com uma modalidade da revelação.
[0038] A Figura 31D é um diagrama de blocos que ilustra os campos do formato de instrução amigável de vetor específico na Figura 31A que compõem o campo de operação de aumento 3050 de acordo com uma modalidade da revelação.
[0039] A Figura 32 é um diagrama de blocos de uma arquitetura de registro de acordo com uma modalidade da revelação
[0040] A Figura 33A é um diagrama de blocos que ilustra tanto um pipeline em ordem exemplificativa quanto um pipeline de emissão/execução fora de ordem de renomeamento de registro exemplificativa de acordo com modalidades da revelação.
[0041] A Figura 33B é um diagrama de blocos que ilustra tanto uma modalidade exemplificativa de um núcleo de arquitetura em ordem quanto um núcleo de arquitetura de emissão/execução fora de ordem e renomeação de registro exemplificativa fora de ordem a serem incluídos em um processador de acordo com modalidades da revelação.
[0042] A Figura 34A é um diagrama de blocos de um núcleo de processador único, junto com sua conexão com a rede de conexão em matriz e com seu subconjunto local do cache de Nível 2 (L2), de acordo com modalidades da revelação.
[0043] A Figura 34B é uma vista expandida de parte do núcleo de processador na Figura 34A de acordo com modalidades da invenção.
[0044] A Figura 35 é um diagrama de blocos de um processador 3500 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.
[0045] A Figura 36 é um diagrama de blocos de um sistema de acordo com uma modalidade da presente revelação.
[0046] A Figura 37 é um diagrama de blocos de um sistema exemplificativo mais específico de acordo com uma modalidade da presente revelação.
[0047] A Figura 38 mostrada é um diagrama de blocos de um segundo sistema exemplificativo mais específico de acordo com uma modalidade da presente revelação.
[0048] A Figura 39 mostrada é um diagrama de blocos de um sistema em um chip (SoC) de acordo com uma modalidade da presente revelação.
[0049] A Figura 40 é um diagrama de blocos que contrasta o uso de um conversor de instrução de software para converter instruções binárias em um conjunto de instruções fonte para instruções binárias em um conjunto de instruções alvo de acordo com modalidades da invenção.
DESCRIÇÃO DETALHADA
[0050] Na descrição a seguir, são apresentados inúmeros detalhes específicos. No entanto, entende-se que as modalidades podem ser praticadas sem esses detalhes específicos. Em outras circunstâncias, circuitos, estruturas e técnicas bem conhecidas não foram mostradas em detalhes a fim de não obscurecer um entendimento dessa descrição.
[0051] As referências no relatório descritivo a “uma (1) modalidade”, “uma modalidade”, “uma modalidade de exemplo”, etc., indicam que a modalidade descrita pode incluir um recurso, estrutura ou característica particular, mas cada modalidade pode não necessariamente incluir o recurso, estrutura ou característica particular. Além do mais, tais frases não se referem necessariamente à mesma modalidade. Ademais, quando um recurso, estrutura ou característica específico for descrito em conexão com uma modalidade, sugere-se que esteja dentro do conhecimento de um elemento versado na técnica executar tal recurso, estrutura ou característica em conexão com outras modalidades independentemente de serem ou não explicitamente descritas.
[0052] As matrizes podem ser cada vez mais importantes em muitas tarefas de computação, como aprendizado de máquina e outro processamento de dados em massa. Deep Learning é uma classe de algoritmos de aprendizado de máquina. Arquiteturas de aprendizagem profunda, como redes neurais profundas, podem ser aplicadas a campos, incluindo visão computacional, reconhecimento de fala, processamento de linguagem natural, reconhecimento de áudio, filtragem de rede social, tradução automática, bioinformática e projeto de fármacos.
[0053] Inferência e treinamento, duas ferramentas usadas para aprendizado profundo, podem utilizar aritmética de baixa precisão. Maximizar o rendimento de algoritmos e cálculos de aprendizado profundo pode ajudar a atender às necessidades de processadores de aprendizado profundo, por exemplo, aqueles que realizam aprendizado profundo em um centro de dados.
[0054] A multiplicação de matriz-matriz (também conhecida como GEMM ou General Matrix Multiplication) é uma operação de computação pesada em certos processadores. Hardware especial para multiplicação de matriz (por exemplo, GEMM) é uma boa opção para melhorar a computação de pico (e eficiência energética) de certas aplicações, como aprendizado profundo. Algumas dessas aplicações, incluindo aprendizagem profunda, podem operar em elementos de dados de entrada com relativamente poucos bits sem perder a precisão, desde que os elementos de saída tenham bits suficientes (por exemplo, mais do que as entradas).
[0055] Em certos processadores, lidar com matrizes é uma tarefa difícil e/ou com muitas instruções. Por exemplo, as fileiras de uma matriz podem ser colocadas em uma pluralidade de registros de dados compactados (por exemplo, SIMD ou vetor) e, em seguida, operados individualmente. Por exemplo, adicionar duas matrizes 8x2 (por exemplo, linha por coluna) pode exigir um carregamento ou reunir em quatro registros de dados compactados, dependendo dos tamanhos dos dados. Em seguida, uma primeira adição de registros de dados compactados correspondendo a uma primeira linha de cada matriz é realizada e uma segunda adição de registros de dados compactados correspondendo a uma segunda linha de cada matriz é executada. Em seguida, os registros de dados compactados resultantes são espalhados de volta para a memória. Embora para matrizes pequenas este cenário possa ser aceitável, muitas vezes não é aceitável com matrizes maiores.
Discussão
[0056] São descritos, no presente documento, mecanismos para suportar operações de matriz em hardware de computador, como unidades de processamento central (CPUs), unidades de processamento gráfico (GPUs) e aceleradores. As operações de matriz utilizam estruturas de dados bidimensionais (2-D) que representam uma ou mais regiões compactadas de memória, como registradores. Ao longo desta descrição, essas estruturas de dados 2-D são chamadas de blocos. Observe que uma matriz pode ser menor do que um bloco (use menos do que todos os blocos) ou uma pluralidade de blocos (a matriz é maior do que o tamanho de qualquer bloco). Ao longo da descrição, a linguagem de matriz (bloco) é usada para indicar as operações realizadas usando blocos que impactam uma matriz; se essa matriz é ou não maior do que qualquer bloco não é tipicamente relevante.
[0057] Cada bloco pode ser operado por diferentes operações, como aquelas que são detalhadas aqui e incluem, mas não estão limitadas a: multiplicação de matriz (bloco), adição de bloco, subtração de bloco, diagonal de bloco, bloco zero, transformação de bloco, produto de ponto de bloco, transmissão de bloco, transmissão de linha de bloco, difusão de coluna de bloco, multiplicação de bloco, multiplicação e acumulação de bloco, movimentação de bloco, etc. Além disso, o suporte para operadores, como o uso de uma escala e/ou polarização, pode ser usado com essas operações ou no suporte de aplicativos não numéricos no futuro, por exemplo, OpenCL "memória local", compressão/descompressão de dados, etc. Também são descritas neste documento instruções para executar instruções de operação de matriz (por exemplo, TILEPARTIALDOTPRODUCT).
[0058] Porções de armazenamento (como memória (não volátil e volátil), registros, cache, etc.) são organizadas em blocos de diferentes dimensões horizontais e verticais. Por exemplo, um bloco pode ter dimensão horizontal de 4 (por exemplo, quatro linhas de uma matriz) e uma dimensão vertical de 8 (por exemplo, 8 colunas da matriz). Normalmente, a dimensão horizontal está relacionada aos tamanhos dos elementos (por exemplo, 2-, 4-, 8-, 16-, 32-, 64-, 128-bit, etc.). Vários tipos de dados (ponto flutuante de precisão única, ponto flutuante de precisão dupla, inteiro, etc.) podem ser suportados.
Uso exemplificativo de blocos configurados
[0059] Em algumas modalidades, os parâmetros do bloco podem ser configurados. Por exemplo, um dado bloco pode ser configurado para fornecer opções de bloco. Opções de bloco exemplares incluem, mas não estão limitadas a: um número de linhas do bloco, um número de colunas do bloco, se o bloco é VALID e se o bloco consiste em um PAIR de blocos de tamanhos iguais.
[0060] A Figura 1A ilustra uma modalidade de blocos configurados. Como mostrado, 4 kB de memória de aplicativo 102 armazenaram neles 4 títulos de 1kB, bloco t0 104, bloco t1 106, bloco t2 108 e bloco t3 110. Nesse exemplo, os 4 blocos não consistem em pares e cada um possui elementos dispostos em linhas e colunas. O bloco t0 104 e o bloco t1 106 têm K linhas e N colunas de elementos de 4 bytes (por exemplo, dados de precisão única), onde K é igual a 8 e N=32. O bloco t2 108 e o bloco t3 110 têm K linhas e N/2 colunas de elementos de 8 bytes (por exemplo, dados de precisão dupla). Como os operandos de precisão dupla têm o dobro da largura da precisão simples, essa configuração é consistente com uma paleta, usada para fornecer opções de bloco, fornecendo no mínimo 4 nomes com armazenamento total de pelo menos 4 kB. Na operação, os blocos podem ser carregados e armazenados na memória usando as operações de carregamento e armazenamento. Dependendo do esquema de codificação de instrução usado, a quantidade de memória de aplicativo disponível, bem como o tamanho, o número e a configuração dos blocos disponíveis variam.
[0061] A Figura 1B ilustra uma modalidade de blocos configurados. Como mostrado, 4 kB de memória de aplicativo 122 armazenaram neles 2 pares de títulos de 1kB, o primeiro par sendo o bloco t4L 124 e o bloco t4R 126, e o segundo par sendo o bloco t5L 128 e o bloco t5R 130. Conforme mostrado, os pares de blocos são divididos em um bloco à esquerda e um à direita. Em outras modalidades, o par de blocos é dividido em um bloco par e um bloco ímpar. Neste exemplo, cada um dos 4 blocos possui elementos dispostos em linhas e colunas. O bloco t4L 124 e o bloco t4R 126 têm K linhas e N colunas de elementos de 4 bytes (por exemplo, dados de ponto flutuante de precisão única), onde K é igual a 8 e N é igual a 32. O bloco t5L 128 e o bloco t5R 130 têm K linhas e N / 2 colunas de elementos de 8 bytes (por exemplo, dados de ponto flutuante de precisão dupla). Como os operandos de precisão dupla têm o dobro da largura da precisão simples, essa configuração é consistente com uma paleta, usada para fornecer opções de bloco, fornecendo no mínimo 2 nomes com armazenamento total de pelo menos 4 kB. Os quatro blocos da Figura 1A usam 4 nomes, cada um nomeando um bloco de 1 kB, enquanto os 2 pares de blocos na Figura 1B podem usar 2 nomes para especificar os blocos emparelhados. Em algumas modalidades, as instruções de bloco aceitam o nome de um bloco emparelhado como um operando. Na operação, os blocos podem ser carregados e armazenados na memória usando as operações de carregamento e armazenamento. Dependendo do esquema de codificação de instrução usado, a quantidade de memória de aplicativo disponível, bem como o tamanho, o número e a configuração dos blocos disponíveis variam.
[0062] Em algumas modalidades, os parâmetros do bloco são definíveis. Por exemplo, uma “paleta” é usada para fornecer opções de blocos. Opções exemplificativas incluem, porém, sem limitação: o número de nomes de blocos, o número de bytes em uma linha de armazenamento, o número de linhas e colunas em um bloco, etc. Por exemplo, uma "altura" máxima (número de linhas) de um bloco pode ser definida como:
[0063] Máximo de Linhas por Bloco = Armazenamento Arquitetado / (O número de nomes de paleta * O número de bytes por linha).
[0064] Como tal, um aplicativo pode ser escrito de forma que um uso fixo de nomes seja capaz de tirar proveito de diferentes tamanhos de armazenamento em implementações.
[0065] A configuração de blocos é feita usando uma instrução de configuração de bloco (“TILECONFIG”), onde um uso de bloco particular é definido em uma paleta selecionada. Esta declaração inclui o número de nomes de blocos a serem usados, o número solicitado de linhas e colunas por nome (bloco) e, em algumas modalidades, o tipo de dados solicitado para cada bloco. Em algumas modalidades, verificações de consistência são realizadas durante a execução de uma instrução TILECONFIG para determinar se ela corresponde às restrições da entrada da paleta.
Tipos exemplificativos de armazenamento de blocos
[0066] A Figura 2 ilustra diversos exemplos de armazenamento de matriz. Em (A), um bloco é armazenado na memória. Conforme mostrado, cada “linha” consiste em quatro elementos de dados compactados. Para chegar à próxima “linha”, um valor de passada é usado. Observe que as linhas podem ser armazenadas consecutivamente na memória. Os acessos à memória passada permitem o acesso de uma linha para a próxima quando o armazenamento do bloco não mapeia a largura da linha da matriz de memória subjacente.
[0067] Os carregamentos de blocos da memória e os armazenamentos na memória são normalmente acessos por passos da memória do aplicativo para linhas compactadas de dados. Instruções exemplares de TILELOAD e TILESTORE, ou outras referências de instrução para a memória do aplicativo como um operando TILE em instruções de loadop, são, em algumas modalidades, reinicializáveis para lidar com (até) 2*linhas de falhas de página, exceções de ponto flutuante não mascaradas e/ou interrupções por instrução.
[0068] Em (B), uma matriz é armazenada em um bloco composto por uma pluralidade de registros, como registros de dados compactados (instrução única, dados múltiplos (SIMD) ou registros de vetor). Neste exemplo, o bloco é sobreposto em três registros físicos. Normalmente, são usados registros consecutivos; entretanto, esse não precisa ser o caso.
[0069] Em (C), uma matriz é armazenada em um bloco em armazenamento não registrado acessível a um circuito fundido multiplica-acumula (FMA) usado em operações de bloco. Este armazenamento pode estar dentro de um FMA ou adjacente ao mesmo. Além disso, em algumas modalidades, discutidas abaixo, o armazenamento pode ser para um elemento de dados e não para uma linha ou bloco inteiro.
[0070] Os parâmetros suportados para a arquitetura TMMA são relatados via CPUID. Em algumas modalidades, a lista de informações inclui uma altura máxima e uma dimensão máxima de SIMD. A configuração da arquitetura TMMA requer a especificação das dimensões de cada bloco, o tamanho do elemento de cada bloco e o identificador da paleta. Essa configuração é feita executando a instrução TILECONFIG.
[0071] A execução bem-sucedida de uma instrução TILECONFIG habilita os operadores TILE subsequentes. Uma instrução TILERELEASEALL limpa a configuração do bloco e desabilita as operações TILE (até que a próxima instrução TILECONFIG seja executada). Em algumas modalidades, XSAVE, XSTORE, etc. são usados na troca de contexto usando blocos. Em algumas modalidades, 2 bits XCR0 são usados em XSAVE, um para metadados TILECONFIG e um bit correspondente aos dados reais de carga útil do bloco.
[0072] TILECONFIG não apenas configura o uso de blocos, mas também define uma variável de estado indicando que o programa está em uma região de código com blocos configurados. Uma implementação pode enumerar restrições em outras instruções que podem ser usadas com uma região de bloco, como nenhum uso de um conjunto de registros existente, etc.
[0073] A saída de uma região de bloco normalmente é feita com a instrução TILERELEASEALL. A mesma não usa parâmetros e invalida rapidamente todos os blocos (indicando que os dados não precisam mais ser salvos ou restaurados) e limpa o estado interno correspondente a estar em uma região de bloco.
[0074] Em algumas modalidades, as operações de bloco zerarão quaisquer linhas e colunas além das dimensões especificadas pela configuração de bloco. Por exemplo, as operações de bloco zerarão os dados além do número configurado de colunas (levando em consideração o tamanho dos elementos) à medida que cada linha é gravada. Por exemplo, com linhas de 64 bytes e um bloco configurado com 10 linhas e 12 colunas, uma operação de gravação de elementos FP32 gravaria cada uma das primeiras 10 linhas com 12*4 bytes com dados de saída/resultado e zeraria os 4*4 bytes restantes em cada linha. As operações de bloco também zeram totalmente quaisquer linhas após as primeiras 10 linhas configuradas. Ao usar blocos de 1K com linhas de 64 bytes, haveria 16 linhas, portanto, neste exemplo, as últimas 6 linhas também seriam zeradas.
[0075] Em algumas modalidades, uma instrução de restauração de contexto (por exemplo, XRSTOR), ao carregar dados, impõe que os dados além das linhas configuradas para um bloco sejam mantidos como zero. Se não houver uma configuração válida, todas as linhas serão zeradas. O XRSTOR de dados de bloco pode carregar lixo nas colunas além das configuradas. Não deve ser possível para o XRSTOR limpar além do número de colunas configuradas porque não há uma largura de elemento associada à configuração do bloco.
[0076] O salvamento de contexto (por exemplo, XSAVE) expõe toda a área de armazenamento TILE ao gravá-lo na memória. Se o XRSTOR carregou dados de lixo na parte mais à direita de um bloco, esses dados serão salvos pelo XSAVE. XSAVE escreverá zeros para linhas além do número especificado para cada bloco.
[0077] Em algumas modalidades, as instruções do bloco são reiniciáveis. As operações que acessam a memória permitem reiniciar após falhas de página. As instruções computacionais que lidam com operações de ponto flutuante também permitem exceções de ponto flutuante não mascaradas, com o mascaramento das exceções controlado por um controle e/ou registrador de situação.
[0078] Para oferecer suporte às instruções de reinicialização após esses eventos, as instruções armazenam informações nos registros de início detalhados abaixo.
Sistemas de Operação (Bloco) de Matriz Suporte de Hardware Exemplificativo
[0079] A Figura 3 ilustra uma modalidade de um sistema que utiliza um acelerador de operações de matriz (bloco). Nessa ilustração, um sistema de processador/processamento hospedeiro 301 comunica comandos 311 (por exemplo, operações de manipulação de matriz, como operações aritméticas ou de manipulação de matriz ou operações de carregamento e armazenamento) para um acelerador de operações de matriz 307. No entanto, isso é mostrado desta forma apenas para fins de discussão. Conforme detalhado posteriormente, esse acelerador 307 pode ser uma parte de um núcleo de processamento. Normalmente, os comandos 311 que são instruções do operador de manipulação de blocos se referem aos blocos como formato de registro-registro (“reg-reg”) ou registro-memória (“reg-mem”). Outros comandos, como TILESTORE, TILELOAD, TILECONFIG, etc., não executam operações de dados em um bloco. Os comandos podem ser instruções decodificadas (por exemplo, microinstruções) ou macroinstruções para o acelerador 307 manipular.
[0080] Nesse exemplo, uma interface de memória coerente 303 é acoplada ao sistema de processamento/processador hospedeiro 301 e acelerador de operações de matriz 307 de modo que eles possam compartilhar memória. As Figuras 4 e 5 mostram diferentes modalidades de como a memória é compartilhada usando um acelerador de operações de matriz. Como mostrado na Figura 4, o processador hospedeiro 401 e o conjunto de circuitos de acelerador de operações de matriz 405 compartilham a mesma memória 403. A Figura 5 ilustra uma modalidade em que o processador hospedeiro 501 e o acelerador de operações de matriz 505 não compartilham memória, mas podem acessar a memória um do outro. Por exemplo, o processador 501 pode acessar a memória do bloco 507 e utilizar sua memória hospedeiro 503 normalmente. Da mesma forma, o acelerador de operações de matriz 505 pode acessar a memória hospedeiro 503, mas mais tipicamente usa sua própria memória 507. Observe que essas memórias podem ser de tipos diferentes.
[0081] Em algumas modalidades, os blocos são suportados usando uma sobreposição sobre registros físicos. Por exemplo, um bloco pode utilizar 16 registros de 1.024 bits, 32 registros de 512 bits, etc., dependendo da implementação. Em algumas modalidades, as operações de matriz utilizam estruturas de dados bidimensionais (2-D) que representam uma ou mais regiões compactadas de memória, como registros. Ao longo desta descrição, essas estruturas de dados 2-D são referidas como blocos ou registros de blocos.
[0082] Em algumas modalidades, o acelerador de operações de matriz 307 inclui uma pluralidade de FMAs 309 acoplados a armazenamentos temporários de dados 305 (em algumas implementações, um ou mais desses armazenamentos temporários 305 são armazenados nos FMAs da grade, como mostrado). Os armazenamentos temporários de dados 305 blocos de armazenamento temporário carregados da memória e/ou blocos a serem armazenados na memória (por exemplo, usando uma instrução tileload ou tilestore). Os armazenamentos temporários de dados podem ser, por exemplo, uma pluralidade de registros. Normalmente, esses FMAs são organizados como uma grade de FMAs 309 encadeados que são capazes de ler e gravar blocos. Nesse exemplo, o acelerador de operações de matriz 307 deve realizar uma operação de multiplicação de matriz usando blocos T0, T1 e T2. Pelo menos um dos blocos está alojado na grade FMA 309. Em algumas modalidades, todos os blocos em uma operação são armazenados na grade FMA 309. Em outras modalidades, apenas um subconjunto é armazenado na grade FMA 309. Conforme mostrado, T1 está alojado e T0 e T2 não. Observe que A, B e C referem-se às matrizes dessas peças que podem ou não ocupar todo o espaço do bloco.
[0083] A Figura 6 ilustra uma modalidade de operação de acumulação de multiplicação de matriz que usa blocos (“TMMA”).
[0084] O número de linhas na matriz (TILE A 601) corresponde ao número de FMAs seriais (encadeados) que compreendem a latência do cálculo em certas modalidades. Uma implementação é livre para recircular em uma grade de altura menor, mas o cálculo permanece o mesmo.
[0085] O vetor de origem/destino vem de um bloco de N linhas (TILE C 605) e a grade de FMAs 611 realiza N operações de vetor-matriz resultando em uma instrução completa realizando uma multiplicação de matriz de blocos. O bloco B 603 é a outra fonte vetorial e fornece termos de “transmissão” aos FMAs em cada etapa.
[0086] Em operação, em algumas modalidades, os elementos da matriz B (armazenados em um bloco B 603) são espalhados pela grade retangular de FMAs. A matriz B (armazenada no bloco A 601) tem seus elementos de linha transformados para coincidir com a dimensão colunar da grade retangular dos FMAs. Em cada FMA na grade, um elemento de A e B são multiplicados e adicionados à soma de entrada (de cima na Figura) e a soma de saída é passada para a próxima linha de FMAs (ou a saída final).
[0087] A latência de uma única etapa é proporcional a K (altura da linha da matriz B) e TMMAs dependentes normalmente têm linhas de origem-destino suficientes (em um único bloco ou entre blocos) para ocultar essa latência. Uma implementação também pode dividir a dimensão M SIMD (elemento de dados compactados) (altura da linha da matriz A) em intervalos de tempo, mas isso simplesmente muda a constante pela qual K é multiplicado. Quando um programa especifica um K menor do que o máximo enumerado pelo TMMA, uma implementação é livre para implementar isso com "mascaramento" ou "saída antecipada".
[0088] A latência de um TMMA inteiro é proporcional a N*K. A taxa de repetição é proporcional a N. O número de MACs por instrução TMMA é N*K*M.
[0089] A Figura 7 ilustra uma modalidade de um subconjunto da execução de uma iteração de uma instrução de acumulação de multiplicação fundida em cadeia. Em particular, isso ilustra o conjunto de circuitos de execução de uma iteração da posição de um elemento de dados compactados do destino. Nessa modalidade, o acúmulo múltiplo fundido encadeado está operando em fontes assinadas em que o acumulador tem 2x o tamanho dos dados de entrada.
[0090] Uma primeira fonte assinada (fonte 1 701) e uma segunda fonte assinada (fonte 2 703) cada uma tem quatro elementos de dados compactados. Cada um desses elementos de dados compactados armazena dados assinados, como dados de ponto flutuante. Uma terceira fonte assinada (fonte 3 709) tem dois elementos de dados compactados, cada um dos quais armazena dados assinados. Os tamanhos da primeira e segunda fontes com sinal 701 e 703 são metade do tamanho da terceira fonte com sinal (valor inicial ou resultado anterior) 709. Por exemplo, a primeira e a segunda fontes assinadas 701 e 703 podem ter elementos de dados compactados de 32 bits (por exemplo, ponto flutuante de precisão única), enquanto a terceira fonte assinada 709 pode ter elementos de dados compactados de 64 bits (por exemplo, ponto flutuante de precisão dupla) .
[0091] Nesta ilustração, apenas as duas posições de elemento de dados compactados mais significativas da primeira e segunda fontes com sinal 701 e 703 e a posição de elemento de dados compactado mais significativa da terceira fonte com sinal 709 são mostradas. Obviamente, as outras posições de elementos de dados compactados também seriam processadas.
[0092] Conforme ilustrado, os elementos de dados compactados são processados em pares. Por exemplo, os dados das posições do elemento de dados compactado mais significativas da primeira e segunda fontes assinadas 701 e 703 são multiplicados usando um circuito multiplicador 705 e os dados das posições do segundo elemento de dados compactado mais significativas da primeira e segunda fontes assinadas 701 e 703 são multiplicados usando um circuito multiplicador 707. Em algumas modalidades, esses circuitos multiplicadores 705 e 707 são reutilizados para outras posições de elementos de dados compactados. Em outras modalidades, circuitos multiplicadores adicionais são usados para que os elementos de dados compactados sejam processados em paralelo. Em alguns contextos, a execução paralela é feita usando pistas que são do tamanho da terceira fonte assinada 709. Os resultados de cada uma das multiplicações são somados usando o conjunto de circuitos de adição 711.
[0093] O resultado da adição dos resultados das multiplicações é adicionado aos dados da posição do elemento de dados compactado mais significativo da fonte assinada 3 709 (usando um adicionador 713 diferente ou o mesmo adicionador 711).
[0094] Finalmente, o resultado da segunda adição é armazenado no destino assinado 715 em uma posição do elemento de dados compactado que corresponde à posição do elemento de dados compactado usada a partir da terceira fonte assinada 709 ou passado para a próxima iteração, se houver. Em algumas modalidades, uma máscara de gravação é aplicada a este armazenamento de modo que se uma máscara de gravação (bit) correspondente for definida, o armazenamento acontece e, se não for definido, o armazenamento não acontece.
[0095] A Figura 8 ilustra uma modalidade de um subconjunto da execução de uma iteração de uma instrução de acumulação de multiplicação fundida em cadeia. Em particular, isso ilustra o conjunto de circuitos de execução de uma iteração da posição de um elemento de dados compactados do destino. Nessa modalidade, o acúmulo múltiplo fundido encadeado está operando em fontes assinadas em que o acumulador tem 2x o tamanho dos dados de entrada.
[0096] Uma primeira fonte assinada (fonte 1 801) e uma segunda fonte assinada (fonte 2 803) cada uma tem quatro elementos de dados compactados. Cada um desses elementos de dados compactados armazena dados assinados, como dados inteiros. Uma terceira fonte assinada (fonte 3 809) tem dois elementos de dados compactados, cada um dos quais armazena dados assinados. Os tamanhos da primeira e da segunda fontes assinadas 801 e 803 são metade do tamanho da terceira fonte assinada 809. Por exemplo, a primeira e a segunda fontes assinadas 801 e 803 poderia ter elementos de dados compactados de 32 bits (por exemplo, ponto flutuante de precisão única), a terceira fonte assinada 809 poderia ter elementos de dados compactados de 64 bits (por exemplo, ponto flutuante de precisão dupla).
[0097] Nesta ilustração, apenas as duas posições de elemento de dados compactados mais significativas da primeira e segunda fontes com sinal 801 e 803 e a posição de elemento de dados compactado mais significativa da terceira fonte com sinal 809 são mostradas. Obviamente, as outras posições de elementos de dados compactados também seriam processadas.
[0098] Conforme ilustrado, os elementos de dados compactados são processados em pares. Por exemplo, os dados das posições do elemento de dados compactado mais significativas da primeira e segunda fontes assinadas 801 e 803 são multiplicados usando um circuito multiplicador 805 e os dados das posições do segundo elemento de dados compactado mais significativas da primeira e segunda fontes assinadas 801 e 803 são multiplicados usando um circuito multiplicador 807. Em algumas modalidades, esses circuitos multiplicadores 805 e 807 são reutilizados para outras posições de elementos de dados compactados. Em outras modalidades, circuitos multiplicadores adicionais são usados para que os elementos de dados compactados sejam processados em paralelo. Em alguns contextos, a execução paralela é feita usando pistas que são do tamanho da terceira fonte assinada (valor inicial ou resultado da iteração anterior) 809. Os resultados de cada uma das multiplicações são adicionados à terceira fonte assinada 809 usando circuitos de adição/saturação 813.
[0099] O circuito 813 de adição/saturação (acumulador) preserva um sinal de um operando quando a adição resulta em um valor muito grande. Em particular, a avaliação de saturação ocorre no resultado de precisão infinita entre a adição de múltiplas vias e a gravação no destino ou na próxima iteração. Quando o acumulador 813 é de ponto flutuante e os termos de entrada são inteiros, a soma dos produtos e o valor de entrada do acumulador de ponto flutuante são transformados em valores de precisão infinita (números de ponto fixo de centenas de bits), a adição dos resultados da multiplicação e a terceira entrada é executada, e um único arredondamento para o tipo de acumulador real é executado.
[00100] A saturação sem sinal significa que os valores de saída são limitados a um número máximo sem sinal para a largura desse elemento (todos 1s). Saturação sinalizada significa que um valor está limitado a estar no intervalo entre um número negativo mínimo e um número positivo máximo para a largura desse elemento (para bytes, por exemplo, o intervalo é de -128 (= - 2^7) a 127(=2^7-1)).
[00101] O resultado da verificação de adição e saturação é armazenado no resultado com sinal 815 em uma posição do elemento de dados compactado que corresponde à posição do elemento de dados compactado usada a partir da terceira fonte com sinal 809 ou passado para a próxima iteração, se houver. Em algumas modalidades, uma máscara de gravação é aplicada a este armazenamento de modo que se uma máscara de gravação (bit) correspondente for definida, o armazenamento acontece e, se não for definido, o armazenamento não acontece.
[00102] A Figura 9 ilustra uma modalidade de um subconjunto da execução de uma iteração de uma instrução de acumulação de multiplicação fundida em cadeia. Em particular, isso ilustra o conjunto de circuitos de execução de uma iteração da posição de um elemento de dados compactados do destino. Nessa modalidade, o acúmulo múltiplo fundido encadeado está operando em uma fonte assinada e uma fonte não assinada em que o acumulador é 4x o tamanho dos dados de entrada.
[00103] Uma primeira fonte assinada (fonte 1 901) e uma segunda fonte não assinada (fonte 2 903), cada uma, têm quatro elementos de dados compactados. Cada um desses elementos de dados compactados possui dados como ponto flutuante ou dados inteiros. Uma terceira fonte assinada (valor inicial ou resultado 915) tem um elemento de dados compactado que armazena dados assinados. Os tamanhos da primeira e segunda fontes 901 e 903 são um quarto da terceira fonte assinada 915. Por exemplo, a primeira e a segunda fontes 901 e 903 podem ter elementos de dados compactados de 16 bits (por exemplo, palavra) e a terceira fonte assinada 915 pode ter elementos de dados compactados de 64 bits (por exemplo, ponto flutuante de precisão dupla ou inteiro de 64 bits)
[00104] Nessa ilustração, as quatro posições do elemento de dados compactados mais significativas da primeira e da segunda fontes 901 e 903 e a posição do elemento de dados compactado mais significativa da terceira fonte assinada 915 são mostradas. Obviamente, outras posições de elementos de dados compactados também seriam processadas, se houver.
[00105] Conforme ilustrado, os elementos de dados compactados são processados em quádruplos. Por exemplo, os dados das posições dos elementos de dados compactados mais significativos da primeira e segunda fontes 901 e 903 são multiplicados usando um circuito multiplicador 905, os dados das posições dos elementos de dados compactados mais significativos da primeira e segunda fontes 901 e 903 são multiplicados usando um circuito multiplicador 907, dados das posições do terceiro elemento de dados compactado mais significativo da primeira e segunda fontes 901 e 903 são multiplicados usando um circuito multiplicador 909, e os dados das posições do elemento de dados compactado menos significativo da primeira e segunda fontes 901 e 903 são multiplicados usando um circuito multiplicador 911. Em algumas modalidades, os elementos de dados compactados assinados da primeira fonte 901 são estendidos por sinal e os elementos de dados compactados não assinados da segunda fonte 903 são estendidos por zero antes das multiplicações.
[00106] Em algumas modalidades, esses circuitos multiplicadores 905-911 são reutilizados para outras posições de elementos de dados empacotados. Em outras modalidades, circuitos multiplicadores adicionais são usados para que os elementos de dados compactados sejam processados em paralelo. Em alguns contextos, a execução paralela é feita usando pistas que são do tamanho da terceira fonte assinada 915. Os resultados de cada uma das multiplicações são somados usando o conjunto de circuitos de adição 913.
[00107] O resultado da adição dos resultados das multiplicações é adicionado aos dados da posição do elemento de dados compactado mais significativo da fonte assinada 3 915 (usando um adicionador 917 diferente ou o mesmo adicionador 913).
[00108] Finalmente, o resultado 919 da segunda adição é armazenado no destino assinado em uma posição do elemento de dados compactado que corresponde à posição do elemento de dados compactado usada a partir da terceira fonte assinada 915 ou passado para a próxima iteração. Em algumas modalidades, uma máscara de gravação é aplicada a este armazenamento de modo que se uma máscara de gravação (bit) correspondente for definida, o armazenamento acontece e, se não for definido, o armazenamento não acontece.
[00109] A Figura 10 ilustra uma modalidade de um subconjunto da execução de uma iteração de instrução de acumulação de multiplicação fundida em cadeia. Em particular, isso ilustra o conjunto de circuitos de execução de uma iteração da posição de um elemento de dados compactados do destino. Nessa modalidade, o acúmulo múltiplo fundido encadeado está operando em uma fonte assinada e uma fonte não assinada em que o acumulador éfd 4x o tamanho dos dados de entrada.
[00110] Uma primeira fonte 1001 assinada e uma segunda fonte 1003 não assinada têm, cada uma, quatro elementos de dados compactados. Cada um desses elementos de dados compactados armazena dados como ponto flutuante ou dados inteiros. Uma terceira fonte assinada 1015 (resultado inicial ou anterior) tem um elemento de dados compactado que armazena dados assinados. Os tamanhos da primeira e segunda fontes são um quarto da terceira fonte assinada 1015 (resultado inicial ou anterior). Por exemplo, a primeira e a segunda fontes podem ter elementos de dados compactados de 16 bits (por exemplo, palavra) e a terceira fonte assinada 1015 (resultado inicial ou anterior) pode ter elementos de dados compactados de 64 bits (por exemplo, ponto flutuante de precisão dupla ou inteiro de 64 bits).
[00111] Nessa ilustração, as quatro posições do elemento de dados compactados mais significativas da primeira fonte com sinal 1001 e a segunda fonte 1003 sem sinal e a posição do elemento de dados compactado mais significativa da terceira fonte com sinal 1015 são mostradas. Obviamente, outras posições de elementos de dados compactados também seriam processadas, se houver.
[00112] Conforme ilustrado, os elementos de dados compactados são processados em quádruplos. Por exemplo, os dados das posições mais significativas de elemento de dados compactados da primeira fonte assinada 1001 e a segunda fonte não assinada 1003 são multiplicados pelo uso de um circuito multiplicador 1005, os dados das segundas posições mais significativas de elemento de dados compactados da primeira fonte assinada 1001 e da segunda fonte não assinada 1003 são multiplicados pelo uso de um circuito multiplicador 1007, os dados das terceiras posições mais significativas de elemento de dados compactados da primeira fonte assinada 1001 e da segunda fonte não assinada 1003 são multiplicados pelo uso de um circuito multiplicador 1009, e os dados das posições menos significativas de elemento de dados compactados da primeira fonte assinada 1001 e da segunda fonte não assinada 1003 são multiplicados pelo uso de um circuito multiplicador 1011. Em algumas modalidades, os elementos de dados compactados assinados da primeira fonte assinada 1001 são estendidos por sinal e os elementos de dados compactados não assinados da segunda fonte não assinada 1003 são estendidos por zero antes das multiplicações.
[00113] Em algumas modalidades, esses circuitos multiplicadores 1005-1011 são reutilizados para outras posições de elementos de dados empacotados. Em outras modalidades, circuitos multiplicadores adicionais são usados para que os elementos de dados compactados sejam processados em paralelo. Em alguns contextos, a execução paralela é feita usando pistas que são do tamanho da terceira fonte assinada 1015 (resultado inicial ou anterior). O resultado da adição dos resultados das multiplicações é adicionado aos dados da posição do elemento de dados compactado mais significativo da terceira fonte assinada 1015 (resultado inicial ou anterior) usando o circuito somador/saturação 1013.
[00114] O circuito de adição/saturação (acumulador) 1013 preserva um sinal de um operando quando a adição resulta em um valor que é muito grande ou muito pequeno para a saturação com sinal. Em particular, a avaliação de saturação ocorre no resultado de precisão infinita entre a adição de múltiplas vias e a gravação no destino. Quando o acumulador 1013 é de ponto flutuante e os termos de entrada são inteiros, a soma dos produtos e o valor de entrada do acumulador de ponto flutuante são transformados em valores de precisão infinita (números de ponto fixo de centenas de bits), a adição dos resultados da multiplicação e a terceira entrada é executada, e um único arredondamento para o tipo de acumulador real é executado.
[00115] O resultado 1019 da verificação de adição e saturação é armazenado no destino assinado em uma posição do elemento de dados compactado que corresponde à posição do elemento de dados compactado usada da terceira fonte assinada 1015 (resultado inicial ou anterior) ou passado para a próxima iteração. Em algumas modalidades, uma máscara de gravação é aplicada a este armazenamento de modo que se uma máscara de gravação (bit) correspondente for definida, o armazenamento acontece e, se não for definido, o armazenamento não acontece.
[00116] A Figura 11 ilustra implementações de SIMD de potência de dois em tamanho em que os acumuladores usam tamanhos de entrada que são maiores que as entradas para os multiplicadores de acordo com uma modalidade. Observe a fonte (para os multiplicadores) e os valores do acumulador podem ser valores assinados ou não assinados. Para um acumulador com 2X tamanhos de entrada (em outras palavras, o valor de entrada do acumulador é duas vezes o tamanho dos tamanhos de elementos de dados compactados das fontes), a tabela 1101 ilustra diferentes configurações. Para origens de tamanho de byte, o acumulador usa valores de palavra ou de ponto flutuante de meia precisão (HPFP) com tamanho de 16 bits. Para fontes de tamanho de palavra, o acumulador usa valores inteiros de 32 bits ou valores de ponto flutuante de precisão única (SPFP) com tamanho de 32 bits. Para fontes de tamanho inteiro de 32 bits ou SPFP, o acumulador usa valores de ponto flutuante de precisão dupla ou de 64 bits (DPFP) de 64 bits.
[00117] Para um acumulador com 4X tamanhos de entrada (em outras palavras, o valor de entrada do acumulador é quatro vezes o tamanho dos tamanhos de elementos de dados compactados das fontes), a tabela 1103 ilustra diferentes configurações. Para fontes de tamanho de byte, o acumulador usa valores inteiros de 32 bits ou valores de ponto flutuante de precisão única (SPFP) com tamanho de 32 bits. Para fontes de tamanho de palavra, o acumulador usa valores inteiros de 64 bits ou de ponto flutuante de precisão dupla (DPFP) que são de 64 bits em algumas modalidades.
[00118] Para um acumulador com 8X tamanhos de entrada (em outras palavras, o valor de entrada do acumulador é oito vezes o tamanho dos tamanhos de elementos de dados compactados das fontes), a tabela 1105 ilustra uma configuração. Para origens de tamanho de byte, o acumulador usa inteiros de 64 bits.
[00119] Como sugerido anteriormente, o conjunto de circuitos de operações de matriz pode ser incluído em um núcleo ou como um acelerador externo. A Figura 12 ilustra uma modalidade de um sistema que utiliza conjuntos de circuitos de operações de matriz. Nesta ilustração, várias entidades são acopladas a uma interconexão de anel 1245.
[00120] Uma pluralidade de núcleos, núcleo 0 1201, núcleo 1 1203, núcleo 2 1205 e núcleo N 1207 fornecem suporte de instrução não baseado em bloco. Em algumas modalidades, o conjunto de circuitos de operações de matriz 1251 é fornecido em um núcleo 1203, e, em outras modalidades, os conjuntos de circuitos de operações de matriz 1211 e 1213 são acessíveis na interconexão de anel 1245.
[00121] Além disso, um ou mais controladores de memória 1223-1225 são fornecidos para se comunicarem com as memórias 1233 e 1231 em nome dos conjuntos de circuitos de operações de núcleos e/ou matriz.
[00122] A Figura 13 ilustra uma modalidade de um pipeline de núcleo de processador que suporta operações de matriz que usa blocos. A previsão de ramificação e o conjunto de circuitos de decodificação 1303 realizam a previsão de ramificações de instruções, a decodificação de instruções e/ou ambas a partir de instruções armazenadas no armazenamento de instruções 1301. Por exemplo, as instruções detalhadas no presente documento podem ser armazenadas no armazenamento de instruções. Em algumas implementações, circuitos separados são usados para previsão de ramificação e, em algumas modalidades, pelo menos algumas instruções são decodificadas em uma ou mais micro-operações, pontos de entrada de microcódigo, microinstruções, outras instruções ou outros sinais de controle usando o microcódigo 1305. O conjunto de circuitos de previsão e decodificação de ramificação 1303 pode ser implementado usando vários mecanismos diferentes. Exemplos de mecanismos adequados incluem, porém, sem limitação, tabelas de consulta, implementações de hardware, matrizes lógicas programáveis (PLAs), memórias somente leitura de microcódigo (ROMs), etc.
[00123] O conjunto de circuitos de previsão e decodificação de ramificação 1303 são acoplados para alocar/renomear 1307 o conjunto de circuitos que está acoplado, em algumas modalidades, ao conjunto de circuitos de agendador 1309. Em algumas modalidades, esses circuitos fornecem renomeação de registro, alocação de registro e/ou funcionalidade de programação executando um ou mais dos seguintes: 1) renomear valores de operandos lógicos para valores de operandos físicos (por exemplo, uma tabela de alias de registro em algumas modalidades), 2) alocar bits de status e sinalizadores para a instrução decodificada, e 3) programar a instrução decodificada para execução em conjunto de circuitos de execução fora de um conjunto de instruções (por exemplo, usando uma estação de reserva em algumas modalidades).
[00124] O conjunto de circuitos de agendador 1309 representa qualquer número de planejadores diferentes, incluindo estações de reservas, janela de instrução central, etc. O conjunto de circuitos de agendador 1309 está acoplado a, ou inclui, arquivo (ou arquivos) de registro físico 1315. Cada um dos arquivos de registro físico 1315 representa um ou mais arquivos de registro físicos, em que aqueles diferentes armazenam um ou mais tipos de dados diferentes, como número inteiro escalar, ponto de flutuação escalar, número inteiro de empacotamento, ponto de flutuação empacotado, número inteiro de vetor, ponto de flutuação de vetor, estado (por exemplo, um apontador de instrução que é o endereço da próxima instrução a ser executada), blocos, etc. Em uma modalidade, o arquivo (ou arquivos) de registro físico 1315 compreende conjunto de circuitos de registros de vetor, conjunto de circuitos de registros de máscara de gravação e conjunto de circuitos de registros escalares. Esses circuitos de registro podem fornecer registros de vetor arquitetônicos, registros de máscara de vetor e registros de finalidade geral. O arquivo (ou arquivos) de registro físico 1315 é sobreposta por um circuito de retirada 1317 para ilustrar várias maneiras nas quais a renomeação de registro e a execução fora de ordem podem ser implantadas (por exemplo, com uso de um armazenamento temporário de reordenamento (ou armazenamentos temporários de reordenamento) e um arquivo de registro de desativação (ou arquivos de registro de desativação); com uso de um arquivo futuro (ou arquivos futuros), um armazenamento temporário de histórico (ou armazenamentos temporários de históricos) e um arquivo de registro de desativação (ou arquivos de registro de desativação); com uso de mapas de registro e um grupamento de registros; etc.). O circuito de retirada 1317 e o (s) arquivo (s) de registro físico 1315 são acoplados aos circuitos de execução 1311.
[00125] Embora a renomeação de registro seja descrita no contexto de execução fora de ordem, deve-se compreender que a renomeação de registro pode ser usada em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também possa incluir unidades de instrução e de cache de dados separadas e uma unidade de cache L2 compartilhado, 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.
[00126] O conjunto de circuitos de execução 1311 é um conjunto de um ou mais circuitos de execução, incluindo conjunto de circuitos escalares 1321, conjunto de circuitos de vetor/SIMD 1323 e conjuntos de circuitos de operações de matriz 1327, bem como conjunto de circuitos de acesso à memória 1325 para acessar cache 1313. Os circuitos de execução 3362 realizam várias operações (por exemplo, turnos, adição, subtração, multiplicação) e em vários tipos de dados (por exemplo, ponto de flutuação escalar, número inteiro de compactação, ponto de flutuação compactado, número inteiro de vetor, ponto de flutuação de vetor). Embora algumas modalidades possam incluir várias unidades de execução dedicadas a funções ou conjuntos de funções específicas, outras modalidades podem incluir apenas uma unidade de execução ou múltiplas unidades de execução que realizam todas as funções. O conjunto de circuitos escalares 1321 realiza operações escalares, o conjunto de circuitos de vetor/SIMD 1323 realiza operações de vetor/SIMD e conjuntos de circuitos de operações de matriz 1327 realizam operações de matriz (bloco) detalhadas no presente documento.
[00127] A título de exemplo, a arquitetura de núcleo de emissão/execução fora de ordem e de renomeação de registro exemplificativa fora de ordem pode implantar um pipeline conforme a seguir: 1) um circuito de busca de instrução executa estágios de decodificação de busca e comprimento; 2) o circuito de ramificação e decodificação 1303 realiza um estágio de decodificação; 3) o circuito de alocar/renomear 1307 realiza um estágio de alocação e renomeação; 4) o circuito agendador 1309 realiza um estágio de agendamento; 5) arquivo (ou arquivos) de registro físico (acoplado a, ou incluído no conjunto de circuitos agendador 1309 e conjunto de circuitos de alocar/renomear 1307 e uma unidade de memória realizar uma leitura de registro/estágio de leitura de memória; o conjunto de circuitos de execução 1311 realiza uma fase de execução; 6) uma unidade de memória e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico realizam um estágio de gravação/gravação na memória; 7) várias unidades podem estar envolvidas no estágio de tratamento de exceções; e 8) uma unidade de retirada e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico executam um estágio de confirmação.
[00128] O núcleo pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86 (com algumas extensões que foram adicionadas a novas versões); o conjunto de instruções de MIPS de Tecnologias MIPS de Sunnyvale, CA; o conjunto de instruções (com extensões adicionais opcionais como NEON) de ARM Holdings de Sunnyvale, CA), incluindo a instrução descrita (ou instruções descritas) no presente documento. Em uma modalidade, o núcleo 1390 inclui lógica para suportar uma extensão de conjunto de instruções de dados compactados (por exemplo, AVX1, AVX2), permitindo, dessa forma, que as operações usadas por vários aplicativos de multimídia sejam realizadas com uso de dados compactados.
[00129] Deve-se compreender que o núcleo pode suportar múltiplos encadeamentos (executar dois ou mais conjuntos paralelos de operações ou encadeamentos) e pode fazer isso de várias maneiras incluindo múltiplos encadeamentos segmentados por tempo, múltiplos encadeamentos simultâneos (em que um único núcleo físico fornece um núcleo lógico para cada um dentre os encadeamentos que o núcleo físico está múltiplos encadeamentos simultaneamente) ou uma combinação dos mesmos (por exemplo, busca e decodificação segmentada por tempo e múltiplos encadeamentos simultâneos, doravante, como na tecnologia Intel® Hyperthreading).
[00130] A Figura 14 ilustra uma modalidade de um pipeline de núcleo de processador que suporta operações de matriz que usa blocos. A previsão de ramificação e o conjunto de circuitos de decodificação 1403 realizam a previsão de ramificações de instruções, a decodificação de instruções e/ou ambas a partir de instruções armazenadas no armazenamento de instruções 1401. Por exemplo, as instruções detalhadas no presente documento podem ser armazenadas no armazenamento de instruções. Em algumas implementações, circuitos separados são usados para previsão de ramificação e, em algumas modalidades, pelo menos algumas instruções são decodificadas em uma ou mais micro-operações, pontos de entrada de microcódigo, microinstruções, outras instruções ou outros sinais de controle usando o microcódigo 1405. O conjunto de circuitos de previsão e decodificação de ramificação 1403 pode ser implementado usando vários mecanismos diferentes. Exemplos de mecanismos adequados incluem, porém, sem limitação, tabelas de consulta, implementações de hardware, matrizes lógicas programáveis (PLAs), memórias somente leitura de microcódigo (ROMs), etc.
[00131] O conjunto de circuitos de previsão e decodificação de ramificação 1403 são acoplados para alocar/renomear 1407 o conjunto de circuitos que está acoplado, em algumas modalidades, ao conjunto de circuitos de agendador 1409. Em algumas modalidades, esses circuitos fornecem renomeação de registro, alocação de registro e/ou funcionalidade de programação executando um ou mais dos seguintes: 1) renomear valores de operandos lógicos para valores de operandos físicos (por exemplo, uma tabela de alias de registro em algumas modalidades), 2) alocar bits de status e sinalizadores para a instrução decodificada, e 3) programar a instrução decodificada para execução em conjunto de circuitos de execução fora de um conjunto de instruções (por exemplo, usando uma estação de reserva em algumas modalidades).
[00132] O conjunto de circuitos de agendador 1409 representa qualquer número de planejadores diferentes, incluindo estações de reservas, janela de instrução central, etc. O conjunto de circuitos de agendador da unidade (ou unidades) de agendador 1409 está acoplado a, ou inclui, arquivo (ou arquivos) de registro físico 1415. Cada um dos arquivos de registro físico 1415 representa um ou mais arquivos de registro físicos, em que aqueles diferentes armazenam um ou mais tipos de dados diferentes, como número inteiro escalar, ponto de flutuação escalar, número inteiro de empacotamento, ponto de flutuação empacotado, número inteiro de vetor, ponto de flutuação de vetor, estado (por exemplo, um apontador de instrução que é o endereço da próxima instrução a ser executada), blocos, etc. Em uma modalidade, o arquivo (ou arquivos) de registro físico 1415 compreende conjunto de circuitos de registros de vetor, conjunto de circuitos de registros de máscara de gravação e conjunto de circuitos de registros escalares. Esses circuitos de registro podem fornecer registros de vetor arquitetônicos, registros de máscara de vetor e registros de finalidade geral. O arquivo (ou arquivos) de registro físico 1415 é sobreposta por um circuito de retirada 1417 para ilustrar várias maneiras nas quais a renomeação de registro e a execução fora de ordem podem ser implantadas (por exemplo, com uso de um armazenamento temporário de reordenamento (ou armazenamentos temporários de reordenamento) e um arquivo de registro de desativação (ou arquivos de registro de desativação); com uso de um arquivo futuro (ou arquivos futuros), um armazenamento temporário de histórico (ou armazenamentos temporários de históricos) e um arquivo de registro de desativação (ou arquivos de registro de desativação); com uso de mapas de registro e um grupamento de registros; etc.). O circuito de retirada 1417 e o (s) arquivo (s) de registro físico 1415 são acoplados aos circuitos de execução 1411.
[00133] Embora a renomeação de registro seja descrita no contexto de execução fora de ordem, deve-se compreender que a renomeação de registro pode ser usada em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também possa incluir unidades de instrução e de cache de dados separadas e uma unidade de cache L2 compartilhado, 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.
[00134] O conjunto de circuitos de execução 1411 um conjunto de um ou mais circuitos de execução 1427 e um conjunto de um ou mais circuitos de acesso de memória 1425 para acessar o cache 1413. Os circuitos de execução 1427 realizam operações de matriz (bloco) detalhadas no presente documento.
[00135] A título de exemplo, a arquitetura de núcleo de emissão/execução fora de ordem e de renomeação de registro exemplificativa fora de ordem pode implantar um pipeline conforme a seguir: 1) um circuito de busca de instrução executa estágios de decodificação de busca e comprimento; 2) o circuito de ramificação e decodificação 1403 realiza um estágio de decodificação; 3) o circuito de alocar/renomear 1407 realiza um estágio de alocação e renomeação; 4) o circuito agendador 1409 realiza um estágio de agendamento; 5) arquivo (ou arquivos) de registro físico (acoplado a, ou incluído no conjunto de circuitos agendador 1409 e conjunto de circuitos de alocar/renomear 1407 e uma unidade de memória realizar uma leitura de registro/estágio de leitura de memória; o conjunto de circuitos de execução 1411 realiza uma fase de execução; 6) uma unidade de memória e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico realizam um estágio de gravação/gravação na memória; 7) várias unidades podem estar envolvidas no estágio de tratamento de exceções; e 8) uma unidade de retirada e a unidade (ou unidades) de arquivo (ou arquivos) de registro físico executam um estágio de confirmação.
[00136] O núcleo pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86 (com algumas extensões que foram adicionadas a novas versões); o conjunto de instruções de MIPS de Tecnologias MIPS de Sunnyvale, CA; o conjunto de instruções (com extensões adicionais opcionais como NEON) de ARM Holdings de Sunnyvale, CA), incluindo a instrução descrita (ou instruções descritas) no presente documento. Em uma modalidade, o núcleo 1490 inclui lógica para suportar uma extensão de conjunto de instruções de dados compactados (por exemplo, AVX1, AVX2), permitindo, dessa forma, que as operações usadas por vários aplicativos de multimídia sejam realizadas com uso de dados compactados.
[00137] Deve-se compreender que o núcleo pode suportar múltiplos encadeamentos (executar dois ou mais conjuntos paralelos de operações ou encadeamentos) e pode fazer isso de várias maneiras incluindo múltiplos encadeamentos segmentados por tempo, múltiplos encadeamentos simultâneos (em que um único núcleo físico fornece um núcleo lógico para cada um dentre os encadeamentos que o núcleo físico está múltiplos encadeamentos simultaneamente) ou uma combinação dos mesmos (por exemplo, busca e decodificação segmentada por tempo e múltiplos encadeamentos simultâneos, doravante, como na tecnologia Intel® Hyperthreading).
Modelo
[00138] Ao longo desta descrição, os dados são expressos usando o modelo de dados de linha principal. Os usuários da coluna principal devem traduzir os termos de acordo com sua orientação. A Figura 15 ilustra um exemplo de uma matriz expressada em formato de linha principal e formato de coluna principal. Como mostrado, a matriz A é uma matriz 2x3. Quando essa matriz é armazenada em formato de linha principal, os elementos de dados de uma linha são consecutivos. Quando essa matriz é armazenada em formato de coluna principal, os elementos de dados de uma coluna são consecutivos. É uma propriedade bem conhecida das matrizes que AΤ * BΤ = (BA)Τ, onde T sobrescrito significa transformação. Ler os dados de coluna principal como dados de linha principal resulta na matriz parecida com a matriz de transformação.
[00139] Em algumas modalidades, a semântica da linha principal é utilizada no hardware, e os dados principais da coluna são para trocar a ordem do operando com o resultado sendo transformações da matriz, mas para leituras subsequentes da coluna principal da memória é a matriz correta, não transformada.
[00140] Por exemplo, se houver duas matrizes principais de coluna para multiplicar:
Figure img0001
[00141] As matrizes de entrada seriam armazenadas na memória linear (coluna principal) como:
Figure img0002
[00142] Lendo essas matrizes como linha principal com dimensões 2x3 e 3x2, elas apareceriam como:
Figure img0003
[00143] Trocando a ordem e a multiplicação da matriz:
Figure img0004
[00144] A matriz de transformação está fora e pode então ser armazenada na ordem principal da linha:
Figure img0005
[00145] e usado em cálculos subsequentes principais da coluna, é a matriz não transformada correta:
Figure img0006
Uso Exemplificativo
[00146] A Figura 16 ilustra um exemplo de uso de matrizes (blocos). Neste exemplo, a matriz C 1601 inclui dois blocos, a matriz A 1603 inclui um bloco e a matriz B 1605 inclui dois blocos. Essa figura mostra um exemplo do laço interno de um algoritmo para calcular a multiplicação de uma matriz. Nesse exemplo, dois blocos de resultados, tmm0 e tmm1, da matriz C 1601 são usados para acumular os resultados intermediários. Um bloco da matriz A 1603 (tmm2) é reutilizado duas vezes, pois é multiplicado por dois blocos da matriz B 1605. Ponteiros para carregar uma nova matriz A (bloco) e duas novas matrizes B (blocos) a partir das direções indicadas pelas setas. Um laço externo, não mostrado, ajusta os ponteiros para os blocos C.
[00147] O código exemplificativo, conforme mostrado, inclui o uso de uma instrução de configuração de blocos e é executado para configurar o uso de blocos, carregar blocos, um laço para processar os blocos, armazenar blocos na memória e liberar o uso de blocos.
[00148] A Figura 17 ilustra uma modalidade de uso de matrizes (blocos). Em 1701, o uso de blocos é configurado. Por exemplo, uma instrução TILECONFIG é executada para configurar o uso do bloco, incluindo a configuração de um número de linhas e colunas por bloco. Normalmente, pelo menos uma matriz (bloco) é carregada da memória em 1703. Pelo menos uma operação de matriz (blocos) é realizada em 1705 usando as matrizes (blocos). Em 1707, pelo menos uma matriz (bloco) é armazenada na memória e uma troca de contexto pode ocorrer em 1709.
Configuração Exemplificativa Suporte de Hardware de Configuração de Bloco
[00149] Conforme discutido acima, o uso de blocos normalmente precisa ser configurado antes do uso. Por exemplo, o uso total de todas as linhas e colunas pode não ser necessário. Não só não configurar essas linhas e colunas economiza energia em algumas modalidades, mas a configuração pode ser usada para determinar se uma operação irá gerar um erro. Por exemplo, uma multiplicação de matriz da forma (N x M) * (L x N) normalmente não funcionará se M e L não forem iguais.
[00150] Antes de usar matrizes usando blocos, em algumas modalidades, o suporte de blocos deve ser configurado. Por exemplo, quantas linhas e colunas por bloco, blocos que devem ser usados, etc. são configurados. Uma instrução TILECONFIG é uma melhoria para o próprio computador, pois fornece suporte para configurar o computador para usar um acelerador de matriz (como parte de um núcleo do processador ou como um dispositivo externo). Em particular, uma execução da instrução TILECONFIG faz com que uma configuração seja recuperada da memória e aplicada às configurações de matriz (bloco) dentro de um acelerador de matriz.
Configuração de Uso do Bloco
[00151] A Figura 18 ilustra suporte para configuração do uso de blocos de acordo com uma modalidade. Uma memória 1801 contém a descrição do bloco 1803 das matrizes (blocos) a serem suportadas.
[00152] Os recursos de execução de instrução 1811 de um processador/núcleo 1805 armazenam aspectos de uma descrição de bloco 1803 em configurações de bloco 1817. As configurações de bloco 1817 incluem tabela de paleta 1813 para detalhar quais blocos para uma paleta estão configurados (o número de linhas e colunas em cada bloco) e uma marcação de que o suporte de matriz está em uso. Em particular, os recursos de execução de instrução 1811 são configurados para usar blocos conforme especificado pelas configurações de bloco 1817. Os recursos de execução de instrução 1811 também podem incluir um registro específico de máquina ou registro de configuração para indicar o uso de blocos. Valores adicionais, como valores em uso e iniciais, também são definidos. As configurações de bloco 1817 utilizam registro (ou registros) 1819 para armazenar informações de uso de blocos e de configuração.
[00153] A Figura 19 ilustra uma modalidade de uma descrição das matrizes (blocos) que devem ser suportadas. Isso é a descrição que deve ser armazenado após uma execução de uma instrução STTILECFG. Nesse exemplo, cada campo é um byte. No byte [0], uma ID de paleta 1901 é armazenada. A ID de paleta é usada para indexar uma tabela de paleta 1813 que armazena, por ID de paleta, um número de bytes in um bloco, e bytes por linha dos blocos que são associados com essa ID, conforme definido pela configuração.
[00154] O byte 1 armazena um valor que deve ser armazenado em um registro “startRow” 1903 e byte 2 armazena um valor que deve ser armazenado em um registro, startP 1905. Para suportar instruções de reinício após esses eventos, as instruções armazenam informações nesses registros. Para suportar instruções de reinício após eventos de ruptura, tais como os detalhados acima, as instruções armazenam informações nesses registros. O valor startRow indica a linha que deveria ser usada para reinício. O valor startP indica a posição dentro da linha para operações de armazenamento quando pares são usados e, em algumas modalidades, indica a metade inferior da linha (no bloco inferior de um par) ou metade superior da linha (no bloco mais alto de um par). Geralmente, a posição na linha (a coluna) não é necessária.
[00155] Com a exceção de TILECONFIG e STTILECFG, executar com sucesso as instruções de matriz (bloco) definirá tanto startRow quanto startP como zero.
[00156] Toda vez que uma instrução de matriz (bloco) interrompida não é reiniciada, é de responsabilidade do software zerar os valores de startRow e startP. Por exemplo, manipuladores de exceção de ponto flutuante não mascarado podem decidir finalizar a operação no software e mudar o valor de contador do programa para outra instrução, geralmente a próxima instrução. Nesse caso, o manipulador de exceção de software precisa zerar os valores de startRow e startP na exceção apresentada pelo sistema operacional antes de retomar o programa. O sistema operacional carregará, subsequentemente, os valores pelo uso de uma instrução de restauração.
[00157] O Byte 3 armazena uma indicação de pares (1b por bloco) de blocos 1907.
[00158] Os bytes 16-17 armazenam o número de linhas 1913 e colunas 1915 para o bloco 0, bytes 18-19 armazenar o número de linhas e colunas para o bloco 1, etc. Em outras palavras, cada grupo de 2 bytes especifica um número de linhas e colunas para um bloco. Se um grupo de 2 bytes não é usado para especificar parâmetros de bloco, os mesmos devem ter o valor zero. Especificar os parâmetros de bloco para mais blocos do que o limite da implementação ou o limite de paleta resulta em uma falha. Os blocos não configurados são definidos para um estado inicial com 0 linhas, 0 colunas.
[00159] Finalmente, a configuração na memória termina tipicamente com uma delineação de terminação, tal como apenas zeros para diversos bytes consecutivos.
Bloco exemplificativo e armazenamento de configuração de bloco
[00160] As Figures 20(A) a 20(D) ilustram exemplos de registro (ou registros) 1819. A Figura 20(A) ilustra uma pluralidade de registros 1819. Como mostrado, cada bloco (TMM0 2001 ... TMMN 2003) tem um registro separado em que cada registro armazena um tamanho de linha e coluna para tal bloco particular. StartP 2011 e StartRow 2013 são armazenados em registros separados. Um ou mais registros de situação 2015 são definidos (por exemplo, TILES_CONFIGURED = 1) para indicar que blocos estão configurados para uso.
[00161] A Figura 20(B) ilustra uma pluralidade de registros 1819. Como mostrado, cada bloco tem registros separados para suas linhas e colunas. Por exemplo, configuração de linhas TMM0 2021, configuração de colunas TMM0 2023, StartP 2011 e StartRow 2013 são armazenados em registros separados. Um ou mais registros de situação 2015 são definidos (por exemplo, TILES_CONFIGURED = 1) para indicar que blocos estão configurados para uso.
[00162] A Figura 20(C) ilustra um único registro 1819. Como mostrado, esse registro armazena configurações de bloco (linhas e colunas por bloco) 2031, StartP 2011 e StartRow 2013 são armazenado em registro único como registros de dados compactados. Um ou mais registros de situação 2015 são definidos (por exemplo, TILES_CONFIGURED = 1) para indicar que blocos estão configurados para uso.
[00163] A Figura 20(D) ilustra uma pluralidade de registros 1819. Como mostrado, um único registro armazena configuração de blocos (linhas e colunas por bloco) 2031. StartP e StartRow são armazenados em registros separados 2011 e 2013. Um ou mais registros de situação 2015 são definidos (por exemplo, TILES_CONFIGURED = 1) para indicar que blocos estão configurados para uso.
[00164] Outras combinações são contempladas, tal como combinar os registros de início em um único registro onde os mesmos são mostrados separadamente, etc.
Agendamento para um Arranjo Sistólico
[00165] Conforme mencionado acima, o hardware para Multiplicação de Matriz Geral (mais conhecido como GEMM) é uma boa opção para melhorar a computação de pico (e eficiência energética) de certas aplicações, como aprendizado profundo. A enorme demanda computacional de aplicações baseadas em Redes Neurais Profundas (DNNs) pode levar ao uso de hardware (por exemplo, acelerador) empregando vários (por exemplo, centenas) de elementos de processamento, por exemplo, circuitos fundidos de adição e multiplicação (FMA). No entanto, (por exemplo, DNN) aceleradores podem ser otimizados para um padrão de fluxo de dados muito regular de multiplicações de matriz densa. Em certas modalidades, um acelerador usa uma implementação de matriz sistólica para maximizar o desempenho e a eficiência de área/energia. Uma matriz sistólica pode incluir matrizes bidimensionais densas otimizadas para fluxos de dados muito regulares.
[00166] Em certos hardwares, a decodificação e execução de uma instrução faz com que o hardware de arranjo sistólico configurável (por exemplo, circuito acelerador de operações de matriz) calcule C = A * B + C, em que A, B e C são, cada um, matrizes bidimensionais, e para cada elemento de C, o hardware calcula um produto de pontos de uma linha de matriz de entrada A com uma coluna de matriz B.
[00167] Em certas modalidades, um circuito acelerador de operações de matriz toma como entrada uma matriz (de dimensões × , em que M e K são números inteiros), matriz B (de dimensões K × N, em que M e K são números inteiros), e matriz C (de dimensão × N, em que M e N são números inteiros), e, em seguida, realiza uma operação (por exemplo, um adição e multiplicação fundidas) em elementos respectivos para produzir um resultante que é armazenado em uma matriz (por exemplo, de volta na matriz C de dimensão × N, em que M e N são números inteiros). Em uma modalidade, M, K, e N são menores ou iguais a 16. Em certas modalidades, o circuito acelerador de operações de matriz realiza a seguinte operação (por exemplo, em números de ponto flutuante):
Figure img0007
[00168] A Figura 21 ilustra uma modalidade de um sistema que utiliza um acelerador de operações de matriz (bloco) 2107 de acordo com modalidades da revelação. Em certas modalidades, um sistema de processador/processamento hospedeiro 2101 (por exemplo, um núcleo de processador de hardware, por exemplo, núcleo de processador 3390 na Figura 33B) comunica comandos (por exemplo, operações de manipulação de matrizes tais como operações de manipulação de aritméticas ou de matrizes, operações de carregamento e/ou armazenamento) a um acelerador de operações de matriz 2107. No entanto, isso é mostrado desta forma apenas para fins de discussão. Conforme detalhado no presente documento, o acelerador 2107 pode ser uma parte de um núcleo de processamento. Os comandos 311 que são instruções do operador de manipulação de blocos podem se referir aos blocos como formato de registro-registro (“reg-reg”) ou registro-memória (“reg-mem”). Outros comandos, como TILESTORE, TILELOAD, TILECONFIG, etc., não executam operações de dados em um bloco em certas modalidades. Os comandos podem ser instruções decodificadas (por exemplo, micro-operações) ou macroinstruções para o acelerador 2107 manipular. Em uma modalidade, um núcleo de processador de hardware envia micro-ops para o acelerador de operações de matriz (bloco) 2107 em resposta a uma instrução de operações de matriz que é executada pelo núcleo de processador de hardware.
[00169] Em uma modalidade, o conjunto de circuitos de estação de reserva (RS) 2111 envia comandos (por exemplo, micro-ops) para o acelerador de operações de matriz 2107. Em certas modalidades, o acelerador de operações de matriz 2107 é uma unidade de matriz de bloco (TMU). Em certas modalidades, o acelerador de operações de matriz 2107 inclui um conjunto de circuitos do controlador de acelerador de matriz 2113. Em uma modalidade, o controlador de acelerador de matriz (por exemplo, conjunto de circuitos 2113) é para controlar as operações e fluxo de dados para dentro, para fora e/ou dentro do acelerador de operações de matriz 2107. O acelerador de operações de matriz 2107 (por exemplo, conjunto de circuitos do controlador de acelerador de matriz 2113) pode incluir conjunto de circuitos de despacho 2115, por exemplo, para controlar o despacho de solicitações recebidas (por exemplo, comandos) a partir do sistema de processador/processamento hospedeiro 2101 para um ou mais componentes do acelerador de operações de matriz 2107. Um exemplo de conjunto de circuitos de despacho é discutido abaixo em referência à Figura 23.
[00170] O acelerador de operações de matriz 2107 representado inclui armazenamentos temporários de dados (por exemplo, registros) 2105. Em certas modalidades, armazenamentos temporários de dados (por exemplo, registros) 2105 são configuráveis para armazenar uma matriz respectiva, por exemplo, em uma primeira pluralidade de registros (por exemplo, bloco) que representa uma primeira matriz bidimensional (por exemplo, bloco marcado como T0 que armazena a matriz A no armazenamento 2105), uma segunda matriz bidimensional (por exemplo, bloco marcado como T1 que armazena a matriz B no armazenamento 2105), uma terceira matriz bidimensional (por exemplo, bloco marcado como T3 que armazena a matriz C no armazenamento 2105), etc. O sistema (por exemplo, sistema de processador/processamento hospedeiro 2101) pode incluir uma interface (por exemplo, coerente) de memória 2103 (por exemplo, unidade de cache de dados) para enviar e receber dados (por exemplo, ao contrário de comandos) entre o sistema de processador/processamento hospedeiro 2101 (por exemplo, como um núcleo Fora de Ordem (OoO)) e o acelerador de operações de matriz 2107.
[00171] Em certas modalidades, o acelerador de operações de matriz 2107 utiliza uma grade de elementos de processamento 2109 (por exemplo, circuitos de adição e multiplicação fundidos (FMA)) para realizar operações. Em uma modalidade, o conjunto de circuitos de despacho 2115 controla o envio de dados (por exemplo, um ou mais valores a partir de um bloco) a partir de armazenamentos temporários de dados 2105 (por exemplo, registros que formam um bloco) para a grade de elementos de processamento 2109 (por exemplo, grade de circuitos de FMA). Em certas modalidades, a grade de elementos de processamento 2109 é uma grade bidimensional de elementos de processamento, por exemplo, grade bidimensional de circuitos de elemento de processamento 2200 na Figura 22.
[00172] A Figura 22 ilustra uma modalidade de um circuito acelerador de operações de matriz 2200 que compreende uma grade bidimensional de circuitos de elemento de processamento 2206-1 a 2206-4. Em certas modalidades, armazenamento de dados 2205 (por exemplo, arquivo de registro) inclui uma pluralidade de registros, por exemplo, que tem um respectivo conjunto de registros (por exemplo, bloco) que representa uma primeira matriz bidimensional de entrada (A), uma segunda matriz bidimensional de entrada (B) e uma terceira matriz bidimensional de entrada (C), e armazenamento do resultado. Em uma modalidade, a matriz bidimensional de saída resultante é armazenada nos registros que formam a terceira matriz bidimensional de entrada (C), por exemplo, sobrescrevendo os valores para a matriz bidimensional de entrada (C) após terem sido utilizados pelo circuito acelerador de operações de matriz 2200. O circuito acelerador de operações de matriz 2200 representado inclui uma pluralidade de circuitos de roteamento/armazenamento temporário 2402-1 a 2402-4 para rotear e armazenar os valores de entrada (por exemplo, a partir da matriz A e matriz B) para os elementos de processamento de acordo com a operação a ser realizada.
[00173] Observe que as figuras no presente documento podem não representar todos os acoplamentos de comunicação de dados (por exemplo, conexões). Uma pessoa de habilidade comum na técnica observará que isso é para não obscurecer certos detalhes nas figuras. Observe que uma seta dupla nas figuras pode não precisar de comunicação de via dupla, por exemplo, pode indicar comunicação de via única (por exemplo, para ou a partir de tal componente ou dispositivo). Qualquer ou todas as combinações de caminhos de comunicações podem ser utilizadas em certas modalidades no presente documento. Uma única linha pode incluir múltiplos caminhos na mesma, por exemplo, múltiplos canais. Por exemplo, a linha 2210 pode incluir múltiplos caminhos (por exemplo, “X”, em que X é qualquer número inteiro positivo), por exemplo, um caminho para um valor a partir da matriz A e um caminho para um valor a partir da matriz B.
[00174] Sob solicitação para realizar uma operação (por exemplo, pela decodificação e execução de uma instrução para causar tal operação), circuito acelerador de operações de matriz 2200 deve enviar valores a partir da matriz A e matriz B para um respectivo circuito de roteamento em certas modalidades. Por exemplo, a operação pode ser para multiplicar matriz A pela matriz B e, em seguida, adicionar um resultante respectivo a um valor correspondente a partir da matriz C. Em uma modalidade, o primeiro circuito de roteamento 2204-1 deve receber um primeiro valor A[0][0] a partir da matriz A[linha][coluna] (o valor do índice de linha zero e índice de coluna zero) e difundir tal valor para cada elemento de processamento 2206-1 em tal linha para uma primeira entrada de cada um dos elementos de processamento 2206-1 e um conjunto de valores a partir da primeira linha de matriz B, e enviar tais valores para uma respectiva segunda entrada de cada um dos elementos de processamento 2206-1 (por exemplo, de modo que o elemento de processamento 2212 receba o valor a partir de B[0][0], elemento de processamento 2214 receba o valor a partir de B[0][1], etc.). Em uma modalidade, o elemento de processamento 2212 fornece em sua saída 2216 o resultante da multiplicação de A[0][0] * B[0][0] e elemento de processamento 2214 fornece em sua saída 2218 o resultante da multiplicação de A[0][0] * B[0][1]. As saídas (por exemplo, saída 2216 e 2218) são enviadas para o circuito de roteamento/armazenamento temporário 2 2204-2.
[00175] Em uma modalidade, o segundo circuito de roteamento/armazenamento temporário 2204-2 deve receber um segundo valor A[0][1] a partir da matriz A[linha][coluna] (o valor a partir do índice de linha zero e índice de coluna um) e difunde tal valor para cada elemento de processamento 2206-2 nessa linha para uma primeira entrada de cada um dos elementos de processamento 2206-2, um conjunto de valores da segunda linha de matriz B e enviar tais valores para uma respectiva segunda entrada de cada um dos elementos de processamento 2206-1 (por exemplo, de modo que o elemento de processamento 2222 receba o valor a partir de B[1][0], o elemento de processamento 2224 receba o valor a partir de B[1][1], etc.), e uma respectiva saída das saídas da linha de elementos de processamento 2206-1 acima. Em uma modalidade, elemento de processamento 2222 fornece em sua saída 2226 o resultante da multiplicação de A[0][1] * B[1][0] adicionado à saída 2216 (A[0][0] * B[0][0]), e elemento de processamento 2224 fornece em sua saída 2228 o resultante da multiplicação de A[0][1] * B[1][1] adicionado à saída 2218 (A[0][0] * B[0][1]). Em certas modalidades, essa operação de adição e multiplicação fundidas é continuada por cada linha de elementos de processamento 2206-3 to 2206-4 para gerar uma saída 2230 e uma saída 2232 a partir de elementos de processamento 2206-4. Observe que quatro é um número exemplificativo de linhas de elementos de processamento (por exemplo, e linhas e colunas de cada uma das matrizes A, B e C), mas pode ser qualquer pluralidade de linhas. À medida que o final das linhas de elementos de processamento para cada circuito acelerador de operações de matriz 2200 foi alcançado, o circuito de adição de polarização 2208 deve adicionar um elemento respectivo a partir da matriz C a partir da entrada 2234 (por exemplo, um conjunto de portas de entrada paralelas) (por exemplo, um elemento respectivo a partir da primeira linha da matriz C) e armazenar o resultante no elemento respectivo da matriz C (por exemplo, em um posição de elemento respectivo da primeira linha de matriz C) por meio da saída 2236 (por exemplo, um conjunto de portas de saída paralelas). Por exemplo, o primeiro elemento a partir da primeira linha de matriz C que é adicionado ao resultante da saída 2230 e tal resultado armazenado de volta no primeiro local de elemento da primeira linha de matriz C, e o segundo elemento a partir da primeira linha da matriz C que é adicionado ao resultante da saída 2232 e, tal resultado armazenado de volta no segundo local de elemento da primeira linha de matriz C. Isso pode ser repetido para cada linha de matriz A para gerar toda a multiplicação de matriz A * matriz B (por exemplo, e adicionar uma polarização a partir da matriz C nos resultantes respectivos).
[00176] Certas modalidades de conjunto de circuitos, assim, usam um arranjo bidimensional (2D) de elementos de processamento (PEs) (por exemplo, unidades FMA), por exemplo, com alguns armazenamentos temporários de entrada e saída e conjunto de circuitos de lógica de controle local. Em uma modalidade, cada PE recebe algumas de suas entradas a partir de um armazenamento de dados, tais como um arquivo de registro e outras entradas a partir de outros PEs e a linha final de PEs envia sua saída de volta para o armazenamento de dados. Assim, os PEs formam um pipeline nessas modalidades. Um usuário pode, geralmente, pretender realizar uma sequência de operações em um grande conjunto de elementos de dados (por exemplo, mais elementos de dados do que PEs). Portanto, os elementos podem ser inseridos no topo do arranjo para iniciar o pipeline, e permitir que os dados fluam para baixo, através do pipeline (fornecendo entradas adicionais em vários estágios do pipeline, quando apropriado).
[00177] Em uma modalidade, cada exemplo de um elemento de processamento é um circuito de multiplicação e acumulação (FMA) fundido que inclui um circuito multiplicador (por exemplo, que toma uma primeira entrada a, uma segunda entrada b, e produz uma saída resultante) e um circuito somador (por exemplo, que adiciona saída resultante do circuito multiplicador como uma primeira entrada com uma terceira entrada c para produzir um resultante). O controle do despacho de operações e/ou dados na grade bidimensional de circuitos de elemento de processamento (por exemplo, circuitos de FMA) pode ser realizado pelo conjunto de circuitos de despacho.
[00178] A Figura 23 ilustra conjunto de circuitos de despacho 2300 de um circuito acelerador de operações de matriz de acordo com modalidades da revelação. Em uma modalidade, o conjunto de circuitos de despacho 2300 é parte de conjunto de circuitos de despacho 2115 na Figura 21. Em certas modalidades, o conjunto de circuitos de despacho 2300 é para selecionar uma dentre múltiplas operações pendentes (por exemplo, microoperações (micro-ops)) com multiplexador 2302 e enviar a operação selecionada na saída 2304 para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22). Na Figura 23, as operações pendentes são recebidas na entrada 2306 para a fila 2308. A entrada 2306 pode ser de uma estação de reserva (por exemplo, conjunto de circuitos de RS 2111 na Figura 21).
[00179] Em uma modalidade, conjunto de circuitos de despacho recebe solicitações de operação (por exemplo, uma para cada instrução ou conjunto de micro-operações para uma instrução única) a partir de um conjunto de circuitos de estação de reserva Fora-de-Ordem (programa) e executa as operações em ordem, por exemplo, sob a suposição de que duas operações consecutivas (por exemplo, instruções) podem ser executadas no (por exemplo, pipeline de) circuito acelerador de operações de matriz uma após a outra sem limitações de dependência, por exemplo, em que o conjunto de circuitos fora-de-ordem se encarrega da dependência de uma operação de matriz com blocos A e B enquanto a dependência entre operações de matriz sucessivas é manuseada pela fila de despacho. Em uma modalidade, o conjunto de circuitos de RS deve despachar a próxima operação (por exemplo, micro-operação (µop)) para o circuito acelerador de operações de matriz após a dependência ser resolvida. Uma fila 2308, como representada, inclui oito intervalos, embora seja entendido que um único intervalo ou qualquer pluralidade de intervalos podem ser usados.
[00180] Em certas modalidades, entradas em fila 2308 armazenam informações para identificar o bloco (ou blocos) de entrada utilizado e/ou bloco (ou blocos) de saída em armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 ou armazenamentos temporários de dados 2205) e/ou as operações a serem realizadas pela grade (por exemplo, grade de FMA 2109 na Figura 21. Em uma modalidade, cada entrada em fila 2308 armazena um valor (ou um indicador para tal valor) de um bit válido (v), operação (por exemplo, µop) código operacional, dimensões de blocos (por exemplo, M, K, N), controles (por exemplo, zero controles), valor de ID do bloco (por exemplo, um valor para cada um dentre as localizações do bloco A, bloco B e bloco C nos armazenamentos temporários de dados). Cabeçalho principal pode ser um ponteiro para o início da operação atual (por exemplo, primeira micro-operação de uma pluralidade de micro-operações de uma instrução única) que é despachada para o circuito acelerador de operações de matriz. Cauda principal pode ser um ponteiro para o fim da operação atual (por exemplo, última micro-operação da pluralidade de micro-operações de tal instrução única) que é despachada para o circuito acelerador de operações de matriz. O bit válido (v) pode ser usado para marcar uma operação (por exemplo, microoperação) como concluída, por exemplo, quando a operação solicitada para tal operação é concluída pelo circuito acelerador de operações de matriz.
[00181] Em certas modalidades, conjunto de circuitos de agendamento 2310 é incluído para selecionar uma operação (por exemplo, um cabeçalho de uma pluralidade de microoperações) para enviar para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22), por exemplo, para começar operações para tal operação selecionada.
[00182] A Figura 24 ilustra o conjunto de circuitos de agendamento 2400 de conjunto de circuitos de despacho de um circuito acelerador de operações de matriz de acordo com modalidades da revelação. Como observado acima, uma operação (por exemplo, micro-operações) pode ser Updated C M×N + A M×N × B K×N O conjunto de circuitos de agendamento pode aguardar por um máximo de: M (por exemplo, o número de ciclos nos quais os armazenamentos temporários (por exemplo, armazenamento temporário 2105 na Figura 21 ou armazenamento temporário 2205 na Figura 22) do primeiro arranjo (por exemplo, primeira linha (por exemplo, primeira linha de PEs 2212, 2214, ... 2206-1 na Figura 22) ou primeiro coluna) são ocupados (por exemplo, e um barramento é usado para transferir o bloco A para o circuito acelerador de operações de matriz), K (por exemplo, o número de ciclos em que os recursos (por exemplo, barramento) que carregam o bloco B no circuito acelerador de operações de matriz estão ocupados), e um vão mínimo pré-selecionado (por exemplo, 4 ciclos) entre despachos. Na Figura 24, a saída 2402 é afirmada (por exemplo, como um valor de um em vez de zero) para causar o despacho de uma próxima operação (por exemplo, micro-operação) para o circuito acelerador de operações de matriz. Em certas modalidades, o conjunto de circuitos de agendamento 2400 inclui um contador K 2404 para afirmar um valor de “um” para K durante a contagem regressiva do número de ciclos em que os recursos (por exemplo, barramento) que carregam o bloco B no circuito acelerador de operações de matriz estão ocupados, e, em seguida, um “zero” quando concluída (por exemplo, valor predeterminado para o contador K), um contador M 2406 para afirmar um valor de “um” para M durante a contagem regressiva do número de ciclos em que os recursos (por exemplo, barramento) que carregam o bloco A no circuito acelerador de operações de matriz estão ocupados, e, em seguida, um zero quando concluída (por exemplo, valor predeterminado para o contador M), e um contador de mínimo de ciclos 2408 (por exemplo, quatro ciclos como um exemplo, porém qualquer ciclo único ou pluralidade de ciclos podem ser selecionados) para realizar contagem regressiva do mínimo de ciclos entre despachos de operações (por exemplo, micro-operações) na saída 2402 (por exemplo, em que um despacho é “um” afirmado na saída 2402) para afirmar um valor de “um” durante a contagem regressiva do número mínimo de ciclos e, em seguida, um zero quando concluída. Em uma modalidade, a porta lógica OR 2412 deve afirmar um quando qualquer uma de suas entradas for uma e a porta lógica NOT 2414 deve inverter a saída da porta lógica OR 2412. Como um exemplo, uma vez que cada contador conta regressivamente até seu limiar de acionamento (por exemplo, zero), causará uma afirmação de um zero em sua respectiva linha para porta lógica OR 2412 (por exemplo, até que um despacho ocorra para 2402), e, assim, porta lógica NOT 2414 gerará como saída um “um” (1) quando todos os contadores 2404, 2406 e 2408 afirmarem um zero. Após cada despacho, o contador (ou contadores) pode ser redefinido para seu valor original (por exemplo, diferente de zero).
[00183] Opcionalmente, um controle de despacho de substituição 2410 pode ser utilizado, por exemplo, para afirmar um zero em um modo que não substitui o despacho de uma operação e para afirmar um “um” (1) em um modo que substitui o despacho de uma operação (e, assim, causa uma saída de um zero a partir da saída 2402).
[00184] Em uma modalidade, um acionador para selecionar uma próxima operação (por exemplo, micro-operação) para execução pelo circuito acelerador de operações de matriz (por exemplo, conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22)) é dado por MAX{4,M, K}, em que M é o número de linhas da matriz A e K é o número de colunas da matriz A (ou linhas da matriz B) e 4 é um limite inferior no número de ciclos para um (por exemplo, micro-operação) execução. Observe que, em certas modalidades, o conjunto de circuitos de agendamento deve aguardar pelo menos K ciclos (por exemplo, quando há apenas um único barramento para o bloco B ser carregado no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22)), (por exemplo, permitindo uma busca de apenas uma única linha de B por ciclo). Em algumas dessas modalidades, K define o número de acumulações, que é o número de linhas da matriz B, e, assim, o barramento de B será ocupado pelos próximos K ciclos, e nenhuma microoperação nova pode ser despachada durante esse tempo. Em certas de esses modalidades, M define o número de ciclos no qual as linhas da matriz A usam o barramento de A, por exemplo, de modo que a próxima micro-operação possa ser despachada apenas após tanto o contador de M quanto o contador de K serem zerados. Além disso, um número mínimo de ciclos (por exemplo, 4) pode ser desejado entre despachos consecutivos, por exemplo, em que a matriz C deve ser lida no ciclo 1, acumulados com o resultado de multiplicação (por exemplo, A x B) no ciclo 2, e ser gravada de volta para os armazenamentos temporários de dados no ciclo 3, e mais um ciclo antes que possa ser lida novamente no ciclo 4. Isso pressupõe que as etapas acima estão em um único ciclo. Em outras modalidades, as etapas podem tomar mais de um ciclo cada.
[00185] Em certas modalidades, conjunto de circuitos de agendamento 2400 é para liberar um bit válido na fila correspondente (por exemplo, fila 2308 na Figura 23) quando uma operação (por exemplo, micro-operação) é selecionada e/ou despachada para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22) para execução e/ou atualização de seu cabeçalho-ponteiro na fila correspondente (por exemplo, fila 2308 na Figura 23) (por exemplo, para tornar a próxima operação disponível para decisão de seleção).
[00186] A Figura 25 ilustra conjunto de circuitos de agendamento, de conjunto de circuitos de despacho de um circuito acelerador de operações de matriz, que é comutável a partir de um modo de agendamento de linha de base para um modo de agendamento que reutiliza uma matriz de entrada de acordo com modalidades da revelação. Matriz de entrada nessas modalidades se refere a uma matriz "B" de entrada (por exemplo, bloco), mas isso é meramente ilustrativo e outras matrizes (por exemplo, blocos) podem ser programadas de forma semelhante.
[00187] O conjunto de circuitos de agendamento 2500 inclui uma entrada 2502 para receber um valor que identifica a próxima operação (por exemplo, microoperação) que deve ser realizada no circuito acelerador de operações de matriz e, particularmente, a próxima operação que é selecionada e/ou despachada para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22) para execução. Em uma modalidade, a entrada 2502 recebe a saída 2304 da Figura 23.
[00188] Em certas modalidades, a entrada 2502 identifica uma próxima operação (por exemplo, e os blocos de entrada/saída correspondentes) que deve ser despachada pelo conjunto de circuitos de agendamento 2500. Em certas dessas modalidades, a entrada 2502 inclui um valor de identificação (ID) que representa um bloco (por exemplo, um conjunto de registros que forma um bloco nos armazenamentos temporários de dados (por exemplo, registros) 2105 na Figura 21). O conjunto de circuitos de agendamento 2500 inclui armazenamento 2504 que identifica um bloco (ou blocos) atual sendo processado pelo circuito acelerador de operações de matriz, e, particularmente, pode identificar o bloco (ou blocos) atual que tem seus dados carregados (ou seus dados estão sendo carregados para dentro/para fora do mesmo) no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22). Em uma modalidade, o conjunto de circuitos de agendamento 2500 inclui um armazenamento de bloco válido 2506 (por exemplo, bloco B) para indicar se o valor de identificação no armazenamento 2504 é um valor válido ou um valor inválido (por exemplo, o hardware está carregando outro bloco e, assim, outro valor de identificação).
[00189] O conjunto de circuitos de agendamento 2500 inclui um circuito de comparação 2508 para comparar (i) o bloco atual (por exemplo, bloco B) que é carregado no conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22) com (ii) o próximo bloco (por exemplo, próximo bloco B) que deve ser carregado no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22). Em uma modalidade, essa comparação é feita ao comparar o valor de identificação fornecido pelo conjunto de circuitos de agendamento para cada bloco, por exemplo, o valor de identificação fornecido na entrada do bloco nos armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 na Figura 21) de acelerador de operações de matriz, por exemplo, em que o valor de identificação é fornecido a cada bloco antes de os valores para o bloco serem inseridos no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22).
[00190] Em certas modalidades, o circuito de comparação 2508 deve comparar (i) o bloco de entrada (por exemplo, seu valor de ID nos armazenamentos temporários de dados 2105 na Figura 21) (por exemplo, “novo bloco B”) a partir da entrada 2502 para uma próxima operação para (ii) o bloco atual (por exemplo, bloco B) que está atualmente carregado no conjunto de circuitos de operação (por exemplo, atualmente carregado na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22), por exemplo, o valor de ID para armazenamentos temporários de dados 2105 na Figura 21 para um bloco que está atualmente carregado na grade de FMA 2109 na Figura 21. Em uma modalidade, o circuito de comparação 2508 deve comparar o valor de ID de bloco atual em uso ao valor de ID do próximo bloco a ser usado no conjunto de circuitos de operação e, se for igual, afirmar um valor (por exemplo, “um”) em que são iguais. Em uma modalidade, o circuito de comparação 2508 deve comparar o valor de ID de bloco atual em uso a partir do armazenamento 2504 ao valor de ID do próximo bloco a ser usado no conjunto de circuitos de operação, e, se forem iguais, afirmar um valor (por exemplo, “um”) em que são iguais quando o armazenamento 2506 também indica que o valor de identificação no armazenamento 2504 é um valor válido, por exemplo, e avalia um valor diferente (por exemplo, zero) de outro modo.
[00191] Em certas modalidades, quando (i) o bloco atual (por exemplo, bloco B) que está carregado no conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22) é igual (ii) ao próximo bloco (por exemplo, próximo bloco B) que deve ser carregado no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22), o mesmo valor de bloco (por exemplo, mesmo bloco B) é afirmado (por exemplo, um “um”(1)) para causar (por exemplo, por meio da saída 2510) comutação para um modo de agendamento que reutiliza a matriz de entrada, por exemplo, reutilização do bloco B já armazenado dentro do conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22), por exemplo, sem recarregar o mesmo a partir de armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 na Figura 21) separados do conjunto de circuitos de operação.
[00192] Em certas modalidades, circuito de comparação 2508 deve gerar como saída um primeiro valor (por exemplo, “um”) na saída 2510 quando (i) o bloco atual (por exemplo, bloco B) que está carregado no conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22) for igual (ii) ao próximo bloco (por exemplo, próximo bloco B) que deve ser carregado no conjunto de circuitos de operação. A saída 2510 pode, em seguida, ser inserida na porta lógica NOT 2512, e tal saída e a saída do contador K 2516 para porta lógica AND 2514 (por exemplo, que tem uma saída de apenas “um” quando todas as entradas são um “um”(1)) e na porta lógica OR 2522.
[00193] Em certas modalidades, o conjunto de circuitos de agendamento 2500 inclui um contador K 2516 para afirmar um valor de “um” para K durante a contagem regressiva do número de ciclos em que os recursos (por exemplo, barramento) que carregam o bloco B no circuito acelerador de operações de matriz estão ocupados, e, em seguida, um “zero” quando concluída (por exemplo, valor predeterminado para o contador K), um contador M 2518 para afirmar um valor de “um” para M durante a contagem regressiva do número de ciclos em que os recursos (por exemplo, barramento) que carregam o bloco A no circuito acelerador de operações de matriz estão ocupados, e, em seguida, um zero quando concluída (por exemplo, valor predeterminado para o contador M), e um contador de mínimo de ciclos 2520 (por exemplo, quatro ciclos como um exemplo, porém qualquer ciclo único ou pluralidade de ciclos podem ser selecionados) para realizar contagem regressiva do mínimo de ciclos entre despachos de operações (por exemplo, micro-operações) na saída 2526 (por exemplo, em que um despacho é “um” afirmado na saída 2526) para afirmar um valor de “um” durante a contagem regressiva do número mínimo de ciclos e, em seguida, um zero quando concluída. Em uma modalidade, a porta lógica OR 2522 deve afirmar um quando qualquer uma de suas entradas for uma e a porta lógica NOT 2524 deve inverter a saída da porta lógica OR 2522. Como um exemplo, uma vez que cada contador faz a contagem regressiva para seu limite de acionamento (por exemplo, zero) e (assim a porta lógica AND 2514 produz um zero quando o contador K 2516 afirma um zero), ele causará uma afirmação de um zero em sua respectiva linha para a porta lógica OR 2522 (por exemplo, até que ocorra um despacho para 2526), e, assim, a porta lógica NOT 2514 produzirá “um” (i) quando todos os contadores 2516, 2518 e 2520 afirmam um zero ou (ii) se a saída 2510 for um para uma correspondência junto com os contadores 2518 e 2520 afirmando um zero. Após cada despacho, o contador (ou contadores) pode ser redefinido para seu valor original (por exemplo, não zero) (por exemplo, conforme definido pelas dimensões de blocos A e B). Em uma modalidade, quando o contador K 2516, contador M 2518 e contador de ciclos mínimos 2520 avaliam um zero em suas respectivas linhas para porta lógica OR 2528, geram como saída um zero para a porta lógica NOT 2530, que, em seguida, gera como saída um “um” (em vez de um zero, de outro modo) como uma redefinição para fazer com que o armazenamento de bloco válido 2506 (por exemplo, bloco B) indique que o valor de identificação no armazenamento 2504 é um valor inválido (por exemplo, o hardware está carregando outro bloco no conjunto de circuitos de operação).
[00194] Opcionalmente, um controle de despacho de substituição 2532 pode ser utilizado, por exemplo, para afirmar um zero em um modo que não substitui o despacho de uma operação e para afirmar um “um” (1) em um modo que substitui o despacho de uma operação (e, assim, causa uma saída de um zero a partir da saída 2526).
[00195] Como observado acima, o circuito de agendamento pode selecionar entre (i) um primeiro (por exemplo, rendimento eficiente) modo de agendamento que reutiliza a matriz de entrada, por exemplo, reutilização de um bloco já armazenado dentro do conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22), por exemplo, sem recarregar o mesmo a partir de armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 na Figura 21) separados do conjunto de circuitos de operação, e (ii) um segundo modo de agendamento que não reutiliza um bloco já armazenado dentro do conjunto de circuitos de operação.
[00196] Em uma modalidade, um acionador para selecionar uma próxima operação (por exemplo, micro-operação) para execução pelo circuito acelerador de operações de matriz (por exemplo, conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22)) no (i) primeiro (por exemplo, rendimento eficiente) modo de agendamento é dado por MAX{4,M } e (ii) no segundo modo de agendamento é dado por MAX{4,M, K}, em que M é o número de linhas da matriz A, e K é o número de colunas da matriz A, e 4 é um limite inferior no número de ciclos para uma execução (por exemplo, micro-operação). Observe que, em certas modalidades, o conjunto de circuitos de agendamento deve aguardar pelo menos K ciclos (por exemplo, quando há apenas um único barramento para o bloco B ser carregado no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22)), (por exemplo, permitindo uma busca de apenas uma única linha de B por ciclo). Em algumas dessas modalidades, K define o número de acumulações, que é o número de linhas da matriz B, e, assim, o barramento de B será ocupado pelos próximos K ciclos, e nenhuma microoperação nova pode ser despachada durante esse tempo. Em certas de esses modalidades, M define o número de ciclos no qual as linhas da matriz A usam o barramento de A, por exemplo, de modo que a próxima micro-operação possa ser despachada apenas após tanto o contador de M quanto o contador de K serem zerados. Além disso, um número mínimo de ciclos (por exemplo, 4) pode ser desejado entre despachos consecutivos, por exemplo, em que a matriz C deve ser lida no ciclo 1, acumulados com o resultado de multiplicação (por exemplo, A x B) no ciclo 2, e ser gravada de volta para os armazenamentos temporários de dados no ciclo 3, e mais um ciclo antes que possa ser lida novamente no ciclo 4. Isso pressupõe que as etapas acima estão em um único ciclo. Em outras modalidades, as etapas podem levar mais de um ciclo a cada s. Em certas modalidades, o bloco B é a matriz B em A M×K × B K×N Por exemplo, agendamento de acordo com se TMUL next.B = TMUL TMM.B então aguarda máximo de (M ou Mínimo de ciclos), ou então aguarda máximo de (M, K ou Mínimas de ciclos).
[00197] Em certas modalidades, na realização de uma operação de matriz na M,K,N, transferência da matriz B é para K (por exemplo, até 16) ciclos (por exemplo, o período de transferência de B), e durante o período de transferência de B, próxima operação (por exemplo, TMUL next(M,K,N) que usa a mesma matriz B) pode iniciar a execução quando seu armazenamento temporário de A estiver livre. Por exemplo, quando o período de transferência de B de M,K,N termina, a operação retorna ao normal e a matriz B será lida e transferida a partir dos armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 na Figura 21) (por exemplo, bloco matriz armazenamento temporário (TMB)) para o conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22) (por exemplo, multiplicador de matriz de bloco (TMM)). Em uma modalidade, em que o uso é contínuo, o conjunto de circuitos (por exemplo, conjunto de circuitos de agendamento) (por exemplo, com operações de um circuito de RS OoO) impedirá a recuperação e reatribuição do armazenamento temporário (por exemplo, armazenamento temporário de B), por exemplo, e nenhum caching é necessário. Assim, um computador que utiliza o primeiro (por exemplo, rendimento eficiente) modo de agendamento é melhorado não apenas por ter a capacidade de despachar uma operação mais cedo, mas, quando uma leitura (por exemplo, por meio de um barramento de B) dos dados dos armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 na Figura 21) é eliminada, reduzindo consumo de energia.
[00198] Em certas modalidades, quando dados dos armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 na Figura 21) são armazenados no conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22), os armazenamentos temporários de dados podem ser recuperados, por exemplo, desalocados do uso e, em seguida, realocados para armazenar uma matriz (por exemplo, novo bloco B) para uma operação diferente (por exemplo, instrução diferente). Em certas modalidades, quando em um primeiro (por exemplo, rendimento eficiente) modo de agendamento que reutiliza a matriz de entrada, por exemplo, reutilização de um bloco já armazenado dentro do conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22), recuperação do
[00199] Em uma modalidade, quando em um primeiro (por exemplo, rendimento eficiente) modo de agendamento que reutiliza a matriz de entrada, conjunto de circuitos de agendamento deve impedir a recuperação do armazenamento temporário (por exemplo, armazenamento temporário for matriz B nas conjunto de circuitos de operações) entre a execução da operação anterior (por exemplo, instrução única) e a próxima operação (por exemplo, instrução única), e/ou quando em um segundo modo de agendamento que não reutiliza a matriz de entrada, o conjunto de circuitos de agendamento deve permitir recuperação do armazenamento temporário (por exemplo, armazenamento temporário para matriz B em conjunto de circuitos de operações) entre a execução da operação anterior (por exemplo, instrução única) e a próxima operação (por exemplo, instrução única). Em uma modalidade, durante o segundo modo de agendamento, que não reutiliza a matriz de entrada, o conjunto de circuitos de agendamento começa a recuperação do armazenamento temporário (por exemplo, armazenamento temporário para matriz B em conjunto de circuitos de operações) entre a execução da operação anterior (por exemplo, instrução) e a próxima operação (por exemplo, instrução). O circuito de acelerador de operações de matriz (por exemplo, conjunto de circuitos de controlador) pode atribuir um valor de identificação para cada pluralidade de registros que representa uma matriz bidimensional de entrada, e a verificação da possibilidade de o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior que ser igual à segunda matriz bidimensional de entrada pode ser comparar os respectivos valores de identificação para matrizes bidimensionais de entrada correspondentes a partir da operação anterior (por exemplo, instrução) e da próxima operação (por exemplo, instrução). O circuito de acelerador de operações de matriz (por exemplo, conjunto de circuitos de controlador) pode atribuir um mesmo valor de ID para uma matriz que tem o mesmo valor. O circuito de acelerador de operações de matriz (por exemplo, conjunto de circuitos de controlador) pode atribuir diferentes valores de ID para matrizes que têm diferentes valores. Por exemplo, uma primeira operação (por exemplo, instrução) pode ter um primeiro valor atribuído a uma matriz bidimensional de entrada, uma segunda operação (por exemplo, instrução) pode ter um mesmo valor atribuído quando é a mesma matriz bidimensional de entrada e diferente valor atribuído quando é uma matriz bidimensional de entrada diferente do que na primeira operação.
[00200] Em certas modalidades, conjunto de circuitos de agendamento 2500 é para liberar um bit válido na fila correspondente (por exemplo, fila 2308 na Figura 23) quando uma operação (por exemplo, micro-operação) é selecionada e/ou despachada para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22) para execução e/ou atualização de seu cabeçalho-ponteiro na fila correspondente (por exemplo, fila 2308 na Figura 23) (por exemplo, para tornar a próxima operação disponível para decisão de seleção). Em uma modalidade, a reutilização dos dados de armazenamento temporário B é apenas permitida se a operação que carrega os valores de B no armazenamento temporário B ainda estiver sendo executada quando a “reutilização possível”, segunda operação chega e, em seguida, tal segunda operação é verificada por continuidade com a primeira operação, de modo que a segunda operação use o valor recuperado apenas quando a continuidade com a primeira operação for encontrada, por exemplo, se a primeira operação que usa valores de B que devem ser reutilizados não for concluída, seu armazenamento temporário B não puder ser recuperado e, portanto, puder ser usado pela segunda operação (por exemplo, desde que haja continuidade).
[00201] Em certas modalidades, o primeiro (por exemplo, rendimento eficiente) modo de agendamento que reutiliza a matriz de entrada é usado para acelerar o desempenho de um (por exemplo, ponto flutuante) circuito acelerador de operações de matriz de FP. Deve ser entendido que o agendamento revelado no presente documento não está restrito ao projeto de circuito acelerador de operações de matriz, mas pode ser estendido a outra microarquitetura de latência variada com limitações herdadas. Além disso, pode ser estendido para o caso em que um circuito FMA assume uma latência de 1 ciclo.
[00202] Em certas modalidades, uma matriz pode ter uma dimensão que é maior do que o hardware disponível (por exemplo, conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22)). Certas modalidades no presente documento utilizam uma pluralidade (por exemplo, três) de contadores para agendamento (por exemplo, despacho das operações (por exemplo, micro-operações)), a saber Kpar, Kímpar e Mc manuseando as limitações da unidade e um mecanismo para verificar a reutilização da matriz BK×N. Além disso, certas modalidades neste documento implementam uma fila secundária para operações de manuseio (por exemplo, micro-ops) no caso de uma dimensão (por exemplo, K) ser maior do que o hardware disponível (por exemplo, K> 8), por exemplo, em que essas operações (por exemplo, micro-ops)são despachada com alta prioridade para uma segunda rodada no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22).
[00203] Em uma modalidade, o circuito de agendamento mantém uma primeira linha B0 ∈ BK× N durante M ciclos e difunde cada um dos M elementos da primeira coluna da matriz AM× K em um ciclo diferente. Após um ciclo ou número de ciclos (por exemplo, 2 ciclos), o próximo arranjo de FMA (por exemplo, linha ou coluna) de uma grade de FMA é ocupado durante M ciclos que calculam a segunda operação FMA parcial em certas modalidades. Esse modo sequencial de pipeline é executado até que K operações FMA parciais sejam calculadas através de K arranjos FMA em certas modalidades. Em uma modalidade, a utilização da grade FMA é restrita por três limitações principais, a saber (1) número de linhas no destino, (2) largura de banda do barramento B (por exemplo, 512 bits por ciclo) e (3) o número de arranjos FMA (por exemplo, linhas ou colunas). Como um exemplo para (1) no caso de M< um dado valor (por exemplo, 16), é possível enviar a próxima operação (por exemplo, micro-operação) para execução após M ciclos, uma vez que o primeiro arranjo FMA0 está disponível e livre após M ciclos. Por exemplo, no caso de M = 12, o primeiro FMA0 é usado durante os primeiros 12 ciclos. No entanto, o primeiro resultado do WB de destino é calculado por 16 ciclos. Isso significa que a próxima operação (por exemplo, micro-operação) pode ser despachada antes que a primeira operação (por exemplo, micro-operação) tenha sido concluída neste exemplo. Como um exemplo para (2), a grade FMA está restrita a receber uma única linha de matriz BK×N em um ciclo. Em uma modalidade, os somadores dos circuitos FMA têm um determinado número de (por exemplo, dois) ciclos de latência, o que significa que é necessário enviar até um valor limite (por exemplo, 512 bits) de barramento de B uma vez a cada dois ciclos. Assim, certas modalidades executam duas operações (por exemplo, micro-operação) simultaneamente e mantêm o barramento de B ocupado a cada ciclo. Ademais, certas modalidades mantêm a linha da matriz BK×N em um armazenamento temporário para reutilização ao longo de instruções consecutivas. Como um exemplo para (3), a arquitetura da grade FMA suporta até um determinado número (por exemplo, 16) adição parcial de produto (por exemplo, K≤ 16) enquanto a grade FMA contém menos do que o número dado (por exemplo, 8) arranjos FMA (por exemplo, linhas ou colunas). No caso K≤ 8, o resultado está pronto após 16 ciclos, enquanto no caso K> 8 uma solução alternativa é necessária.
[00204] A Figura 26 ilustra o conjunto de circuitos de despacho 2600 de um circuito acelerador de operações de matriz para múltiplas passagens de acordo com modalidades da revelação. O conjunto de circuitos de despacho 2600 que inclui duas filas, a saber a fila principal 2610 e a fila de segunda passagem 2612. Em uma modalidade, a fila principal 2610 mantém as informações significativas para a execução da operação em conjunto de circuitos de operação (por exemplo, grade FMA 2109 na Figura 21 ou circuitos PE na Figura 22).
[00205] Em uma modalidade, a fila de segunda passagem 2612 mantém operação (por exemplo, micro-operações) que são elegíveis para uma segunda passagem no conjunto de circuitos de operação (por exemplo, grade FMA 2109 na Figura 21 ou circuitos PE na Figura 22), (por exemplo, cujo K> 8) manuseio (3) acima. Em uma modalidade, cada operação (por exemplo, micro-operação) inserida na fila de segunda passagem 2612 é suspensa por 16 ciclos antes de ser despachada novamente para a segunda passagem. Em modalidades em que o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22) é limitado a um número menor de (por exemplo, 8) circuitos de FMA, já que a segunda passagem é exigida. A segunda passagem pode ser reiniciada pelo menos 16 ciclos após a palavra (por exemplo, 16 ciclos = 8 unidades FMA * 2 ciclos de latência ADD). Observe que essa divisão é possível devido ao seguinte, que também descreve os termos calculados no primeiro e segundo caminhos:
Figure img0008
[00206] Em uma modalidade, ao despachar uma operação (por exemplo, micro-operação) da fila principal 2610 (por exemplo, como exemplo do conjunto de circuitos de despacho 2300), seu número de acumulação é observado (por exemplo, verificando se K> 8). Em certas modalidades, se (K <= limiar (por exemplo, 8)) a operação (por exemplo, micro-operação) é enviada diretamente para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22), por exemplo, sem copiar a mesma na fila de segunda passagem 2612 e/ou se (K > limiar (por exemplo, 8)) a operação (por exemplo, microoperação) continuar enviando para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22), por exemplo, enquanto também é copiada na fila de segunda passagem 2612. Em uma modalidade, na fila de segunda de passagem 2612, K é atualizado para que seja o restante das acumulações a serem executadas (por exemplo, K-8). Em uma modalidade, toda operação (por exemplo, microoperação) que é inserida na fila de segunda passagem 2612 aciona um (por exemplo,16) contador de ciclos. Em uma modalidade, uma vez que o contador conclui sua contagem (por exemplo, 16 ciclos), sua operação correspondente (por exemplo, micro-operação) é elegível para ser enviada para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22) para a segunda parte de execução. Em uma modalidade, uma vez que as operações (por exemplo, micro-operações) na fila de segunda passagem 2612 são mais antigas, são dadas às mesmas uma prioridade para despacho caso estejam prontas. O que segue pode ser usado para seleção de fila: Select_queue = (Valid second-pass-uop) AND (16-cycles) ? second-PASSQUEUE : FILA PRINCIPAL. Em uma modalidade, o conjunto de circuitos de agendamento 2602 do conjunto de circuitos de despacho 2600 utiliza o multiplexador 2604 para selecionar uma entrada a partir da fila de segunda passagem 2612. Por exemplo, com multiplexador 2606 selecionando dentre qualquer uma dentre fila principal 2610 ou segunda fila 2612 para fornecer uma operação a ser enviada por meio da saída 2608 para a grade de FMA.
[00207] A Figura 27 ilustra o conjunto de circuitos de agendamento 2700 de conjunto de circuitos de despacho de um circuito acelerador de operações de matriz para múltiplas passagens de acordo com modalidades da revelação. Matriz de entrada nessas modalidades se refere a uma matriz "B" de entrada (por exemplo, bloco), mas isso é meramente ilustrativo e outras matrizes (por exemplo, blocos) podem ser programadas de forma semelhante.
[00208] O conjunto de circuitos de agendamento 2700 inclui uma entrada 2702 para receber um valor que identifica a próxima operação (por exemplo, microoperação) que deve ser realizada no circuito acelerador de operações de matriz e, particularmente, a próxima operação que é selecionada e/ou despachada para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de PE na Figura 22) para execução. Em uma modalidade, a entrada 2702 recebe a saída 2304 da Figura 23.
[00209] Em certas modalidades, a entrada 2702 identifica uma próxima operação (por exemplo, e os blocos de entrada/saída correspondentes) que deve ser despachada pelo conjunto de circuitos de agendamento 2700. Em certas dessas modalidades, a entrada 2702 inclui um valor de identificação (ID) que representa um bloco (por exemplo, um conjunto de registros que forma um bloco nos armazenamentos temporários de dados (por exemplo, registros) 2105 na Figura 21). O conjunto de circuitos de agendamento 2700 inclui armazenamento 2704 que identifica um bloco (ou blocos) atual sendo processado pelo circuito acelerador de operações de matriz, e, particularmente, pode identificar o bloco (ou blocos) atual que tem seus dados carregados (ou seus dados estão sendo carregados para dentro/para fora do mesmo) no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22). Em uma modalidade, o conjunto de circuitos de agendamento 2700 inclui um armazenamento de bloco válido 2706 (por exemplo, bloco B) para indicar se o valor de identificação no armazenamento 2704 é um valor válido ou um valor inválido (por exemplo, o hardware está carregando outro bloco e, assim, outro valor de identificação).
[00210] O conjunto de circuitos de agendamento 2700 inclui um circuito de comparação 2708 para comparar (i) o bloco atual (por exemplo, bloco B) que é carregado no conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22) com (ii) o próximo bloco (por exemplo, próximo bloco B) que deve ser carregado no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22). Em uma modalidade, essa comparação é feita ao comparar o valor de identificação fornecido pelo conjunto de circuitos de agendamento para cada bloco, por exemplo, o valor de identificação fornecido na entrada do bloco nos armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 na Figura 21) de acelerador de operações de matriz, por exemplo, em que o valor de identificação é fornecido a cada bloco antes de os valores para o bloco serem inseridos no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22).
[00211] Em certas modalidades, o circuito de comparação 2708 deve comparar (i) o bloco de entrada (por exemplo, seu valor de ID nos armazenamentos temporários de dados 2105 na Figura 21) (por exemplo, “novo bloco B”) a partir da entrada 2702 para uma próxima operação para (ii) o bloco atual (por exemplo, bloco B) que está atualmente carregado no conjunto de circuitos de operação (por exemplo, atualmente carregado na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22), por exemplo, o valor de ID para armazenamentos temporários de dados 2105 na Figura 21 para um bloco que está atualmente carregado na grade de FMA 2109 na Figura 21. Em uma modalidade, o circuito de comparação 2708 deve comparar o valor de ID de bloco atual em uso ao valor de ID do próximo bloco a ser usado no conjunto de circuitos de operação e, se for igual, afirmar um valor (por exemplo, “um”) em que são iguais. Em uma modalidade, o circuito de comparação 2708 deve comparar o valor de ID de bloco atual em uso a partir do armazenamento 2704 ao valor de ID do próximo bloco a ser usado no conjunto de circuitos de operação, e, se forem iguais, afirmar um valor (por exemplo, “um”) em que são iguais quando o armazenamento 2706 também indica que o valor de identificação no armazenamento 2704 é um valor válido, por exemplo, e avalia um valor diferente (por exemplo, zero) de outro modo.
[00212] Em certas modalidades, quando (i) o bloco atual (por exemplo, bloco B) que está carregado no conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22) é igual (ii) ao próximo bloco (por exemplo, próximo bloco B) que deve ser carregado no conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22), o mesmo valor de bloco (por exemplo, mesmo bloco B) é afirmado (por exemplo, um “um”(1)) para causar (por exemplo, por meio da saída 2710) comutação para um modo de agendamento que reutiliza a matriz de entrada, por exemplo, reutilização do bloco B já armazenado dentro do conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22), por exemplo, sem recarregar o mesmo a partir de armazenamentos temporários de dados (por exemplo, armazenamentos temporários de dados 2105 na Figura 21) separados do conjunto de circuitos de operação.
[00213] Em certas modalidades, circuito de comparação 2708 deve gerar como saída um primeiro valor (por exemplo, “um”) na saída 2710 quando (i) o bloco atual (por exemplo, bloco B) que está carregado no conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22) for igual (ii) ao próximo bloco (por exemplo, próximo bloco B) que deve ser carregado no conjunto de circuitos de operação. A saída 2710 pode, em seguida, ser inserida na porta lógica OR 2726 junto com a entrada a partir da porta lógica NOT 2724. A saída da porta lógica OR 2726 é enviada para a primeira entrada da porta lógica AND 2730. A outra entrada da porta lógica AND 2730 é acoplada à porta lógica NOT 2728, que é acoplada ao contador M 2718. A saída 2732 da porta lógica AND 2730 deve causar um despacho de uma próxima operação (por exemplo, micro-operação) quando “um” em certas modalidades. Em comparação à Figura 25, a Figura 27 inclui um contador 2716A para K par e um contador 2716B para K ímpar, e com ambos os contadores acoplados a uma respectiva entrada de porta lógica AND 2720. Em uma modalidade, contador K par 2716A afirma um valor de “um” para Ks pares durante a contagem regressiva do número de ciclos em que os recursos (por exemplo, barramento) que carregam o bloco B no circuito acelerador de operações de matriz estão ocupados e, em seguida, um zero quando concluída (por exemplo, valor predeterminado para contador K par), contador ímpar de K 2716B afirma um valor de “um” para Ks ímpares durante a contagem regressiva do número de ciclos em que os recursos (por exemplo, barramento) que carregam o bloco B no circuito acelerador de operações de matriz estão ocupados e, em seguida, um zero quando complete (por exemplo, valor predeterminado para contador K ímpar), e o contador M 2718 para afirmar um valor de “um” para M durante a contagem regressiva do número de ciclos em que os recursos (por exemplo, barramento) que carregam o bloco A no circuito acelerador de operações de matriz estão ocupados e, em seguida, um zero quando concluída (por exemplo, valor predeterminado para contador M). Após cada despacho, o contador (ou contadores) pode ser redefinido para seu valor original (por exemplo, diferente de zero).
[00214] Em uma modalidade, a Figura 27 especifica o acionador da próxima operação que deve ser enviada para o conjunto de circuitos de operação (por exemplo, grade de FMA 2109 na Figura 21 ou circuitos de armazenamento temporário na Figura 22) como a seguir: ciclos pares são rastreados pelo contador de K par 2716A, e os ciclos ímpares são rastreados pelo contador de K ímpar 2716B, qualquer operação (por exemplo, micro-operação) que é despachada atualiza seus contadores de K par ou K ímpar, e qualquer operação (por exemplo, micro-operação) que é despachada também atualiza o contador M, por exemplo, e a reutilização da matriz BK×N é verificada.
[00215] Em uma modalidade, se (((K-even == 0) OR (K-odd == 0) OR (SAME-B == 1)) AND (M <= 1)) THEN despachar próxima operação (por exemplo, micro-operação).
[00216] Em uma modalidade, o estado de despacho representa o caso em que um dentre o ciclo de barramento de B (por exemplo, ou ciclo Par, ou ciclo Ímpar) estão disponíveis (por exemplo, seu contador correspondente é zero) e o primeiro FMA0 está disponível (por exemplo, o contador M é zero ou “um”), e enviará a próxima operação (por exemplo, micro-operação) ou na fila principal 2610 ou na fila de segunda passagem 2612 para o conjunto de circuitos de operação (por exemplo, na grade de FMA 2109 na Figura 21 ou circuito (ou circuitos) de armazenamento temporário na Figura 22) para execução.
[00217] Em certas modalidades, no caso de o disparo acontecer quando o contador M == 0, A e B devem ser enviados para TMM no mesmo ciclo e/ou no caso do contador M == 1, o barramento de B deve ser enviado para TMM um ciclo antes do barramento de A. Observe que certas modalidades assumem latência de ciclo múltiplo (por exemplo, 2) para a execução de um circuito FMA (por exemplo, PE), agendamento para o caso em que o circuito FMA (por exemplo, PE) tem uma latência de ciclo único é possível, por exemplo, incluindo reutilização de bloco.
[00218] A seguir estão exemplos para especificar a programação. Em uma modalidade, um mecanismo de reutilização de bloco (por exemplo, bloco B) é utilizado junto com o seguinte.
[00219] Exemplo 1.1 São dados três números a, b e c. Definimos uma operação de Multiplicação e Adição Fundidas (FMA) como a adição de c com o produto de a e b, isto é, = c + a.b.
[00220] Exemplo 1.2 São dadas três matrizes , A M×K, B K×N e C M×N Definimos uma Multiplicação de Matriz MM (M , K , N) como uma operação que resulta em uma nova matriz C M×N, em que cada elemento
Figure img0009
[00221] Certas modalidades aqui impõem uma restrição de arquitetura em que M, N, K≤ valor de limiar (por exemplo, 16).
[00222] Exemplo 1.3 A Fila de Matriz MQ é um conjunto ordenado operações de multiplicação de matriz, isto é, MQ = {M M1, M M2, …}. Esse conjunto representa que as operações de multiplicação de matriz são de estado pronto na RS.
[00223] Exemplo 1.4 A Grande Fila de Matriz BMQ é um conjunto ordenado de operações de multiplicação de matriz, isto é, BMQ = {M M1, M M2, …}. Essa fila é utilizada para as operações de multiplicação de matriz de K > 8 que precisa de uma rodada extra na unidade de Multiplicação de Matriz de acordo com a limitação 3. Cada elemento nessa fila tem um contador interno e está pronto 16 ciclos após sua inserção. Esta estrutura implementa dois métodos adicionais de atualização e prontidão para atualizar e verificar se o topo da fila MM está pronto.
[00224] Em uma modalidade, cada um dos parâmetros de operação de multiplicação de matriz (MM) M, K, N e operandos A, B, C são definidos como uma propriedade de elemento MM, por exemplo, MM.K. Dado um MM de Multiplicação de Matriz e seus operandos A, B, C, o agendador pode sincronizar as operações do ciclo inicial desses operandos através das funções Dispatch_A, Dispatch_B, Dispatch_C, que recebem o ciclo inicial como parâmetro de entrada. Então, definido o ciclo de partida para operação, o agendador pode causar a continuação da execução das demais operações do MM de acordo com o modo operacional. Especificamente, em um primeiro arranjo (por exemplo, FMA_0), difundir em cada ciclo consequente os elementos a_(i,0) em que i=0...M se inicia a partir da ciclo de entrada de Dispatch_A, em seguida no ciclo+2 em um segundo arranjo (por exemplo, FMA_1), continuar a difundir os elementos a_(i,1) em que i=0...M e assim por diante. Em uma modalidade, o operando MM.C é inserido no arranjo FMA_0 dois ciclos após a inserção de A até Dispatch_C, uma vez que este é o momento para terminar a operação de multiplicação FMA. Em uma modalidade, Dispatch_B insere toda a linha B_i a cada dois ciclos ao FMA_i em que i=0...K, respectivamente. Observe que de acordo com some modalidades, a carga de uma única linha de matriz por ciclo é uma restrição de sistema. De fato, com base nessa restrição, um agendador pode dividir a linha do tempo em ciclos pares e ímpares, inserindo as operações MM nesses ciclos classificados. Em seguida, estale quando um desses ciclos estiver livre para inserção através dos contadores M, K_even, K_odd que são atualizados a cada ciclo. No caso de MM.K> 8, divida a operação MM (M, K, N) em duas operações, a saber MM (M, 8, N) e MM (M, K-8, N) em certas modalidades. Em uma modalidade, a operação MM(M,8,N) inclui as primeiras 8 operações de FMA de MM(M,K,N) e é diretamente enviada para execução quando inserida, em que a MM(M,K-8,N) é colocada em fila (por exemplo, na fila principal 2610 na Figura 26) e aguarda pelo menos um número limiar (por exemplo, 16) ciclos para operação (até que MM(M,8,N) termine de calcular seu primeiro resultado de linha), então, esse resultado de MM(M,8,N) é inserido como entrada C da matriz MM(M,K-8,N) quando executada.
[00225] A Figura 28 ilustra o pseudocódigo 2800 para os conjuntos de circuitos de operações de matriz de acordo com modalidades da revelação.
[00226] A Figura 29 ilustra um método 2900 de processamento de uma instrução de operação de matriz de acordo com modalidades da revelação. Um processador (por exemplo, ou núcleo de processador) pode realizar o método 2900, por exemplo, em resposta a recepção de uma solicitação para executar uma instrução de software. O processador (por exemplo, ou núcleo de processador) pode descarregar certa operação para um circuito acelerador de operações de matriz. O método representado 2900 inclui instrução de operação de matriz de processamento (por exemplo, FMA) por: buscar uma instrução que tem um primeiro campo que identifica uma primeira matriz bidimensional de entrada, um segundo campo que identifica uma segunda matriz bidimensional de entrada e um campo que identifica um armazenamento resultante 2902, decodificar a instrução em uma instrução decodificada com um decodificador de um núcleo de processador de hardware, em que o núcleo de processador de hardware é acoplado a um circuito acelerador de operações de matriz que compreende uma grade bidimensional de circuitos fundidos de multiplicação e acumulação, o circuito acelerador de operações de matriz é acoplado a uma primeira pluralidade de registros que representa a primeira matriz bidimensional de entrada e uma segunda pluralidade de registros que representa a segunda matriz bidimensional de entrada 2904, recuperar dados associados com o primeiro campo (por exemplo, bloco A), o segundo campo (por exemplo, bloco B) (e, opcionalmente, um terceiro campo (por exemplo, bloco C)) 2906, (opcionalmente) agenda a instrução decodifica para execução 2908, executa a instrução decodificada para carregar um primeiro armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação com a primeira matriz bidimensional de entrada a partir da primeira pluralidade de registros, verificar se um segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena uma matriz bidimensional de entrada imediatamente anterior que é igual à segunda matriz bidimensional de entrada, quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução de uma instrução anterior, que é igual à segunda matriz bidimensional de entrada: impedir a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única, realizar uma operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na matriz bidimensional de entrada imediatamente anterior a partir do segundo armazenamento temporário para produzir um resultante, e armazenar o resultante no armazenamento resultante, e quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazenar a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada: carregar a segunda matriz bidimensional de entrada no segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação, realizar a operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na segunda matriz bidimensional de entrada a partir do segundo armazenamento temporário para produzir um resultante, e armazenar o resultante no armazenamento resultante 2910, e confirmar o resultado da instrução executada 2912.
[00227] Arquiteturas, sistemas, etc. exemplares em que o acima pode ser usado são detalhados abaixo.
[00228] Pelo menos algumas modalidades das tecnologias reveladas podem ser descritas em vista dos seguintes exemplos:
[00229] Exemplo 1. Um aparelho que compreende:
um circuito acelerador de operações de matriz que compreende uma grade bidimensional de circuitos fundidos de multiplicação e acumulação;
uma primeira pluralidade de registros que representa uma primeira matriz bidimensional de entrada acoplada ao circuito acelerador de operações de matriz;
uma segunda pluralidade de registros que representa uma segunda matriz bidimensional de entrada acoplada ao circuito acelerador de operações de matriz;
um decodificador, de um núcleo de processador de hardware acoplada ao circuito acelerador de operações de matriz, para decodificar uma instrução única em uma instrução decodificada única, sendo que a instrução única inclui um campo que identifica um armazenamento resultante; e
um circuito de execução do núcleo de processador de hardware para executar a instrução decodificada única para:
carregar um primeiro armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação com a primeira matriz bidimensional de entrada a partir da primeira pluralidade de registros,
verificar se um segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena uma matriz bidimensional de entrada imediatamente anterior que é igual à segunda matriz bidimensional de entrada,
quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução de uma instrução anterior, que é igual à segunda matriz bidimensional de entrada:
impedir a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única,
realizar uma operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na matriz bidimensional de entrada imediatamente anterior a partir do segundo armazenamento temporário para produzir um resultante, e
armazenar o resultante no armazenamento resultante,
e
quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazenar a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada:
carregar a segunda matriz bidimensional de entrada no segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação,
realizar a operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na segunda matriz bidimensional de entrada a partir do segundo armazenamento temporário para produzir um resultante, e
armazenar o resultante no armazenamento resultante.
[00230] Exemplo 2. O aparelho do exemplo 1, em que quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o circuito acelerador de operações de matriz deve começar a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única.
[00231] Exemplo 3. O aparelho do exemplo 1, em que o circuito acelerador de operações de matriz atribui um valor de identificação para cada pluralidade de registros que representa uma matriz bidimensional de entrada, e a verificação de o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazenar a matriz bidimensional de entrada imediatamente anterior, que é igual à segunda matriz bidimensional de entrada, compreende comparar os respectivos valores de identificação para matrizes bidimensionais de entrada correspondentes a partir da instrução anterior e da instrução única.
[00232] Exemplo 4. O aparelho do exemplo 3, em que o circuito acelerador de operações de matriz deve atribuir um valor de identificação diferente para a segunda pluralidade de registros para armazenar uma matriz bidimensional de entrada de uma próxima instrução.
[00233] Exemplo 5. O aparelho do exemplo 1, em que quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o circuito acelerador de operações de matriz não carrega o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação durante execução da instrução decodificada única.
[00234] Exemplo 6. O aparelho do exemplo 1, em que o armazenamento resultante é uma terceira pluralidade de registros que representa pelo menos uma matriz bidimensional de saída formada pela execução da instrução decodificada única.
[00235] Exemplo 7. O aparelho do exemplo 1, em que a operação compreende transmitir uma respectiva saída de cada um dentre um primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional a jusante para uma respectiva entrada de cada um dentre um segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional para formar o resultante.
[00236] Exemplo 8. O aparelho do exemplo 7, em que o primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é uma dentre uma linha ou uma coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação e o segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é a uma outra dentre a linha ou a coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação.
[00237] Exemplo 9. Um método que compreende:
decodificar, com um decodificador de um núcleo de processador de hardware, uma instrução única em uma instrução decodificada única, em que o núcleo de processador de hardware é acoplado a um circuito acelerador de operações de matriz que compreende uma grade bidimensional de circuitos fundidos de multiplicação e acumulação, o circuito acelerador de operações de matriz é acoplado a uma primeira pluralidade de registros que representa uma primeira matriz bidimensional de entrada e a uma segunda pluralidade de registros que representa uma segunda matriz bidimensional de entrada, e a instrução única inclui um campo que identifica um armazenamento resultante;
e executar a instrução decodificada única com um circuito de execução do núcleo de processador de hardware para:
carregar um primeiro armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação com a primeira matriz bidimensional de entrada a partir da primeira pluralidade de registros,
verificar se um segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena uma matriz bidimensional de entrada imediatamente anterior que é igual à segunda matriz bidimensional de entrada,
quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução de uma instrução anterior, que é igual à segunda matriz bidimensional de entrada:
impedir a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única,
realizar uma operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na matriz bidimensional de entrada imediatamente anterior a partir do segundo armazenamento temporário para produzir um resultante, e
armazenar o resultante no armazenamento resultante,
e
quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazenar a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada:
carregar a segunda matriz bidimensional de entrada no segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação,
realizar a operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na segunda matriz bidimensional de entrada a partir do segundo armazenamento temporário para produzir um resultante, e
armazenar o resultante no armazenamento resultante.
[00238] Exemplo 10. O método do exemplo 9, em que quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o dito método compreende adicionalmente começar a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única.
[00239] Exemplo 11. O método do exemplo 9, que compreende adicionalmente atribuir um valor de identificação para cada pluralidade de registros que representa uma matriz bidimensional de entrada, e a verificação de o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazenar a matriz bidimensional de entrada imediatamente anterior, que é igual à segunda matriz bidimensional de entrada, compreende comparar os respectivos valores de identificação para matrizes bidimensionais de entrada correspondentes a partir da instrução anterior e da instrução única.
[00240] Exemplo 12. O método do exemplo 11, que compreende adicionalmente atribuir um valor de identificação diferente para a segunda pluralidade de registros para armazenar uma matriz bidimensional de entrada de uma próxima instrução.
[00241] Exemplo 13. O método do exemplo 9, em que quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o dito método compreende adicionalmente não carregar o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação durante execução da instrução decodificada única.
[00242] Exemplo 14. O método do exemplo 9, em que o armazenamento resultante é uma terceira pluralidade de registros que representa pelo menos uma matriz bidimensional de saída formada pela execução da instrução decodificada única.
[00243] Exemplo 15. O método do exemplo 9, em que a operação compreende transmitir uma respectiva saída de cada um dentre um primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional a jusante para uma respectiva entrada de cada um dentre um segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional para formar o resultante.
[00244] Exemplo 16. O método do exemplo 15, em que o primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é uma dentre uma linha ou uma coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação e o segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é a uma outra dentre a linha ou a coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação.
[00245] Exemplo 17. Meio legível por máquina não transitório que armazena um código que, quando executado, por uma máquina faz com que a máquina realize um método que compreende:
decodificar, com um decodificador de um núcleo de processador de hardware, uma instrução única em uma instrução decodificada única, em que o núcleo de processador de hardware é acoplado a um circuito acelerador de operações de matriz que compreende uma grade bidimensional de circuitos fundidos de multiplicação e acumulação, o circuito acelerador de operações de matriz é acoplado a uma primeira pluralidade de registros que representa uma primeira matriz bidimensional de entrada e a uma segunda pluralidade de registros que representa uma segunda matriz bidimensional de entrada, e a instrução única inclui um campo que identifica um armazenamento resultante; e
executar a instrução decodificada única com um circuito de execução do núcleo de processador de hardware para:
carregar um primeiro armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação com a primeira matriz bidimensional de entrada a partir da primeira pluralidade de registros,
verificar se um segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena uma matriz bidimensional de entrada imediatamente anterior que é igual à segunda matriz bidimensional de entrada,
quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução de uma instrução anterior, que é igual à segunda matriz bidimensional de entrada:
impedir a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única,
realizar uma operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na matriz bidimensional de entrada imediatamente anterior a partir do segundo armazenamento temporário para produzir um resultante, e
armazenar o resultante no armazenamento resultante,
e
quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazenar a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada:
carregar a segunda matriz bidimensional de entrada no segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação,
realizar a operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na segunda matriz bidimensional de entrada a partir do segundo armazenamento temporário para produzir um resultante, e
armazenar o resultante no armazenamento resultante.
[00246] Exemplo 18. O meio legível por máquina não transitório do exemplo 17, em que quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o dito meio compreende adicionalmente começar a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única.
[00247] Exemplo 19. O meio legível por máquina não transitório do exemplo 17 que compreende adicionalmente atribuir um valor de identificação para cada pluralidade de registros que representa uma matriz bidimensional de entrada, e a verificação de o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazenar a matriz bidimensional de entrada imediatamente anterior, que é igual à segunda matriz bidimensional de entrada, compreende comparar os respectivos valores de identificação para matrizes bidimensionais de entrada correspondentes a partir da instrução anterior e da instrução única.
[00248] Exemplo 20. O meio legível por máquina não transitório do exemplo 19 que compreende adicionalmente atribuir um valor de identificação diferente para a segunda pluralidade de registros para armazenar uma matriz bidimensional de entrada de uma próxima instrução.
[00249] Exemplo 21. O meio legível por máquina não transitório do exemplo 17, em que quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o dito meio compreende adicionalmente não carregar o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação durante execução da instrução decodificada única.
[00250] Exemplo 22. O meio legível por máquina não transitório do exemplo 17, em que o armazenamento resultante é uma terceira pluralidade de registros que representa pelo menos uma matriz bidimensional de saída formada pela execução da instrução decodificada única.
[00251] Exemplo 23. O meio legível por máquina não transitório do exemplo 17, em que a operação compreende transmitir uma respectiva saída de cada um dentre um primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional a jusante para uma respectiva entrada de cada um dentre um segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional para formar o resultante.
[00252] Exemplo 24. O meio legível por máquina não transitório do exemplo 23, em que o primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é uma dentre uma linha ou uma coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação e o segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é a uma outra dentre a linha ou a coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação.
[00253] Em ainda outra modalidade, um aparelho compreende um dispositivo de armazenamento de dados que armazena um código que, quando executado por um processador de hardware, faz com que o processador hardware realize qualquer método revelado no presente documento. Um aparelho pode ser conforme descrito na descrição detalhada. Um método pode ser conforme descrito na descrição detalhada.
Sistemas, processadores e emulação exemplificativos detalhados
[00254] São detalhados no presente documento exemplos de hardware, software, etc. para executar as instruções descritas acima. Por exemplo, o que é descrito abaixo detalha os aspectos da execução da instrução, incluindo vários estágios do pipeline, como buscar, decodificar, agendar, executar, retirar, etc.
Conjuntos de Instruções
[00255] Um conjunto de instruções pode incluir um ou mais formatos de instrução. Um determinado formato de instrução pode definir vários campos (por exemplo, número de bits, localização de bits) para especificar, entre outras coisas, a operação a ser realizada (por exemplo, código operacional) e o operando (ou operandos) no qual essa operação deve ser realizada e/ou outro campo (ou campos) de dados (por exemplo, máscara). Alguns formatos de instrução não estão em funcionamento apesar da definição de modelos de instrução (ou subformatos). Por exemplo, os modelos de instrução de um determinado formato de instrução podem ser definidos de modo a terem subconjuntos diferentes dos campos do formato de instrução (os campos incluídos estão tipicamente na mesma ordem, mas pelo menos alguns têm posições de bit diferentes, pois há menos campos incluídos) e/ou podem ser definidos de modo a terem um determinado campo interpretado de forma diferente. Desse modo, cada instrução de uma ISA é expressa com uso de um determinado formato de instrução (e, caso definida, em um determinado modelo dentre os modelos de instrução desse formato de instrução) e inclui campos para especificar a operação e os operandos. Por exemplo, uma instrução de ADD exemplificativa tem um código operacional específico e um formato de instrução que inclui um campo de código operacional para especificar tais campos de código operacional e operando para selecionar operandos (fonte1/destino e fonte2); e uma ocorrência dessa instrução de ADD em um fluxo de instrução terá conteúdos específicos nos campos de operando que selecionam operandos específicos. Um conjunto de extensões SIMD chamadas de Extensões de Vetor Avançadas (AVX) (AVX1 e AVX2), com o uso do esquema de codificação de Extensões de Vetor (VEX), foi lançado e/ou publicado (por exemplo, consulte o Intel® 64 and IA-32 Architectures Software Developer’s Manual, novembro de 2018; e consulte Intel® Architecture Instruction Set Extensions Programming Reference, outubro 2018).
Formatos de Instrução Exemplificativos
[00256] As modalidades da instrução (ou instruções) descritas no presente documento podem ser incorporadas em formatos diferentes. Adicionalmente, sistemas, arquiteturas e pipelines exemplificativos são detalhados abaixo. As modalidades da instrução (ou instruções) podem ser executadas em tais sistemas, arquiteturas e pipelines, mas não estão limitadas àqueles detalhados.
FORMATO DE INSTRUÇÃO FAVORÁVEL DE VETOR GENÉRICO
[00257] Um formato de instrução favorável de vetor é um formato de instrução que é adequado para as instruções de vetor (por exemplo, há determinados campos específicos para operações de vetor). Embora sejam descritas modalidades em que tanto as operações de vetor quanto escalares são suportadas através do formato de instrução favorável de vetor, as modalidades alternativas usam apenas operações de vetor no formato de instrução favorável de vetor.
[00258] As Figuras 30A a 30B são diagramas de bloco que ilustram um formato de instrução amigável de vetor genérico e modelos de instrução do mesmo de acordo com modalidades da invenção. A Figura 30A é um diagrama de blocos que ilustra um formato de instrução favorável de vetor genérico e modelos de instrução de classe A do mesmo de acordo com modalidades da invenção; enquanto que a Figura 30B é um diagrama de blocos que ilustra o formato de instrução favorável de vetor genérico e modelos de instrução de classe B do mesmo de acordo com modalidades da invenção. Especificamente, um formato de instrução favorável de vetor genérico 3000 para o qual são definidos modelos de instrução classe A e de classe B, dos quais ambos incluem modelo de instrução 3005 sem acesso à memória e modelo de instrução 3020 com acesso à memória. O termo genérico no contexto do formato de instrução compatível com vetor se refere ao formato de instrução não vinculado a qualquer conjunto de instruções específicas.
[00259] Serão descritas modalidades da revelação em que o formato de instrução favorável de vetor suporta o seguinte: um comprimento (ou tamanho) de operando de vetor de 64 bytes com largura (ou tamanhos) de elemento de dados de 32 bits (4 bytes) ou 64 bits (8 bytes) (e, desse modo, um vetor de 64 bytes consiste em 16 elementos de tamanho duplo de palavra ou, alternativamente, 8 elementos de tamanho quádruplo de palavra); um comprimento (ou tamanho) de operando de vetor de 64 bytes com larguras (ou tamanhos) de elemento de dados de 16 bits (2 bytes) ou 8 bits (1 byte); um comprimento (ou tamanhos) de operando de vetor de 32 bytes com larguras (ou tamanhos) de elemento de dados de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) ou 8 bits (1 byte); e um comprimento (ou tamanho) de operando de vetor de 16 bytes com larguras (ou tamanhos) de elemento de dados de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) ou 8 bits (1 byte); as modalidades alternativas podem suportar tamanhos de operando de vetor maiores, menores e/ou diferentes (por exemplo, operandos de vetor de 256 bytes) com larguras de elemento de dados maiores, menores ou diferentes (por exemplo, larguras de elemento de dados de 128 bits (16 bytes)).
[00260] Os modelos de instrução classe A na Figura 30A incluem: 1) dentro dos modelos de instrução sem acesso de memória 3005, é mostrado um modelo de instrução de operação tipo controle de arredondamento completo sem acesso de memória 3010 e um modelo de instrução de operação tipo transformada de dados sem acesso de memória 3015 ; e 2) dentro do modelo de instrução de acesso de memória 3020 é mostrado um modelo de instrução temporal de acesso de memória 3025 e um modelo de instrução não temporal de acesso de memória 3030. Os modelos de instrução classe B na Figura 30B incluem: 1) dentro dos modelos de instrução sem acesso de memória 3005, é mostrado um modelo de instrução de operação tipo controle de arredondamento parcial de controle de máscara de gravação sem acesso de memória 3012 e um modelo de instrução de operação tipo vsize de controle de máscara de gravação sem acesso de memória 3017; e 2) dentro dos modelos de instrução de acesso de memória 3020, é mostrado um modelo de instrução de controle de máscara de gravação de acesso de memória 3027.
[00261] O formato de instrução amigável de vetor genérico 3000 inclui os seguintes campos listados abaixo na ordem ilustrada nas Figuras 30A-30B.
[00262] Campo formato 3040 – um valor específico (um valor identificador de formato de instrução) nesse campo identifica exclusivamente o formato de instrução amigável de vetor e, dessa forma, ocorrências de instruções no formato de instrução amigável de vetor nas correntes de instrução. Desse modo, esse campo é opcional no sentido de que não é necessário para um conjunto de instruções que tem apenas o formato de instrução favorável de vetor genérico.
[00263] Campo de operação-base 3042 – seu conteúdo distingue operações-base diferentes.
[00264] Campo de índice de registro 3044 – seu conteúdo, diretamente ou através de geração de endereço, especifica as localizações dos operandos de origem e destino, estejam nos registros ou na memória. Esses incluem um número suficiente de bits para selecionar N registros a partir de um arquivo de registro de PxQ (por exemplo, 32x512, 16x128, 32x1024, 64x1024). Embora, em uma modalidade, N possa ser de até três origens e um registro de destino, modalidades alternativas podem suportar mais ou menos registros de fontes e destino (por exemplo, podem suportar até duas origens em que uma dentre essas origens também atua como o destino, podem suportar até três origens em que uma dentre essas origens também atua como o destino, podem suportar até duas origens e um destino).
[00265] Campo modificador 3046 – seu conteúdo distingue ocorrências de instruções no formato de instrução de vetor genérico que especifica o acesso à memória daquelas que não o fazem; isto é, entre modelos de instrução 3005 sem acesso à memória e modelos de instrução com acesso à memória 3020. Operações com acesso à memória leem e/ou gravam para a hierarquia de memória (em alguns casos que especificam os endereços de origem e/ou destino com o uso valores nos registros), enquanto operações sem acesso à memória (por exemplo, a de origem e destinos são registros). Embora em uma modalidade esse campo também selecione entre três formas diferentes para realizar cálculos de endereço de memória, as modalidades alternativas podem suportar mais ou menos formas ou formas diferentes para realizar os cálculos de endereço de memória.
[00266] Campo de operação de aumento 3050 – seu conteúdo distingue qual dentre uma variedade de operações diferentes deve ser realizada além daquela operação-base. Esse campo é específico de contexto. Em uma modalidade da revelação, esse campo é dividido em um campo de classe 3068, um campo alfa 3052 e um campo beta 3054. O campo de operação de aumento 3050 permite que grupos comuns de operações sejam realizados em uma instrução única em vez de 2, 3 ou 4 instruções.
[00267] Campo de escala 3060 – seu conteúdo permite o dimensionamento do conteúdo de campo de índice para a geração de endereço de memória (por exemplo, para geração de endereço que usa 2escala * índice + base).
[00268] Campo de deslocamento 3062A– seu conteúdo é usado com parte da geração de endereço de memória (por exemplo, para geração de endereço que usa 2escala * índice + base + deslocamento).
[00269] O campo de fator deslocamento 3062B (nota-se que a justaposição do campo de deslocamento 3062A diretamente sobre o campo de fator deslocamento 3062B indica um ou o outro é usado) – seu conteúdo é usado como parte da geração de endereço; o mesmo especifica um fator de deslocamento que deve ser dimensionado pelo tamanho de um acesso de memória (N) – em que N é o número de bytes no acesso de memória (por exemplo, para geração de endereço que usa 2escala * índice + base + deslocamento dimensionado). Os bits de ordem baixa redundantes são ignorados e, então, o conteúdo do campo de fator de deslocamento é multiplicado pelo tamanho total de operandos de memória (N) a fim de gerar o deslocamento final a ser usado no cálculo de um endereço eficaz. O valor de N é determinado pelo hardware de processador no tempo de execução com base no campo de código operacional completo 3074 (descrito anteriormente no presente documento) e no campo de manipulação de dados 3054C. O campo de deslocamento 3062A e o campo de fator de deslocamento 3062B são opcionais no sentido em que os mesmos não são usados para os modelos de instrução 3005 sem acesso à memória e/ou modalidades diferentes podem implantar um ou nenhum dentre os dois.
[00270] Campo de largura de elemento de dados 3064 – seu conteúdo distingue qual dentre várias larguras de elemento de dados deve ser usada (em algumas modalidades, para todas as instruções; em outras modalidades, apenas para algumas dentre as instruções). Esse campo é opcional no sentido em que não é necessário se apenas uma largura de elemento de dados for suportada e/ou larguras de elemento de dados forem suportadas com o uso de algum aspecto dos códigos operacionais.
[00271] Campo de máscara de gravação 3070 – seu conteúdo controla, em uma base por posição de elemento de dados, se a posição de elemento de dados no operando de vetor de destino reflete o resultado da operação-base e operação de aumento. Modelos de instrução de classe A suportam mascaramento de mescla e gravação, enquanto os modelos de instrução de classe B suportam tanto mascaramento de mescla e gravação quanto anulação e gravação. Durante a mesclagem, as máscaras de vetor permitem que qualquer conjunto de elementos no destino seja protegido contra atualizações durante a execução de qualquer operação (especificada pela operação-base e pela operação de aumento); em uma outra modalidade, preservar o valor anterior de cada elemento do destino em que o bit de máscara correspondente tem um 0. Em contraste, quando as máscaras de vetor de redução a zero permitirem que qualquer conjunto de elementos no destino seja reduzido a zero durante a execução de qualquer operação (especificado pela operação-base e a operação de aumento); em uma modalidade, um elemento do destino é definido para 0 quando o bit de máscara correspondente tem um valor 0. Um subconjunto dessa funcionalidade é a habilidade de controlar o comprimento de vetor da operação que é realizada (isto é, a extensão dos elementos que são modificados, do primeiro ao último); no entanto, não é necessário que os elementos que são modificados sejam consecutivos. Desse modo, o campo de máscara de gravação 3070 permite operações de vetor parciais, que inclui carregamentos, armazenamentos, aritmética, lógica, etc. Embora as modalidades da revelação sejam descritas, nas quais o conteúdo do campo de máscara de gravação 3070 seleciona um dentre um número de registros de máscara de gravação que contêm a máscara de gravação a ser usada (e, desse modo, o conteúdo do campo de máscara de gravação 3070 identifica indiretamente tal mascaramento a ser realizado), modalidades alternativas, em vez disso ou adicionais, permitem que o conteúdo do campo de gravação de máscara 3070 especifique diretamente o mascaramento a ser realizado.
[00272] Campo imediato 3072 – seu conteúdo permite a especificação de um imediato. Esse campo é opcional no sentido que não está presente em uma implantação do formato compatível com vetor genérico que não suporta imediato e não está presente em instruções que não usam um imediato.
[00273] Campo de classe 3068 – seu conteúdo distingue entre classes diferentes de instruções. Com referência às Figuras 30A a 1B, os conteúdos desse campo selecionam entre instruções de classe A e classe B. Nas Figuras 30A a 30A, quadrados de cantos redondos são usados para indicar que um valor específico está presente em um campo (por exemplo, classe A 3068A e classe B 3068B para campo de classe 3068 respectivamente nas Figuras 1A a 1B).
Modelos de instrução de Classe A
[00274] No caso dos modelos de instrução sem acesso à memória 3005 da classe A, o campo alfa 3052 é interpretado como um campo RS 3052A, cujo conteúdo distingue qual dentre os diferentes tipos de operação de aumento devem ser realizados (por exemplo, arredondamento 3052A.1 e transformação de dados 3052A.2 são respectivamente especificados para os modelos de instrução sem acesso à memória 1205, a operação do tipo de arredondamento 3010 e o acesso sem memória 1205, operação do tipo de transformação de dados 3015), enquanto o campo beta 3054 distingue quais das operações do tipo especificado devem ser realizadas. Nos modelos de instrução 3005 sem acesso à memória, o campo de escala 3060, o campo de deslocamento 3062A, e o campo de escala de deslocamento 3062B não estão presentes.
Modelos de Instrução Sem Acesso à Memória – Operação do Tipo Controle de Arredondamento Completo
[00275] No modelo de instrução de operação do tipo de controle de arredondamento completo sem acesso à memória 3010, o campo beta 3054 é interpretado como um campo de controle de arredondamento 3054A, cujo conteúdo (ou conteúdos) fornece arredondamento estático. Embora nas modalidades descritas da revelação o campo de controle de arredondamento 3054A inclua um campo de supressão de todas as exceções de ponto de flutuação 3056 e um campo de controle de operação de arredondamento 3058, as modalidades alternativas podem suportar e podem codificar esses conceitos no mesmo campo ou apenas ter um ou outro dentre esses conceitos/campos (por exemplo, podem ter apenas o campo de controle de operação de arredondamento 3058).
[00276] Campo de SAE 3056 – seu conteúdo distingue a possibilidade ou de desativar ou não o relatório de evento de exceção; quando o conteúdo do campo de SAE 3056 indicar que a supressão está ativada, uma determinada instrução não relata qualquer tipo de indicação de exceção de ponto de flutuação e não eleva qualquer manipulador de exceção de ponto de flutuação.
[00277] Campo de controle de operação de arredondamento 3058 – seu conteúdo distingue qual dentre um grupo de operações de arredondamento realizar (por exemplo, Arredondar para cima, Arredondar para baixo, Arredondar para zero e Arredondar para o mais próximo). Desse modo, o campo de controle de operação de arredondamento 3058 permite a mudança do modo de arredondamento em uma base por instrução. Em uma modalidade da revelação em que um processador inclui um registro de controle para especificar modos de arredondamento, o conteúdo do campo de controle de operação de arredondamento 3050 sobrepõe esse valor de registro.
Modelos de Instrução Sem Acesso à Memória – Operação do Tipo de Transformação de Dados
[00278] No modelo de instrução de operação do tipo transformação de dados sem acesso à memória 3015, o campo beta 3054 é interpretado como um campo de transformação de dados 3054B, cujo conteúdo distingue qual dentre várias transformações de dados deve ser realizada (por exemplo, nenhuma transformação de dados, efetuar swizzling, difusão).
[00279] No caso de um modelo de instrução de um acesso de memória 3020 da classe A, o campo alfa 3052 é interpretado como um campo de dica de remoção 3052B, cujo conteúdo distingue qual dentre as dicas de remoção deve ser usada (na Figura 30A, temporal 3052B.1 e não temporal 3052B.22 são respectivamente específicos para o acesso de memória, modelo de temporal de 3025 e o modelo de instrução de acesso de memória, não temporal 3030), enquanto o campo beta 3054 é interpretado como um campo de manipulação de dados 3054C, cujo conteúdo distingue qual dentre um número de operações de manipulação de dados (também conhecidos como primitivos) deve ser realizado (por exemplo, sem manipulação; difusão; conversão ascendente de uma fonte; e conversão descendente de um destino). Os modelos de instrução com acesso à memória 3020 incluem o campo de escala 3060, e, opcionalmente, o campo de deslocamento 3062A ou o campo de escala de deslocamento 3062B.
[00280] As instruções de memória de vetor realizam carregamentos de vetor e armazenamentos de vetor na memória, com suporte de conversão. Como com instruções de vetor regulares, as instruções de memória de vetor transferem dados de/para uma memória em uma maneira no sentido de elemento de dados, com os elementos que são realmente transferidos, é ditada pelos conteúdos da máscara de vetor que é selecionada como a máscara de gravação.
Modelos de instrução com acesso à memória – Temporário
[00281] Os dados temporais são dados propensos a serem reutilizados cedo o suficiente para se beneficiar da realização de cache. Isso é, no entanto, uma dica, e processadores diferentes podem implantar a mesma em formas diferentes, que incluem ignorar a dica inteiramente.
Modelos de Instrução Com Acesso à Memória – Não Temporal
[00282] Os dados não temporais são dados não propensos a serem reutilizados cedo o suficiente para se beneficiar da realização de cache no cache de 1º nível e devem receber prioridade para remoção. Isso é, no entanto, uma dica, e processadores diferentes podem implantar a mesma em formas diferentes, que incluem ignorar a dica inteiramente.
Modelos de Instrução de Classe B
[00283] No caso dos modelos de instrução de classe B, o campo alfa 3052 é interpretado como um campo 3052C de controle de máscara de gravação (Z), cujo conteúdo distingue a possibilidade de o mascaramento de gravação controlado pelo campo de máscara de gravação 3070 ser uma mesclagem ou uma anulação.
[00284] No caso dos modelos de instrução 3005 sem acesso à memória de classe B, parte do campo beta 3054 é interpretada como um campo de RL 3057A, cujo conteúdo distingue qual dentre os tipos de operação de aumento diferentes devem ser realizados (por exemplo, arredondamento 157A.1 e comprimento de vetor (VSIZE) 3057A.2 são respectivamente especificadas para o modelo de instrução de operação 3012 do tipo controle de arredondamento parcial, controle de máscara de gravação sem acesso à memória e modelo de instrução de operação do tipo VSIZE de controle de máscara de gravação 3017 sem acesso à memória), enquanto o restante d o campo beta 3054 distingue qual dentre as operações do tipo específico deve ser realizada. Nos modelos de instrução 3005 sem acesso à memória, o campo de escala 3060, o campo de deslocamento 3062A, e o campo de escala de deslocamento 3062B não estão presentes.
[00285] No modelo de instrução de operação do tipo controle de arredondamento parcial de controle de máscara de gravação 3010 sem acesso à memória, o restante do campo beta 3054 é interpretado como um campo de operação de arredondamento 3059A e o relatório de evento de exceção é desativado (uma determinada instrução não relata qualquer tipo de indicação de exceção de ponto de flutuação e não eleva qualquer manipulador de exceção de ponto de flutuação).
[00286] Campo de controle de operação de arredondamento 3059A – apenas como campo de controle de operação de arredondamento 3058, seu conteúdo distingue qual dentre um grupo de operações de arredondamento realizar (por exemplo, Arredondar para cima, Arredondar para baixo, Arredondar para zero e Arredondar para o mais próximo). Desse modo, o campo de controle de operação de arredondamento 3059A permite a mudança do modo de arredondamento em uma base por instrução. Em uma modalidade da revelação em que um processador inclui um registro de controle para especificar modos de arredondamento, o conteúdo do campo de controle de operação de arredondamento 3050 sobrepõe esse valor de registro.
[00287] Na operação do tipo VSIZE de controle de máscara de gravação 3017 sem acesso à memória modelo de instrução, o restante d o campo beta 3054 é interpretado como um campo de comprimento de vetor 3059B, cujo conteúdo distingue qual dentre um número de comprimento de vetores de dados deve ser realizado (por exemplo, 128, 256 ou 512 bytes).
[00288] No caso de um modelo de instrução com acesso à memória 3020 de classe B, parte do campo beta 3054 é interpretada como um campo de difusão 3057B, cujo conteúdo distingue se a operação de manipulação de dados do tipo difusão deve ser realizada, enquanto o resto do campo beta 3054 é interpretado como o campo de comprimento de vetor 3059B. Os modelos de instrução com acesso à memória 3020 incluem o campo de escala 3060, e, opcionalmente, o campo de deslocamento 3062A ou o campo de escala de deslocamento 3062B.
[00289] Com relação ao formato de instrução favorável de vetor genérico 3000, um campo de código operacional completo 3074 é mostrado incluindo o campo de formato 3040, o campo de operação-base 3042, e o campo de largura de elemento de dados 3064. Embora uma modalidade seja mostrada incluindo o campo de código operacional completo 3074 que inclui todos dentre esses campos, o campo de código operacional completo 3074 inclui menos que todos esses campos nas modalidades que não suportam todos esses campos. O campo de código operacional completo 3074 fornece o código de operação (código operacional).
[00290] O campo de operação de aumento 3050, o campo de largura de elemento de dados 3064, e o campo de máscara de gravação 3070 permite que esses recursos sejam especificados em uma base por instrução no formato de instrução favorável de vetor genérico.
[00291] A combinação de campo de máscara de gravação e campo de largura de elemento de dados criam instruções digitadas em que as mesmas permitem que a máscara seja aplicada com base em larguras de elemento de dados diferentes.
[00292] Os vários modelos de instrução constatados dentro da classe A e classe B são benéficos em situações diferentes. Em algumas modalidades da revelação, os processadores diferentes ou núcleos diferentes dentro de um processador podem suportar apenas classe A, apenas classe B ou ambas classes. Por exemplo, um núcleo fora de ordem de propósito geral de alto desempenho destinado à computação de propósitos gerais pode suportar apenas classe B, um núcleo destinado primariamente para computação gráfica e/ou científica (taxa de transferência) pode suportar apenas classe A, e um núcleo destinado a ambos pode suportar ambas (obviamente, um núcleo que tem alguma mistura de modelos e instruções de ambas as classes, mas não todos os modelos e instruções de ambas as classes, está dentro do âmbito da revelação). Adicionalmente, um processador único pode incluir múltiplos núcleos, todos os quais suportam a mesma classe ou nos quais núcleos diferentes suportam classes diferentes. Por exemplo, em um processador com núcleos de gráficos e de propósito geral separados, em um dentre os núcleos de gráficos é destinado primariamente para computação gráfica e/ou científica pode suportar apenas classe A, enquanto um ou mais dentre os núcleos de propósito geral podem ser núcleos de propósito geral de alto desempenho com execução e renomeação de registro fora de ordem destinados para computação de propósito geral que suporta apenas classe B. Outro processador que não tem um núcleos gráfico separados, pode incluir mais um núcleo de propósito geral em ordem ou núcleos fora de ordem que suportam tanto a classe A quanto classe B. Evidentemente, os recursos de uma classe também podem ser implantados em outra classe nas modalidades diferentes da invenção. Programas gravados em uma linguagem de alto nível seriam colocados (por exemplo, compilados ou estaticamente compilados no tempo certo) em uma variedade de formas executáveis diferentes, que incluem: 1) uma forma que tem apenas instruções da classe (ou classes) suportada pelo processador-alvo para execução; ou 2) uma forma que tem rotinas alternativas gravadas com uso de combinações diferentes das instruções de todas as classes e que têm código de fluxo de controle que seleciona as rotinas para executar com base nas instruções suportadas pelo processador que executa atualmente o código.
Formato de Instrução Favorável de Vetor Específico Exemplificativo
[00293] A Figura 31 é um diagrama de blocos que ilustra um formato de instrução favorável de vetor específico exemplificativo de acordo com modalidades da revelação. A Figura 31 mostra um formato de instrução favorável de vetor específico 3100 que é específico no sentido em que especifica a localização, tamanho, interpretação e ordem dos campos, bem como valores para parte desses campos. O formato de instrução favorável de vetor específico 3100 pode ser usado para estender o conjunto de instruções x86, e, desse modo, alguns dos campos são semelhantes ou são os mesmos que aqueles usados no conjunto de instruções x86 existente e extensão do mesmo (por exemplo, AVX). Esse formato permanece consistente com o campo de codificação de prefixo, campo de bytes de código operacional real, campo de R/M de MOD, campo de SIB, campo de deslocamento e campos imediatos do conjunto de instruções x86 existentes com extensões. Os campos da Figura 30 nos quais os campos da Figura 31 mapeiam são ilustrados.
[00294] Deve ser entendido que, embora as modalidades da revelação sejam descritas com referência ao formato de instrução favorável de vetor específico 3100 no contexto do formato de instrução favorável de vetor genérico 3000 para propósitos ilustrativos, a revelação não é limitada ao formato de instrução favorável de vetor específico 3100 exceto quando reivindicados. Por exemplo, o formato de instrução compatível com o vetor genérico 3000 contempla uma variedade de tamanhos possíveis para os vários campos, enquanto o formato de instrução compatível com o vetor específico 3100 é mostrado como tendo campos de tamanhos específicos. A título de exemplo específico, embora o campo de largura de elemento de dados 3064 seja ilustrado como um campo de um bit no formato de instrução compatível com o vetor específico 3100, a revelação não é limitada a isso (isto é, o formato de instrução compatível com vetor genérico 3000 contempla outros tamanhos do campo de largura de elemento de dados 3064).
[00295] O formato de instrução favorável de vetor genérico 3000 inclui os seguintes campos listados abaixo em ordem ilustrados na Figura 31A.
[00296] Prefixo de EVEX (0 a 3 bytes) 3102 – é codificado em uma forma de quatro bytes.
[00297] Campo de formato 3040 (byte 0 de EVEX, bits [7:0]) – o primeiro byte (byte 0 de EVEX) é o campo de formato 3040 e contém 0x62 (o valor único usado para distinguir o formato de instrução favorável de vetor em uma modalidade da revelação).
[00298] O segundo até o quarto bytes (1 a 3 bytes de EVEX) incluem um número de campo de bits que fornecem capacidade específica.
[00299] Campo de REX 3105 (EVEX Byte 1, bits [7-5]) – consiste em um campo de bit EVEX.R (EVEX Byte 1, bit [7] – R), campo de bit EVEX.X (EVEX byte 1, bit [6] – X) e 3057BEX byte 1, bit[5] – B). Os campos de bit de EVEX.R, EVEX.X e EVEX.B fornecem a mesma funcionalidade que os campos de bits VEX correspondentes, e são codificadas com o uso de forma de complemento de 1s, isto é, ZMM0 é codificado como 1111B, ZMM15 é codificado como 0000B. Outros campos das instruções codificam os três bits inferiores dos índices de registro conforme é conhecido na técnica (rrr, xxx e bbb), de modo que Rrrr, Xxxx e Bbbb possam ser formados adicionando-se EVEX.R, EVEX.X e EVEX.B.
[00300] Campo de REX’ 3010 – é a primeira parte do campo de REX’ 3010 e é o campo de bit de EVEX.R’ (1 byte de EVEX, bit [4] - R’) que é usado para codificar os 16 superiores ou 16 inferiores dentre o conjunto de 32 registros estendidos. Em uma modalidade da revelação, esse bit, junto com outros conforme indicado abaixo, é armazenado no formato invertido de bit para se distinguir (no modo de 32 bits x86 bem conhecido) da Instrução de BOUND, cujo byte de código operacional real é 62, porém, não é aceita no campo de R/M de MOD (descrito abaixo) o valor de 11 no campo de MOD; as modalidades alternativas da revelação não armazenam esse e os outros bits indicados abaixo no formato invertido. Um valor de 1 é usado para codificar os 16 registros inferiores. Em outras palavras, R’Rrrr é formado combinando-se EVEX.R’, EVEX.R, e o outro RRR dos outros campos.
[00301] Campo de mapa de código operacional 3115 (1 byte de EVEX, bits [3:0] – mmmm) – seu conteúdo codifica um byte de código operacional resultante implicado (0F, 0F 38, ou 0F 3).
[00302] Campo de largura de elemento de dados 3064 (2 bytes de EVEX, bit [7] – W) – é representado pela notação EVEX.W. EVEX.W é usado para definir a granularidade (tamanho) do tipo de dados (ou elementos de dados de 32 bits ou elementos de dados 64 bits).
[00303] EVEX.vvvv 3120 (2 bytes de EVEX, bits [6:3]- vvvv) - o papel de EVEX.vvvv pode incluir o seguinte: 1) EVEX.vvvv codifica o primeiro operando de registro de origem, especificado na forma invertida (complemento 1s) e é válido para instruções com 2 ou mais operandos de origem; 2) EVEX.vvvv codifica o operando de registro destino, especificado na forma de complemento 1s para as determinadas comutações de vetor; ou 3) EVEX.vvvv não codifica qualquer operando, o campo é reservado e deve conter 1111b. Desse modo, campo de EVEX.vvvv 3120 codifica os 4 bits de ordem baixa do primeiro especificador de registro de origem armazenado na forma invertida (complemento 1s). Dependendo da instrução, um campo de bit de EVEX extra diferente é usado para estender o tamanho de especificador a 32 registros.
[00304] Campo de classe EVEX.U 3068 (2 bytes de EVEX, bit [2]-U) – Se EVEX.U = 0, o mesmo indica classe A ou EVEX.U0; se EVEX.U = 1, o mesmo indica classe B ou EVEX.U1.
[00305] Campo de codificação de prefixo 3125 (2 bytes de EVEX, bits [1:0]-pp) – fornece bits adicionais para o campo de operação-base. Além de fornecer suporte para as instruções de SSE herdadas no formato de Prefixo de EVEX, isso também tem o benefício de compactar o Prefixo SIMD (em vez de exigir um byte para expressar o Prefixo SIMD, o Prefixo de EVEX exige apenas 2 bits). Em uma modalidade, para suportar instruções de SSE de herdadas que usam um Prefixo SIMD (66H, F2H, F3H) tanto no formato herdado quanto no formato de Prefixo de EVEX, esses prefixos SIMD de herdados são codificados no campo de codificação de prefixo SIMD; e no tempo de execução são expandidos no prefixo SIMD de herdado antes de serem fornecidos para o PLA do circuito de decodificação (de modo que o PLA possa executar tanto o formato herdado quanto de EVEX dessas instruções herdadas sem modificação). Embora instruções mais novas possa usar o Conteúdo do campo de codificação de prefixo EVEX diretamente como uma extensão de código operacional, determinadas modalidades se expandem de uma maneira semelhante para consistência, porém, permitem que significados diferentes sejam especificados por esses prefixos SIMD herdados. Uma modalidade alternativa pode projetar novamente o PLA para suportar as codificações de prefixo SIMD de 2 bits, e, desse modo, não exige a expansão.
[00306] Campo alfa 3052 (byte 3 de EVEX, bit [7] – EH; também conhecido como controle de máscara de gravação EVEX.EH, EVEX.rs, EVEX.RL, EVEX. e EVEX.N; também ilustrado com α) – conforme descrito anteriormente, esse campo é específico de contexto.
[00307] Campo beta 3054 (EVEX byte 3, bits [6:4]-SSS, também conhecido como EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; também ilustrado com βββ) – conforme anteriormente descrito, esse campo é específico ao contexto.
[00308] Campo de REX’ 3010 – é o restante do campo de REX’ e é o campo de bit de EVEX.V’ (byte 3 de EVEX, bit [3] - V’) que pode ser usado para codificar os 16 superiores ou 16 inferiores do conjunto de 32 registros estendidos. Esse bit é armazenado no formato invertido de bit. Um valor de 1 é usado para codificar os 16 registros inferiores. Em outras palavras, V’VVVV é formado por meio da combinação de EVEX.V’, EVEX.vvvv.
[00309] Campo de máscara de gravação 3070 (EVEX byte 3, bits [2:0]-kkk) – seu conteúdo especifica o índice de um registro nos registros de máscara de gravação conforme anteriormente descrito. Em uma modalidade da revelação, o valor específico EVEX.kkk=000 tem um comportamento especial que implica que nenhuma máscara de gravação seja usada para a instrução particular (isso pode ser implantado em uma variedade de formas que inclui o uso de uma máscara de gravação ligada com fio a todos ou hardware que desvia o hardware de mascaramento).
[00310] Campo de código operacional real 3130 (Bytes 4) também é conhecido como os bytes de código operacional. Parte do código operacional é especificada nesse campo.
[00311] Campo de R/M de MOD 3140 (Bytes 5) inclui campo de MOD 3142, campo de Reg 3144 e campo de R/M 3146. Conforme descrito anteriormente, o conteúdo do campo de MOD 3142 distingue entre as operações com acesso à memória e sem acesso à memória. O papel do campo de Reg 3144 pode ser resumido a duas situações: codificar o operando de registro destino ou um operando de registro de origem, ou ser tratado como uma extensão de código operacional e não usado para codificar qualquer operando de instrução. O papel do campo de R/M 3146 pode incluir o seguinte: codificar o operando de instrução que referencia um endereço de memória, ou codificar o operando de registro de destino ou um operando de registro de origem.
[00312] Escala, índice, Bytes-Base (SIB) (6 bytes) - Conforme descrito anteriormente, o conteúdo do campo de escala 3050 é usado para geração de endereço de memória. SIB.xxx 3154 e SIB.bbb 3156 – os conteúdos desses campos foram mencionados anteriormente com relação aos índices de registro Xxxx e Bbbb.
[00313] Campo de deslocamento 3062A (Bytes 7-10) – quando o campo de MOD 3142 contém 10, os bytes 7-10 são o campo de deslocamento 3062A, e funciona da mesma forma que o deslocamento de 32 bits herdados (disp32) e funciona em granularidade de byte.
[00314] Campo de fator de deslocamento 3062B (bytes 7) – quando o campo de MOD 3142 contém 01, o byte 7 é o campo de fator de deslocamento 3062B. A localização desse campo é a mesma que aquela do deslocamento de 8 bits de conjunto de instruções x86 herdadas (disp8), que funciona na granularidade de bytes. Visto que disp8 tem sinal estendido, o mesmo pode apenas endereçar entre desvios de -128 e 127 bytes; em termos de linhas de cache de 64 bytes, disp8 usa 8 bits que podem ser definidos para apenas quatro valores realmente úteis de -128, -64, 0 e 64; visto que uma faixa maior é frequentemente necessária, disp32 é usado; no entanto, disp32 exige 4 bytes. Em contraste com o disp8 e o disp32, o campo de fator de deslocamento 3062B é uma reinterpretação de disp8; quando usar o campo de fator de deslocamento 3062B, o deslocamento atual é determinado pelo conteúdo do campo de fator de deslocamento multiplicado pelo tamanho do acesso de operando de memória (N). Esse tipo de deslocamento é denominado como disp8*N. Isso reduz o comprimento de instrução médio (um único byte é usado para o deslocamento, porém, com uma faixa muito maior). Tal deslocamento comprimido tem base na suposição de que o deslocamento eficaz é um múltiplo da granularidade do acesso à memória e, então, os bits de ordem redundantes inferiores do desvio de endereço não precisam ser codificados. Em outras palavras, o campo de fator de deslocamento 3062B substitui o deslocamento de 8 bits de conjunto de instruções x86 herdadas. Desse modo, o campo de fator de deslocamento 3062B é codificado da mesma forma que um deslocamento de 8 bits de conjunto de instruções x86 (de modo que nenhuma alteração nas regras de codificação de ModRM/SIB) com a única exceção de que disp8 é sobrecarregado um disp8*N. Em outras palavras, não há alterações nas regras de codificação ou comprimentos de codificação, porém, apenas na interpretação do valor de deslocamento por hardware (que precisa escalar o deslocamento pelo tamanho do operando de memória para obter um desvio de endereço no sentido de bytes). O campo imediato 3072 opera conforme descrito anteriormente.
Campo de código operacional completo
[00315] A Figura 31B é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico 200 que compõem o campo de código operacional completo 174 de acordo com uma modalidade da revelação. Especificamente, o campo de código de operação completo 3074 inclui o campo de formato 3040, o campo de operação-base 3042 e o campo de largura de elemento de dados (W) 3064. O campo de operação-base 3042 inclui o campo de codificação de prefixo 3125, o campo de mapeamento de código de operação 3115, e o campo de código de operação real 3130.
Campo de Índice de Registro
[00316] A Figura 31C é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico 200 que compõe o campo de índice de registro 144 de acordo com uma modalidade da revelação. Especificamente, o campo de índice de registro 3044 inclui o campo REX 3105, o campo REX’ 3110, o campo MODR/M.reg 3144, o campo MODR/M.r/m 3146, o campo VVVV 3120, o campo xxx 3154 e o campo bbb 3156.
Campo de Operação de Aumento
[00317] A Figura 31D é um diagrama de blocos que ilustra os campos do formato de instrução favorável de vetor específico 200 que compõem o campo de operação de aumento 150 de acordo com uma modalidade da revelação. Quando o campo de classe (U) 3068 contém 0, significa EVEX.U0 (classe A 3068A); quando contém 1, significa EVEX.U1 (classe B 3068B). Quando U=0 e o campo de MOD 3142 contém 11 (que significa operação sem acesso à memória), o campo alfa 3052 (byte EVEX 3, bit [7] – EH) é interpretado como o campo de rs 3052A. Quando o campo de RS 3052A contiver um 1 (arredondamento 3052A.1), o campo beta 3054 (byte 3 de EVEX, bits [6:4]- SSS) é interpretado como o campo de controle de arredondamento 3054A. O campo de controle de arredondamento 3054A inclui um campo de SAE de um bit 3056 e um campo de operação de arredondamento de dois bits 3058. Quando o campo de RS 3052A contiver um 0 (transformada de dados 3052A.2), o campo beta 3054 (byte 3 de EVEX, bits [6:4]- SSS) é interpretado como um campo de transformada de dados de três bits 3054B. Quando U=0 e o campo de MOD 3142 contiver 00, 01 ou 10 (que significa uma operação com acesso à memória), o campo alfa 3052 (byte 3 de EVEX, bit [7] – EH) é interpretado como o campo de dica de remoção (EH) 3052B e o campo beta 3054 (byte 3 de EVEX, bits [6:4]- SSS) é interpretado como um campo de manipulação de dados de três bits 3054C.
[00318] Quando U=1, o campo alfa 3052 (byte 3 de EVEX, bit [7] – EH) é interpretado como o campo de controle de máscara de gravação (Z) 3052C. Quando U=1 e o campo de MOD 3142 contiver 11 (o que significa operação sem acesso à memória), parte do campo beta 3054 (byte EVEX 3, bit [4]- S0) é interpretada como o campo de RL 3057A; quando contém um 1 (arredondamento 3057A.1), em que o resto do campo beta 3054 (byte EVEX 3, bit [6-5]- S2-1) é interpretado como o campo de operação de arredondamento 3059A, enquanto quando o campo de RL 3057A contém um 0 (VSIZE 3057.A2), o resto do campo beta 3054 (byte EVEX 3, bit [6-5]- S2-1) é interpretado como o campo de comprimento de vetor 3059B (byte EVEX 3, bit [6-5]- L1- 0). Quando U=1 e o campo de MOD 3142 contiver 00, 01, ou 10 (o que significa uma operação com acesso à memória), o campo beta 3054 (byte EVEX 3, bits [6:4]- SSS) é interpretado como o campo de comprimento de vetor 3059B (byte EVEX 3, bit [6-5]- L1-0) e o campo de difusão 3057B (byte EVEX 3, bit [4]- B).
Arquitetura de Registro Exemplificativa
[00319] A Figura 32 é um diagrama de blocos de uma arquitetura de registro 300 de acordo com uma modalidade da revelação. Na modalidade ilustrada, há 32 registros de vetor 3210 que têm 512 bits de amplitude; esses registros são chamados de zmm0 até zmm31. Os 256 bits de ordem inferior dos 16 registros zmm inferiores são sobrepostos em registros ymm0-16. Os 128 bits de ordem inferior dos 16 registros zmm inferiores (os 128 bits de ordem inferior dos registros ymm) são sobrepostos nos registros xmm0-15. O formato de instrução favorável de vetor específico 3100 opera nesse arquivo de registro sobreposto, conforme ilustrado na Tabela 1 abaixo.
Figure img0010
[00320] Em outras palavras, o campo de comprimento de vetor 3059B seleciona entre um comprimento máximo e um ou mais outros comprimentos mais curtos, em que cada tal comprimento mais curto é metade do comprimento do comprimento anterior; e modelos de instruções sem o campo de comprimento de vetor 3059B operam no comprimento de vetor máximo. Adicionalmente, em uma modalidade, os modelos de instrução de classe B do formato de instrução compatível com vetor específico 3100 operam em dados de ponto de flutuação de precisão única/dupla empacotados ou escalares e dados de número inteiro empacotados ou escalares. As operações escalares são operações realizadas na posição de elemento de dados de ordem mais inferior em um registro zmm/ymm/xmm; as posições de elemento de dados de ordem mais alta são deixadas como a mesma que foram antes da instrução ou reduzidas a zero dependendo da modalidade.
[00321] Registros de máscara de gravação 3215 - na modalidade ilustrada, há 8 registros de máscara de gravação (k0 até k7), cada um com 64 bits em tamanho. Em uma modalidade alternativa, os registros de máscara de gravação 3215 têm 16 bits em tamanho. Conforme anteriormente descrito, em uma modalidade da revelação, o registro de máscara de vetor k0 não pode ser usado como uma máscara de gravação; quando a codificação que indicaria normalmente k0 para usada para uma máscara de gravação, o mesmo seleciona uma máscara de gravação diretamente conectada de 0xFFFF, que desabilita efetivamente a máscara de gravação para essa instrução.
[00322] Registros de propósito geral 3225 - na modalidade ilustrada, há dezesseis registros de propósito geral de 64 bits que são usados junto com os modos de endereçamento x86 existentes para endereçar operandos de memória. Esses registros são chamados pelos nomes RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP e R8 até R15.
[00323] Arquivo de registro de empilhamento de ponto de flutuação escalar (empilhamento x87) 3245, no qual é expresso com ALIAS o arquivo de registro plano de número inteiro empacotado MMX 3250 - na modalidade ilustrada, o empilhamento x87 é um empilhamento de oito elementos usado para realizar as operações de ponto de flutuação escalares em dados de ponto de flutuação de 32/64/80 bits com uso da extensão de conjunto de instruções x87, enquanto os registros MMX são usados para realizar operações em dados de número inteiro empacotado de 64 bits, assim como para reter os operandos para algumas operações realizadas entre os registros MMX e XMM.
[00324] Modalidades alternativas da revelação podem usar registros mais amplos ou mais curtos. Alternativamente, modalidades alternativas da revelação podem usar mais, menos ou diferentes arquivos de registro e registros.
Arquiteturas de Núcleo, Processadores e Arquiteturas de Computador Exemplificativas
[00325] Núcleos de processador podem ser implantados em formas diferentes, para propósitos diferentes, e em processadores diferentes. Por exemplo, implantações de tais núcleos podem incluir: 1) um núcleo em ordem de propósito geral destinado para computação de propósito geral; 2) um núcleo fora de ordem de propósito geral de alto desempenho destinado para computação de propósito geral; 3) um núcleo de propósito específico destinado primariamente para computação gráfica e/ou científica (completa). Implantações de processadores diferentes podem incluir: 1) uma CPU que inclui um ou mais núcleos em ordem de propósito geral destinado para computação de propósito geral e/ou um ou mais núcleos fora de ordem de propósito geral destinados para computação de propósito geral; e 2) um coprocessador que inclui um ou mais núcleos de propósito especiais destinados primariamente para gráficos e/ou científicos (completo). Tais processadores diferentes resultam em arquiteturas de sistema de computador diferentes, que podem incluir: 1) o coprocessador em um chip separado do CPU; 2) o coprocessador em uma matriz separada no mesmo pacote que uma CPU; 3) o coprocessador na mesma matriz como uma CPU (em tal caso, tal coprocessador é, algumas vezes, denominado como lógica de propósito específico, tal como lógica gráfica e/ou científica (completa) integrada, ou como núcleos de propósito específico); e 4) um sistema em um chip que pode incluir na matriz a CPU descrita (algumas vezes chamada de núcleo (ou núcleos) de aplicativo ou processador (ou processadores) de aplicativo), o coprocessador descrito acima e funcionalidade adicional. As arquiteturas de núcleo exemplificativas são descritas a seguir, seguidas pelas descrições de processadores e arquiteturas de computador exemplificativas.
Arquiteturas de Núcleo Exemplificativas Diagrama de blocos de núcleo em ordem e fora de ordem
[00326] A Figura 33A é um diagrama de blocos que ilustra tanto um pipeline em ordem exemplificativa quanto um pipeline de emissão/execução fora de ordem de renomeamento de registro exemplificativa de acordo com modalidades da revelação. A Figura 33B é um diagrama de blocos que ilustra tanto uma modalidade exemplificativa de um núcleo de arquitetura em ordem quanto um núcleo de arquitetura de emissão/execução fora de ordem e renomeação de registro exemplificativa fora de ordem a serem incluídos em um processador de acordo com modalidades da revelação. A caixas de linhas sólidas nas Figuras 33A a 4B ilustram o pipeline em ordem e o núcleo em ordem, enquanto a adição opcional das caixas de linhas tracejadas ilustra o renomeamento de registro, pipeline e núcleo de emissão/execução fora de ordem. Dado que o aspecto em ordem é um subconjunto do aspecto fora de ordem, o aspecto fora de ordem será descrito.
[00327] Na Figura 33A, um pipeline de processador 3300 inclui um estágio de busca 3302, um estágio de decodificação de comprimento 3304, um estágio de decodificação 3306, um estágio de alocação 3308, um estágio de renomeamento 3310, um estágio de agendamento (também conhecido como uma expedição ou emissão) 3312, um estágio de leitura de registro/leitura de memória 3314, um estágio de execução 3316, um estágio de writeback/gravação de memória 3318, um estágio de manipulação de exceção 3322 e um estágio de confirmação 3324.
[00328] A Figura 33B mostra o núcleo de processador 3390 que inclui uma unidade de extremidade frontal 3330 acoplada a uma unidade de motor de execução 3350 e ambas são acopladas a uma unidade de memória 3370. O núcleo 3390 pode ser um núcleo de computação de conjunto de instruções reduzido (RISC), um núcleo de computação de conjunto de instruções complexo (CISC), um núcleo de instrução muito longo (VLIW) ou um tipo de núcleo híbrido ou alternativo. Ainda como outra opção, o núcleo 3390 pode ser um núcleo de finalidade especial como, por exemplo, um núcleo de rede ou comunicação, motor de compressão, núcleo de coprocessador, núcleo de unidade de processamento de gráficos de computação com finalidade geral (GPGPU), núcleo de gráficos ou similares.
[00329] A unidade de extremidade frontal 3330 inclui uma unidade de previsão de ramificação 3332 acoplada a uma unidade de cache de instrução 3334 que é acoplada a um armazenamento temporário de instrução de tradução à parte (TLB) 3336 que é acoplado a uma unidade de coleta de instrução 3338 que é acoplada a uma unidade de decodificação 3340. A unidade de decodificação 3340 (por exemplo, circuito decodificador) pode decodificar instruções (por exemplo, macroinstruções), e gerar como uma saída uma ou mais micro-operações, pontos de entrada de microcódigo, microinstruções, outras instruções ou outros sinais de controle, que são decodificados, ou que de outro modo refletem, ou são derivadas, das instruções originais. A unidade de decodificação 3340 pode ser implantada com uso de vários mecanismos diferentes. Os exemplos de mecanismos adequados incluem, mas não se limitam a tabelas de pesquisa, implantações de hardware, arranjos lógicos programáveis (PLAs), memórias somente de leitura de microcódigo (ROMs), etc. Em uma modalidade, o núcleo 3390 inclui um microcódigo ROM ou outro meio que armazena microcódigo para determinas macroinstruções (por exemplo, na unidade de decodificação 3340 ou dentro da unidade de extremidade frontal 3330). A unidade de decodificação 3340 é acoplada a uma unidade de renomeamento/alocação 3352 na unidade de motor de execução 3350.
[00330] A unidade de motor de execução 3350 inclui a unidade de renomeamento/alocação 3352 acoplada a uma unidade de retirada 3354 e um conjunto de uma ou mais unidade de agendador (ou unidades de agendador) 3356. A unidade de agendador (ou unidades de agendador) 3356 representa qualquer número de agendadores diferentes, que inclui estações de reserva, janela de instrução central, etc. A unidade de agendador (ou unidades de agendador) 3356 é acoplada à unidade de arquivo de registro físico (ou unidades de arquivos de registro físico) 3358. Cada uma das unidades de arquivo(s) de registro físicos 3358 representa um ou mais arquivos de registro físicos, em que aqueles diferentes armazenam um ou mais tipos de dados diferentes, como número inteiro escalar, ponto de flutuação escalar, número inteiro de empacotamento, ponto de flutuação empacotado, número inteiro de vetor, ponto de flutuação de vetor, estado (por exemplo, um apontador de instrução que é o endereço da próxima instrução a ser executada), etc. Em uma modalidade, a unidade de arquivo(s) de registro físico 3358 compreende uma unidade de registros de vetor, uma unidade de gravação de registros de máscara, e uma unidade de registros escalar. Essas unidades de registro podem fornecer registros de vetor arquitetônicos, registros de máscara de vetor e registros de finalidade geral. A unidade de arquivo de registro físico (ou unidades de arquivos de registro físicos) 3358 é sobreposta pela unidade de desativação 3354 para ilustrar várias maneiras nas quais a renomeação de registro e a execução fora de ordem podem ser implantadas (por exemplo, com uso de um armazenamento temporário de reordenamento (ou armazenamentos temporários de reordenamento) e um arquivo de registro de desativação (ou arquivos de registro de desativação); com uso de um arquivo futuro (ou arquivos futuros), um armazenamento temporário de histórico (ou armazenamentos temporários de históricos) e um arquivo de registro de desativação (ou arquivos de registro de desativação); com uso de mapas de registro e um grupamento de registros; etc.). A unidade de desativação 3354 e a unidade de arquivo de registro físico (ou unidades de arquivos de registro físicos) 3358 são acopladas ao agrupamento de execução (agrupamentos de execução) 3360. O agrupamento de execução (agrupamentos de execução) 3360 inclui um conjunto de uma ou mais unidades de execução 3362 (por exemplo, circuitos de execução) e um conjunto de uma ou mais unidades de acesso à memória 3364. As unidades de execução 3362 podem realizar várias operações (por exemplo, turnos, adição, subtração, multiplicação) e em vários tipos de dados (por exemplo, ponto de flutuação escalar, número inteiro de compactação, ponto de flutuação compactado, número inteiro de vetor, ponto de flutuação de vetor). Embora algumas modalidades possam incluir várias unidades de execução dedicadas a funções ou conjuntos de funções específicas, outras modalidades podem incluir apenas uma unidade de execução ou múltiplas unidades de execução que realizam todas as funções. A unidade de agendador (ou unidades de agendador) 3356, unidade de arquivo de registro físico (ou unidades de arquivos de registro físicos) 3358, e agrupamento de execução (ou agrupamentos de execução) 3360 são mostrados como sendo, possivelmente, plurais em determinadas modalidades criadas separadas de pipelines para determinados tipos de dados/operações (por exemplo, um pipeline de número inteiro escalar, um ponto de flutuação escalar/número inteiro compactado/ponto de flutuação compactado/número inteiro de vetor/pipeline de ponto de flutuação de vetor, e/ou um pipeline com acesso à memória em que cada um tem sua própria unidade de agendador, unidade de arquivo de registro físico (ou unidades de arquivos de registro físicos), e/ou agrupamento de execução – e no caso de um pipeline com acesso à memória separada, determinadas modalidades são implantadas, nas quais apenas o agrupamento de execução dessa pipeline tem a unidade com acesso à memória (ou unidades com acesso à memória) 3364). Também se deve observar que quando pipelines separadas forem usadas, uma ou mais dentre essas pipelines pode ser emissão/execução foram de ordem e o restante em ordem.
[00331] O conjunto de unidades de acesso à memória 3364 é acoplado à unidade de memória 3370 que inclui uma unidade de TLB de dados 3372 acoplada a uma unidade de cache de dados 3374 acoplada a uma unidade de cache 3376 de nível 2 (L2). Em uma modalidade exemplificativa, as unidades de acesso à memória 3364 podem incluir uma unidade de carga, uma unidade de endereço de armazenamento e uma unidade de dados de armazenamento, em que cada uma é acoplada à unidade de TLB de dados 3372 na unidade de memória 3370. A unidade de cache de instrução 3334 é acoplada adicionalmente a uma unidade de cache 3376 de nível 2 (L2) na unidade de memória 3370. A unidade de cache de L2 3376 é acoplada a um ou mais outros níveis de cache e, eventualmente, a uma memória principal.
[00332] A título de exemplo, a arquitetura de núcleo de emissão/execução fora de ordem e de renomeação de registro exemplificativa fora de ordem pode implantar o pipeline 3300 conforme segue: 1) a busca de instrução 3338 realiza a busca e os estágios de decodificação de comprimento 3302 e 3304; 2) a unidade de decodificação 3340 realiza o estágio de decodificação 3306; 3) a unidade de renomeação/alocação 3352 realiza o estágio de alocação 3308 e o estágio de renomeação 3310; 4) a unidade de agendamento (ou unidades de agendamento) 3356 realiza o estágio de agendamento 3312; 5) a unidade de arquivo de registro físico (ou unidades de arquivos de registro físicos) 3358 e a unidade de memória 3370 realizam o estágio de leitura de registro/leitura de memória 3314; o agrupamento de execução 3360 realiza o estágio de execução 3316; 6) a unidade de memória 3370 e a unidade de arquivo de registro físico (ou unidades de arquivos de registro físicos) 3358 realizam o estágio reintegração/gravação em memória 3318; 7) várias unidades podem ser envolvidas no estágio de manuseio de exceção 3322; e 8) a unidade de desativação 3354 e a unidade de arquivo de registro físico (ou unidades de arquivos de registro físicos) 3358 realizam o estágio de confirmação 3324.
[00333] O núcleo 3390 pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86 (com algumas extensões que foram adicionadas a novas versões); o conjunto de instruções de MIPS de Tecnologias MIPS de Sunnyvale, CA; o conjunto de instruções (com extensões adicionais opcionais como NEON) de ARM Holdings de Sunnyvale, CA), incluindo a instrução descrita (ou instruções descritas) no presente documento. Em uma modalidade, o núcleo 3390 inclui lógica para suportar uma extensão de conjunto de instruções de dados compactados (por exemplo, AVX1, AVX2), permitindo, dessa forma, que as operações usadas por vários aplicativos de multimídia sejam realizadas com uso de dados compactados.
[00334] Deve-se compreender que o núcleo pode suportar multithreading (executar dois ou mais conjuntos de operações paralelos ou módulos) e podem 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 que o núcleo físico está multithreading simultaneamente) ou uma combinação dos mesmos (por exemplo, coleta e decodificação segmentada por tempo e multithreading simultâneo, doravante, como na tecnologia Intel® HyperThreading).
[00335] Embora a renomeação de registro seja descrita no contexto de execução fora de ordem, deve-se compreender que a renomeação de registro pode ser usada em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também inclua unidades de instrução e de cache de dados separadas 3334/3374 e uma unidade de cache L2 compartilhado 3376, modalidades alternativas podem ter um único cache interno tanto para instruções quanto para dados, tal como, por exemplo, um cache interno de nível 1 (L1), ou múltiplos níveis de cache interno. Em algumas modalidades, o sistema pode incluir uma combinação de um cache interno e um cache externo que é externo ao núcleo e/ou ao processador. Alternativamente, todo o cache pode ser externo ao núcleo e/ou ao processador.
Arquitetura de Núcleo em Ordem Exemplificativa Específica
[00336] As Figuras 34A-B ilustram um diagrama em blocos de uma arquitetura de núcleo em ordem exemplificativa mais específica, cujo núcleo pode ser um dentre vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou de tipos diferentes) em um chip; Os blocos de lógica se comunicam através de uma rede de interconexão de alta largura de banda (por exemplo, a rede em anel) com alguma lógica de função fixada, interfaces I/O de memória e outras lógicas I/O necessárias, dependendo do aplicativo.
[00337] A Figura 34A é um diagrama de blocos de um núcleo de processador único, junto com sua conexão à rede de interconexão em matriz 3402 e com seu subconjunto local do cache de Nível 2 (L2) 3404, de acordo com modalidades da revelação. Em uma modalidade, um unidade decodificadora de instrução 3400 suporta o conjunto de instrução x86 com uma extensão de conjunto de instrução de dados empacotados. Um cache L1 3406 permite acessos de baixa latência à memória de cache nas unidades de vetor e escalar. Embora em uma modalidade (para simplificar o projeto), uma unidade escalar 3408 e uma unidade de vetor 3410 usam conjuntos de registros separados (respectivamente, registros escalares 3412 e registros de vetor 3414) e dados transferidos entre as mesmas são gravados na memória e, então, relidos para um cache de nível 1 (L1) 3406, as modalidades alternativas da revelação podem usar uma abordagem diferente (por exemplo, usar um conjunto de registros único ou incluir uma trajetória de comunicação que permite que dados sejam transferidos entre os dois arquivos de registro sem serem gravados ou relidos).
[00338] O subconjunto local do cache L2 3404 é parte de um cache global L2 que é dividido em subconjuntos locais separados, um por núcleo de processador. Cada núcleo de processador tem uma trajetória de acesso direto ao próprio subconjunto local do cache L2 3404. Dados lidos por um núcleo de processador são armazenados em seu subconjunto de cache de L2 3404 e podem ser acessados rapidamente, em paralelo com outros núcleos de processador que seus próprios subconjuntos de cache de L2 locais. Dados gravados por um núcleo de processador são armazenados em seu próprio subconjunto de cache de L2 3404 e é descartado de outros subconjuntos, se necessário. A rede em anel garante a coerência para dados compartilhados. A rede em anel é bidirecional para permitir que o agente de tais núcleos de processador, caches de L2 e outros blocos lógicos se comuniquem entre si dentro do chip. Cada trajetória de dados em anel tem amplitude de 1.012 bits por direção.
[00339] Figura 34B ilustra uma vista expandida de parte do núcleo de processador na Figura 34A de acordo com modalidades da invenção; A Figura 34B inclui uma parte de cache de dados de L1 3406A do cache de L1 3404, bem como mais detalhes sobre a unidade de vetor 3410 e os registros de vetor 3414. Especificamente, a unidade de vetor 3410 é uma unidade de processamento vetor de amplitude 16 (VPU) (consultar a ALU de amplitude 16 3428), que executa uma ou mais dentre as instruções de número inteiro, flutuação de precisão única e precisão dupla. A VPU suporta realizar swizzle das entradas de registro com unidade de swizzle 3420, conversão numérica com unidades de conversão numérica 3422A-B, e replicação com unidade de replicação 3424 na entrada de memória. Registros de máscara de gravação 3426 permitem prever gravações de vetor resultantes.
[00340] A Figura 35 é um diagrama de blocos de um processador 3500 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 sólidas demarcadas na Figura 35 ilustram um processador 3500 com um único núcleo 3502A, um agente de sistema 3510, um conjunto de uma ou mais unidades de controlador de barramento 3516, enquanto a adição opcional das caixas em linha tracejada ilustra um processador alternativo 3500 com múltiplos núcleos 3502A a 202N, um conjunto de uma ou mais unidades de controlador de memória integrada 3514 na unidade de agente de sistema 3510 e lógica de finalidade especial 3508.
[00341] Dessa forma, as implantações diferentes do processador 3500 podem incluir: 1) uma CPU com a lógica de finalidade especial 3508 sendo gráficos integrados e/ou lógica científica (rendimento) (que pode incluir um ou mais núcleos) e sendo que os núcleos 3502A a 302N são um ou mais núcleos de finalidade geral (por exemplo, núcleos em ordem de finalidade geral, núcleos fora de ordem de finalidade geral, uma combinação dos dois); 2) um coprocessador com os núcleos 3502A a 302N que são um grande número de núcleos com finalidade especial projetados principalmente para gráficos e/ou lógica científica (rendimento); e 3) um coprocessador com os núcleos 3502A a 302N que são um grande número de núcleos em ordem de finalidade geral. Dessa forma, o processador 3500 pode ser um processador de finalidade geral, coprocessador ou processador de finalidade especial como, por exemplo, um processador de rede ou comunicação, um motor compressão, um processador de gráficos, GPGPU (unidade de processamento de gráficos de finalidade geral), um coprocessador de núcleo de alto rendimento integrado (MIC) (incluindo 30 ou mais núcleos), processador embutido ou semelhante. O processador pode ser implantado em um ou mais chips. O processador de aplicativo 3500 pode ser uma parte de e/ou pode ser implantado em um ou mais substratos que usam qualquer diversidade de tecnologias de processo, tais como, por exemplo, BiCMOS, CMOS ou NMOS.
[00342] A hierarquia de memória inclui um ou mais níveis de cache dentro dos núcleos, um conjunto ou uma ou mais unidades de cache compartilhados 3506 e memória externa (não mostrada) acoplada ao conjunto de unidades de controlador de memória integrada 3514. O conjunto de unidades de cache compartilhado 3506 pode incluir um ou mais caches de nível médio, tais como o nível 2 (L2), o nível 3 (L3), o nível 4 (L4) ou outros níveis de cache, um cache de último nível (LLC) e/ou combinações dos mesmos. Embora em uma modalidade uma unidade de interconexão com base em anel 3512 interconecte a lógica de gráficos integrada 3508, o conjunto de unidades de cache compartilhado 3506 e a unidade de agente de sistema 3510/unidade (ou unidades) de controlador de memória integrada 3514, modalidades alternativas podem usar qualquer número de técnicas bem conhecidas para interconectar tais unidades. Em uma modalidade, a coerência é mantida entre uma ou mais unidades de cache 3506 e núcleos 3502-A-N.
[00343] Em algumas modalidades, um ou mais dentre os núcleos 3502A-N têm capacidade de realizar multithreading. A unidade de agente de sistema 3510 inclui aqueles componentes que coordenam e operam os núcleos 3502A-N. A unidade de agente de sistema 3510 pode incluir, por exemplo, uma unidade de controle de potência (PCU) e uma unidade exibição. A PCU pode ser ou incluir a lógica e os componentes necessários para regular o estado de potência dos núcleos 3502A-N e a lógica de gráficos integrada 3508. A unidade exibição tem como objetivo acionar um ou mais monitores conectados externamente.
[00344] Os núcleos 3502A a 3502A podem ser homogêneos ou heterogêneos em termos de conjunto de instrução de arquitetura, isto é, dois ou mais dentre os núcleos 302A a 302N podem ter capacidade para executar o mesmo conjunto de instruções, enquanto outros podem ter capacidade para executar apenas um subconjunto desse conjunto de instruções ou de um conjunto de instruções diferente.
ARQUITETURAS DE COMPUTADOR EXEMPLIFICATIVAS
[00345] As Figuras 36-39 são diagramas de blocos de arquiteturas de computador exemplificativas. Outros modelos e configurações de sistema conhecidos nas técnicas para computadores do tipo laptop, computadores do tipo desktops, PCs portáteis, assistentes pessoais digitais, estações de trabalho de engenharia, servidores, dispositivos de rede, hubs de rede, comutadores, processadores embutidos, processadores de sinal digital (DSPs), dispositivos de gráficos, dispositivos de vídeo game, decodificadores de sinais, microcontroladores, telefones celulares, reprodutores de mídia transportáveis, dispositivos portáteis e vários outros dispositivos eletrônicos também são adequados. Em geral, uma grande variedade de sistemas ou dispositivos eletrônicos com a capacidade para incorporar um processador e/ou outra lógica de execução, conforme revelado no presente documento, são, de modo geral, adequadas.
[00346] Referindo-se, agora, à Figura 36, um diagrama de blocos de um sistema 3600 é mostrado de acordo com uma modalidade da presente revelação. O sistema 3600 pode incluir um ou mais processadores 3610, 3615, que são acoplados a um concentrador de controlador 3620. Em uma modalidade, o hub de controlador 3620 inclui um hub de controlador de memória gráfica (GMCH) 3690 e um Hub de Entrada/Saída (IOH) 3650 (que pode estar em chips separados); o GMCH 3690 inclui controladores de memória e gráficos para os quais são memória acoplada 3640 e um coprocessador 3645; o IOH 3650 acopla os dispositivos de entrada/saída (I/O) 3660 ao GMCH 3690. Alternativamente, um ou ambos os controladores de memória e gráficos estão integrados dentro do processador (conforme descrito no presente documento), a memória 3640 e o coprocessador 3645 são acoplados diretamente ao processador 3610 e ao concentrador de controlador 3620 em um único chip com o IOH 3650. A memória 3640 pode incluir código de aceleração de matriz 3640A, por exemplo, que armazena um código que, quando executado, faz com que um processador execute qualquer método desta revelação.
[00347] A natureza opcional de processadores adicionais 3615 é representada na Figura 36 com linhas cortadas. Cada processador 3610, 3615 pode incluir um ou mais dos núcleos de processamento descritos no presente documento e podem ser alguma versão do processador 3500.
[00348] A memória 3640 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 hub de controlador 3620 se comunica com o processador (ou processadores) 3610, 3615 através de um barramento multiponto, como um barramento frontal (FSB), interface ponto a ponto como Interconexão QuickPath (QPI) ou conexão semelhante 3695.
[00349] Em uma modalidade, o coprocessador 3645 é um processador de finalidade especial como, por exemplo, um processador de MIC de alto rendimento, um processador de rede ou comunicação, compressão de motor, processador de gráficos, GPGPU, processador embutido ou similar. Em uma modalidade, o hub de controlador 3620 pode incluir um acelerador de gráficos integrado.
[00350] Pode haver várias diferenças entre os recursos físicos 3610, 3615 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.
[00351] Em uma modalidade, o processador 3610 executa instruções que controlam operações de processamento de dados de um tipo geral. As instruções de coprocessador podem estar integradas nas instruções. O processador 3610 reconhece essas instruções de coprocessador como sendo de um tipo que poderia ser executado pelo coprocessador 3645 anexado. Consequentemente, o processador 3610 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 3645. O coprocessador (ou coprocessadores) 3645 aceita e executa as instruções de coprocessador recebidas.
[00352] Referindo-se agora à Figura 37, um diagrama de blocos de um primeiro sistema exemplificativo mais específico 3700 é mostrado de acordo com uma modalidade da presente revelação. Conforme mostrado na Figura 37, o sistema de multiprocessador 3700 é um sistema de interconexão ponto a ponto e inclui um primeiro processador 3770 e um segundo processador 3780 acoplados através de uma interconexão ponto a ponto 3750. Cada um dos processadores 3770 e 3780 pode ser alguma versão do processador 3500. Em uma modalidade da revelação, os processadores 3770 e 3780 são, respectivamente, processadores 3610 e 3615, enquanto o coprocessador 3738 é o coprocessador 3645. Em outra modalidade, os processadores 3770 e 3780 são, respectivamente, o processador 3610 e o coprocessador 3645.
[00353] Os processadores 3770 e 3780 são mostrados com as unidades de controlador de memória integrada (IMC) 3772 e 3782, respectivamente. O processador 3770 também inclui como parte de suas unidades de controlador de barramento as interfaces ponto a ponto (P-P) 3776 e 3778; de forma semelhante, o segundo processador 3780 inclui interfaces P-P 3786 e 3788. Os processadores 3770, 3780 podem trocar informações através de uma interface ponto a ponto (P-P) 3750 com uso de circuitos de interface P-P 3778, 3788. Conforme mostrado na Figura 37, os MCHs 3772 e 3782 acoplam os processadores às respectivas memórias, a saber, uma memória 3732 e uma memória 3734, que podem ser porções de memória de sistema (por exemplo, DRAM) fixadas localmente aos respectivos processadores.
[00354] Os processadores 3770, 3780 podem trocar, cada um, informações com um chipset 3790 através de interfaces P-P individuais 3752, 3754 com uso de circuitos de interface ponto a ponto 3776, 3794, 3786, 3798. O chipset 3790 pode trocar informações, opcionalmente, com o coprocessador 3738 através de uma interface de alto desempenho 3739. Em uma modalidade, o coprocessador 3738 é um processador de finalidade especial como, por exemplo, um processador de MIC de alto rendimento, um processador de rede ou comunicação, compressão de motor, processador de gráficos, GPGPU, processador embutido ou similar.
[00355] 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.
[00356] O conjunto de chips 3790 pode ser acoplado a um primeiro barramento 3716 através de uma interface 3796. Em uma modalidade, o primeiro barramento 3716 pode ser um barramento de Interconexão de Componente Periférico (PCI) ou um barramento como um barramento expresso de PCI ou outro barramento de interconexão de I/O da terceira geração, embora o escopo da presente revelação não seja limitado ao mesmo.
[00357] Conforme mostrado na Figura 37, vários dispositivos I/O 3714 podem ser acoplados ao primeiro barramento 3716, juntamente com uma ponte de barramento 3718 que acopla o primeiro barramento 716 a um segundo barramento 3720. Em uma modalidade, um ou mais processador adicional (ou processadores adicionais) 3715, como coprocessadores, processadores de MIC de alto rendimento, GPGPUs, aceleradores (como, por exemplo, aceleradores de gráficos ou unidades de processamento de sinal digital (DSP)), arranjos de porta de campo programável ou qualquer outro processador é acoplado ao primeiro barramento 3716. Em uma modalidade, o segundo barramento 3720 pode ser um barramento de contagem de pinos baixa (LPC). Vários dispositivos podem ser acoplados a um segundo barramento 3720 que inclui, por exemplo, um teclado/mouse 3722, dispositivos de comunicação 3727 e a unidade de armazenamento de dados 3728 como uma unidade de disco magnético ou outro dispositivo de armazenamento em massa que pode incluir o código 3730, em uma modalidade. Adicionalmente, uma I/O de áudio 3724 pode ser acoplada ao segundo barramento 3720. Observa-se que outras arquiteturas são possíveis. Por exemplo, ao invés da arquitetura ponto a ponto da Figura 37, um sistema pode implantar um barramento multiponto ou outra arquitetura.
[00358] Referindo-se agora à Figura 38, um diagrama de blocos de um segundo sistema exemplificativo mais específico 3800 é mostrado de acordo com uma modalidade da presente revelação. Elementos semelhantes nas Figura 37 e 38 apresentam números de referência semelhantes e certos aspectos da Figura 37 foram omitidos da Figura 38 de modo a evitar obscurecer outros aspectos da Figura 38.
[00359] A Figura 38 ilustra que os processadores 3770, 3780 podem incluir memória integrada e lógica de controle de I/O (“CL”) 3772 e 3782, respectivamente. Dessa forma, a CL 3772, 3782 inclui unidades de controlador de memória integrada e inclui lógica de controle de I/O. A Figura 38 ilustra que não apenas as memórias 3732, 3734 são acopladas à CL 3772, 3782, mas também que os dispositivos de I/O 3814 são acoplados à lógica de controle 3772, 3782. Os dispositivos de I/O herdados 3815 são acoplados ao conjunto de chips 3790.
[00360] Referindo-se agora à Figura 39, um diagrama de blocos de um SoC 3900 é mostrado de acordo com uma modalidade da presente revelação. Os elementos semelhantes na Figura 35 apresentam referências numéricas iguais. Também, as caixas de linhas pontilhadas são recursos opcionais em SoCs mais avançados. Na Figura 39, uma unidade (ou unidades) de interconexão 3902 é acoplada a: um processador de aplicativo 3910 que inclui um conjunto de um ou mais núcleos 202A-N e unidade (ou unidades) de cache compartilhada 3506; uma unidade de agente de sistema 3510; uma unidade (ou unidades) de controlador de barramento 3516; uma unidade (ou unidades) de controlador de memória integrada 3514; um conjunto ou um ou mais coprocessadores 3920 que podem incluir lógica de gráficos integrada, um processador de imagem, um processador de áudio e um processador de vídeo, uma unidade de memória de acesso aleatório estática (SRAM) 3930; uma unidade de acesso de memória direto (DMA) 3932 e uma unidade de exibição 3940 para acoplar um ou mais visores externos. Em uma modalidade, o coprocessador (ou coprocessadores) 3920 inclui um processador para fins específicos como, por exemplo, um processador de rede ou de comunicação, mecanismo de compactação, GPGPU, um processador de MIC de alto rendimento, um processador embutido ou semelhantes.
[00361] As modalidades (por exemplo, dos mecanismos) reveladas no presente documento podem ser implantadas em hardware, software, firmware ou em uma combinação dessas abordagens de implantação. As modalidades da revelação podem ser implantadas como programas de computador ou código de programa em sistemas programáveis que compreendem pelo menos um processador, um sistema de armazenamento (que inclui elementos de memória e/ou armazenamento voláteis e não voláteis), pelo menos um dispositivo de entrada, e pelo menos um dispositivo de saída.
[00362] O código de programa, como o código 3730 ilustrado na Figura 37, pode ser aplicado às instruções de entrada a fim de 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 dessa aplicação, um sistema de processamento inclui qualquer sistema que tem um processador como, por exemplo, um processador de sinal digital (DSP), um microcontrolador, um circuito integrado de aplicação específica (ASIC) ou um microprocessador.
[00363] O código de programa pode ser implantado em uma linguagem de programação processual em nível elevado ou orientada por objeto para se comunicar com um sistema de processamento. O código do programa pode ser implantado em linguagem de máquina ou montagem, caso desejado. De fato, os mecanismos descritos no presente documento não se limitam em relação ao escopo a qualquer linguagem de programação particular. De qualquer modo, a linguagem pode ser uma linguagem compilada ou interpretada.
[00364] Um ou mais aspectos de pelo menos uma modalidade podem ser implantados por instruções representativas armazenadas em uma mídia legível por máquina que representa várias lógicas no processador, que, quando lidas por uma máquina, fazem com que a máquina fabrique lógica para realizar as técnicas descritas no presente documento. Tais representações conhecidas como “núcleos de IP” podem ser armazenadas em uma mídia legível por máquina tangível e fornecidas a vários clientes ou instalações de fabricação para carregar as máquinas de fabricação que, de fato, produzem a lógica ou o processador.
[00365] Essa mídia de armazenamento legível por máquina pode incluir, porém sem limitação, disposições tangíveis e não transitórias de artigos fabricados ou formados por uma máquina ou dispositivo, incluindo mídia de armazenamento como discos rígidos, qualquer outro tipo de disco incluindo disquetes, discos ópticos, memórias somente leitura de disco compacto (CD-ROMs), discos regraváveis compactos (CD-RWs), e discos magnetoópticos, dispositivos semicondutores como memórias somente leitura (ROMs), memórias de acesso aleatório (RAMs) como memórias de acesso aleatório dinâmicas (DRAMs), memórias de acesso aleatório estáticas (SRAMs), memórias somente leitura programáveis e apagáveis (EPROMs), memórias rápidas, memórias somente leitura eletricamente programáveis e apagáveis (EEPROMs), memória de mudança de fase (PCM), cartões magnéticos ou ópticos ou qualquer outro tipo de mídia adequada para armazenar instruções eletrônicas.
[00366] Consequentemente, as modalidades da revelaçã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.
Emulação (incluindo translação binária, transformação de código, etc.)
[00367] Em alguns casos, um conversor de instrução pode ser usado para converter uma instrução de um conjunto de instruções de origem para um conjunto de instruções alvo. Por exemplo, o conversor de instrução pode traduzir (por exemplo, com o uso de tradução binária estática, tradução binária dinâmica que inclui compilação dinâmica), transformar, emular ou de alguma maneira converter uma instrução em uma ou mais outras instruções a serem processadas pelo núcleo. O conversor de instrução pode ser implantado em software, hardware, firmware ou em uma combinação dos mesmos. O conversor de instrução pode estar no processador, fora do processador ou parte no processador e parte fora do processador.
[00368] A Figura 40 é um diagrama de blocos que contrasta o uso de um conversor de instrução de software para converter instruções binárias em um conjunto de instruções fonte para instruções binárias em um conjunto de instruções alvo de acordo com modalidades da invenção. Na modalidade ilustrada, o conversor de instrução é um conversor de instrução de software, embora alternativamente o conversor de instrução possa ser implantado em software, firmware, hardware ou várias combinações dos mesmos. A Figura 40 mostra um programa em uma linguagem de nível elevado 4002 que pode ser compilado com uso de um compilador x86 4004 para gerar código binário x86 4006 que pode ser executado nativamente por um processador com pelo menos um núcleo de conjunto de instruções x86 4016. O processador com pelo menos um núcleo de conjunto de instrução x86 4016 representa qualquer processador que possa realizar substancialmente as mesmas funções que um processador Intel® com pelo menos um núcleo de conjunto de instrução x86 executando-se ou de outra maneira processando-se, de maneira compatível, (1) uma porção substancial do conjunto de instrução do núcleo de conjunto de instrução Intel® x86 ou (2) as versões de código de objeto de aplicativos ou outro software orientado a funcionar em um processador Intel® com pelo menos um núcleo de conjunto de instrução x86, de modo a alcançar, substancialmente, o mesmo resultado que um processador Intel® com pelo menos um núcleo de conjunto de instrução x86. O compilador x86 4004 representa um compilador que é operável para gerar código binário x86 4006 (por exemplo, código de objeto) que pode, com ou sem processamento de ligação adicional, ser executado no processador com pelo menos um núcleo de conjunto de instrução x86 4016. De forma semelhante, a Figura 40 mostra o programa na linguagem de nível elevado 4002 que pode ser compilado com uso de um compilador de conjunto de instruções alternativo 4008 para gerar código binário de conjunto de instruções alternativo 4010 que pode ser executado nativamente por um processador sem pelo menos um núcleo de conjunto de instruções da Intel x86 4014 (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 4012 é usado para converter o código binário x86 4006 em código que pode ser executado nativamente pelo processador sem um núcleo de conjunto de instruções da Intel x86 4014. Esse código convertido não tem probabilidade de ser o mesmo que o código binário do conjunto de instruções alternativo 4010 devido ao fato de que um conversor de instrução com capacidade para isso é difícil de se produzir; contudo, o código convertido atingirá a operação geral e será constituído de instruções do conjunto de instruções alternativo. Dessa forma, o conversor de instrução 4012 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ções x86 executar o código binário x86 4006.

Claims (24)

  1. Aparelho caracterizado por compreender:
    um circuito acelerador de operações de matriz que compreende uma grade bidimensional de circuitos fundidos de multiplicação e acumulação;
    uma primeira pluralidade de registros que representa uma primeira matriz bidimensional de entrada acoplada ao circuito acelerador de operações de matriz;
    uma segunda pluralidade de registros que representa uma segunda matriz bidimensional de entrada acoplada ao circuito acelerador de operações de matriz;
    um decodificador, de um núcleo de processador de hardware acoplado ao circuito acelerador de operações de matriz, para decodificar uma instrução única em uma instrução decodificada única, sendo que a instrução única inclui um campo que identifica um armazenamento resultante; e
    um circuito de execução do núcleo de processador de hardware para executar a instrução decodificada única para:
    carregar um primeiro armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação com a primeira matriz bidimensional de entrada a partir da primeira pluralidade de registros,
    verificar se um segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena uma matriz bidimensional de entrada imediatamente anterior que é igual à segunda matriz bidimensional de entrada,
    quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução de uma instrução anterior, que é igual à segunda matriz bidimensional de entrada:
    impedir a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única,
    realizar uma operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na matriz bidimensional de entrada imediatamente anterior a partir do segundo armazenamento temporário para produzir um resultante, e
    armazenar o resultante no armazenamento resultante, e
    quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazenar a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada:
    carregar a segunda matriz bidimensional de entrada no segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação,
    realizar a operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na segunda matriz bidimensional de entrada a partir do segundo armazenamento temporário para produzir um resultante, e
    armazenar o resultante no armazenamento resultante.
  2. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o circuito acelerador de operações de matriz deve começar a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única.
  3. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que o circuito acelerador de operações de matriz atribui um valor de identificação para cada pluralidade de registros que representa uma matriz bidimensional de entrada, e a verificação de o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazenar a matriz bidimensional de entrada imediatamente anterior, que é igual à segunda matriz bidimensional de entrada, compreende comparar os respectivos valores de identificação para matrizes bidimensionais de entrada correspondentes a partir da instrução anterior e da instrução única.
  4. Aparelho, de acordo com a reivindicação 3, caracterizado pelo fato de que o circuito acelerador de operações de matriz deve atribuir um valor de identificação diferente para a segunda pluralidade de registros para armazenar uma matriz bidimensional de entrada de uma próxima instrução.
  5. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que, quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o circuito acelerador de operações de matriz não carrega o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação durante execução da instrução decodificada única.
  6. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que o armazenamento resultante é uma terceira pluralidade de registros que representa pelo menos uma matriz bidimensional de saída formada pela execução da instrução decodificada única.
  7. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que a operação compreende transmitir uma respectiva saída de cada um dentre um primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional a jusante para uma respectiva entrada de cada um dentre um segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional para formar o resultante.
  8. Aparelho, de acordo com a reivindicação 7, caracterizado pelo fato de que o primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é uma dentre uma linha ou uma coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação e o segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é outra dentre a linha ou a coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação.
  9. Método caracterizado por compreender:
    decodificar, com um decodificador de um núcleo de processador de hardware, uma instrução única em uma instrução decodificada única, em que o núcleo de processador de hardware é acoplado a um circuito acelerador de operações de matriz que compreende uma grade bidimensional de circuitos fundidos de multiplicação e acumulação, o circuito acelerador de operações de matriz é acoplado a uma primeira pluralidade de registros que representa uma primeira matriz bidimensional de entrada e a uma segunda pluralidade de registros que representa uma segunda matriz bidimensional de entrada, e a instrução única inclui um campo que identifica um armazenamento resultante; e
    executar a instrução decodificada única com um circuito de execução do núcleo de processador de hardware para:
    carregar um primeiro armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação com a primeira matriz bidimensional de entrada a partir da primeira pluralidade de registros,
    verificar se um segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena uma matriz bidimensional de entrada imediatamente anterior que é igual à segunda matriz bidimensional de entrada,
    quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução de uma instrução anterior, que é igual à segunda matriz bidimensional de entrada:
    impedir a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única,
    realizar uma operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na matriz bidimensional de entrada imediatamente anterior a partir do segundo armazenamento temporário para produzir um resultante, e a
    rmazenar o resultante no armazenamento resultante, e
    quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazenar a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada:
    carregar a segunda matriz bidimensional de entrada no segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação,
    realizar a operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na segunda matriz bidimensional de entrada a partir do segundo armazenamento temporário para produzir um resultante, e
    armazenar o resultante no armazenamento resultante.
  10. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que, quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o dito método compreende adicionalmente começar a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única.
  11. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que compreende adicionalmente atribuir um valor de identificação para cada pluralidade de registros que representa uma matriz bidimensional de entrada, e a verificação da possibilidade de o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazenar a matriz bidimensional de entrada imediatamente anterior, que é igual à segunda matriz bidimensional de entrada, compreende comparar os respectivos valores de identificação para matrizes bidimensionais de entrada correspondentes a partir da instrução anterior e da instrução única.
  12. Método, de acordo com a reivindicação 11, caracterizado pelo fato de que compreende adicionalmente atribuir um valor de identificação diferente para a segunda pluralidade de registros para armazenar uma matriz bidimensional de entrada de uma próxima instrução.
  13. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o dito método compreende adicionalmente não carregar o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação durante execução da instrução decodificada única.
  14. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que o armazenamento resultante é uma terceira pluralidade de registros que representa pelo menos uma matriz bidimensional de saída formada pela execução da instrução decodificada única.
  15. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que a operação compreende transmitir uma respectiva saída de cada um dentre um primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional a jusante para uma respectiva entrada de cada um dentre um segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional para formar o resultante.
  16. Método, de acordo com a reivindicação 15, caracterizado pelo fato de que o primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é uma dentre uma linha ou uma coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação e o segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é a outra dentre a linha ou a coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação.
  17. Meio legível por máquina não transitório caracterizado pelo fato de que armazena um código que, quando executado por uma máquina, faz com que a máquina realize um método que compreende:
    decodificar, com um decodificador de um núcleo de processador de hardware, uma instrução única em uma instrução decodificada única, em que o núcleo de processador de hardware é acoplado a um circuito acelerador de operações de matriz que compreende uma grade bidimensional de circuitos fundidos de multiplicação e acumulação, o circuito acelerador de operações de matriz é acoplado a uma primeira pluralidade de registros que representa uma primeira matriz bidimensional de entrada e a uma segunda pluralidade de registros que representa uma segunda matriz bidimensional de entrada, e a instrução única inclui um campo que identifica um armazenamento resultante; e
    executar a instrução decodificada única com um circuito de execução do núcleo de processador de hardware para:
    carregar um primeiro armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação com a primeira matriz bidimensional de entrada a partir da primeira pluralidade de registros,
    verificar se um segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena uma matriz bidimensional de entrada imediatamente anterior que é igual à segunda matriz bidimensional de entrada,
    quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução de uma instrução anterior, que é igual à segunda matriz bidimensional de entrada:
    impedir a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única,
    realizar uma operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na matriz bidimensional de entrada imediatamente anterior a partir do segundo armazenamento temporário para produzir um resultante, e
    armazenar o resultante no armazenamento resultante, e
    quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazenar a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada:
    carregar a segunda matriz bidimensional de entrada no segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação,
    realizar a operação na primeira matriz bidimensional de entrada a partir do primeiro armazenamento temporário e na segunda matriz bidimensional de entrada a partir do segundo armazenamento temporário para produzir um resultante, e
    armazenar o resultante no armazenamento resultante.
  18. Meio legível por máquina não transitório, de acordo com a reivindicação 17, caracterizado pelo fato de que, quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação não armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o dito método compreende adicionalmente começar a recuperação do segundo armazenamento temporário entre a execução da instrução anterior e da instrução decodificada única.
  19. Meio legível por máquina não transitório, de acordo com a reivindicação 17, caracterizado pelo fato de que compreende adicionalmente atribuir um valor de identificação para cada pluralidade de registros que representa uma matriz bidimensional de entrada, e a verificação da possibilidade de o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazenar a matriz bidimensional de entrada imediatamente anterior, que é igual à segunda matriz bidimensional de entrada, compreende comparar os respectivos valores de identificação para matrizes bidimensionais de entrada correspondentes a partir da instrução anterior e da instrução única.
  20. Meio legível por máquina não transitório, de acordo com a reivindicação 19, caracterizado pelo fato de que compreende adicionalmente atribuir um valor de identificação diferente para a segunda pluralidade de registros para armazenar uma matriz bidimensional de entrada de uma próxima instrução.
  21. Meio legível por máquina não transitório, de acordo com a reivindicação 17, caracterizado pelo fato de que, quando o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação armazena a matriz bidimensional de entrada imediatamente anterior, a partir da execução da instrução anterior, que é igual à segunda matriz bidimensional de entrada, o dito método compreende adicionalmente não carregar o segundo armazenamento temporário da grade bidimensional de circuitos fundidos de multiplicação e acumulação durante execução da instrução decodificada única.
  22. Meio legível por máquina não transitório, de acordo com a reivindicação 17, caracterizado pelo fato de que o armazenamento resultante é uma terceira pluralidade de registros que representa pelo menos uma matriz bidimensional de saída formada pela execução da instrução decodificada única.
  23. Meio legível por máquina não transitório, de acordo com a reivindicação 17, caracterizado pelo fato de que a operação compreende transmitir uma respectiva saída de cada um dentre um primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional a jusante para uma respectiva entrada de cada um dentre um segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação da grade bidimensional para formar o resultante.
  24. Meio legível por máquina não transitório, de acordo com a reivindicação 23, caracterizado pelo fato de que o primeiro subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é uma dentre uma linha ou uma coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação e o segundo subconjunto apropriado de circuitos fundidos de multiplicação e acumulação é a outra dentre a linha ou a coluna da grade bidimensional de circuitos fundidos de multiplicação e acumulação.
BR102020019657-0A 2019-12-28 2020-09-26 aparelhos, métodos e sistemas para instruções de um acelerador de operações de matriz BR102020019657A2 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/729,361 US11714875B2 (en) 2019-12-28 2019-12-28 Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US16/729,361 2019-12-28

Publications (1)

Publication Number Publication Date
BR102020019657A2 true BR102020019657A2 (pt) 2021-06-29

Family

ID=71098561

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102020019657-0A BR102020019657A2 (pt) 2019-12-28 2020-09-26 aparelhos, métodos e sistemas para instruções de um acelerador de operações de matriz

Country Status (7)

Country Link
US (2) US11714875B2 (pt)
JP (2) JP2021108102A (pt)
KR (2) KR20210086447A (pt)
CN (2) CN117724763A (pt)
BR (1) BR102020019657A2 (pt)
DE (1) DE102020126212A1 (pt)
TW (1) TW202125287A (pt)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118034781A (zh) 2017-03-20 2024-05-14 英特尔公司 用于矩阵加法、减法和乘法的系统、方法和装置
US11372644B2 (en) * 2019-12-09 2022-06-28 Meta Platforms, Inc. Matrix processing instruction with optional up/down sampling of matrix
US11467834B2 (en) * 2020-04-01 2022-10-11 Samsung Electronics Co., Ltd. In-memory computing with cache coherent protocol
JP2021192187A (ja) * 2020-06-05 2021-12-16 富士通株式会社 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
CN113867790A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡和计算方法
CN113867799A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
CN113867793A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
CN118012505A (zh) * 2020-06-30 2024-05-10 上海寒武纪信息科技有限公司 人工智能处理器、集成电路芯片、板卡、电子设备
CN113867789A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
US11494326B1 (en) * 2021-03-30 2022-11-08 Amazon Technologies, Inc. Programmable computations in direct memory access engine
US20230094414A1 (en) * 2021-09-24 2023-03-30 Intel Corporation Matrix operation with multiple tiles per matrix dimension
TWI819937B (zh) * 2022-12-28 2023-10-21 國立成功大學 應用於類神經網路的記憶內運算的加速器

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247632A (en) 1989-01-23 1993-09-21 Eastman Kodak Company Virtual memory management arrangement for addressing multi-dimensional arrays in a digital data processing system
US5475822A (en) 1993-11-15 1995-12-12 Motorola, Inc. Data processing system for resuming instruction execution after an interrupt and method therefor
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6161219A (en) 1997-07-03 2000-12-12 The University Of Iowa Research Foundation System and method for providing checkpointing with precompile directives and supporting software to produce checkpoints, independent of environment constraints
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
FR2787233B1 (fr) 1998-12-11 2001-02-16 St Microelectronics Sa Procede pour verifier l'integrite des circuits de decodage d'une memoire
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US7725521B2 (en) 2001-10-29 2010-05-25 Intel Corporation Method and apparatus for computing matrix transformations
US6877020B1 (en) 2001-12-31 2005-04-05 Apple Computer, Inc. Method and apparatus for matrix transposition
US7003542B2 (en) 2002-01-02 2006-02-21 Intel Corporation Apparatus and method for inverting a 4×4 matrix
US7209939B2 (en) 2002-07-11 2007-04-24 Sun Microsystems, Inc. Precision improvement method for the Strassen/Winograd matrix multiplication method
US6944747B2 (en) 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7657880B2 (en) * 2003-01-31 2010-02-02 Intel Corporation Safe store for speculative helper threads
US7159103B2 (en) * 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
US20040193668A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney Virtual double width accumulators for vector processing
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20060190517A1 (en) 2005-02-02 2006-08-24 Guerrero Miguel A Techniques for transposition of a matrix arranged in a memory as multiple items per word
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US20070271325A1 (en) * 2006-05-08 2007-11-22 Nvidia Corporation Matrix multiply with reduced bandwidth requirements
US7792895B1 (en) 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US7912889B1 (en) 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8122078B2 (en) 2006-10-06 2012-02-21 Calos Fund, LLC Processor with enhanced combined-arithmetic capability
US7797362B2 (en) 2007-02-23 2010-09-14 Texas Instruments Incorporated Parallel architecture for matrix transposition
US8392487B1 (en) 2007-03-29 2013-03-05 Compass Electro-Optical Systems Ltd Programmable matrix processor
US8028015B2 (en) 2007-08-10 2011-09-27 Inside Contactless S.A. Method and system for large number multiplication
US8923510B2 (en) 2007-12-28 2014-12-30 Intel Corporation Method and apparatus for efficiently implementing the advanced encryption standard
US8533251B2 (en) 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
US8060730B2 (en) 2008-05-30 2011-11-15 Freescale Semiconductor, Inc. Selective MISR data accumulation during exception processing
US8250130B2 (en) 2008-05-30 2012-08-21 International Business Machines Corporation Reducing bandwidth requirements for matrix multiplication
US20100180100A1 (en) 2009-01-13 2010-07-15 Mavrix Technology, Inc. Matrix microprocessor and method of operation
US20100191787A1 (en) * 2009-01-29 2010-07-29 Vns Portfolio Llc Sequential Multiplier
US8539201B2 (en) 2009-11-04 2013-09-17 International Business Machines Corporation Transposing array data on SIMD multi-core processor architectures
US8984043B2 (en) 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
US8478969B2 (en) 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
US20120113133A1 (en) 2010-11-04 2012-05-10 Shpigelblat Shai System, device, and method for multiplying multi-dimensional data arrays
US9727471B2 (en) * 2010-11-29 2017-08-08 Intel Corporation Method and apparatus for stream buffer management instructions
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
CN103502935B (zh) 2011-04-01 2016-10-12 英特尔公司 向量友好指令格式及其执行
US9503741B2 (en) 2011-06-08 2016-11-22 Vixs Systems, Inc. Video decoder with multi-format vector processor and methods for use therewith
US20140149480A1 (en) 2012-11-28 2014-05-29 Nvidia Corporation System, method, and computer program product for transposing a matrix
US9442723B2 (en) 2012-12-28 2016-09-13 Intel Corporation Method and apparatus for integral image computation instructions
US9286216B2 (en) 2014-01-16 2016-03-15 Carnegie Mellon University 3DIC memory chips including computational logic-in-memory for performing accelerated data processing
CN106126189B (zh) 2014-07-02 2019-02-15 上海兆芯集成电路有限公司 微处理器中的方法
US20160179523A1 (en) 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction
US10535114B2 (en) 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
US10228911B2 (en) * 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
US10146535B2 (en) 2016-10-20 2018-12-04 Intel Corporatoin Systems, apparatuses, and methods for chained fused multiply add
US10437562B2 (en) * 2016-12-30 2019-10-08 Intel Corporation Apparatus and method for processing sparse data
CN110121698A (zh) 2016-12-31 2019-08-13 英特尔公司 用于异构计算的系统、方法和装置
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
CN118034781A (zh) * 2017-03-20 2024-05-14 英特尔公司 用于矩阵加法、减法和乘法的系统、方法和装置
US10678507B2 (en) * 2017-12-22 2020-06-09 Alibaba Group Holding Limited Programmable multiply-add array hardware
US10459876B2 (en) * 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element

Also Published As

Publication number Publication date
JP2021108102A (ja) 2021-07-29
US11714875B2 (en) 2023-08-01
DE102020126212A1 (de) 2021-07-01
CN113050990A (zh) 2021-06-29
TW202125287A (zh) 2021-07-01
US20200201932A1 (en) 2020-06-25
US20240078283A1 (en) 2024-03-07
JP2024038122A (ja) 2024-03-19
KR20210086447A (ko) 2021-07-08
CN117724763A (zh) 2024-03-19
KR20240011204A (ko) 2024-01-25

Similar Documents

Publication Publication Date Title
US11681529B2 (en) Apparatuses, methods, and systems for access synchronization in a shared memory
BR102020019657A2 (pt) aparelhos, métodos e sistemas para instruções de um acelerador de operações de matriz
US11893389B2 (en) Systems and methods for performing 16-bit floating-point matrix dot product instructions
US20210349720A1 (en) Systems, methods, and apparatuses for tile matrix multiplication and accumulation
WO2014051737A1 (en) Read and write masks update instruction for vectorization of recursive computations over independent data
WO2014051733A2 (en) Vector move instruction controlled by read and write masks
JP2019197531A (ja) 連鎖タイル演算を実施するためのシステムおよび方法
EP3623940A2 (en) Systems and methods for performing horizontal tile operations
US20160179550A1 (en) Fast vector dynamic memory conflict detection
EP4276608A2 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
US11243766B2 (en) Flexible instruction set disabling
US20210406012A1 (en) Loading and storing matrix data with datatype conversion
ES2951658T3 (es) Sistemas, aparatos y métodos para generar un índice por orden de clasificación y reordenar elementos basándose en el orden de clasificación
TW202223633A (zh) 用於實施16位元浮點矩陣點積指令的裝置、方法及系統
CN112149050A (zh) 用于增强的矩阵乘法器架构的装置、方法和系统
BR102020019550A2 (pt) Processador de hardware e método

Legal Events

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