BR112020000167A2 - acelerador de operação - Google Patents

acelerador de operação Download PDF

Info

Publication number
BR112020000167A2
BR112020000167A2 BR112020000167-8A BR112020000167A BR112020000167A2 BR 112020000167 A2 BR112020000167 A2 BR 112020000167A2 BR 112020000167 A BR112020000167 A BR 112020000167A BR 112020000167 A2 BR112020000167 A2 BR 112020000167A2
Authority
BR
Brazil
Prior art keywords
matrix
memory
data
circuit
operations
Prior art date
Application number
BR112020000167-8A
Other languages
English (en)
Other versions
BR112020000167B1 (pt
Inventor
Heng Liao
Hu Liu
Hao Wang
Original Assignee
Huawei Technologies Co., Ltd.
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 Huawei Technologies Co., Ltd. filed Critical Huawei Technologies Co., Ltd.
Publication of BR112020000167A2 publication Critical patent/BR112020000167A2/pt
Publication of BR112020000167B1 publication Critical patent/BR112020000167B1/pt

Links

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
    • 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/491Computations with decimal numbers radix 12 or 20.
    • G06F7/498Computations with decimal numbers radix 12 or 20. using counter-type accumulators
    • G06F7/4981Adding; 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/50Adding; 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

Landscapes

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

Abstract

A presente invenção se refere ao campo de tecnologias de cálculo de dados, e revela um acelerador de operação, para reduzir tempo para realizar uma operação de multiplicação em duas matrizes N*N. O acelerador de operação inclui: uma primeira memória, uma segunda memória, um circuito de operação, e um controlador. O circuito de operação pode realizar comunicação de dados com a primeira memória e com a segunda memória usando um barramento. O circuito de operação é configurado para: extrair dados de matriz a partir da primeira memória e da segunda memória, e realizar uma operação de multiplicação. O controlador é configurado para controlar, de acordo com um programa ou instrução predefinidos, o circuito de operação para concluir a operação de multiplicação. O acelerador de operação pode ser configurado para realizar uma operação de multiplicação em duas matrizes.

Description

“ACELERADOR DE OPERAÇÃO” CAMPO DA TÉCNICA
[0001] Este pedido refere-se ao campo de tecnologias de cálculo de dados e, em particular, a um acelerador de operação.
ANTECEDENTES
[0002] Atualmente, um produto de duas matrizes A e B pode ser calculado de qualquer um dentre os seguintes dois modos:
[0003] Modo 1: O cálculo é realizado usando um processador de vetor.
[0004] Supõe-se que C=AB, e o processador de vetor possa calcular M elementos ao mesmo tempo. Referindo-se à Figura 1, o processador de vetor carrega vetores (que incluem elementos Ai1, Ai2, …, Ai(M–1), e AiM) em uma linha i da matriz A em um registro de origem Reg0 e, então, carrega vetores (que incluem elementos Bj1, Bj2, …, Bj(M–1), e BjM) em uma linha j da matriz B em um registro Reg1, para multiplicar elementos correspondentes em Reg0 e Reg1; e, por fim, o processador de vetor conclui uma operação de acúmulo usando uma árvore de somadores, e calcula dados Cij em uma linha i e em uma coluna j de uma matriz C. Após uma pluralidade de cálculos, a matriz C pode ser obtida.
[0005] Modo 2: Para aumentar, adicionalmente, uma velocidade de cálculo, uma operação de multiplicação das matrizes pode ser concluída usando um arranjo de computação bidimensional.
[0006] Por exemplo, o arranjo de computação bidimensional pode ser um arranjo sistólico N*N. Uma operação de multiplicação de um vetor e de uma matriz pode ser concluída em cada ciclo de clock usando tal arranjo sistólico.
[0007] No modo 1, N^3 operações de multiplicação são necessárias para concluir uma operação de multiplicação de duas matrizes N*N e, visto que o processador de vetor pode multiplicar os M elementos em cada ciclo de clock, a duração necessária para concluir uma operação de multiplicação é N^3/M ciclos de clock. No modo 2, N^3 operações de multiplicação são necessárias para concluir uma operação de multiplicação de duas matrizes N*N e, visto que o arranjo sistólico tem N^2 unidades de operação, a duração necessária para concluir uma operação de matriz é N^3/N^2=N ciclos de clock. Tanto no Modo 1 quanto no Modo 2, é necessário um longo tempo para concluir a operação de multiplicação das matrizes N*N.
SUMÁRIO
[0008] As modalidades deste pedido fornecem um acelerador de operação para reduzir tempo de realização de uma operação de multiplicação em duas matrizes N*N.
[0009] A fim de alcançar o objetivo antecedente, as modalidades deste pedido fornecem as seguintes soluções técnicas:
[0010] De acordo com um primeiro aspecto, um acelerador de operação é fornecido. O acelerador de operação inclui: uma primeira memória, configurada para armazenar uma primeira matriz, em que a primeira matriz é uma matriz M*N; uma segunda memória, configurada para armazenar uma segunda matriz, em que a segunda matriz é uma matriz N*K; um circuito de operação conectado à primeira memória e à segunda memória, em que o circuito de operação inclui um circuito multiplicador de matriz e um circuito somador; o circuito multiplicador de matriz inclui M grupos de operações, que incluem blocos de operações, cada grupo de operações inclui K blocos de operações, cada bloco de operações inclui N unidades de operação, a unidade de operação é dotada de duas entradas que são usadas respectivamente para receber dados enviados pela primeira memória e pela segunda memória, e a unidade de operação multiplica as duas partes de dados; e o circuito somador é configurado para somar resultados de cálculo de unidades de operação que pertencem a um mesmo bloco de operações para obter um resultado de cálculo de cada bloco de operações; e um controlador conectado ao circuito de operação, em que o controlador é configurado para realizar as seguintes ações: gravar respectivamente K vetores coluna da segunda matriz nos K blocos de operações de cada grupo de operações, em que uma jésima parte de dados em uma gésima coluna de vetores da segunda matriz é gravada em uma jésima unidade de operação em um gésimo bloco de operações nos K blocos de operações; enviar respectivamente M vetores linha da primeira matriz para os M grupos de operações, em que um iésimo vetor linha da primeira matriz é enviado para um iésimo grupo de operações nos M grupos de operações, e uma jésima unidade de operação em cada bloco de operações no iésimo grupo de operações recebe uma jésima parte de dados no iésimo vetor linha; de modo que cada unidade de operação nos M grupos de operações realize uma operação de multiplicação em duas partes de dados recebidas pela unidade de operação, e o circuito somador soma resultados de cálculo de unidades de operação em cada bloco de operações para obter uma terceira matriz, em que a terceira matriz é um produto da primeira matriz e da segunda matriz, um elemento em uma linha i e uma coluna g na terceira matriz é um resultado de cálculo de um g ésimo bloco de operações no iésimo grupo de operações, M, N e K são números inteiros maiores que 0, i é um número inteiro maior que 0 e menor que M+1, g é um número inteiro maior que 0 e menor que K+1, e j é um número inteiro maior que 0 e menor que N+1.
[0011] No método fornecido no primeiro aspecto, visto que os M grupos de operações incluem M*N*K unidades de operação, o acelerador de operação pode realizar M*N*K operações de multiplicação dentro de um ciclo de clock. Nesse caso, o acelerador de operação pode calcular um produto de uma matriz M*N e uma matriz N*K. Quando comparado à técnica anterior, esse método pode reduzir bastante o tempo necessário pela operação de multiplicação de matriz.
[0012] Em um possível projeto, o circuito somador inclui M*K árvores de somadores, uma árvore de somadores corresponde a um bloco de operações, a árvore de somadores é conectada a N unidades de operação no bloco de operações correspondente, e a árvore de somadores é configurada para somar resultados de cálculo das N unidades de operação conectadas à árvore de somadores.
[0013] Nesse projeto possível, uma estrutura de composição do circuito somador é especificamente fornecida.
[0014] Em um possível projeto, a unidade de operação inclui: uma unidade de armazenamento, configurada para armazenar dados gravados na unidade de armazenamento; e um circuito multiplicador conectado à unidade de armazenamento, configurado para calcular um produto de dados recebidos e dos dados armazenados na unidade de armazenamento.
[0015] Nesse possível projeto, uma estrutura de composição da unidade de operação é especificamente fornecida.
[0016] Em um possível projeto, a unidade de operação inclui uma pluralidade de unidades de armazenamento, um circuito multiplicador, um primeiro circuito de seleção conectado à pluralidade de unidades de armazenamento, e um segundo circuito de seleção conectado à pluralidade de unidades de armazenamento e ao circuito multiplicador. A pluralidade de unidades de armazenamento é configurada para armazenar dados; o primeiro circuito de seleção é configurado para: antes de o circuito multiplicador realizar uma operação de multiplicação, selecionar, a partir da pluralidade de unidades de armazenamento, uma unidade de armazenamento para armazenar dados usados quando o circuito multiplicador realizar a operação de multiplicação; o segundo circuito de seleção é configurado para: quando o circuito multiplicador realizar a operação de multiplicação, selecionar uma unidade de armazenamento para armazenar dados usados quando o circuito multiplicador realizar a operação de multiplicação; e o circuito multiplicador é configurado para calcular um produto de dados recebidos e dos dados armazenados na unidade de armazenamento selecionada pelo segundo circuito de seleção.
[0017] Nesse possível projeto, a unidade de armazenamento pode ser dividida em dois blocos (block). Quando a unidade de operação incluir uma pluralidade de unidades de armazenamento, se a unidade de operação realizar uma operação de multiplicação com base em dados em um bloco em uma unidade de armazenamento, o controlador pode gravar, adicionalmente, dados em outra unidade de armazenamento na pluralidade de unidades de armazenamento ou outro bloco na unidade de armazenamento que participa na operação de multiplicação, aperfeiçoando, desse modo, a eficiência de funcionamento da unidade de operação.
[0018] Em um possível projeto, a primeira memória é conectada ao circuito de operação usando um primeiro barramento, e uma largura de bit do primeiro barramento é Wi*N*M; a segunda memória é conectada ao circuito de operação usando um segundo barramento, e uma largura de bit do segundo barramento é Wi*N; e Wi é uma largura de bit máxima que é de dados de entrada e que é permitida pela unidade de operação.
[0019] Em um possível projeto, o acelerador de operação inclui, adicionalmente, um controlador de acesso à unidade de armazenamento conectado à primeira memória, à segunda memória e ao controlador, e o controlador de acesso à unidade de armazenamento é configurado para: obter, sob controle do controlador, a primeira matriz e a segunda matriz, salvar a primeira matriz na primeira memória, e salvar a segunda matriz na segunda memória.
[0020] Em um possível projeto, o acelerador de operação inclui, adicionalmente: uma terceira memória, configurada para armazenar dados de origem da primeira matriz; um controlador de acesso à unidade de armazenamento conectado à primeira memória, à segunda memória, à terceira memória e ao controlador, em que o controlador de acesso à unidade de armazenamento é configurado para: obter, sob controle do controlador, os dados de origem da primeira matriz e da segunda matriz, salvar os dados de origem da primeira matriz na terceira memória, e salvar a segunda matriz na segunda memória; e uma unidade de cálculo de vetor conectada à primeira memória, à terceira memória e ao controlador, em que a unidade de cálculo de vetor é configurada para: converter, sob controle do controlador, os dados de origem da primeira matriz na primeira matriz, e salvar a primeira matriz na primeira memória.
[0021] Nesse possível projeto, o acelerador de operação tem, adicionalmente, uma capacidade de obter a primeira matriz usando os dados de origem da primeira matriz.
[0022] Em um possível projeto, a terceira memória é conectada ao circuito de operação, e a terceira memória é configurada, adicionalmente, para armazenar a terceira matriz.
[0023] Em um possível projeto, o acelerador de operação inclui, adicionalmente, um acumulador conectado ao circuito de operação, à unidade de cálculo de vetor e ao controlador, em que o acumulador é configurado para somar elementos em posições correspondentes na terceira matriz e em uma quarta matriz sob controle do controlador, para obter uma quinta matriz; e a unidade de cálculo de vetor é configurada, adicionalmente, para salvar a quinta matriz na terceira memória sob controle do controlador, em que a terceira matriz é um produto da primeira matriz e da segunda matriz, a primeira matriz inclui uma primeira parte de uma primeira matriz a ser calculada, a primeira parte da primeira matriz a ser calculada são elementos na 1a a Nésima colunas da primeira matriz a ser calculada, a segunda matriz é uma primeira parte de uma segunda matriz a ser calculada, a primeira parte da segunda matriz a ser calculada são elementos na 1a a Nésimas linhas da segunda matriz a ser calculada, a primeira matriz a ser calculada inclui M linhas de elementos, a segunda matriz a ser calculada inclui K colunas de elementos, a quarta matriz é um produto de uma segunda parte da primeira matriz a ser calculada e de uma segunda parte da segunda matriz a ser calculada, a segunda parte da primeira matriz a ser calculada é uma parte diferente da primeira parte na primeira matriz a ser calculada, e a segunda parte da segunda matriz a ser calculada é uma parte diferente da primeira parte na segunda matriz a ser calculada.
[0024] Em um possível projeto, o acelerador de operação inclui, adicionalmente: um armazenamento temporário de busca de instrução conectado ao controlador, e configurado para armazenar uma instrução usada pelo controlador; e uma unidade de interface de barramento conectada ao armazenamento temporário de busca de instrução, ao controlador de acesso à unidade de armazenamento e a uma memória externa, usada pelo armazenamento temporário de busca de instrução para obter a instrução a partir da memória externa, e usada, adicionalmente, pelo controlador de acesso à unidade de armazenamento para obter pelo menos um dentre os dados de origem da primeira matriz, a primeira matriz e a segunda matriz a partir da memória externa.
BREVE DESCRIÇÃO DOS DESENHOS
[0025] A Figura 1 é um diagrama esquemático de um processo de cálculo de um produto de duas matrizes na técnica anterior;
[0026] A Figura 2 é um diagrama esquemático de conversão de um kernel de convolução em uma matriz de peso na técnica anterior;
[0027] A Figura 3 é um diagrama esquemático de conversão de dados de entrada em uma matriz de entrada na técnica anterior;
[0028] A Figura 4 é um diagrama esquemático de um método para realizar uma operação de multiplicação em duas matrizes na técnica anterior;
[0029] A Figura 5 é um diagrama de composição esquemático de um acelerador de operação, de acordo com uma modalidade da presente invenção;
[0030] A Figura 6 é um diagrama de composição esquemático de um circuito de operação, de acordo com uma modalidade da presente invenção;
[0031] A Figura 7 é um diagrama esquemático de fiação em um circuito de operação, de acordo com uma modalidade da presente invenção;
[0032] A Figura 8 é um diagrama esquemático de um vetor coluna carregado em cada bloco de operações, de acordo com uma modalidade da presente invenção;
[0033] A Figura 9 é um diagrama esquemático de dados em uma unidade de operação em cada grupo de operações, de acordo com uma modalidade da presente invenção;
[0034] A Figura 10 é um diagrama esquemático de um vetor linha carregado em cada bloco de operações, de acordo com uma modalidade da presente invenção;
[0035] A Figura 11 é um diagrama esquemático de dados em uma unidade de operação em cada grupo de operações, de acordo com uma modalidade da presente invenção;
[0036] A Figura 12 é um diagrama esquemático de dados calculados por uma unidade de operação em cada grupo de operações, de acordo com uma modalidade da presente invenção;
[0037] A Figura 13 é um diagrama esquemático de uma relação entre uma árvore de somadores e um bloco de operações, de acordo com uma modalidade da presente invenção;
[0038] A Figura 14 é um diagrama de composição esquemático de uma unidade de operação, de acordo com uma modalidade da presente invenção;
[0039] A Figura 15 é um diagrama de composição esquemático de outra unidade de operação, de acordo com uma modalidade da presente invenção;
[0040] A Figura 16 é um diagrama de composição esquemático de outro acelerador de operação, de acordo com uma modalidade da presente invenção;
[0041] A Figura 17 é um diagrama de composição esquemático ainda de outro acelerador de operação, de acordo com uma modalidade da presente invenção;
[0042] A Figura 18 é um diagrama esquemático de uma matriz de preenchimento, de acordo com uma modalidade da presente invenção;
[0043] A Figura 19 é um diagrama esquemático de matrizes segmentadas, de acordo com uma modalidade da presente invenção;
[0044] A Figura 20 é um fluxograma em que um controlador controla um acelerador de operação para concluir uma operação de multiplicação de matriz, de acordo com uma modalidade da presente invenção; e
[0045] A Figura 21 é um fluxograma em que uma CPU controla um acelerador de operação para implantar uma operação de multiplicação de matriz, de acordo com uma modalidade da presente invenção.
DESCRIÇÃO DAS MODALIDADES
[0046] A seção a seguir descreve as soluções técnicas nas modalidades deste pedido com referência aos desenhos anexos nas modalidades deste pedido. Na descrição deste pedido, a menos que estabelecido de outra maneira, "/" significa ou, por exemplo, A/B pode indicar A ou B, e "uma pluralidade de" significa dois ou mais.
[0047] Um acelerador de operação, fornecido nas modalidades da presente invenção, pode ser aplicado a campos, tais como aprendizagem por máquina, aprendizagem profunda e uma rede neural convolucional, ou pode ser aplicado a campos, tais como processamento de imagem digital e processamento de sinal digital, ou pode ser aplicado a outros campos relacionados a uma operação de multiplicação de matriz.
[0048] Nos últimos anos, devido ao bom desempenho de uma rede neural convolucional em classificação de imagem, reconhecimento de imagem, reconhecimento de áudio e outros campos relacionados, a rede neural convolucional se torna um ponto crucial de pesquisa e desenvolvimento nos círculos acadêmico e industrial. A rede neural convolucional inclui, essencialmente, operações de convolução e totalmente conectadas (fully connected, FC, a título de abreviação). Uma quantidade de computação da operação de convolução pode ocupar, normalmente, mais do que 70% de uma quantidade de computação de toda uma rede. O acelerador de operação, fornecido nas modalidades da presente invenção, pode realizar a operação de convolução e a operação FC na rede neural convolucional.
[0049] A operação de convolução não é equivalente à operação de multiplicação de matriz no sentido estrito. Entretanto, a operação de convolução pode ser convertida na operação de multiplicação de matriz através de ajuste de dados apropriado. Há, frequentemente, uma pluralidade de kernels de convolução na rede neural convolucional. O kernel de convolução é tridimensional e inclui três dimensões de dados. As direções x e y são comprimento e largura dos dados, e uma direção z pode ser considerada como profundidade dos dados. Os kernels de convolução são, na verdade, filtros (filter), e são configurados, essencialmente, para extrair diferentes recursos de imagens. Referindo-se à Figura 2, o kernel de convolução é substancialmente uma combinação de uma série de pesos. Supõe-se que haja K kernels de convolução.
N elementos na direção z em uma mesma posição nos K kernels de convolução são extraídos, e uma matriz de peso N*K (weight matrix) pode ser obtida. Os kernels de convolução podem ser pré-armazenados em uma memória do acelerador de operação em uma forma de uma matriz de peso com base em uma especificação (de modo específico, uma quantidade de linha e uma quantidade de coluna da matriz que pode ser calculada pelo acelerador de operação) do acelerador de operação, para invocar quando o acelerador de operação realizar uma operação de multiplicação de matriz. Nas modalidades da presente invenção, "*" indica "multiplicação".
[0050] Referindo-se à Figura 3, com base em um passo (stride) (nas modalidades da presente invenção, o passo é 1) do kernel de convolução, o acelerador de operação pode extrair N partes de dados de M pontos de entrada na direção z, ou seja, um total de M*N partes de dados. Uma matriz de entrada (input matrix) pode ser formada. O acelerador de operação precisa realizar uma operação de multiplicação na matriz de entrada e na matriz de peso.
[0051] A operação FC é substancialmente uma operação de multiplicação de um vetor e de uma matriz. Uma entrada da operação FC é um vetor com 9.216 elementos, e 4.096 pontos precisam ser emitidos em FC. Nesse caso, para obter uma saída de ponto em FC, uma operação de multiplicação de ponto precisa ser realizada em um vetor com 9.216 elementos e 9.216 pesos; e, para obter todos os 4.096 pontos, uma operação de multiplicação de ponto precisa ser realizada no vetor de 9.216 e 9.216x4.096 pesos.
[0052] A Figura 4 mostra uma fórmula de cálculo de uma matriz C=A*B, em que A é uma matriz com dimensões de M*N, e B é uma matriz com dimensões de N*K. Nas modalidades da presente invenção, M, N e K são números inteiros positivos. Para obter uma parte de dados na matriz C por meio de cálculo, uma operação de multiplicação de ponto precisa ser realizada em dados em um vetor linha na matriz A e dados correspondentes em um vetor coluna na matriz B e, então, a adição é realizada. Em outras palavras, para obter uma parte de dados na matriz C por meio de cálculo, N operações de multiplicação precisam ser realizadas. Nesse caso, para obter a matriz C por meio de cálculo, M*N*K operações de multiplicação precisam ser realizadas.
[0053] Um acelerador de operação 50 é fornecido em uma modalidade da presente invenção. Conforme mostrado na Figura 5, o acelerador de operação 50 inclui uma primeira memória 501, uma segunda memória 502, um circuito de operação 503 e um controlador 504. O circuito de operação 503 pode realizar comunicação de dados com a primeira memória 501 e a segunda memória 502 usando um barramento. O circuito de operação 503 é configurado para: extrair dados de matriz da primeira memória 501 e da segunda memória 502, e realizar uma operação de multiplicação. O controlador 504 é configurado para controlar, de acordo com um programa ou instrução predefinida, o circuito de operação 503 para concluir a operação de multiplicação.
[0054] A primeira memória 501 é configurada para armazenar uma primeira matriz, e a primeira matriz é uma matriz M*N. Se uma matriz A for a primeira matriz, um elemento em uma linha i e em uma coluna j, na primeira matriz A, pode ser denotado Aij. A primeira memória 501, mencionada nesta modalidade da presente invenção, e a segunda memória 502, uma terceira memória 506 e uma unidade de armazenamento, que são mencionadas abaixo, podem ser, cada uma, um registro, uma memória de acesso aleatório (random access memory, RAM, a título de abreviação), uma memória de acesso aleatório estática, uma memória flash ou outra memória legível e gravável.
[0055] A segunda memória 502 é configurada para armazenar uma segunda matriz, e a segunda matriz é uma matriz N*K. Se uma matriz B for a segunda matriz, um elemento em uma linha j e em uma coluna g, na segunda matriz B, pode ser denotado Bjg.
[0056] M, N e K são números inteiros maiores que 0, i é um número inteiro maior que 0 e menor que M+1, g é um número inteiro maior que 0 e menor que K+1, e j é um número inteiro maior que 0 e menor que N+1. Quaisquer dois parâmetros em M, N e K podem ser iguais, ou todos dentre M, N e K podem ser iguais.
[0057] Conforme mostrado na Figura 6, o circuito de operação 503 pode incluir um ou mais circuitos multiplicadores de matriz 5031 e um ou mais circuitos somadores 5032. Um circuito somador 5032 pode corresponder a um circuito multiplicador de matriz 5031. Um circuito somador 5032 pode corresponder, alternativamente, a uma pluralidade de circuitos multiplicadores de matriz 5031. A pluralidade de circuitos multiplicadores de matriz 5031, incluída no circuito de operação 503, pode realizar, de maneira independente, respectivas operações de multiplicação de matriz. A Figura 6 é retratada usando um exemplo em que o circuito de operação 503 inclui dois circuitos multiplicadores de matriz 5031. O circuito multiplicador de matriz 5031 inclui M grupos de operações que incluem blocos de operações, cada grupo de operações inclui K blocos de operações, cada bloco de operações inclui N unidades de operação, a unidade de operação é dotada de duas entradas que são usadas respectivamente para receber dados enviados pela primeira memória e pela segunda memória, e a unidade de operação multiplica as duas partes de dados em conjunto. O circuito somador 5032 é configurado para somar resultados de cálculo de unidades de operação que pertencem a um mesmo bloco de operações para obter um resultado de cálculo de cada bloco de operações.
[0058] O controlador 504 pode realizar as ações a seguir para calcular um produto da primeira matriz e da segunda matriz: gravar respectivamente K vetores coluna da segunda matriz nos K blocos de operações de cada grupo de operações, em que uma jésima parte de dados em uma gésima coluna de vetores da segunda matriz são gravados em uma jésima unidade de operação em um gésimo bloco de operações em cada grupo de operações, e o circuito de operação 503 pode ler, sob controle do controlador 504, dados na segunda matriz na segunda memória 502 e armazenar, temporariamente, os dados, na segunda matriz, nos K blocos de operações de cada grupo de operações, ou o controlador 504 pode controlar a segunda memória 502 para gravar dados, na segunda matriz, nos K blocos de operações de cada grupo de operações no circuito de operação 503; enviar respectivamente M vetores linha da primeira matriz para os M grupos de operações, em que um iésimo vetor linha da primeira matriz é enviado para um iésimo grupo de operações nos M grupos de operações, uma jésima unidade de operação em cada bloco de operações no iésimo grupo de operações recebe uma jésima parte de dados no iésimo vetor linha, e o circuito de operação 503 pode ler, sob controle do controlador 504, dados na primeira matriz na primeira memória 501, ou o controlador 504 pode controlar a primeira memória 501 para enviar dados na primeira matriz para os M grupos de operações no circuito de operação 503; e de modo que cada unidade de operação nos M grupos de operações realize uma operação de multiplicação em duas partes de dados recebidas pela unidade de operação, e o circuito somador 5032 soma resultados de cálculo de unidades de operação em cada bloco de operações para obter uma terceira matriz, em que a terceira matriz é o produto da primeira matriz e da segunda matriz, um elemento em uma linha i e em uma coluna g na terceira matriz é um resultado de cálculo de um gésimo bloco de operações no iésimo grupo de operações.
[0059] Opcionalmente, a primeira memória 501 é conectada ao circuito de operação 503 usando um primeiro barramento, e uma largura de bit do primeiro barramento é Wi*N*M. A segunda memória 502 é conectada ao circuito de operação 503 usando um segundo barramento, e uma largura de bit do segundo barramento é Wi*N. Wi é uma largura de bit máxima que é de dados de entrada e que é permitida pela unidade de operação.
[0060] Especificamente, Wi pode ser definido com base em um tipo dos dados de entrada da unidade de operação. Por exemplo, dados de um tipo int (número inteiro) 8 tem uma largura de bit de 8 bits, dados de um tipo fp (quantidade de ponto oscilante) 16 tem uma largura de bit de 16 bits, dados de um tipo fp32 tem uma largura de bit de 32 bits, ou similares. Uma largura de bit que é de dados de saída e que é permitida pela unidade de operação pode ser definida com base em uma faixa do resultado de cálculo da unidade de operação, ou pode ser determinada de outro modo. Por exemplo, quando o acelerador de operação 50 é configurado para calcular um produto de uma matriz de entrada e uma matriz de peso, dados na matriz de entrada e dados na matriz de peso são, ambos, do tipo int8, e um resultado de saída da unidade de operação também pode ser definido para o tipo int8. Nesse caso, a largura de bit dos dados de saída é igual à largura de bit dos dados de entrada. Certamente, os dados de saída da unidade de operação podem ser convertidos no tipo int16. Nesse caso, a largura de bit dos dados de saída é 16 bits. Além disso, a largura de bit dos dados de saída pode ser projetada, alternativamente, com base em outra exigência real.
[0061] Especificamente, com base em um modo de disposição dos blocos de operações e das unidades de operação no circuito de operação 503, mostrado na Figura 6, a Figura 7 é um diagrama esquemático de fiação específica no circuito de operação 503.
[0062] Pode-se aprender, com base na modalidade antecedente, que o circuito de operação 503 inclui M*N*K unidades de operação. Referindo-se à Figura 6 e à Figura 7, essas unidades de operação são classificadas em M grupos de operações, cada grupo de operações inclui N*K unidades de operação, as N*K unidades de operação são dispostas em K colunas para formar K blocos de operações, e cada bloco de operações inclui N unidades de operação.
[0063] Antes de realizar, formalmente, a operação de multiplicação de matriz, o acelerador de operação 50 precisa carregar, previamente, os dados na segunda matriz nos M grupos de operações. Visto que uma mesma segunda matriz é usada para todos os grupos de operações, a segunda memória 502 pode carregar os dados nas segundas matrizes por meio de difusão.
[0064] Referindo-se à Figura 7, há um segundo barramento cuja largura de bit é Wi*N entre o circuito de operação 503 e a segunda memória 502 (Wi é uma largura de bit máxima que é dos dados de entrada e que é permitida pela unidade de operação, e N é uma quantidade de unidades de operação em um bloco de operações e, nesse caso, uma largura do segundo barramento é Wi*N), e o segundo barramento é configurado para: difundir dados, e realizar difusão de vetor coluna em um bloco de operações nos M grupos de operações a cada vez. Especificamente, um vetor coluna, na segunda matriz, pode ser duplicado, primeiramente, em M cópias e, então, as M cópias de vetores coluna são difundidas para blocos de operações correspondentes nos M grupos de operações. Para um vetor coluna carregado em cada bloco de operações, consulte a Figura 8. Se a segunda memória 502 precisar de um ciclo (o ciclo pode ser um ciclo de clock que é definido com base em um sinal de relógio específico, ou pode ser um ciclo de processamento que é gerado com base em outro sinal de controle) para difundir um vetor coluna, K ciclos são necessários para concluir difusão de todos os vetores coluna na segunda matriz.
[0065] Por exemplo, com base no modo de disposição dos blocos de operações nos grupos de operações, mostrados na Figura 6, se a matriz B for a segunda matriz, supõe-se que a segunda matriz B seja:  B11 B12 B13 B14  B B22 B23 B24   21 B =  B31 B32 B33 B34    B41 B42 B43 B44   B51 B52 B53 B54  . Nesse caso, N=5, e K=4. Para dados nas unidades de operação após quatro vetores coluna, na segunda matriz B serem gravados respectivamente em quatro blocos de operações nos quatro grupos de operações, consulte a Figura 9.
[0066] Há um primeiro barramento cuja largura de bit é Wi*N*M entre o circuito de operação 503 e a primeira memória 501 (Wi é uma largura de bit máxima que é dos dados de entrada e que é permitida pela unidade de operação, N é uma quantidade de unidades de operação em um bloco de operações, e M é uma quantidade de grupos de operações e, nesse caso, uma largura do primeiro barramento é Wi*N*M), e o primeiro barramento é configurado para enviar os dados na primeira matriz. Uma largura de bit de entrada de dados em cada grupo de operações é Wi*N. Cada grupo de operações recebe um vetor linha na primeira matriz, vetores linha recebidos por todos os blocos de operações em cada grupo de operações ao mesmo tempo são iguais, e vetores linha recebidos pelos grupos de operações são diferentes. Especificamente, um vetor linha, que está na primeira matriz e que deve ser enviado para um grupo de operações, pode ser duplicado em K cópias no grupo de operações, e as K cópias de vetores linha são enviadas respectivamente para K blocos de operações no grupo de operações. Para um vetor linha carregado em cada bloco de operações, consulte a Figura 10. Visto que unidades de operação em uma linha em cada grupo de operações usam mesmos dados, a primeira memória 501 pode enviar dados para as unidades de operação por meio de difusão de linha. Visto que há um total de M grupos de operações, uma matriz cujas dimensões são M*N pode ser enviada dentro de um ciclo.
[0067] Por exemplo, com base no modo de disposição dos blocos de operações nos grupos de operações, mostrados na Figura 6, se a matriz A for a primeira matriz, supõe-se que a primeira matriz A seja:  A11 A12 A13 A14 A15  A A 22 A 23 A 24 A 25  A =  21  A 31 A 32 A 33 A 34 A 35    A 41 A 42 A 43 A 44 A 45  . Nesse caso, M=4, e N=5. Para dados nas unidades de operação após quatro vetores linha na segunda matriz A serem enviados respectivamente aos quatro grupos de operações, consulte a Figura 11. Para os dados calculados pelas unidades de operação nos quatro grupos de operações, consulte a Figura 12. Os resultados de cálculo das unidades de operação em cada bloco de operações são somados para obter o produto da primeira matriz A e da segunda matriz B, a saber, a terceira matriz C.
[0068] Quando o método, fornecido nesta modalidade da presente invenção, for aplicado a uma rede neural convolucional, a primeira matriz pode ser uma matriz de entrada, e a segunda matriz pode ser uma matriz de peso.
[0069] No método fornecido nesta modalidade da presente invenção, visto que os M grupos de operações incluem M*N*K unidades de operação, o acelerador de operação pode realizar M*N*K operações de multiplicação dentro de um ciclo de clock. Nesse caso, o acelerador de operação 50 pode calcular um produto de uma matriz M*N e uma matriz N*K. Quando comparado à técnica anterior, esse método pode reduzir bastante o tempo necessário pela operação de multiplicação de matriz.
[0070] Opcionalmente, quando um circuito multiplicador de matriz 5031 corresponder a um circuito somador 5032, o circuito somador 5032 inclui M*K árvores de somadores, uma árvore de somadores corresponde a um bloco de operações, a árvore de somadores é conectada a N unidades de operação no bloco de operações correspondente, e a árvore de somadores é configurada para somar resultados de cálculo das N unidades de operação conectadas à árvore de somadores.
[0071] Deve-se observar que operações de acúmulo precisam ser realizadas para resultados de cálculo de todas as N unidades de operação no bloco de operações, de modo que um resultado de cálculo do bloco de operações possa ser obtido. As operações de acúmulo podem ser realizadas, especificamente, em resultados de cálculo de todas as unidades de operação em um bloco de operações usando árvores de somadores mostradas na Figura
13. A árvore de somadores é substancialmente uma combinação de uma série de somadores, e um modo de conexão é mostrado na Figura 13. Nesse caso, visto que a árvore de somadores precisa somar os resultados de cálculo das N unidades de operação, uma largura de bit de um resultado de saída da árvore de somadores é denotada por Wa, e Wa depende de uma faixa do resultado de saída da árvore de somadores. Se uma largura de bit de um resultado de cálculo de cada unidade de operação for Wo, o resultado de saída dos blocos de operações, que é obtido após a árvore de somadores realizar acúmulo, pode exceder uma faixa máxima que pode ser indicada por Wo. Portanto, uma largura de bit maior precisa ser usada, normalmente, para indicar o resultado de saída do bloco de operações. Por exemplo, uma largura de bit máxima dos dados de entrada da unidade de operação é 8 bits, e uma largura de bit dos dados de saída da árvore de somadores pode ser definida para 32 bits.
[0072] Alternativamente, um circuito somador 5032 pode corresponder a uma pluralidade de circuitos multiplicadores de matriz 5031. Em um caso, um circuito multiplicador de matriz 5031 pode corresponder a M*K árvores de somadores, e as M*K árvores de somadores que correspondem à pluralidade de circuitos multiplicadores de matriz 5031 podem ser implementadas em um circuito somador 5032. Referindo-se à Figura 6, o circuito somador 5032 incluído no circuito de operação 503, mostrado na Figura 6, corresponde a dois circuitos multiplicadores de matriz 5031. Nesse caso, o circuito somador 5032 inclui 2*M*K árvores de somadores, M*K dentre as 2*M*K árvores de somadores são configuradas para somar resultados de cálculo emitidos por unidades de operação em M*K blocos de operações em um dentre os dois circuitos multiplicadores de matriz 5031, as outras M*K árvores de somadores dentre as 2*M*K árvores de somadores são configuradas para somar resultados de cálculo emitidos por unidades de operação em M*K blocos de operações no outro circuito multiplicador de matriz 5031 nos dois circuitos multiplicadores de matriz 5031.
[0073] Em um caso, referindo-se à Figura 14, a unidade de operação inclui: uma unidade de armazenamento, configurada para armazenar dados gravados na unidade de armazenamento; e um circuito multiplicador conectado à unidade de armazenamento, configurado para calcular um produto de dados recebidos e dos dados armazenados na unidade de armazenamento. Especificamente, para facilitar a descrição, os dados, na primeira matriz na unidade de operação, são denominados "primeiros dados", e os dados, na segunda matriz, são denominados segundos dados. Nesse caso, referindo-se à Figura 14, a unidade de armazenamento pode ser configurada para armazenar os segundos dados. O circuito multiplicador pode incluir, adicionalmente, uma interface configurada para inserir os primeiros dados e os segundos dados e emitir um resultado de cálculo. A unidade de armazenamento pode incluir, adicionalmente, uma interface configurada para gravar os segundos dados.
[0074] Em outro caso, referindo-se à Figura 15, a unidade de operação inclui uma pluralidade de unidades de armazenamento (a Figura 15 é retratada usando um exemplo em que a unidade de operação inclui duas unidades de armazenamento), um circuito multiplicador, um primeiro circuito de seleção conectado à pluralidade de unidades de armazenamento, e um segundo circuito de seleção conectado à pluralidade de unidades de armazenamento e ao circuito multiplicador.
[0075] A pluralidade de unidades de armazenamento é configurada para armazenar dados.
[0076] O primeiro circuito de seleção é configurado para: antes de o circuito multiplicador realizar uma operação de multiplicação, selecionar, a partir da pluralidade de unidades de armazenamento, uma unidade de armazenamento para armazenar dados usados quando o circuito multiplicador realizar a operação de multiplicação.
[0077] O segundo circuito de seleção é configurado para: quando o circuito multiplicador realizar a operação de multiplicação, selecionar uma unidade de armazenamento para armazenar dados usados quando o circuito multiplicador realizar a operação de multiplicação.
[0078] O circuito multiplicador é configurado para calcular um produto de dados recebidos e dos dados armazenados na unidade de armazenamento selecionada pelo segundo circuito de seleção.
[0079] Especificamente, a pluralidade de unidades de armazenamento pode armazenar dados em diferentes matrizes. O primeiro circuito de seleção pode selecionar uma unidade de armazenamento em que dados em uma matriz devem ser armazenados.
[0080] A unidade de armazenamento pode ser dividida em dois blocos (block). Quando a unidade de operação incluir uma pluralidade de unidades de armazenamento, se a unidade de operação realizar uma operação de multiplicação com base em dados em um bloco em uma unidade de armazenamento, o controlador 504 pode gravar, adicionalmente, dados em outra unidade de armazenamento na pluralidade de unidades de armazenamento ou outro bloco na unidade de armazenamento que participa na operação de multiplicação, aperfeiçoando, desse modo, eficiência de funcionamento da unidade de operação.
[0081] Referindo-se à Figura 15, se o circuito multiplicador de matriz
5031 precisar calcular o produto da primeira matriz A e da segunda matriz B, e precisar calcular, adicionalmente, um produto da primeira matriz A e de uma matriz D, o controlador 504 pode gravar dados tanto na segunda matriz B quanto na matriz D nas unidades de armazenamento da unidade de operação. O primeiro circuito de seleção pode escolher gravar segundos dados 0, na segunda matriz B, em uma unidade de armazenamento 0, e gravar segundos dados 1, na matriz D, em uma unidade de armazenamento 1. Quando o circuito multiplicador realizar uma operação de multiplicação nos primeiros dados e nos segundos dados 0, o segundo circuito de seleção escolhe emitir os segundos dados 0 na unidade de armazenamento 0 para o circuito multiplicador e, quando o circuito multiplicador realizar uma operação de multiplicação nos primeiros dados e nos segundos dados 1, o segundo circuito de seleção escolhe emitir os segundos dados 1 na unidade de armazenamento 1 para o circuito multiplicador.
[0082] Nesse caso, cada unidade de operação recebe quatro entradas: os primeiros dados, os segundos dados e dois sinais de seleção de registro. Um sinal de seleção de registro é usado para controlar o primeiro circuito de seleção para selecionar, a partir da pluralidade de unidades de armazenamento, antes de o circuito multiplicador realizar uma operação de multiplicação, uma unidade de armazenamento para armazenar dados usados quando o circuito multiplicador realizar a operação de multiplicação. O outro sinal de seleção de registro é usado para controlar o segundo circuito de seleção para selecionar, quando o circuito multiplicador realizar uma operação de multiplicação, uma unidade de armazenamento para armazenar dados usados quando o circuito multiplicador realizar a operação de multiplicação.
[0083] Opcionalmente, referindo-se à Figura 16, o acelerador de operação 50 pode incluir, adicionalmente, um controlador de acesso à unidade de armazenamento 505 conectado à primeira memória 501, à segunda memória 502 e ao controlador 504.
[0084] O controlador de acesso à unidade de armazenamento 505 é configurado para: obter, sob controle do controlador 504, a primeira matriz e a segunda matriz, salvar a primeira matriz na primeira memória 501, e salvar a segunda matriz na segunda memória 502.
[0085] O controlador de acesso à unidade de armazenamento 505 pode ser um controlador de acesso à memória direta 504 (Direct Memory Access
Controller, DMAC, a título de abreviação) ou uma unidade de armazenamento/carga.
[0086] Opcionalmente, referindo-se à Figura 16, o acelerador de operação 50 pode incluir, de modo adicional: uma terceira memória 506, configurada para armazenar dados de origem da primeira matriz; um controlador de acesso à unidade de armazenamento 505 conectado à primeira memória 501, à segunda memória 502, à terceira memória 506 e ao controlador 504, em que o controlador de acesso à unidade de armazenamento 505 é configurado para: obter, sob controle do controlador 504, os dados de origem da primeira matriz e da segunda matriz, salvar os dados de origem da primeira matriz na terceira memória 506, e salvar a segunda matriz na segunda memória 502; e uma unidade de cálculo de vetor (vector unit) 507 conectada à primeira memória 501, à terceira memória 506 e ao controlador 504, em que a unidade de cálculo de vetor 507 é configurada para: converter, sob controle do controlador 504, os dados de origem da primeira matriz na primeira matriz, e salvar a primeira matriz na primeira memória 501.
[0087] Especificamente, em um cenário de aplicação, dados obtidos pelo controlador de acesso à unidade de armazenamento 505 não são diretamente a primeira matriz. Nesse caso, o controlador de acesso à unidade de armazenamento 505 pode salvar os dados obtidos (ou seja, os dados de origem da primeira matriz) na terceira memória 506. A unidade de cálculo de vetor 507 pode converter os dados de origem da primeira matriz na terceira memória 506 para obter a primeira matriz.
[0088] Por exemplo, se o acelerador de operação 50 necessitar que a primeira matriz seja uma matriz 5*4, e que os dados de origem da primeira matriz sejam uma matriz 4*4, a unidade de cálculo de vetor 507 pode preencher (padding) os dados de origem da primeira matriz com um vetor linha em que todos os dados são 0, para obter a primeira matriz. Por exemplo, se os dados de 2 3 4 1 2 5 4 5  4 5 5 5   origem da primeira matriz forem 4 7 9 1 , a primeira matriz é
2 3 4 1 2 5 4 5  4 5 5 5   4 7 9 1 0 0 0 0 .
[0089] Conforme outro exemplo, se o acelerador de operação 50 necessitar que a primeira matriz seja uma matriz 2*4, e que os dados de origem da primeira matriz sejam uma matriz 4*4, a unidade de cálculo de vetor 507 pode determinar, como a primeira matriz, uma matriz que inclui primeiras duas linhas de vetores nos dados de origem da primeira matriz. Por exemplo, se os dados 2 3 4 1 2 5 4 5  4 5 5 5   de origem da primeira matriz forem 4 7 9 1 , a primeira matriz é 2 3 4 1 2 5 4 5  .
[0090] Em um caso, referindo-se à Figura 17, a terceira memória 506 é conectada ao circuito de operação 503, e a terceira memória 506 é configurada, adicionalmente, para armazenar a terceira matriz. Nesse caso, a terceira memória 506 pode ser conectada, adicionalmente, ao circuito de operação 503 usando um acumulador 508 abaixo. O circuito de operação 503 pode emitir o resultado de cálculo para o acumulador 508. O acumulador 508 pode salvar a terceira matriz na terceira memória.
[0091] Em outro caso, referindo-se à Figura 16, o acelerador de operação 50 inclui, adicionalmente, um acumulador 508 conectado ao circuito de operação 503, à unidade de cálculo de vetor 507 e ao controlador 504.
[0092] O acumulador 508 é configurado para somar elementos em posições correspondentes na terceira matriz e em uma quarta matriz sob controle do controlador 504, para obter uma quinta matriz.
[0093] A unidade de cálculo de vetor 507 é configurada, adicionalmente, para salvar a quinta matriz na terceira memória 506 sob controle do controlador 504.
[0094] A terceira matriz é o produto da primeira matriz e da segunda matriz, a primeira matriz inclui uma primeira parte de uma primeira matriz a ser calculada, a primeira parte da primeira matriz a ser calculada são elementos na 1a a Nésima colunas da primeira matriz a ser calculada, a segunda matriz é uma primeira parte de uma segunda matriz a ser calculada, a primeira parte da segunda matriz a ser calculada são elementos na 1a a Nésima linhas da segunda matriz a ser calculada, a primeira matriz a ser calculada inclui M linhas de elementos, a segunda matriz a ser calculada inclui K colunas de elementos, a quarta matriz é um produto de uma segunda parte da primeira matriz a ser calculada e de uma segunda parte da segunda matriz a ser calculada, a segunda parte da primeira matriz a ser calculada é uma parte diferente da primeira parte na primeira matriz a ser calculada, e a segunda parte da segunda matriz a ser calculada é uma parte diferente da primeira parte na segunda matriz a ser calculada.
[0095] Deve-se observar que o acelerador de operação 50, fornecido nesta modalidade da presente invenção, pode calcular um produto de uma matriz M*N e de uma matriz N*K. Entretanto, em uma operação real, as dimensões de uma matriz que precisa ser calculada podem ser maiores ou menores que M*N e N*K. Quando as dimensões da matriz que precisa ser calculada forem maiores que M*N e N*K, cada vez que o acelerador de operação 50 realizar cálculo, apenas um resultado parcial de um resultado final de um produto das duas matrizes que precisam ser calculadas pode ser obtido, uma pluralidade de iterações de loop é necessária de modo adicional, e resultados parciais são somados, de modo a obter o produto das duas matrizes que precisam ser calculadas.
[0096] Substancialmente, após as matrizes, que precisam ser calculadas, serem transformadas até certo ponto, o acelerador de operação 50, fornecido nesta modalidade da presente invenção, pode realizar uma operação de multiplicação em duas matrizes com qualquer quantidade de linha e quantidade de coluna. Uma implantação específica é a seguinte:
[0097] Se o acelerador de operação 50 precisar calcular um produto de uma matriz Q*R e uma matriz R*T, os seguintes dois casos ocorrem:
[0098] Caso 1: Q é menor que M, R é menor que N, e T é menor que K.
[0099] Nesse caso, a matriz Q*R pode ser remodelada para uma matriz M*N por meio de preenchimento, a matriz R*T pode ser remodelada para uma matriz N*K por meio de preenchimento e, então, o acelerador de operação 50, fornecido nesta modalidade da presente invenção, é usado para realizar uma operação de multiplicação de matriz. Um método de preenchimento específico é preencher com elementos 0 ao redor de uma matriz, de modo que a matriz mude para uma matriz com uma quantidade de linha e quantidade de coluna necessárias. Por exemplo, quando M=N=8, a Figura 18 mostra um exemplo de remodelagem separada de uma matriz 4*5 e uma matriz 5*8 para uma matriz 8*8 por meio de preenchimento.
[0100] Caso 2: Q é maior que M, ou R é maior que N, ou T é maior que K.
[0101] Nesse caso, quando Q for maior que M ou R for maior que N, a matriz Q*R precisa ser segmentada em uma matriz M*N e, antes da segmentação, a matriz Q*R precisa ser remodelada, por meio de preenchimento, para uma matriz cuja quantidade de linha é um múltiplo de M e cuja quantidade de coluna é um múltiplo de N. Quando R for maior que N ou T for maior que K, a matriz R*T precisa ser segmentada em uma matriz N*K e, antes da segmentação, a matriz R*T precisa ser remodelada, por meio de preenchimento, para uma matriz cuja quantidade de linha é um múltiplo de N e cuja quantidade de coluna é um múltiplo de K.
[0102] Supõe-se que a quantidade de linha da matriz Q*R seja duas vezes M, a quantidade de coluna da matriz Q*R seja duas vezes N, a quantidade de linha da matriz R*T seja duas vezes N e a quantidade de coluna da matriz R*T seja duas vezes K. A matriz Q*R pode ser segmentada em quatro matrizes A1 B1   M*N, denotadas C1 D1 , em que A1, B1, C1 e D1 são, cada uma, uma matriz M*N. A matriz R*T pode ser segmentada em quatro matrizes N*K, denotadas  A2 B2  C 2 D 2 , em que A2, B2, C2 e D2 são, cada uma, uma matriz N*K. Um produto  S da matriz Q*R e da matriz R*T é A1 B1  A2 B 2   A1A2 + B1C 2 A1B 2 + B1D2 C1 D1 C 2 D2 = C1A2 + D1C 2 C1B2 + D1D2     .
[0103] A matriz S pode ser obtida calculando-se um produto de
A1 B1  A2 B2  A1 B1  A2 B2  C1 D1  D 2 . Para calcular o produto de C1 D1 e C 2    D 2 ,   e C 2 oito operações de multiplicação da matriz M*N e da matriz N*K precisam ser concluídas. As oito operações de multiplicação da matriz M*N e da matriz N*K são A1A2 , B1C 2 , A1B 2 , B1D 2 , C1A2 , D1C 2 , C1B2 e D1D2 . As oito operações de multiplicação de matriz podem ser concluídas configurando-se oito circuitos multiplicadores de matriz 5031 no circuito de operação 503, ou podem ser concluídas por não mais do que oito circuitos multiplicadores de matriz 5031 no circuito de operação 503. Por exemplo, dois circuitos multiplicadores de matriz 5031 concluem, cada um, quatro operações de multiplicação de matriz para concluir as oito operações de multiplicação de matriz.
[0104] Após as oito operações de multiplicação de matriz serem concluídas, pode-se aprender, a partir de S= A1 B1  A2 B2   A1A2 + B1C 2 A1B2 + B1D2 C1 D1 C 2 D2 = C1A2 + D1C 2 C1B2 + D1D2      , que A1A2 e B1C 2 são somados para obter um elemento em uma primeira linha e em uma primeira coluna da matriz S, A1B 2 e B1D 2 são somados para obter um elemento na primeira linha e em uma segunda coluna da matriz S, C1A2 e D1C 2 são somados para obter um elemento em uma segunda linha e na primeira coluna da matriz S, e C1B2 e D1D2 são somados para obter um elemento na segunda linha e na segunda coluna da matriz S. A1A2 e B1C 2 são usados como um exemplo. A1A2 e B1C 2 são, cada uma, uma matriz M*K. Portanto, elementos em posições correspondentes em A1A2 e B1C 2 são somados e, então, um elemento na primeira linha e na primeira coluna da matriz S (a linha e a coluna da matriz S são, neste documento, uma linha e uma coluna indicadas por  A1A2 + B1C 2 A1B2 + B1D2 C1A2 + D1C 2 C1B2 + D1D2   ) pode ser obtido.
[0105] Especificamente, um resultado de cálculo de um produto de A1 B1  A2 B2     D 2 pode ser armazenado no quaisquer dois elementos em C1 D1 e C 2 acumulador 508. O acumulador 508 realiza uma operação de adição em resultados de cálculo para obter a matriz S.
[0106] O fato de a matriz Q*R e a matriz R*T serem segmentadas em quatro matrizes é usado como um exemplo para descrição antecedente. Na verdade, a matriz Q*R e a matriz R*T podem ser segmentadas em duas, seis ou oito matrizes, ou similares. Um princípio de cálculo é igual àquele descrito acima. Os detalhes não são descritos novamente neste documento.
[0107] Por exemplo, supõe-se que M=N=K=3 (nesse caso, visto que nenhuma dentre a quantidade de linha e a quantidade de coluna da matriz A é três, e nenhuma dentre a quantidade de linha e a quantidade de coluna da matriz B é três, a matriz A não é a primeira matriz, e a matriz B não é a segunda matriz).  A11 A12 A13 A14 A15  A A 22 A 23 A 24 A 25  A =  21  A 31 A 32 A 33 A 34 A 35    Para calcular um produto de uma matriz A 41 A 42 A 43 A 44 A 45  e uma  B11 B12 B13 B14  B B22 B23 B24   21 B =  B31 B32 B33 B34    B41 B42 B43 B44   B51 B52 B53 B54  matriz , visto que a matriz A é uma matriz 4*5, a matriz A precisa ser remodelada, por meio de preenchimento, para uma matriz  A11 A12 A13 A14 A15 0 A A 22 A 23 A 24 A 25 0  21 A A 32 A 33 A 34 A 35 0 A =  31  A 41 A 42 A 43 A 44 A 45 0  0 0 0 0 0 0    0 0 0 0 0 0 e, visto que a matriz B é uma matriz 5*4, a matriz B precisa ser remodelada, por meio de preenchimento, para uma matriz  B11 B12 B13 B14 0 0 B B22 B23 B24 0 0  21 B B32 B33 B34 0 0 B =  31  B41 B42 B43 B44 0 0  B51 B52 B53 B54 0 0    0 0 0 0 0 0 .
[0108] Referindo-se à Figura 19, a matriz A e a matriz B podem ser segmentadas, separadamente, em quatro matrizes 3*3. Nesse caso, oito operações de multiplicação de matrizes 3*3 precisam ser realizadas para calcular o produto da matriz A e da matriz B. As oito operações de multiplicação de matrizes 3*3 são: A1A2 , B1C 2 , A1B 2 , B1D 2 , C1A2 , D1C 2 , C1B2 e D1D2 . Um resultado de cálculo de A1A2 é  A11B11 + A12 B21 + A13B31 A11B12 + A12 B22 + A13B32 A11B13 + A12 B23 + A13B33  A B + A B + A B A 21B12 + A 22 B22 + A 23B32 A 21B13 + A 22 B23 + A 23B33   21 11 22 21 23 31  A 31B11 + A 32 B21 + A 33B31 A 31B12 + A 32 B22 + A 33B32 A 31B13 + A 32 B23 + A 33B33  e, após o resultado de cálculo de A1A2 ser obtido, o resultado é armazenado no acumulador 508. Um resultado de cálculo de B1C2 é  A14 B41 + A15 B51 + 0 A14 B42 + A15 B52 + 0 A14 B43 + A15 B53 + 0  A B + A B + 0 A 24 B42 + A 25 B52 + 0 A 24 B43 + A 25 B53 + 0  24 41 25 51  A 34 B41 + A 35 B51 + 0 A 34 B42 + A 35 B52 + 0 A 34 B43 + A 35 B53 + 0  e, após o resultado de cálculo de B1C2 ser obtido, o resultado é armazenado no acumulador 508. O acumulador 508 soma elementos em posições correspondentes em A1A2 e B1C2 para obter  A11B11 + A12 B 21 + A13 B31 + A14 B 41 + A15 B51 A11B12 + A12 B 22 + A13 B32 + A14 B 42 + A15 B52 A11B13 + A12 B 23 + A13 B33 + A14 B 43 + A15 B53  A B + A B + A B + A B + A B A 21B12 + A 22 B 22 + A 23 B32 + A 24 B 42 + A 25 B52 A 21B13 + A 22 B 23 + A 23 B33 + A 24 B 43 + A 25 B53   21 11 22 21 23 31 24 41 25 51  A 31B11 + A 32 B 21 + A 33 B31 + A 34 B 41 + A 35 B51 A 31B12 + A 32 B 22 + A 33 B32 + A 34 B 42 + A 35 B52 A 31B13 + A 32 B 23 + A 33 B33 + A 34 B 43 + A 35 B53  ,  A11B11 + A12 B 21 + A13 B31 + A14 B 41 + A15 B51 A11B12 + A12 B 22 + A13 B32 + A14 B 42 + A15 B52 A11B13 + A12 B 23 + A13 B33 + A14 B 43 + A15 B53  A B + A B + A B + A B + A B A 21B12 + A 22 B 22 + A 23 B32 + A 24 B 42 + A 25 B52 A 21B13 + A 22 B 23 + A 23 B33 + A 24 B 43 + A 25 B53   21 11 22 21 23 31 24 41 25 51  A 31B11 + A 32 B 21 + A 33 B31 + A 34 B 41 + A 35 B51 A 31B12 + A 32 B 22 + A 33 B32 + A 34 B 42 + A 35 B52 A 31B13 + A 32 B 23 + A 33 B33 + A 34 B 43 + A 35 B53  a saber, dados em uma área comum das primeiras três linhas e das primeiras três colunas do produto da matriz A e da matriz B. Os dados em outras posições do produto da matriz A e da matriz B são calculados do mesmo modo. Os detalhes não são descritos novamente neste documento.
[0109] A unidade de cálculo de vetor 507 pode incluir M*K unidades de operação. A unidade de cálculo de vetor 507 pode realizar processamento adicional, tal como multiplicação de vetor, adição de vetor, operação exponencial, operação logarítmica ou comparação de magnitude em saída de dados pelo acumulador 508, quando necessário. Por exemplo, a unidade de cálculo de vetor 507 pode ser configurada, especificamente, para realizar cálculo de rede de uma camada de não convolução/não FC na rede neural convolucional, tal como agrupamento (pooling), normalização em lote (batch normalization) ou normalização de resposta local (local response normalization). Deve-se observar que, referindo-se à Figura 16, se a unidade de cálculo de vetor 507 não realizar processamento adicional na saída de dados pelo acumulador 508, o acumulador
508 pode salvar, diretamente, a quinta matriz na terceira memória 506.
[0110] Opcionalmente, referindo-se à Figura 16 e à Figura 17, o acelerador de operação 50 pode incluir, de modo adicional: um armazenamento temporário de busca de instrução (instruction fetch buffer) 509 conectado ao controlador 504, configurado para armazenar uma instrução usada pelo controlador 504; e uma unidade de interface de barramento 510 (Bus Interface Unit, BIU, a título de abreviação) conectada ao armazenamento temporário de busca de instrução 509, ao controlador de acesso à unidade de armazenamento 505 e a uma memória externa, usada pelo armazenamento temporário de busca de instrução 509 para obter a instrução a partir da memória externa, e usada, adicionalmente, pelo controlador de acesso à unidade de armazenamento 505 para obter pelo menos um dentre os dados de origem da primeira matriz, a primeira matriz e a segunda matriz a partir da memória externa.
[0111] Especificamente, referindo-se à Figura 16 e à Figura 17, o acelerador de operação 50, fornecido nesta modalidade da presente invenção, pode ser usado como um coprocessador montado em uma unidade central de processamento (Central Processing Unit, CPU, a título de abreviação), e a CPU aloca uma tarefa de cálculo para o acelerador de operação 50. Especificamente, a CPU pode armazenar a primeira matriz, a segunda matriz e a instrução na memória externa. O acelerador de operação 50 pode concluir uma operação de multiplicação de matriz gravando-se a primeira matriz, a segunda matriz e a instrução a partir da memória externa. A memória externa pode ser, especificamente, uma memória de acesso aleatório dinâmica síncrona de taxa de dados dupla (Double Data Rate Synchronous Dynamic Random Access Memory, DDR, a título de abreviação) ou outra memória legível e gravável. A memória externa pode ser uma memória exclusiva do acelerador de operação
50. Especificamente, a primeira memória 501, a segunda memória 502, a terceira memória 506 e o armazenamento temporário de busca de instrução 509 são, frequentemente, armazenamentos temporários em chip (On-Chip Buffer).
[0112] Por exemplo, o acelerador de operação 50 é aplicado à rede neural convolucional. Referindo-se à Figura 20, um processo em que o controlador 504 no acelerador de operação 50 controla o acelerador de operação 50 para concluir cálculo do produto da matriz de peso e da matriz de entrada pode incluir, especificamente, as etapas a seguir.
[0113] 2001. O DMAC obtém a matriz de peso a partir da DDR e grava a matriz de peso na segunda memória 502.
[0114] 2002. O DMAC obtém a matriz de entrada a partir da DDR e envia a matriz de entrada para a primeira memória 501.
[0115] 2003. O circuito de operação 503 lê a matriz de peso a partir da segunda memória 502, e grava respectivamente os K vetores coluna da matriz de peso nos K blocos de operações de cada grupo de operações.
[0116] 2004. O circuito de operação 503 lê a matriz de entrada a partir da primeira memória 501, e envia respectivamente os M vetores linha na matriz de entrada para os M grupos de operações.
[0117] 2005. O circuito de operação 503 realiza um cálculo de multiplicação de matriz, e emite a terceira matriz.
[0118] A terceira matriz é o produto da matriz de peso e da matriz de entrada.
[0119] 2006. O circuito de operação 503 armazena, de modo temporário, a terceira matriz no acumulador 508.
[0120] 2007. O acumulador 508 determina se a terceira matriz é um resultado final.
[0121] Caso afirmativo, o processo termina. Caso negativo, retornar para a etapa 2001.
[0122] Para implantações específicas das etapas antecedentes e explicações relacionadas, consulte as descrições acima. Os detalhes não são descritos novamente neste documento. O acelerador de operação 50 precisa concluir a etapa 2001 à etapa 2004 antes de iniciar, formalmente, a operação de multiplicação de matriz. Uma sequência de execução da etapa 2001 à etapa 2004 não precisa ser sujeita, estritamente, à Figura 20, e precisa-se garantir apenas que a etapa 2003 seja após a etapa 2001, a etapa 2004 seja após a etapa 2002 e a etapa 2005 seja após a etapa 2004.
[0123] O acelerador de operação 50 pode ser usado como um coprocessador montado na CPU. Portanto, um processo em que a CPU controla o acelerador de operação 50 para implantar a operação de multiplicação de matriz é descrito de maneira breve. Conforme mostrado na Figura 21, o processo pode incluir, especificamente, as etapas a seguir.
[0124] 2101. A CPU inicia programação de uma tarefa.
[0125] A tarefa é uma tarefa de operação de multiplicação de matriz.
[0126] 2102. A CPU prepara uma matriz de peso.
[0127] 2103. A CPU duplica a matriz de peso para a DDR.
[0128] 2104. A CPU prepara dados de entrada e uma instrução.
[0129] 2105. A CPU duplica os dados de entrada e a instrução para a DDR.
[0130] 2106. A CPU coloca a instrução no armazenamento temporário de busca de instrução 509 no acelerador de operação 50.
[0131] Após essa etapa, a CPU realiza as ações 2107 e 2108, e o acelerador de operação 50 realiza as ações 2109 a 2113.
[0132] 2107. A CPU recebe uma interrupção.
[0133] A interrupção é uma interrupção enviada à CPU após o acelerador de operação 50 realizar a operação de multiplicação de matriz para obter um resultado de cálculo e gravar o resultado de cálculo na DDR, e a interrupção é usada pela CPU para processar o resultado de cálculo.
[0134] 2108. A CPU processa a interrupção.
[0135] Se ainda houver dados de entrada, retorne para a etapa 2104. Se não houver dados de entrada, o processo termina.
[0136] 2109. O acelerador de operação 50 lê a instrução do armazenamento temporário de busca de instrução 509.
[0137] 2110. O acelerador de operação 50 inicia execução de tarefa.
[0138] 2111. O acelerador de operação 50 realiza a operação de multiplicação de matriz de acordo com a instrução.
[0139] 2112. O acelerador de operação 50 grava um resultado de cálculo na DDR.
[0140] 2113. O acelerador de operação 50 envia a interrupção para a CPU.
[0141] Todas ou algumas dentre as modalidades antecedentes podem ser implantadas por meio de software, hardware, firmware ou qualquer combinação dos mesmos. Quando um programa de software é usado para implantar as modalidades, as modalidades podem ser implantadas, de maneira completa ou parcial, em uma forma de um produto de programa de computador. O produto de programa de computador inclui uma ou mais instruções de computador. Quando as instruções de programa de computador são carregadas e executadas no computador, o procedimento ou funções, de acordo com as modalidades deste pedido, são geradas inteira ou parcialmente. O computador pode ser um computador de propósito geral, um computador dedicado, uma rede de computadores ou outro aparelho programável. As instruções de computador podem ser armazenadas em uma mídia de armazenamento legível por computador ou transmitidas a partir de uma mídia de armazenamento legível por computador para outra mídia de armazenamento legível por computador. Por exemplo, as instruções de computador podem ser transmitidas a partir de um site da web, computador, servidor ou central de dados para outro site da web, computador, servidor ou central de dados de um modo com fio (por exemplo, um cabo coaxial, uma fibra óptica ou uma linha de assinante digital (Digital Subscriber Line, DSL, a título de abreviação)) ou sem fio (por exemplo, infravermelho, rádio ou micro-ondas). A mídia de armazenamento legível por computador pode ser qualquer mídia utilizável acessível por um computador, ou um dispositivo de armazenamento de dados, tal como um servidor ou uma central de dados, que integra uma ou mais mídias utilizáveis. A mídia utilizável pode ser uma mídia magnética (tal como um disquete, um disco rígido ou uma fita magnética), uma mídia óptica (tal como um DVD), uma mídia semicondutora (tal como um disco de estado sólido (Solid State Disk, SSD, a título de abreviação)), ou similares.
[0142] Embora este pedido seja descrito com referência às modalidades, em um processo de implantação deste pedido que reivindica proteção, pessoas versadas na técnica podem entender e implantar outra variação das modalidades reveladas observando-se os desenhos anexos, conteúdo revelado e as reivindicações anexas. Nas reivindicações, "que compreende" (comprising) não exclui outro componente ou outra etapa, e "um" ou "uma" não exclui um caso de múltiplos. Um único processador ou outra unidade pode implantar diversas funções enumeradas nas reivindicações. Algumas medidas são registradas nas reivindicações dependentes que são diferentes umas das outras, mas isso não significa que essas medidas não possam ser combinadas para produzir um efeito melhor.
[0143] Embora este pedido seja descrito com referência a recursos específicos e às modalidades dos mesmos, evidentemente, várias modificações e combinações podem ser realizadas aos mesmos sem se afastar do escopo deste pedido.
De modo correspondente, o relatório descritivo e os desenhos anexos são apenas descrição exemplificativa deste pedido definido pelas reivindicações anexas, e é considerada como qualquer um dentre ou todas as modificações, variações, combinações ou equivalentes que abranjam o escopo deste pedido.
Evidentemente, uma pessoa versada na técnica pode realizar várias modificações e variações neste pedido sem se afastar do espírito e do escopo deste pedido.
Este pedido se destina a abranger essas modificações e variações deste pedido desde que as mesmas estejam incluídas no escopo de proteção definido pelas reivindicações a seguir e suas tecnologias equivalentes.

Claims (15)

REIVINDICAÇÕES
1. Acelerador de operação, compreendendo: uma primeira memória, configurada para armazenar uma primeira matriz, em que a primeira matriz é uma matriz M*N; uma segunda memória, configurada para armazenar uma segunda matriz, em que a segunda matriz é uma matriz N*K; um circuito de operação conectado à primeira memória e à segunda memória, em que o circuito de operação compreende um circuito multiplicador de matriz e um circuito somador; o circuito multiplicador de matriz compreende M grupos de operações, cada grupo de operações compreende K blocos de operações, cada bloco de operações compreende N unidades de operação, cada unidade de operação recebe duas partes de dados respectivamente da primeira memória e da segunda memória, e a unidade de operação multiplica as duas partes de dados; e o circuito somador é configurado para somar resultados de cálculo de unidades de operação que pertencem a um mesmo bloco de operações para obter um resultado de cálculo de cada bloco de operações; e um controlador conectado ao circuito de operação, em que o controlador é configurado para realizar as seguintes ações: gravar respectivamente K vetores coluna da segunda matriz nos K blocos de operações de cada grupo de operações, em que uma jésima parte de dados em uma gésima coluna de vetores da segunda matriz é gravada em uma jésima unidade de operação em um gésimo bloco de operações nos K blocos de operações; enviar respectivamente M vetores linha da primeira matriz para os M grupos de operações, em que um iésimo vetor linha da primeira matriz é enviado para um iésimo grupo de operações nos M grupos de operações, e uma jésima unidade de operação em cada bloco de operações no iésimo grupo de operações recebe uma jésima parte de dados no iésimo vetor linha; e de modo que cada unidade de operação nos M grupos de operações realize uma operação de multiplicação em duas partes de dados recebidas pela unidade de operação, e o circuito somador soma resultados de cálculo de unidades de operação em cada bloco de operações para obter uma terceira matriz, em que a terceira matriz é um produto da primeira matriz e da segunda matriz, um elemento em uma linha i e em uma coluna g na terceira matriz é um resultado de cálculo de um gésimo bloco de operações no iésimo grupo de operações, M, N, e K são números inteiros maiores que 0, i é um número inteiro maior que 0 e menor que M+1, g é um número inteiro maior que 0 e menor que K+1, e j é um número inteiro maior que 0 e menor que N+1.
2. Acelerador de operação, de acordo com a reivindicação 1, em que o circuito somador compreende M*K árvores de somadores, uma árvore de somadores é correspondente a um bloco de operações, a árvore de somadores é conectada a N unidades de operação no bloco de operações correspondente, e a árvore de somadores é configurada para somar resultados de cálculo das N unidades de operação conectadas à árvore de somadores.
3. Acelerador de operação, de acordo com a reivindicação 1 ou 2, em que a unidade de operação compreende: uma unidade de armazenamento, configurada para armazenar segundos dados, em que os segundos dados são os dados da segunda matriz; e um circuito multiplicador conectado à unidade de armazenamento, configurado para calcular um produto de primeiros dados e dos segundos dados armazenados na unidade de armazenamento, em que os primeiros dados são os dados da primeira matriz.
4. Acelerador de operação, de acordo com a reivindicação 1 ou 2, em que a unidade de operação compreende uma pluralidade de unidades de armazenamento, um circuito multiplicador, um primeiro circuito de seleção conectado à pluralidade de unidades de armazenamento, e um segundo circuito de seleção conectado à pluralidade de unidades de armazenamento e ao circuito multiplicador, em que a pluralidade de unidades de armazenamento é configurada para armazenar dados; o primeiro circuito de seleção é configurado para: antes de o circuito multiplicador realizar uma operação de multiplicação, selecionar, a partir da pluralidade de unidades de armazenamento, uma unidade de armazenamento para armazenar dados usados quando o circuito multiplicador realizar a operação de multiplicação; o segundo circuito de seleção é configurado para: quando o circuito multiplicador realizar a operação de multiplicação, selecionar uma unidade de armazenamento para armazenar dados usados quando o circuito multiplicador realizar a operação de multiplicação; e o circuito multiplicador é configurado para calcular um produto de dados recebidos e dos dados armazenados na unidade de armazenamento selecionada pelo segundo circuito de seleção.
5. Acelerador de operação, de acordo com qualquer uma das reivindicações 1 a 4, em que a primeira memória é conectada ao circuito de operação usando um primeiro barramento, e uma largura de bit do primeiro barramento é Wi*N*M; a segunda memória é conectada ao circuito de operação usando um segundo barramento, e uma largura de bit do segundo barramento é Wi*N; e Wi é uma largura de bit máxima que é de dados de entrada e que é permitida pela unidade de operação.
6. Acelerador de operação, de acordo com qualquer uma das reivindicações 1 a 5, em que o acelerador de operação compreende adicionalmente um controlador de acesso à unidade de armazenamento conectado à primeira memória, à segunda memória, e ao controlador, em que o controlador de acesso à unidade de armazenamento é configurado para: obter, sob controle do controlador, a primeira matriz e a segunda matriz, salvar a primeira matriz na primeira memória, e salvar a segunda matriz na segunda memória.
7. Acelerador de operação, de acordo com qualquer uma das reivindicações 1 a 5, em que o acelerador de operação compreende adicionalmente: uma terceira memória, configurada para armazenar dados de origem da primeira matriz; um controlador de acesso à unidade de armazenamento conectado à primeira memória, à segunda memória, à terceira memória, e ao controlador, em que o controlador de acesso à unidade de armazenamento é configurado para: obter, sob controle do controlador, os dados de origem da primeira matriz e da segunda matriz, salvar os dados de origem da primeira matriz na terceira memória, e salvar a segunda matriz na segunda memória; e uma unidade de cálculo de vetor conectada à primeira memória, à terceira memória, e ao controlador, em que a unidade de cálculo de vetor é configurada para: converter, sob controle do controlador, os dados de origem da primeira matriz na primeira matriz, e salvar a primeira matriz na primeira memória.
8. Acelerador de operação, de acordo com a reivindicação 7, em que a terceira memória é conectada ao circuito de operação, e a terceira memória é configurada adicionalmente para armazenar a terceira matriz.
9. Acelerador de operação, de acordo com a reivindicação 7, em que o acelerador de operação compreende adicionalmente um acumulador conectado ao circuito de operação, à unidade de cálculo de vetor, e ao controlador, em que o acumulador é configurado para somar elementos em posições correspondentes na terceira matriz e em uma quarta matriz sob controle do controlador, para obter uma quinta matriz; e a unidade de cálculo de vetor é configurada adicionalmente para salvar a quinta matriz na terceira memória sob controle do controlador, em que a terceira matriz é o produto da primeira matriz e da segunda matriz, a primeira matriz compreende uma primeira parte de uma primeira matriz a ser calculada, a primeira parte da primeira matriz a ser calculada são elementos na 1a a Nésima colunas da primeira matriz a ser calculada, a segunda matriz é uma primeira parte de uma segunda matriz a ser calculada, a primeira parte da segunda matriz a ser calculada são elementos na 1a a Nésima linhas da segunda matriz a ser calculada, a primeira matriz a ser calculada compreende M linhas de elementos, a segunda matriz a ser calculada compreende K colunas de elementos, a quarta matriz é um produto de uma segunda parte da primeira matriz a ser calculada e de uma segunda parte da segunda matriz a ser calculada, a segunda parte da primeira matriz a ser calculada é uma parte diferente da primeira parte na primeira matriz a ser calculada, e a segunda parte da segunda matriz a ser calculada é uma parte diferente da primeira parte na segunda matriz a ser calculada.
10. Acelerador de operação, de acordo com qualquer uma das reivindicações 1 a 9, em que o acelerador de operação compreende adicionalmente: um armazenamento temporário de busca de instrução conectado ao controlador, configurado para armazenar uma instrução usada pelo controlador; e uma unidade de interface de barramento conectada ao armazenamento temporário de busca de instrução, ao controlador de acesso à unidade de armazenamento, e a uma memória externa, usada pelo armazenamento temporário de busca de instrução para obter a instrução a partir da memória externa, e usada adicionalmente pelo controlador de acesso à unidade de armazenamento para obter pelo menos um dentre os dados de origem da primeira matriz, a primeira matriz, e a segunda matriz a partir da memória externa.
11. Acelerador de operação, de acordo com qualquer uma das reivindicações 1 a 10, em que o acelerador de operação é aplicado à rede neural convolucional, a primeira matriz é uma matriz de entrada e a segunda matriz é uma matriz de peso.
12. Acelerador de operação, de acordo com qualquer uma das reivindicações 1 a 11, em que M=N=K.
13. Método de operação realizado por um circuito de operação, em que o circuito de operação compreende M grupos de operações, cada grupo de operações compreende K blocos de operações, cada bloco de operações compreende N unidades de operação, o método compreende: o circuito de operação lê uma primeira matriz a partir de uma primeira memória e envia respectivamente os M vetores linha na primeira matriz para os M grupos de operações, em que a primeira matriz é uma matriz M*N; o circuito de operação lê uma segunda matriz a partir de uma segunda memória e grava respectivamente os K vetores coluna da matriz de peso nos K blocos de operações de cada grupo de operações, em que a segunda matriz é uma matriz N*K; o circuito de operação realiza um cálculo de multiplicação de matriz da primeira matriz e da segunda matriz dentro de um ciclo de clock.
14. Método, de acordo com a reivindicação 13, em que o circuito de operação compreende um circuito somado, o método compreendendo: o circuito somador soma resultados de cálculo de unidades de operação que pertencem a um mesmo bloco de operações para obter um resultado de cálculo de cada bloco de operações.
15. Método, de acordo com a reivindicação 13 ou 14, em que o circuito de operação é aplicado à rede neural convolucional, a primeira matriz é uma matriz de entrada e a segunda matriz é uma matriz de peso.
BR112020000167-8A 2017-07-07 2018-03-08 Acelerador de operação BR112020000167B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201710553286.X 2017-07-07
CN201710553286.XA CN109213962B (zh) 2017-07-07 2017-07-07 运算加速器
PCT/CN2018/078407 WO2019007095A1 (zh) 2017-07-07 2018-03-08 运算加速器

Publications (2)

Publication Number Publication Date
BR112020000167A2 true BR112020000167A2 (pt) 2020-07-07
BR112020000167B1 BR112020000167B1 (pt) 2022-01-25

Family

ID=64949706

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112020000167-8A BR112020000167B1 (pt) 2017-07-07 2018-03-08 Acelerador de operação

Country Status (9)

Country Link
US (2) US11321423B2 (pt)
EP (1) EP3637281A4 (pt)
JP (1) JP7016942B2 (pt)
KR (1) KR102316670B1 (pt)
CN (3) CN112214727A (pt)
BR (1) BR112020000167B1 (pt)
CA (1) CA3069185C (pt)
SG (1) SG11202000140QA (pt)
WO (1) WO2019007095A1 (pt)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE112018004972T5 (de) * 2017-10-18 2020-06-18 Mitsubishi Electric Corporation Operationsschaltung und operationsverfahren
CN111859273A (zh) 2017-12-29 2020-10-30 华为技术有限公司 矩阵乘法器
US11663002B2 (en) 2018-02-13 2023-05-30 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
CN110147347B (zh) * 2019-03-18 2023-01-06 腾讯科技(深圳)有限公司 用于矩阵处理的芯片、矩阵处理方法、装置及存储介质
US11169957B2 (en) * 2019-03-31 2021-11-09 Intel Corporation Systems and methods for reconfigurable systolic arrays
CN110263324B (zh) * 2019-05-16 2021-02-12 华为技术有限公司 文本处理方法、模型训练方法和装置
US11334647B2 (en) * 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
CN110580324B (zh) * 2019-07-23 2020-11-17 珠海格力电器股份有限公司 图像矩阵运算方法、装置、计算机设备和存储介质
KR102372869B1 (ko) * 2019-07-31 2022-03-08 한양대학교 산학협력단 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
KR102327234B1 (ko) * 2019-10-02 2021-11-15 고려대학교 산학협력단 행렬 연산시 메모리 데이터 변환 방법 및 컴퓨터
CN110647984B (zh) * 2019-10-25 2022-07-12 芯盟科技有限公司 芯片、集成处理设备及其操作方法
CN111124360B (zh) * 2019-12-23 2022-08-16 中国电子科技集团公司第五十八研究所 一种可配置矩阵乘法的加速器
US11861369B2 (en) 2020-01-07 2024-01-02 SK Hynix Inc. Processing-in-memory (PIM) device
US11537323B2 (en) 2020-01-07 2022-12-27 SK Hynix Inc. Processing-in-memory (PIM) device
US11630991B2 (en) * 2020-02-04 2023-04-18 Apple Inc. Broadcasting mode of planar engine for neural processor
CN113536221B (zh) * 2020-04-21 2023-12-15 中科寒武纪科技股份有限公司 运算方法、处理器以及相关产品
CN113536220A (zh) * 2020-04-21 2021-10-22 中科寒武纪科技股份有限公司 运算方法、处理器及相关产品
CN113536219B (zh) * 2020-04-21 2024-01-26 中科寒武纪科技股份有限公司 运算方法、处理器以及相关产品
WO2021212972A1 (zh) * 2020-04-21 2021-10-28 中科寒武纪科技股份有限公司 运算方法、处理器以及相关产品
CN113836481A (zh) * 2020-06-24 2021-12-24 北京希姆计算科技有限公司 矩阵计算电路、方法、电子设备及计算机可读存储介质
US20220051086A1 (en) * 2020-08-17 2022-02-17 Alibaba Group Holding Limited Vector accelerator for artificial intelligence and machine learning
CN114168895A (zh) * 2020-09-11 2022-03-11 北京希姆计算科技有限公司 矩阵计算电路、方法、电子设备及计算机可读存储介质
CN112632464B (zh) * 2020-12-28 2022-11-29 上海壁仞智能科技有限公司 用于处理数据的处理装置
KR20220101519A (ko) 2021-01-11 2022-07-19 에스케이하이닉스 주식회사 엘리먼트-와이즈 곱셈을 위한 프로세싱-인-메모리 장치
US20220261456A1 (en) * 2021-01-14 2022-08-18 Microsoft Technology Licensing, Llc Computing partial matrices at hardware accelerator
CN112966729B (zh) * 2021-02-26 2023-01-31 成都商汤科技有限公司 一种数据处理方法、装置、计算机设备及存储介质
US11544213B2 (en) 2021-03-04 2023-01-03 Samsung Electronics Co., Ltd. Neural processor
CN113110822A (zh) * 2021-04-20 2021-07-13 安徽芯纪元科技有限公司 一种可配置矩阵乘法装置及算法
CN113918120A (zh) * 2021-10-19 2022-01-11 Oppo广东移动通信有限公司 计算装置、神经网络处理设备、芯片及处理数据的方法
CN114003198B (zh) * 2021-10-20 2023-03-24 中科寒武纪科技股份有限公司 内积处理部件、任意精度计算设备、方法及可读存储介质
CN115860080B (zh) * 2023-02-15 2023-05-09 苏州浪潮智能科技有限公司 计算核、加速器、计算方法、装置、设备、介质及系统
CN116795432B (zh) * 2023-08-18 2023-12-05 腾讯科技(深圳)有限公司 运算指令的执行方法、装置、电路、处理器及设备
CN117093816B (zh) * 2023-10-19 2024-01-19 上海登临科技有限公司 矩阵乘运算方法、装置和电子设备
CN117574036B (zh) * 2024-01-16 2024-04-12 北京壁仞科技开发有限公司 运算装置、操作方法和机器可读存储介质

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6131308A (ja) 1984-07-20 1986-02-13 Hitachi Chem Co Ltd 黒鉛層間化合物の製造法
JPS61150067A (ja) * 1984-12-25 1986-07-08 Matsushita Electric Ind Co Ltd 演算装置
JPH0748203B2 (ja) * 1988-06-17 1995-05-24 三菱電機株式会社 3次元デバイスを用いた正方行列乗算器
US5170370A (en) * 1989-11-17 1992-12-08 Cray Research, Inc. Vector bit-matrix multiply functional unit
US5274832A (en) * 1990-10-04 1993-12-28 National Semiconductor Corporation Systolic array for multidimensional matrix computations
JPH05324700A (ja) * 1992-05-19 1993-12-07 N T T Data Tsushin Kk 行列乗算装置
US6167502A (en) * 1997-10-10 2000-12-26 Billions Of Operations Per Second, Inc. Method and apparatus for manifold array processing
US6597745B1 (en) * 1999-04-06 2003-07-22 Eric M. Dowling Reduced complexity multicarrier precoder
US8417759B2 (en) * 2007-04-09 2013-04-09 DigitalOptics Corporation Europe Limited Efficient implementations of kernel computations
US8051124B2 (en) * 2007-07-19 2011-11-01 Itt Manufacturing Enterprises, Inc. High speed and efficient matrix multiplication hardware module
US8028015B2 (en) * 2007-08-10 2011-09-27 Inside Contactless S.A. Method and system for large number multiplication
JP2009245381A (ja) * 2008-03-31 2009-10-22 Fujitsu Ltd 積和演算回路、その設計装置、プログラム
WO2011156247A2 (en) * 2010-06-11 2011-12-15 Massachusetts Institute Of Technology Processor for large graph algorithm computations and matrix operations
CN101980182A (zh) * 2010-10-15 2011-02-23 清华大学 基于矩阵运算的并行计算方法
CN102662623A (zh) * 2012-04-28 2012-09-12 电子科技大学 基于单fpga的并行矩阵乘法器及其实现方法
US10318308B2 (en) * 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
CN105589677A (zh) * 2014-11-17 2016-05-18 沈阳高精数控智能技术股份有限公司 一种基于fpga的脉动结构矩阵乘法器及其实现方法
CN104391820B (zh) * 2014-11-25 2017-06-23 清华大学 基于fpga的通用浮点矩阵处理器硬件结构
US10255547B2 (en) * 2014-12-04 2019-04-09 Nvidia Corporation Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
CN104572011B (zh) * 2014-12-22 2018-07-31 上海交通大学 基于fpga的通用矩阵定点乘法器及其计算方法
US9747546B2 (en) * 2015-05-21 2017-08-29 Google Inc. Neural network processor
CN104899182B (zh) * 2015-06-09 2017-10-31 中国人民解放军国防科学技术大学 一种支持可变分块的矩阵乘加速方法
CN106445471B (zh) * 2016-10-13 2018-06-01 北京百度网讯科技有限公司 处理器和用于在处理器上执行矩阵乘运算的方法
US10394929B2 (en) * 2016-12-20 2019-08-27 Mediatek, Inc. Adaptive execution engine for convolution computing systems
CN106844294B (zh) * 2016-12-29 2019-05-03 华为机器有限公司 卷积运算芯片和通信设备
JP6988040B2 (ja) * 2016-12-31 2022-01-05 インテル・コーポレーション ヘテロジニアスコンピューティングのためのシステム、方法及び装置
US10140252B2 (en) * 2017-02-28 2018-11-27 Microsoft Technology Licensing, Llc Hardware node with matrix-vector multiply tiles for neural network processing

Also Published As

Publication number Publication date
CN109213962B (zh) 2020-10-09
US11720646B2 (en) 2023-08-08
US11321423B2 (en) 2022-05-03
JP7016942B2 (ja) 2022-02-07
CA3069185C (en) 2023-07-18
US20220327181A1 (en) 2022-10-13
CN112214726A (zh) 2021-01-12
KR20200019736A (ko) 2020-02-24
KR102316670B1 (ko) 2021-10-22
CA3069185A1 (en) 2019-01-10
US20200142949A1 (en) 2020-05-07
CN109213962A (zh) 2019-01-15
EP3637281A4 (en) 2020-07-08
CN112214726B (zh) 2024-05-03
CN112214727A (zh) 2021-01-12
WO2019007095A1 (zh) 2019-01-10
SG11202000140QA (en) 2020-02-27
JP2020526830A (ja) 2020-08-31
BR112020000167B1 (pt) 2022-01-25
EP3637281A1 (en) 2020-04-15

Similar Documents

Publication Publication Date Title
BR112020000167A2 (pt) acelerador de operação
KR20200098684A (ko) 행렬 곱셈기
Jeon et al. HMC-MAC: Processing-in memory architecture for multiply-accumulate operations with hybrid memory cube
TW202127238A (zh) 可重組態架構的編譯器流程邏輯
Finkbeiner et al. In-memory intelligence
US8615770B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
Kuramochi et al. An FPGA-based low-latency accelerator for randomly wired neural networks
Li et al. IMC-sort: In-memory parallel sorting architecture using hybrid memory cube
Waidyasooriya et al. Accelerator architecture for simulated quantum annealing based on resource-utilization-aware scheduling and its implementation using OpenCL
CN114118348A (zh) 加速器、操作加速器的方法以及包括加速器的电子装置
Jin et al. Efficient parallel implementation of multilayer backpropagation networks on SpiNNaker
Wyrzykowski et al. Towards efficient execution of erasure codes on multicore architectures
US8417735B1 (en) Instruction-efficient algorithm for parallel scan using initialized memory regions to replace conditional statements
Soukov et al. Portable solution for modeling compressible flows on all existing hybrid supercomputers
KR20220049325A (ko) 가속기 및 이를 포함한 전자 장치
Bogdanov et al. Adaptation and optimization of basic operations for an unstructured mesh CFD algorithm for computation on massively parallel accelerators
KR102578762B1 (ko) 뉴럴 프로세서
Paul et al. A resource-aware nearest-neighbor search algorithm for k-dimensional trees
Ramchandani et al. Spica: Exploring FPGA Optimizations to Enable an Efficient SpMV Implementation for Computations at Edge
US20220283984A1 (en) Neural processor
Yang et al. Processing dependent tasks on a Heterogeneous GPU resource architecture
US20230289398A1 (en) Efficient Matrix Multiply and Add with a Group of Warps
TW202203000A (zh) 用於記憶體內計算的方法及用於計算的系統
Hwu Rethinking computer architecture for throughput computing
Pang et al. MTTF-Aware Reliability Task Scheduling for PIM-Based Heterogeneous Computing System

Legal Events

Date Code Title Description
B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
B350 Update of information on the portal [chapter 15.35 patent gazette]
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 08/03/2018, OBSERVADAS AS CONDICOES LEGAIS.