BR112020012183A2 - sistema e método de processamento de operação de multiplicação de ponto flutuante - Google Patents

sistema e método de processamento de operação de multiplicação de ponto flutuante Download PDF

Info

Publication number
BR112020012183A2
BR112020012183A2 BR112020012183-5A BR112020012183A BR112020012183A2 BR 112020012183 A2 BR112020012183 A2 BR 112020012183A2 BR 112020012183 A BR112020012183 A BR 112020012183A BR 112020012183 A2 BR112020012183 A2 BR 112020012183A2
Authority
BR
Brazil
Prior art keywords
floating point
operand
multiplication
instruction
value
Prior art date
Application number
BR112020012183-5A
Other languages
English (en)
Other versions
BR112020012183B1 (pt
Inventor
Albert Danysh
Erich Plondke
Eric Mahurin
Original Assignee
Qualcomm Incorporated
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 Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112020012183A2 publication Critical patent/BR112020012183A2/pt
Publication of BR112020012183B1 publication Critical patent/BR112020012183B1/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

Um processador inclui um multiplicador de inteiro configurado para executar uma instrução de multiplicação de inteiro para multiplicar bits significativos de pelo menos um operando de ponto flutuante de uma operação de multiplicação de ponto flutuante. O processador inclui também um multiplicador de ponto flutuante configurado para executar uma instrução de acumulação de multiplicação de ponto flutuante de propósito especial em relação a um resultado intermediário da operação de multiplicação de ponto flutuante e o pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante.

Description

“SISTEMA E MÉTODO DE PROCESSAMENTO DE OPERAÇÃO DE MULTIPLICAÇÃO DE PONTO FLUTUANTE” I. REIVINDICAÇÕES DE PRIORIDADE SOB 35 U.S.C. §119
[0001] O presente Pedido de Patente reivindica prioridade ao Pedido de Patente Norte-Americano não Provisório Nº 15/851,390 de Albert Danysh, et al., intitulado "SISTEMA E MÉTODO DE PROCESSAMENTO DE OPERAÇÃO DE MULTIPLICAÇÃO DE PONTO FLUTUANTE", depositado em 21 de Dezembro de 2017, atribuído ao cessionário deste documento, e é expressamente por este meio aqui incorporado por referência na sua totalidade. II. Campo
[0002] A presente descrição é em geral relacionada a processadores e, mais especificamente, relacionada a processamento de instruções de multiplicação de ponto flutuante. III. Descrição da Técnica Relacionada
[0003] Os avanços na tecnologia resultaram em dispositivos de computação mais poderosos. Por exemplo, dispositivos de computação, tais como computadores laptop e desktop e servidores, bem como dispositivos de computação sem fio, tais como telefones sem fio portáteis, possuem recursos aprimorados de computação e são capazes de realizar operações cada vez mais complexas. O crescimento dos recursos de computação também aprimorou os recursos de dispositivos em várias outras aplicações. Por exemplo, veículos podem incluir dispositivos de processamento para permitir operações do sistema de posicionamento global ou outras operações de localização, operações de direção autônoma, operações de comunicação interativa e de entretenimento, etc. Outros exemplos incluem eletrodomésticos, câmeras de segurança, equipamento de medição, etc., que incorporam também dispositivos de computação para permitir funcionalidade aprimorada, tal como comunicação entre dispositivos de internet das coisas (IoT).
[0004] Um dispositivo de computação pode incluir um processador para executar instruções de programas. Por exemplo, o processador pode executar instruções aritméticas, tal como uma instrução de multiplicação, para realizar processamento gráfico, codificação de dados ou criptografia, como exemplos ilustrativos. O processador pode operar em vários tipos de dados, tais como números inteiros ou de ponto flutuante.
[0005] Um número de ponto flutuante é normalmente representado por um bit de sinal, um valor de expoente e um significando (mantissa) que consiste nos dígitos significativos do número. A multiplicação de dois números de ponto flutuante inclui a adição dos valores de expoentes e a multiplicação das mantissas. A multiplicação de dois números formatados como números de precisão dupla, de acordo com um padrão do Instituto de Engenheiros de Eletrônica e Elétrica (IEEE)-754 inclui multiplicar dois significandos de 53 bits, que podem exigir um multiplicador de 64 bits dedicado em um processador que, de outra forma, está configurado para operar em valores menores (por exemplo, 32 bits). Como alternativa, o processador pode converter uma instrução de multiplicação de precisão dupla em uma operação em loop que realiza múltiplas multiplicações parciais de valores menores e monta os resultados parciais para gerar um resultado de precisão dupla. No entanto, a inclusão do multiplicador de 64 bits dedicado pode aumentar o tamanho e o custo do processador, enquanto a conversão da instrução na operação em loop introduz complexidade e lógica de roteamento adicionais no processador. IV. Sumário
[0006] Em um aspecto particular, um processador inclui um multiplicador de inteiro configurado para executar uma instrução de multiplicação de inteiro para multiplicar bits significativos de pelo menos um operando de ponto flutuante de uma operação de multiplicação de ponto flutuante. O processador inclui também um multiplicador de ponto flutuante configurado para executar uma instrução de acumulação de multiplicação de ponto flutuante de propósito especial em relação a um resultado intermediário da operação de multiplicação de ponto flutuante e pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante.
[0007] Em outro aspecto, um método para realizar uma operação de multiplicação de ponto flutuante em um processador inclui executar uma pluralidade de instruções de multiplicação de inteiro para gerar um resultado intermediário. O método inclui também executar uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial em relação ao resultado intermediário e pelo menos um operando de ponto flutuante da operação de multiplicação de ponto flutuante para gerar um resultado de multiplicação de ponto flutuante.
[0008] Em outro aspecto, um aparelho inclui meios para executar uma pluralidade de instruções de multiplicação de inteiro para gerar um resultado intermediário. O aparelho inclui também meios para executar uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial em relação ao resultado intermediário e pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante.
[0009] Em outro aspecto, um método inclui identificar um primeiro operando de uma operação de multiplicação com múltiplos operandos como desnormal e, em resposta à determinação que um expoente de um segundo operando da operação com múltiplos operandos é maior que um limite, modificar um valor de pelo menos um entre o primeiro operando ou o segundo operando.
[0010] Uma vantagem particular fornecida por pelo menos um dentre os aspectos descritos é a capacidade de realizar uma operação de multiplicação de ponto flutuante sem requerer conjunto de circuitos especializados de multiplicação de ponto flutuante que tenham largura de bit suficiente para realizar a multiplicação de ponto flutuante de ciclo único. Por exemplo, a multiplicação de dois números de precisão dupla de 64 bits pode ser realizada utilizando um multiplicador de inteiro e um multiplicador de ponto flutuante que é dimensionado para multiplicar dois números de 32 bits. A utilização de componentes de tamanho reduzido permite reduzir o custo, a área e o consumo de energia do processador, em comparação com a utilização de circuitos especializados de multiplicação de ponto flutuante com maior largura. Outros aspectos, outras vantagens e outras características da presente descrição se tornarão aparentes após a revisão de todo a aplicação, incluindo as seguintes seções: Breve Descrição dos Desenhos, Descrição Detalhada e Reivindicações. V. Breve Descrição dos Desenhos
[0011] A FIG. 1 é um diagrama de blocos de uma implementação particular de um processador configurado para realizar uma operação de multiplicação de ponto flutuante utilizando várias instruções de multiplicação de inteiro e uma instrução de multiplicação de ponto flutuante de propósito especial.
[0012] A FIG. 2 é um diagrama ilustrando uma implementação particular da operação de multiplicação de ponto flutuante da FIG. 1.
[0013] A FIG. 3 é um fluxograma de uma implementação particular de um método para realizar uma operação de multiplicação de ponto flutuante utilizando várias instruções de multiplicação de inteiro e uma instrução de multiplicação de ponto flutuante de propósito especial que pode ser realizada pelo processador da FIG. 1.
[0014] A FIG. 4 é um fluxograma de uma implementação particular de um método de operação de um processador para modificar um operando desnormal de uma operação de multiplicação que pode ser realizada pelo processador da FIG. 1.
[0015] A FIG. 5 é um diagrama de blocos de um dispositivo portátil, incluindo um processador que inclui o processador da FIG. 1.
VI. Descrição Detalhada
[0016] A FIG. 1 representa um processador 100 que inclui um tradutor de instrução 102, um percurso de execução 110 e um arquivo de registro 120. O processador 100 é configurado para realizar uma operação de multiplicação de ponto flutuante indicada por uma instrução de multiplicação de ponto flutuante 130 executando uma pluralidade de instruções de multiplicação de inteiro 138 e uma instrução de multiplicação - acumulação (MAC) de ponto flutuante de propósito especial 140. A execução da pluralidade de instruções de multiplicação de inteiro 138 e a instrução MAC de ponto flutuante de propósito especial 140 permite que o processador 100 multiplique dois operandos tendo grande largura de bits utilizando componentes configurados para processar operandos com larguras de bits menores, reduzindo o custo e o tamanho do processador 100 quando comparado com processadores que possuem um multiplicador de precisão total dedicado e lógica e complexidade de roteamento de processador reduzidos quando comparado com a execução da instrução de multiplicação 130 utilizando uma operação em loop de “quadruple pump”.
[0017] O tradutor de instrução 102 é configurado para receber uma instrução de multiplicação de ponto flutuante 130 e traduzir a instrução de multiplicação de ponto flutuante 130 em uma pluralidade de operações de multiplicação de inteiro 138 e uma instrução de multiplicação - acumulação (MAC) de ponto flutuante de propósito especial 140 a ser executada. Em algumas implementações, o tradutor de instrução 102 é um decodificador de instrução dentro de uma unidade de programação do processador 100.
[0018] O percurso de execução 110 é configurado para executar cada uma das instruções da pluralidade de instruções 138 e a instrução MAC de ponto flutuante de propósito especial 140. O percurso de execução 110 inclui um multiplicador de inteiro 112 e um multiplicador de ponto flutuante 114. O multiplicador de inteiro 112 inclui conjuntos de circuitos configurados para multiplicar valores inteiros para gerar valores de saída. O multiplicador de ponto flutuante 114 inclui conjuntos de circuitos configurados para multiplicar um ou mais operandos de ponto flutuante para gerar um resultado de multiplicação de ponto flutuante.
[0019] O arquivo de registro 120 é configurado para manter valores acessíveis para o percurso de execução
110. Por exemplo, o arquivo de registro 120 pode incluir um ou mais registradores físicos configurados para armazenar valores correspondentes a um primeiro operando 122 da instrução de multiplicação de ponto flutuante 130, um segundo operando 124 da instrução de multiplicação de ponto flutuante 130, um ou mais resultados intermediários 142 gerados pelo multiplicador de inteiro 112 como um resultado da execução de uma ou mais dentre a pluralidade de instruções de multiplicação de inteiro 138 e um resultado final de multiplicação de ponto flutuante 144 da instrução de multiplicação de ponto flutuante 130.
[0020] A pluralidade de instruções de multiplicação de inteiro 138 inclui uma primeira instrução 132, uma segunda instrução 134 e uma terceira instrução
136. Cada uma das instruções 132-136 é configurada para fazer com que o multiplicador de inteiro 112 multiplique uma porção selecionada do primeiro operando de ponto flutuante 122 por outra porção selecionada do segundo operando de ponto flutuante 124, em que as porções selecionadas possuem um número menor de bits que os operandos de ponto flutuante 122, 124. Por exemplo, como a multiplicação de ponto flutuante pode requerer um multiplicador de ponto flutuante que tenha uma largura de bit aproximadamente duas vezes maior que o tamanho do maior operando de ponto flutuante 122 ou 124, a inclusão de um multiplicador de ponto flutuante de tamanho total pode ser proibitivamente cara. No entanto, ao realizar multiplicações de inteiro de porções seletivas dos operandos de ponto flutuante 122, 124, cada uma das instruções de multiplicação de inteiro 132-136 multiplica os operandos que possuem uma largura de bit reduzida em comparação com os operandos 122, 124. A instrução MAC de ponto flutuante de propósito especial 140 é configurada para multiplicar uma porção mais significativa do primeiro operando de ponto flutuante 122 e uma porção mais significativa do segundo operando de ponto flutuante 124 e acumular (adicionar) o produto a um resultado intermediário 142 que é gerado como resultado da execução das instruções 132-136.
[0021] Como a instrução MAC de ponto flutuante de propósito especial 140, que é executada no multiplicador de ponto flutuante 114, é realizada utilizando uma porção dos operandos de ponto flutuante 122-124, em vez de utilizar a largura de bit completa dos operandos de ponto flutuante
122, 124, o multiplicador de ponto flutuante 114 tem uma largura de bit reduzida em comparação com um multiplicador de ponto flutuante de precisão total. Assim, o processador 100 é configurado para realizar uma operação de multiplicação de ponto flutuante executando a pluralidade de instruções de multiplicação de inteiro 138 para gerar o resultado intermediário 142 e executar a instrução MAC de ponto flutuante de propósito especial 140 em relação ao resultado intermediário 142 e aos operandos de ponto flutuante 122, 124 para gerar o resultado final da multiplicação de ponto flutuante 144. Detalhes adicionais da implementação particular das instruções 132-136 e 140 são descritos em mais detalhes com referência à FIG. 2).
[0022] Embora o tradutor de instrução 102 seja descrito como um componente do processador 100, em outras implementações o tradutor de instrução 102 não é um componente do processador 100 e, em vez disso, é um componente que traduz instruções anteriores para execução no processador 100. Em uma implementação particular, o tradutor de instrução 102 está dentro de um compilador e é configurado para traduzir a instrução de multiplicação de ponto flutuante da entrada de usuário 130 em uma sequência de instruções que inclui a pluralidade de instruções de multiplicação de inteiro 138 e a instrução MAC de ponto flutuante de propósito especial 140.
[0023] Embora o multiplicador de inteiro 112 seja ilustrado como distinto do multiplicador de ponto flutuante 114, em algumas implementações, um ou mais componentes, tais como um circuito multiplicador que suporta multiplicações ou para instruções de inteiro ou de ponto flutuante, são compartilhados entre o multiplicador de inteiro 112 e o multiplicador de ponto flutuante 114. Em um exemplo ilustrativo e não limitativo, o percurso de execução 110 inclui uma unidade de multiplicação - acumulação (MAC) de inteiro com um circuito multiplicador que corresponde ao multiplicador de inteiro 112 e que é acessível pelo multiplicador de ponto flutuante 114 para realizar pelo menos uma porção de uma operação de multiplicação de ponto flutuante. Cada um entre o multiplicador de inteiro 112 e o multiplicador de ponto flutuante 114 pode incluir hardware separado para suportar instruções de inteiro ou de ponto flutuante, respectivamente, e pode também incluir recursos de hardware compartilhados (por exemplo, um multiplicador de uma unidade MAC de inteiro).
[0024] Embora a FIG. 1 represente um único percurso de execução 110 que inclui o multiplicador de inteiro 112 e o multiplicador de ponto flutuante 114 para maior clareza da explicação, em outras implementações, o processador 100 pode incluir múltiplos percursos de execução que são configurados para executar instruções em paralelo. Em algumas implementações, o multiplicador de inteiro 112 e o multiplicador de ponto flutuante 114 estão em percursos de execução separados, são duplicados em vários percursos de execução. Em algumas implementações, o multiplicador de inteiro 112 e o multiplicador de ponto flutuante 114 são incorporados em um único circuito multiplicador. Embora em algumas implementações as instruções 132-140 sejam executadas como um fluxo serial de instruções, em outras implementações duas ou mais dentre as instruções 132-140 são executadas em paralelo.
[0025] A FIG. 2 representa um exemplo 200 de realização de uma operação de multiplicação de ponto flutuante no processador 100 de acordo com uma implementação particular. A operação de ponto flutuante é responsiva ao recebimento da instrução de multiplicação de ponto flutuante 130 para multiplicar o primeiro operando de ponto flutuante "A" 122 com o segundo operando de ponto flutuante "B" 124. O operando A 122 inclui uma primeira porção de 32 bits 211 e uma segunda porção de 32 bits 212. A primeira porção 211 inclui um bit de sinal 214, um valor de expoente 215 e bits significativos de alta ordem (Sig- Hi-A) 216. A segunda porção 212 inclui bits significativos e baixa ordem (Sig-Lo-A) 217. Por exemplo, o significativo de A pode incluir 53 bits, com 21 bits em Sig-Hi-A 216 e 32 bits em Sig-Lo-A 217. O operando B 124 inclui uma primeira porção de 32 bits 221 e uma segunda porção de 32 bits 222. A primeira porção 221 inclui um bit de sinal 224, um valor de expoente 225 e bits significativos de alta ordem (Sig- Hi-B) 226. A segunda porção 222 inclui bits significativos de baixa ordem (Sig-Lo-B) 227.
[0026] O comando de multiplicação 130 é traduzido (por exemplo, substituído por) dentro das instruções de multiplicação de inteiro 132, 134, 136 e a instrução de multiplicação - acumulação de ponto flutuante de propósito especial 140. As instruções de multiplicação de inteiro 132, 134, 136 são executadas para gerar o resultado intermediário 142 e a instrução de multiplicação - acumulação de ponto flutuante de propósito especial 140 é executada para gerar o resultado final de multiplicação de ponto flutuante 144.
[0027] Executar a primeira instrução de multiplicação de inteiro 132 faz com que o multiplicador de inteiro 112 (que é um multiplicador de 32 bits no exemplo 200) execute a multiplicação de inteiro de bits significativos de baixa ordem Sig-Lo-A 217 do primeiro operando 122 com os bits significativos de baixa ordem Sig- Lo-B 227 do segundo operando 124 para gerar um valor de 64 bits 232. Os 32 bits de baixa ordem do valor 232 são removidos (por exemplo, truncados ou arredondados) para gerar um valor de 32 bits 233 como uma versão de comprimento reduzido do valor de 64 bits 232. Um "sticky bit" 234 também é gerado como um bit dedicado para indicar se o valor de 32 bits 233 é inexato (isto é, se algum dos 32 bits de baixa ordem do valor 232 tem um valor "1"). O valor de 32 bits 233 e o sticky bit 234 formam um valor de 33 bits 235.
[0028] Em um exemplo, a primeira instrução de multiplicação de inteiro 132 é uma DFMPYLL (double float multiply low-low) que multiplica dois operandos de palavras não assinadas (uw) de 32 bits a partir dos locais de registro RssV.uw[0] (por exemplo, porção 212 armazenando Sig-Lo-A 217) e RttV.uw[0] (por exemplo, porção 222 armazenando Sig-Lo-B 227) e armazena um valor de 33 bits no registro RddV da seguinte maneira:
Exemplo 1
[0029] Executar a segunda instrução de multiplicação de inteiro 134 faz com que o multiplicador de inteiro de 32 bits 112 execute a multiplicação de inteiro dos bits significativos de baixa ordem do primeiro operando, Sig-Lo-A 217, com bits significativos de alta ordem do segundo operando, Sig-Hi-B 226, para gerar um valor de 53 bits 242. O valor de 53 bits 242 é adicionado ao valor de 32 bits 234 para gerar um valor de 55 bits 244 (incluindo o sticky bit 235).
[0030] Em um exemplo, a segunda instrução de multiplicação de inteiro 134 é uma instrução DFMPYLH (double float multiply low-high) que multiplica um primeiro operando de 32 bits RssV.uw[0] (por exemplo, porção 212 armazenando Sig-Lo-A 217) para um segundo operando de 2 bits a partir de RttV.uw[l] (por exemplo, Sig-Hi-B 226 a partir da porção 221). O resultado da multiplicação é acumulado (adicionado a) com o valor no registro RxxV.
[0031] Antes de realizar a multiplicação de inteiro, a DFMPYLH aplica uma máscara para zerar o bit de sinal (por exemplo, bit de sinal 224) e o expoente (por exemplo, Exp-B 225) do segundo operando, representado no Exemplo 2 como a função zxt_{20->64}. A DFMPYLH adiciona também o bit 1 implícito à porção do significando (por exemplo, Sig-Hi-B 226) do segundo operando, representado no Exemplo 2 como um bitwise OR do valor hexadecimal "00100000" para inserir um "1” dentro da posição de 12o bit do segundo operando mascarado. A DFMPYLH também desloca para a esquerda o produto por um bit antes de acumular, porque o 0º bit em RxxV é utilizado como um sticky bit.
Exemplo 2
[0032] Executar a terceira instrução de multiplicação de inteiro 136 faz com que o multiplicador de inteiro de 32 bits 112 realize a multiplicação de inteiro dos bits significativos de alta ordem Sig-Hi-A 216 do primeiro operando 122 com os bits significativos de baixa ordem Sig-Lo-B 227 do segundo operando 124 para gerar um valor de 53 bits 252. O valor 252 é adicionado ao valor 244 para gerar o resultado intermediário de 55 bits 142 (e o sticky bit 235). Em um exemplo, a terceira instrução de multiplicação de inteiro 136 é uma instrução DFMPYLH, conforme representado no Exemplo 2. O resultado intermediário 142 pode, portanto, incluir uma soma de produtos parciais (por exemplo, os valores 232, 242 e 252) e nenhum expoente é utilizado nas três primeiras operações associadas com as instruções 132, 134 e 136.
[0033] A instrução de multiplicação - acumulação de ponto flutuante de propósito especial 140 é executada em relação ao resultado intermediário 142 e pelo menos um operando de ponto flutuante para gerar o resultado final da multiplicação de ponto flutuante 144. Por exemplo, a instrução 140 faz com que o processador realize uma multiplicação de ponto flutuante da primeira porção 211 do operando A 122 (os bits de alta ordem do primeiro operando) e a primeira porção 221 do operando B 124 (os bits de alta ordem do segundo operando) para gerar bits significativos de alta ordem de um valor de ponto flutuante. Para ilustrar, a multiplicação de ponto flutuante inclui a multiplicação de inteiro de Sig-Hi-A 216 com Sig-Hi-B 226 para gerar uma mantissa parcial de valor de 42 bits 262. O valor de 42 bits 262 é acumulado (por exemplo, adicionado a) com o resultado intermediário 142 para gerar um valor 263 que é arredondado para formar um valor de 53 bits 264. Executar a instrução 140 inclui também multiplicar os bits de sinal 214, 224 para gerar um bit de sinal 274 e adicionar os expoentes 215, 225 para gerar um expoente 275. O resultado final da multiplicação de ponto flutuante 144 é uma palavra de dados de 64 bits que inclui o bit de sinal 274, o expoente 275 e o valor de 53 bits 254 como o significando (mantissa) 276.
[0034] Em um exemplo, a instrução de multiplicação - acumulação de ponto flutuante de propósito especial 140 é uma instrução DFMPYHH (double float multiply high-high) que se comporta como uma adição-multiplicação de ponto flutuante de precisão única utilizando os 20 bits mais significativos do primeiro operando (por exemplo, Sig- Hi-A 216) e o 20s bits mais significativos do segundo operando (por exemplo, Sig-Hi-B 226), zera os campos de sinal e de expoente e define os bits implícitos de cada operando de maneira similar ao Exemplo 2. O produto é alinhado e adicionado a um terceiro operando (por exemplo, o valor intermediário 142, um adendo de 55 bits) que contém a soma das instruções anteriores 132, 134 e 136. Os campos finais de sinal, de expoente e de fração são combinados para formar o resultado final 144.
[0035] Em outro aspecto, um ou ambos os operandos A 122 ou B 124 são "desnormais" (denormal) (ou "subnormais"). Em um formato "normalizado", o expoente é não zero e um bit "1" implícito precede o bit mais significativo do significando. Em contraste com o formato normalizado, um operando desnormal tem um valor com todos os zeros do expoente 215 ou 225 e não inclui um bit "1" implícito. Uma instrução de normalização 270 pode ser executada para detectar se o operando A 122 ou o operando B 124 é desnormal e para modificar o operando A, o operando B ou ambos, de modo que as entradas para as instruções seguintes 132, 134, 136 e 140 tenham uma formato normalizado.
[0036] Por exemplo, a instrução de normalização 270 pode fazer com que o processador 100 identifique um primeiro operando (por exemplo, operando A 122) de uma operação de multiplicação com múltiplos operandos como desnormal e, em resposta à determinação que um expoente de um segundo operando (por exemplo, operando B 124) da operação com múltiplos operandos é maior que um limite,
modifique um valor de pelo menos um entre o primeiro operando (por exemplo, operando A 122) ou o segundo operando (por exemplo, operando B 124). Por exemplo, o formato IEEE-754 inclui influenciar (biasing) o expoente de um número de precisão dupla adicionando 1023 ao expoente, a fim de que o menor valor de expoente suportado (por exemplo, -1023) seja representado como 0 no campo de expoente. Se o campo de expoente do operando A 122 tiver um valor 0 (isto é, Exp-A 215 é 0), a magnitude do operando A 122 é menor que 2-1023 e o operando A 122 é identificado como desnormal. Se a magnitude do operando B 124 também for muito pequena (menor que um limite, tal como tendo um expoente não influenciado (unbiased) menor que -511), o produto do operando A 122 e do operando B 124 será muito pequeno para ser representado com precisão no formato IEEE- 754 e um valor 0 pode ser retornado. Caso contrário, o expoente do operando B 124 é reduzido por uma quantidade particular, e o expoente do operando A 122 é aumentado pela quantidade particular, de modo que nenhum dos operandos é desnormal. Reduzir o expoente do operando normalizado pode incluir multiplicar o operando por um primeiro fator de escala e aumentar o expoente do operando desnormal pode incluir a multiplicação do operando desnormal por um segundo fator de escala que é o inverso multiplicativo do primeiro fator de escala (por exemplo, A' = A*f, B' = B*(l/f), onde f é um fator de escala > 1), de modo que A' e B' sejam normalizados e A'*B' = A*B).
[0037] Em um exemplo, a instrução de normalização 270 inclui uma instrução DFMPYFIX (double float multiply fix) que utiliza dois operandos de precisão dupla e fornece um resultado. A DFMPYFIX é configurada para ser utilizada duas vezes, onde na segunda vez os operandos são revertidos, de modo que ambos sejam condicionados. Por exemplo, um primeiro operando modificado R1’ pode ser gerado como R1' = DFMPYFIX (R1, R2) e um segundo operando modificado R2' pode ser gerado como R2' = DFMPYFIX (R2, R1). Em uma implementação particular, se o operando A 122 tiver um formato desnormal e o operando B 124 tiver um expoente não influenciado maior ou igual que -511, o resultado do DFMPYFIX (A, B) será (operando A)*1,0*2˄52 (isto é, o expoente de A é aumentado por 52). Se o operando A tiver um expoente não influenciado maior ou igual que - 511 e o operando B for anormal, o resultado de DFMPYFIX (A, B) será (operando A)*1,0*2˄-52 (isto é, o expoente de A é diminuído por 52).
[0038] O exemplo 200, portanto, descreve a geração do resultado de multiplicação final 144 da multiplicação de dois operandos de 64 bits pela realização de uma operação de desnormalização (através da execução da instrução de normalização 270), seguida por quatro operações de acumulação de multiplicação correspondentes às três instruções de multiplicação de inteiro 132, 134 e 136 e a instrução de multiplicação - acumulação de ponto flutuante especial 140. Cada uma das operações de multiplicação - acumulação é realizada em resposta à instrução 132, 134, 136 ou 140 correspondente, utilizando operandos de 32 bits (ou menores). Deste modo, a operação de multiplicação pode ser realizada sem a utilização de um multiplicador grande, de precisão total e sem a utilização de lógica de controle complexa e multiplexação para
"quadruple pump" de um multiplicador de 32 bits.
[0039] Embora a FIG. 2 representa dois operandos 122, 124 da instrução de multiplicação 130, em outras implementações a instrução de multiplicação 130 tem um único operando, tal como uma implementação na qual a instrução de multiplicação 130 é uma instrução para gerar o quadrado do operando único. Em outras implementações, a instrução de multiplicação 130 tem três ou mais operandos para serem multiplicados juntos e é processada utilizando as instruções 132-140 para gerar o resultado 144 para multiplicar dois dos operandos, e as instruções 132-140 são novamente utilizadas para multiplicar o resultado 144 com o terceiro operando.
[0040] Embora a FIG. 2 represente uma implementação na qual o processador 100 suporta a instrução de normalização 270, em outras implementações a instrução de normalização 270 não é suportada. Em um exemplo ilustrativo, o processador 100 gera uma interrupção para interromper o processamento da operação de multiplicação ao determinar que um ou mais operandos são desnormais.
[0041] A FIG. 3 representa um exemplo de um método 300 para realizar uma operação de multiplicação de ponto flutuante em um processador. Por exemplo, o método 300 pode ser realizado pelo processador 100 da FIG. 1.
[0042] O método 300 inclui executar uma pluralidade de instruções de multiplicação de inteiro para gerar um resultado intermediário, em 302. Em uma implementação particular, a pluralidade de instruções de multiplicação de inteiro inclui uma primeira instrução para realizar a multiplicação de inteiro de bits significativos de baixa ordem de um primeiro operando com bits significativos de baixa ordem de um segundo operando para gerar um primeiro valor, tal como a primeira instrução de multiplicação de inteiro 132. Na implementação particular, a pluralidade de instruções de multiplicação de inteiro inclui uma segunda instrução para realizar a multiplicação de inteiro dos bits significativos de baixa ordem do primeiro operando e dos bits significativos de alta ordem do segundo operando para gerar um segundo valor, tal como a segunda instrução de multiplicação de inteiro 134. Na implementação particular, a pluralidade de instruções de multiplicação de inteiro inclui uma terceira instrução para realizar multiplicação de inteiro dos bits significativos de baixa ordem do segundo operando e dos bits significativos de alta ordem do primeiro operando para gerar um terceiro valor, tal como a terceira instrução de multiplicação de inteiro 136.
[0043] Em um exemplo ilustrativo, o resultado intermediário corresponde a uma soma do terceiro valor, do segundo valor e de uma versão de comprimento reduzido do primeiro valor, tal como o resultado intermediário 142. Em algumas implementações, o valor intermediário inclui um bit dedicado que indica se a versão de comprimento reduzido do primeiro valor é inexata, tal como o sticky bit 235 da FIG.
2.
[0044] Uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial é executada em relação ao resultado intermediário e pelo menos um operando de ponto flutuante da operação de multiplicação de ponto flutuante para gerar um resultado de multiplicação de ponto flutuante, em 304. Em uma implementação particular, a instrução de multiplicação - acumulação de propósito especial 140 da FIG. 1 faz com que o processador realize a multiplicação de ponto flutuante que inclui a multiplicação de bits significativos de alta ordem de um primeiro operando (por exemplo, Sig-Hi-A 216) com bits significativos de alta ordem de um segundo operando (por exemplo, Sig-Hi-B 226) para gerar bits significativos de alta ordem de um valor de ponto flutuante e acumule os bits significativos de alta ordem com o valor intermediário (por exemplo, o resultado intermediário 142) para gerar o resultado final de multiplicação de ponto flutuante 144.
[0045] Em algumas implementações, o método 300 inclui, antes de executar as instruções de multiplicação de inteiro, receber uma instrução de multiplicação de ponto flutuante e substituir a instrução de multiplicação de ponto flutuante pelas instruções de multiplicação de inteiro e a instrução de multiplicação - acumulação de ponto flutuante de propósito especial. Como um exemplo particular, o tradutor de instrução 102 (por exemplo, um decodificador) substitui a instrução de multiplicação de ponto flutuante 103 com a pluralidade de instruções de multiplicação de inteiro 138 e a instrução MAC de ponto flutuante de propósito especial 140.
[0046] Em algumas implementações, o método 300 inclui também, em resposta ao recebimento da instrução de multiplicação de ponto flutuante, determinar se um primeiro operando da operação de multiplicação de ponto flutuante é desnormal. Em resposta à determinação que o primeiro operando é desnormal e que um expoente de um segundo operando da operação de multiplicação de ponto flutuante é maior que um limite, um valor de pelo menos um entre o primeiro operando ou o segundo operando é modificado (por exemplo, através da execução da instrução de normalização 270 da FIG. 2), tal como descrito mais adiante com referência à FIG. 4.
[0047] A execução da pluralidade de instruções de multiplicação de inteiro e da instrução de multiplicação - acumulação de ponto flutuante de propósito especial permite que o processador multiplique dois operandos tendo grande largura de bit utilizando componentes configurados para processar operandos tendo menor largura de bit, reduzindo o custo e o tamanho do processador em comparação com processadores com um multiplicador de precisão total dedicado e reduzindo a lógica e a complexidade de roteamento de processador em comparação com a execução da instrução de multiplicação utilizando uma operação em loop.
[0048] A FIG. 4 representa um exemplo de um método 400 para modificar um operando desnormal de uma operação de multiplicação. Em um exemplo particular, o método 400 é realizado pelo processador 100 da FIG. 1.
[0049] O método 400 inclui identificar um primeiro operando de uma operação de multiplicação com múltiplos operandos como desnormal, em 402. Em um exemplo particular, o processador 100 verifica o primeiro operando 122 e o segundo operando 124 para determinar se um (ou ambos) dos operandos é desnormal como parte da execução da instrução de normalização 270 da FIG. 2. Em algumas implementações, identificar um operando como desnormal inclui determinar se o valor do expoente do operando é zero (indicando que o operando é desnormal) ou não zero (indicando que o operando não é desnormal).
[0050] Em resposta à determinação de que um expoente de um segundo operando da operação com múltiplos operandos é maior que um limite, um valor de pelo menos um entre o primeiro operando ou o segundo operando é modificado, em 404. Para ilustrar, o processador 100 executa a instrução de normalização 270 para converter o operando desnormal em um operando não desnormal, aumentando o expoente do operando desnormal e diminuindo o expoente do outro operando (não desnormal), de modo que o produto dos dois operandos modificados é igual ao produto dos dois operandos antes da modificação.
[0051] Em algumas implementações, após normalizar um operando desnormal, o método 400 inclui executar uma pluralidade de instruções de multiplicação de inteiro (por exemplo, a pluralidade 138 de instruções de multiplicação de inteiro) utilizando o valor modificado do pelo menos um entre o primeiro operando ou o segundo operando para gerar um resultado intermediário e executar uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial (por exemplo, a instrução MAC de ponto flutuante de propósito especial 140) em relação ao resultado intermediário e pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante.
[0052] Modificar os valores do expoente permite que a multiplicação seja realizada sem requerer que o processador suporte instruções de multiplicação de propósito especial para operandos desnormais. Aumentando o expoente do operando desnormal e diminuindo o expoente dos outros operandos, ambos os operandos podem ser processados utilizando instruções para operandos “normais” sem afetar o resultado final de multiplicação de ponto flutuante.
[0053] Com referência à FIG. 5, um diagrama de blocos de uma implementação ilustrativa particular de um dispositivo eletrônico incluindo o processador 100 é representado e geralmente designado 500. O dispositivo eletrônico 500 corresponde a qualquer tipo de dispositivo de computação. Embora a FIG. 5 inclua componentes específicos de implementação (ilustrados por linhas tracejadas) que estão associados com uma implementação do dispositivo eletrônico 500 como um dispositivo móvel configurado para realizar comunicações sem fio, deve ser claramente entendido que o dispositivo eletrônico 500 não se limita às comunicações sem fio e não se limita a um contexto móvel. Assim, um ou mais componentes ilustrados utilizando linhas tracejadas podem ser excluídos, um ou outros mais componentes podem ser acrescentados, ou uma combinação dos mesmos, em várias implementações. Em implementações de exemplo, o dispositivo eletrônico 500 corresponde a um computador (por exemplo, um servidor, um laptop, um tablet ou um computador desktop), um dispositivo eletrônico vestível (por exemplo, uma câmera pessoal, um visor de cabeça (head-mounted display) ou um relógio), um sistema ou console de controle de veículo, um eletrodoméstico, um set top box, uma unidade de entretenimento, um dispositivo de navegação, uma televisão, um monitor, um sintonizador, um rádio (por exemplo, um rádio por satélite), um reprodutor de música (por exemplo, um reprodutor de música digital ou um reprodutor de música portátil), um reprodutor de vídeo (por exemplo, um reprodutor de vídeo digital, tal como um reprodutor de vídeo disco digital (DVD) ou um reprodutor de vídeo digital portátil), um robô, um dispositivo de assistência médica, outro dispositivo eletrônico ou uma combinação dos mesmos.
[0054] O dispositivo 500 inclui um processador 510, tal como um processador de sinal digital (DSP). Em um exemplo ilustrativo, o processador 510 é implementado utilizando o processador 100 e é configurado para realizar uma operação de multiplicação de ponto flutuante pela execução da pluralidade de operações de multiplicação de inteiro 138 e pela instrução MAC de ponto flutuante de propósito especial 140. O processador 510 inclui um decodificador 564 (por exemplo, o tradutor de instrução 102) que substitui a instrução de multiplicação de ponto flutuante 130 com a pluralidade de instruções de multiplicação de inteiro 138 e a instrução MAC de ponto flutuante de propósito especial 140.
[0055] Em algumas implementações, uma memória 532 é acoplada ao ou integrada dentro do processador 510. A memória 532 pode incluir memória de acesso aleatório (RAM), memória de acesso aleatório magneto-resistiva (MRAM), memória flash, memória somente de leitura (ROM), memória somente leitura programável (PROM), memória somente leitura programável apagável (EPROM), memória somente leitura programável apagável eletricamente (EEPROM), um ou mais registros, um disco rígido, um disco removível, uma memória somente de leitura de CD (CD-ROM), outro dispositivo de armazenamento ou uma combinação dos mesmos. A memória 532 armazena uma ou mais instruções que são executáveis pelo processador 510 para realizar operações, tais como o método 300 da FIG. 3, o método 400 da FIG. 4, ou uma combinação dos mesmos.
[0056] Em algumas implementações, um controlador de exibição 526 é acoplado ao processador de sinal digital 510 e a uma tela de exibição 528. Em algumas implementações, um codificador/decodificador (CODEC) 534 é acoplado ao processador de sinal digital 510 e um alto- falante 536 e um microfone 538 são acoplados ao CODEC 534.
[0057] Em algumas implementações, um controlador sem fio 540 é acoplado ao processador 510 e a uma antena
542. Em uma implementação particular, o processador 510, o controlador de exibição 526, a memória 532, o CODEC 534 e o controlador sem fio 540 são incluídos em um dispositivo sistema-em-pacote (system-in-package) ou sistema-em-chip (system-on-chip) 522. Em uma implementação particular, um dispositivo de entrada 530 e uma fonte de alimentação 544 são acoplados ao dispositivo sistema-em-chip 522. Além disso, em uma implementação particular, conforme ilustrado na FIG. 5, a tela de exibição 528, o dispositivo de entrada 530, o alto-falante 536, o microfone 538, a antena 542 e a fonte de alimentação 544 são externos ao dispositivo sistema-em-chip 522. No entanto, cada uma tela de exibição 528, dispositivo de entrada 530, alto-falante 536, microfone 538, antena 542 e fonte de alimentação 544 pode ser acoplado a um componente do dispositivo sistema-em-chip 522, tal como uma interface ou um controlador.
[0058] Os dispositivos e funcionalidades descritos acima, por exemplo, conforme descrito em referência a qualquer uma ou mais dentre as FIGs. 1 - 5, podem ser projetados e configurados em arquivos de computador (por exemplo, RTL, GDSII, GERBER, etc.) armazenados em meio legível por computador. Alguns ou todos esses arquivos podem ser fornecidos àqueles que lidam com fabricação e fabricam dispositivos com base nesses arquivos. Os produtos resultantes incluem lâminas semicondutoras que são então cortadas em matrizes semicondutoras e empacotadas em um chip semicondutor. Os chips são então empregados nos dispositivos descritos acima.
[0059] Em conexão com os exemplos descritos, um meio legível por computador não transitório (por exemplo, a memória 532) armazena instruções que são executáveis por um processador (por exemplo, o processador 100 ou o processador 510) para realizar uma operação de multiplicação de ponto flutuante executando uma pluralidade de instruções de multiplicação de inteiro para gerar um resultado intermediário e executando uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial em relação ao resultado intermediário e pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante. Por exemplo, em um aspecto particular, a memória 532 armazena instruções para fazer com que o processador 510 realize o método 300 da FIG. 3, o método 400 da FIG. 4 ou qualquer combinação dos mesmos.
[0060] Em conjunto com os exemplos descritos, um aparelho inclui meios para executar uma pluralidade de instruções de multiplicação de inteiro para gerar um resultado intermediário. Por exemplo, os meios para executar a pluralidade de instruções de multiplicação de inteiro podem corresponder ao multiplicador de inteiro 112 da FIG. 1, a um ou outros mais circuitos ou dispositivos para executar uma pluralidade de instruções de multiplicação de inteiro ou qualquer combinação dos mesmos.
[0061] O aparelho inclui também meios para executar uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial em relação ao resultado intermediário e pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante. Por exemplo, os meios para executar a operação de multiplicação de ponto flutuante de propósito especial podem corresponder ao multiplicador de ponto flutuante 114 da FIG. 1, a um ou outros mais circuitos ou dispositivos para executar a instrução de multiplicação - acumulação de ponto flutuante de propósito especial ou qualquer combinação dos mesmos.
[0062] Em algumas implementações, o aparelho inclui meios para substituir uma instrução de multiplicação de ponto flutuante com a pluralidade de instruções de multiplicação de inteiro e a instrução de multiplicação - acumulação de ponto flutuante de propósito especial. Por exemplo, o aparelho pode incluir o tradutor de instrução 102 da FIG. 1 (por exemplo, um decodificador), um ou outros mais circuitos ou dispositivos configurados para substituir a instrução de multiplicação de ponto flutuante com a pluralidade de instruções de multiplicação de inteiro e a instrução de multiplicação - acumulação de ponto flutuante de propósito especial ou qualquer combinação dos mesmos.
[0063] Em algumas implementações, o aparelho inclui meios para armazenar o resultado intermediário e o resultado intermediário corresponde a uma soma do terceiro valor, do segundo valor e de uma versão de tamanho reduzido do primeiro valor. Por exemplo, os meios para armazenar o resultado intermediário podem corresponder a um ou mais registros (por exemplo, no arquivo de registro 126 da FIG. 1), a um ou outros mais latches, flip-flops, dispositivos de memória (por exemplo, memória de acesso aleatório ( RAM)) ou outros circuitos ou dispositivos configurados para armazenar o resultado intermediário ou qualquer combinação dos mesmos.
[0064] Aqueles versados na técnica apreciariam complementarmente que os vários blocos lógicos, configurações, módulos, circuitos e etapas de algoritmos ilustrativos descritos em conexão com as modalidades descritas neste documento podem ser implementados como hardware eletrônico, software de computador ou por combinações de ambos. Vários componentes, blocos, configurações, módulos, circuitos e etapas ilustrativos foram descritos acima geralmente em termos de sua funcionalidade. Se essa funcionalidade é implementada como hardware ou software depende das restrições particulares de aplicação e projeto impostas ao sistema geral. Técnicos qualificados podem implementar a funcionalidade descrita de várias maneiras para cada aplicação particular, mas essas decisões de implementação não devem ser interpretadas como causadoras de um afastamento do escopo da presente descrição.
[0065] Porções de um método ou de um algoritmo descritos em conexão com as modalidades descritas neste documento podem ser incorporadas diretamente em hardware, em um módulo de software executado por um processador ou em uma combinação dos dois. Um módulo de software pode residir em memória de acesso aleatório (RAM), em memória flash, em memória somente de leitura (ROM), em memória somente de leitura programável (PROM), em memória somente de leitura programável apagável (EPROM), em memória somente de leitura programável apagável eletricamente (EEPROM), em registradores, em disco rígido, em um disco removível, em uma memória somente de leitura de disco compacto (CD-ROM) ou qualquer outra forma de meio de armazenamento conhecida na técnica. Um meio de armazenamento não transitório (por exemplo, tangível) exemplar é acoplado ao processador, de modo que o processador possa ler informações e gravar informações no meio de armazenamento. Em alternativa, o meio de armazenamento pode ser parte integrante do processador. O processador e o meio de armazenamento podem residir em um circuito integrado de aplicação específica (ASIC). O ASIC pode residir em um dispositivo de computação ou em um terminal de usuário. Em alternativa, o processador e o meio de armazenamento podem residir como componentes discretos em um dispositivo de computação ou terminal de usuário.
[0066] A descrição anterior das modalidades descritas é fornecida para permitir que uma pessoa versada na técnica construa ou utilize as modalidades descrita. Várias modificações nessas modalidades serão prontamente aparentes para aqueles versados na técnica, e os princípios definidos neste documento podem ser aplicados a outras modalidades sem se afastar do escopo da descrição.
Assim, a presente descrição não se destina a ser limitada às modalidades mostradas neste documento, mas deve receber o escopo mais amplo possível, consistente com os princípios e as novas características, conforme definido pelas reivindicações a seguir.

Claims (20)

REIVINDICAÇÕES
1. Processador compreendendo: um multiplicador de inteiro configurado para executar uma instrução de multiplicação de inteiro para multiplicar os bits significativos de pelo menos um operando de ponto flutuante de uma operação de multiplicação de ponto flutuante; e um multiplicador de ponto flutuante configurado para executar uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial em relação a um resultado intermediário da operação de multiplicação de ponto flutuante e o pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante.
2. Processador, de acordo com a reivindicação 1, em que a instrução de multiplicação de inteiro inclui pelo menos uma dentre as seguintes: uma primeira instrução para realizar multiplicação de inteiro de bits significativos de baixa ordem de um primeiro operando com bits significativos de baixa ordem de um segundo operando para gerar um primeiro valor; uma segunda instrução para realizar multiplicação de inteiro dos bits significativos de baixa ordem do primeiro operando e bits significativos de alta ordem do segundo operando para gerar um segundo valor; ou uma terceira instrução para realizar multiplicação de inteiro dos bits significativos de baixa ordem do segundo operando e bits significativos de alta ordem do primeiro operando para gerar um terceiro valor.
3. Processador, de acordo com a reivindicação 2, compreendendo adicionalmente um registro configurado para armazenar o resultado intermediário e em que o resultado intermediário corresponde a uma soma do terceiro valor, do segundo valor e de uma versão de comprimento reduzido do primeiro valor.
4. Processador, de acordo com a reivindicação 3, em que o valor intermediário inclui um bit dedicado que indica se a versão de comprimento reduzido do primeiro valor é inexata.
5. Processador, de acordo com a reivindicação 1, em que o multiplicador de ponto flutuante é configurado para executar a instrução de multiplicação - acumulação de ponto flutuante de propósito especial pela: realização da multiplicação de ponto flutuante que inclui multiplicar os bits significativos de alta ordem de um primeiro operando com os bits significativos de alta ordem de um segundo operando para gerar bits significativos de alta ordem de um valor de ponto flutuante; e acumulação dos bits significativos de alta ordem com o valor intermediário para gerar o resultado final de multiplicação de ponto flutuante.
6. Processador, de acordo com a reivindicação 1, compreendendo adicionalmente um decodificador configurado para substituir uma instrução de multiplicação de ponto flutuante recebida com um conjunto de instruções que inclui uma pluralidade de instruções de multiplicação de inteiro e a instrução de multiplicação - acumulação de ponto flutuante de propósito especial.
7. Processador, de acordo com a reivindicação 6,
em que o conjunto de instruções inclui adicionalmente uma instrução que é executável para: determinar se um primeiro operando da operação de multiplicação de ponto flutuante é desnormal; e em resposta à determinação que o primeiro operando é desnormal e que um expoente de um segundo operando da operação de multiplicação de ponto flutuante é maior que um limite, modificar um valor de pelo menos um entre o primeiro operando ou o segundo operando.
8. Método para realizar uma operação de multiplicação de ponto flutuante em um processador, o método compreendendo: executar uma pluralidade de instruções de multiplicação de inteiro para gerar um resultado intermediário; e executar uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial em relação ao resultado intermediário e pelo menos um operando de ponto flutuante da operação de multiplicação de ponto flutuante para gerar um resultado de multiplicação de ponto flutuante.
9. Método, de acordo com a reivindicação 8, em que a pluralidade de instruções de multiplicação de inteiro inclui: uma primeira instrução para realizar multiplicação de inteiro de bits significativos de baixa ordem de um primeiro operando com bits significativos de baixa ordem de um segundo operando para gerar um primeiro valor; uma segunda instrução para realizar multiplicação de inteiro dos bits significativos de baixa ordem do primeiro operando e bits significativos de alta ordem do segundo operando para gerar um segundo valor; e uma terceira instrução para realizar multiplicação de inteiro dos bits significativos de baixa ordem do segundo operando e bits significativos de alta ordem do primeiro operando para gerar um terceiro valor.
10. Método, de acordo com a reivindicação 9, em que o resultado intermediário corresponde a uma soma do terceiro valor, do segundo valor e de uma versão de comprimento reduzido do primeiro valor.
11. Método, de acordo com a reivindicação 10, em que o valor intermediário inclui um bit dedicado que indica se a versão de comprimento reduzido do primeiro valor é inexata.
12. Método, de acordo com a reivindicação 8, em que executar a instrução de multiplicação - acumulação de ponto flutuante de propósito especial faz com que o processador: realize multiplicação de ponto flutuante que inclui multiplicar bits significativos de alta ordem de um primeiro operando com bits significativos de alta ordem de um segundo operando para gerar bits significativos de alta ordem de um valor de ponto flutuante; e acumule os bits significativos de alta ordem com o valor intermediário para gerar o resultado de multiplicação de ponto flutuante.
13. Método, de acordo com a reivindicação 8, compreendendo adicionalmente, antes de executar a pluralidade de instruções de multiplicação de inteiro:
receber uma instrução de multiplicação de ponto flutuante; e substituir a instrução de multiplicação de ponto flutuante com a pluralidade de instruções de multiplicação de inteiro e a instrução de multiplicação - acumulação de ponto flutuante de propósito especial.
14. Método, de acordo com a reivindicação 13, compreendendo adicionalmente, em resposta ao recebimento da instrução de multiplicação de ponto flutuante: determinar se um primeiro operando da operação de multiplicação de ponto flutuante é desnormal; e em resposta à determinação que o primeiro operando é desnormal e que um expoente de um segundo operando da operação de multiplicação de ponto flutuante é maior que um limite, modificar um valor de pelo menos um entre o primeiro operando ou o segundo operando.
15. Aparelho compreendendo: meios para executar uma pluralidade de instruções de multiplicação de inteiro para gerar um resultado intermediário; e meios para executar uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial em relação ao resultado intermediário e pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante.
16. Aparelho, de acordo com a reivindicação 15, compreendendo adicionalmente meios para substituir uma instrução de multiplicação de ponto flutuante com a pluralidade de instruções de multiplicação de inteiro e a instrução de multiplicação - acumulação de ponto flutuante de propósito especial.
17. Aparelho, de acordo com a reivindicação 15, em que a pluralidade de instruções de multiplicação de inteiro inclui: uma primeira instrução para realizar multiplicação de inteiro de bits significativos de baixa ordem de um primeiro operando com bits significativos de baixa ordem de um segundo operando para gerar um primeiro valor; uma segunda instrução para realizar multiplicação de inteiro dos bits significativos de baixa ordem do primeiro operando e bits significativos de alta ordem do segundo operando para gerar um segundo valor; e uma terceira instrução para realizar multiplicação de inteiro dos bits significativos de baixa ordem do segundo operando e bits significativos de alta ordem do primeiro operando para gerar um terceiro valor.
18. Aparelho, de acordo com a reivindicação 17, compreendendo adicionalmente meios para armazenar o resultado intermediário e em que o resultado intermediário corresponde a uma soma do terceiro valor, do segundo valor e de uma versão de comprimento reduzido do primeiro valor.
19. Método compreendendo: identificar um primeiro operando de uma operação de multiplicação de múltiplos operandos como desnormal; e em resposta à determinação de que um expoente de um segundo operando da operação com múltiplos operandos é maior que um limite, modificar um valor de pelo menos um entre o primeiro operando ou o segundo operando.
20. Método, de acordo com a reivindicação 19,
compreendendo adicionalmente: executar uma pluralidade de instruções de multiplicação de inteiro utilizando o valor modificado de pelo menos um entre o primeiro operando ou o segundo operando para gerar um resultado intermediário; e executar uma instrução de multiplicação - acumulação de ponto flutuante de propósito especial em relação ao resultado intermediário e pelo menos um operando de ponto flutuante para gerar um resultado final de multiplicação de ponto flutuante.
BR112020012183-5A 2017-12-21 2018-12-11 Sistema e método de processamento de operação de multiplicação de ponto flutuante BR112020012183B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/851,390 2017-12-21
US15/851,390 US10346133B1 (en) 2017-12-21 2017-12-21 System and method of floating point multiply operation processing
PCT/US2018/065034 WO2019125835A1 (en) 2017-12-21 2018-12-11 System and method of floating point multiply operation processing

Publications (2)

Publication Number Publication Date
BR112020012183A2 true BR112020012183A2 (pt) 2020-11-24
BR112020012183B1 BR112020012183B1 (pt) 2021-09-14

Family

ID=64949460

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112020012183-5A BR112020012183B1 (pt) 2017-12-21 2018-12-11 Sistema e método de processamento de operação de multiplicação de ponto flutuante

Country Status (7)

Country Link
US (1) US10346133B1 (pt)
EP (1) EP3729257B1 (pt)
CN (1) CN111492343B (pt)
AU (1) AU2018388451B2 (pt)
BR (1) BR112020012183B1 (pt)
CA (1) CA3083043C (pt)
WO (1) WO2019125835A1 (pt)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11347511B2 (en) * 2019-05-20 2022-05-31 Arm Limited Floating-point scaling operation
WO2021073511A1 (zh) * 2019-10-14 2021-04-22 安徽寒武纪信息科技有限公司 用于浮点运算的乘法器、方法、集成电路芯片和计算装置
CN112732221A (zh) * 2019-10-14 2021-04-30 安徽寒武纪信息科技有限公司 用于浮点运算的乘法器、方法、集成电路芯片和计算装置
US11288220B2 (en) * 2019-10-18 2022-03-29 Achronix Semiconductor Corporation Cascade communications between FPGA tiles
CN112463112B (zh) * 2020-11-19 2022-08-16 上海壁仞智能科技有限公司 点积累加方法及装置
CN112860220B (zh) * 2021-02-09 2023-03-24 南方科技大学 一种适用于多精度计算的可重构浮点乘加运算单元及方法
WO2022178339A1 (en) * 2021-02-21 2022-08-25 Redpine Signals Inc Floating point dot product multiplier-accumulator
US11893360B2 (en) 2021-02-21 2024-02-06 Ceremorphic, Inc. Process for a floating point dot product multiplier-accumulator
US11983237B2 (en) 2021-02-21 2024-05-14 Ceremorphic, Inc. Floating point dot product multiplier-accumulator
US20230083270A1 (en) * 2021-09-14 2023-03-16 International Business Machines Corporation Mixed signal circuitry for bitwise multiplication with different accuracies

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5267186A (en) 1990-04-02 1993-11-30 Advanced Micro Devices, Inc. Normalizing pipelined floating point processing unit
US5058048A (en) * 1990-04-02 1991-10-15 Advanced Micro Devices, Inc. Normalizing pipelined floating point processing unit
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US8019805B1 (en) * 2003-12-09 2011-09-13 Globalfoundries Inc. Apparatus and method for multiple pass extended precision floating point multiplication
KR100834412B1 (ko) 2007-05-23 2008-06-04 한국전자통신연구원 모바일 멀티미디어 연산의 효율적인 처리를 위한 병렬 프로세서
US8214417B2 (en) * 2008-08-14 2012-07-03 Oracle America, Inc. Subnormal number handling in floating point adder without detection of subnormal numbers before exponent subtraction
US8180822B2 (en) 2008-09-03 2012-05-15 Oracle America, Inc. Method and system for processing the booth encoding 33RD term
US20130132452A1 (en) * 2011-11-22 2013-05-23 Ravi Korsa Method and Apparatus for Fast Computation of Integral and Fractional Parts of a High Precision Floating Point Multiplication Using Integer Arithmetic
US9519459B2 (en) 2014-06-20 2016-12-13 Wisconsin Alumni Research Foundation High efficiency computer floating point multiplier unit
CN107291419B (zh) * 2017-05-05 2020-07-31 中国科学院计算技术研究所 用于神经网络处理器的浮点乘法器及浮点数乘法

Also Published As

Publication number Publication date
AU2018388451A1 (en) 2020-06-11
CN111492343A (zh) 2020-08-04
EP3729257B1 (en) 2022-05-25
CA3083043A1 (en) 2019-06-27
CN111492343B (zh) 2021-03-12
WO2019125835A1 (en) 2019-06-27
US20190196785A1 (en) 2019-06-27
EP3729257A1 (en) 2020-10-28
CA3083043C (en) 2020-12-29
AU2018388451B2 (en) 2021-03-25
BR112020012183B1 (pt) 2021-09-14
US10346133B1 (en) 2019-07-09

Similar Documents

Publication Publication Date Title
BR112020012183A2 (pt) sistema e método de processamento de operação de multiplicação de ponto flutuante
US9928063B2 (en) Instruction and logic to provide vector horizontal majority voting functionality
EP3719639A2 (en) Systems and methods to perform floating-point addition with selected rounding
US10146533B2 (en) Instruction and logic for detecting numeric accumulation error
CN101495959B (zh) 组合微处理器内的多个寄存器单元的方法和设备
TWI588740B (zh) 包括用於移位和(shift-sum)乘法器之指令及邏輯的處理器及系統,以及用於移位和乘法的方法
US10157059B2 (en) Instruction and logic for early underflow detection and rounder bypass
US20190121645A1 (en) Instruction And Logic For In-Order Handling In An Out-Of-Order Processor
US20160378465A1 (en) Efficient sparse array handling in a processor
WO2007133101A1 (en) Floating point addition for different floating point formats
TWI643124B (zh) 用於提供資訊處理的裝置、方法及系統
KR102581403B1 (ko) 공유 하드웨어 로직 유닛 및 그것의 다이 면적을 줄이는 방법
TWI787357B (zh) 運算乘積的方法及系統和運算點積及運算卷積的方法
US9753694B2 (en) Division and root computation with fast result formatting
US10445064B2 (en) Implementing logarithmic and antilogarithmic operations based on piecewise linear approximation
US11010166B2 (en) Arithmetic logic unit with normal and accelerated performance modes using differing numbers of computational circuits
TW201732548A (zh) 用於向量置換的指令和邏輯
EP3391198A1 (en) Instruction and logic for detecting the floating point cancellation effect
EP3716490A1 (en) Detection of adjacent two bit errors in a codeword
US9564917B1 (en) Instruction and logic for accelerated compressed data decoding
US10387797B2 (en) Instruction and logic for nearest neighbor unit
WO2014105187A1 (en) Leading change anticipator logic
US10503473B1 (en) Floating-point division alternative techniques
US20230359436A1 (en) Floating-point multiplier using zero counters
WO2022191859A1 (en) Vector processing using vector-specific data type

Legal Events

Date Code Title Description
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 11/12/2018, OBSERVADAS AS CONDICOES LEGAIS.