BR112020019457A2 - Multiplicador de matriz-vetor com um arquivo registrador de vetor que compreende uma memória com múltiplas portas - Google Patents

Multiplicador de matriz-vetor com um arquivo registrador de vetor que compreende uma memória com múltiplas portas Download PDF

Info

Publication number
BR112020019457A2
BR112020019457A2 BR112020019457-3A BR112020019457A BR112020019457A2 BR 112020019457 A2 BR112020019457 A2 BR 112020019457A2 BR 112020019457 A BR112020019457 A BR 112020019457A BR 112020019457 A2 BR112020019457 A2 BR 112020019457A2
Authority
BR
Brazil
Prior art keywords
data elements
interface circuits
port memory
during
vector
Prior art date
Application number
BR112020019457-3A
Other languages
English (en)
Inventor
Jeremy Fowers
Kalin Ovtcharov
Eric S. Chung
Todd Michael Massengill
Ming Gang Liu
Gabriel Leonard Weisz
Original Assignee
Microsoft Technology Licensing, Llc
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 Microsoft Technology Licensing, Llc filed Critical Microsoft Technology Licensing, Llc
Publication of BR112020019457A2 publication Critical patent/BR112020019457A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1078Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/04Arrangements for selecting an address in a digital store using a sequential addressing device, e.g. shift register, counter
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/12Group selection circuits, e.g. for memory block selection, chip selection, array selection
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/16Multiple access memory array, e.g. addressing one storage element via at least two independent addressing line groups
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/18Address timing or clocking circuits; Address control signal generation or management, e.g. for row address strobe [RAS] or column address strobe [CAS] signals

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Memory System (AREA)

Abstract

a presente invenção refere-se a processadores de rede neural que incluem um arquivo registrador de vetor (vrf) contendo uma memória com múltiplas portas e métodos relacionados. o pro-cessador pode incluir blocos para processar uma matriz n por n de elementos de dados e um vetor n por 1 de elementos de dados. o vrf pode, em resposta a uma instrução de escrita, armazenar ele-mentos de dados n em uma memória com múltiplas portas e durante cada um dos ciclos de relógio p, prover os elementos de dados n para cada um dos circuitos de interface de entrada p da memória com múl-tiplas portas que compreende um caminho de entrada configurado pa-ra conduzir os elementos de dados l em paralelo. durante cada um desses ciclos de relógio p, a memória com múltiplas portas pode ser configurada para receber elementos de dados n por meio de pelo me-nos um dos circuitos selecionados de interface de entrada p. o vrf pode incluir circuitos de interface de saída para prover os elementos de dados n em resposta a uma instrução de leitura.

Description

Relatório Descritivo da Patente de Invenção para "MULTI- PLICADOR DE MATRIZ-VETOR COM UM ARQUIVO REGISTRADOR
DE VETOR QUE COMPREENDE UMA MEMÓRIA COM MÚLTIPLAS PORTAS". ANTECEDENTES
[0001] A tecnologia de rede neural é usada para executar tarefas complexas, tais como compreensão de leitura, tradução linguística, re- conhecimento de imagem ou reconhecimento de fala. Serviços de aprendizagem de máquina, tais como aqueles baseados em Redes Neurais Recorrentes (RNNs), Redes Neurais de Convolução (CNNs), redes neurais de Memória de Longo e Curto Prazo (LSTM) ou Unidades Recorrentes de Porta (GRUs) têm sido implantadas para executar essas tarefas complexas. Embora esses tipos de redes neurais têm sido im- plantados, existe a necessidade de um aprimoramento continuado na arquitetura subjacente e nas instruções correspondentes para executar essas tarefas complexas.
SUMÁRIO
[0002] Em um exemplo, a presente invenção refere-se a um proces- sador que compreende um arquivo registrador de vetor contendo uma memória com múltiplas portas (por exemplo, uma memória de porta dual). O processador também pode incluir uma pluralidade de blocos (“tiles”) configurados para processar uma matriz N por N de elementos de dados e um vetor N por 1 de elementos de dados, onde N é um número inteiro igual ou maior que 8, e onde cada um da pluralidade de blocos é configurado para processar os elementos de dados N. O ar- quivo registrador de vetor pode ser configurado para, em resposta a uma instrução de escrita durante um único ciclo de relógio, armazenar os elementos de dados N na memória com múltiplas portas e durante cada um dos ciclos de relógio P, prover os elementos de dados N para cada um dos circuitos de interface de entrada P da memória com múlti- plas portas, onde P é um número inteiro igual a N dividido por L, onde L é um número inteiro igual ou maior que 2, e onde cada um dos circuitos de interface de entrada P compreende um caminho de entrada configu- rado para conduzir os elementos de dados L em paralelo, e onde du- rante cada um desses ciclos de relógio P, a memória com múltiplas por- tas é configurada para receber elementos de dados N por meio de pelo menos um dos circuitos selecionados de interface de entrada P.
[0003] O arquivo registrador de vetor também pode ser configurado para, em resposta a uma instrução de leitura durante um único ciclo de relógio, recuperar os elementos de dados N a partir da memória com múltiplas portas e durante cada um dos ciclos de relógio Q prover os elementos de dados L de cada um dos circuitos de interface de saída Q da memória com múltiplas portas, onde Q é um número inteiro igual a N dividido por L, e onde cada um dos circuitos de interface de saída Q compreende um caminho de saída configurado para conduzir os ele- mentos de dados L em paralelo, e onde durante cada um desses ciclos de relógio Q, a memória com múltiplas portas é configurada para prover elementos de dados N para pelo menos um dos circuitos selecionados de interface de saída Q.
[0004] Em outro exemplo, a presente invenção refere-se a um mé- todo em um sistema que compreende uma pluralidade de blocos e um arquivo registrador de vetor que compreende uma memória de porta dual, onde cada um da pluralidade de blocos é configurado para proces- sar uma matriz N por N de elementos de dados e um vetor N por 1 de elementos de dados, onde N é um número inteiro igual ou maior que 8, e onde cada um da pluralidade de blocos é configurado para processar os elementos de dados N.
[0005] O método pode incluir, em resposta a uma instrução de es-
crita durante um único ciclo de relógio, armazenar os elementos de da- dos N na memória de porta dual e durante cada um dos ciclos de relógio P, prover os elementos de dados N para cada um dos circuitos de inter- face de entrada P da memória de porta dual, onde P é um número inteiro igual a N dividido por L, onde L é um número inteiro igual ou maior que 2, e onde cada um dos circuitos de interface de entrada P compreende um caminho de entrada configurado para conduzir os elementos de da- dos L em paralelo, e onde durante cada um desses ciclos de relógio P, a memória de porta dual é configurada para receber elementos de da- dos N por meio de um dos circuitos selecionados de interface de entrada P.
[0006] O método ainda pode incluir, em resposta a uma instrução de leitura durante um único ciclo de relógio, recuperar os elementos de dados N a partir da memória de porta dual e durante cada um dos ciclos de relógio Q prover os elementos de dados L de cada um dos circuitos de interface de saída Q da memória de porta dual, onde Q é um número inteiro igual a N dividido por L, e onde cada um dos circuitos de interface de saída Q compreende um caminho de saída configurado para condu- zir os elementos de dados L em paralelo, e onde durante cada um des- ses ciclos de relógio Q, a memória de porta dual é configurada para prover elementos de dados N para um dos circuitos selecionados de interface de saída Q.
[0007] Em mais outro exemplo, a presente invenção refere-se a um processador que compreende um arquivo registrador de vetor que com- preende uma memória de porta dual incluindo uma única porta de leitura e uma única porta de escrita. O processador também pode compreen- der uma pluralidade de blocos configurados para processar uma matriz N por N e um vetor N por 1, onde N é um número inteiro igual ou maior que 8, e onde cada um da pluralidade de blocos é configurado para pro- cessar os elementos de dados N.
[0008] O arquivo registrador de vetor pode ser configurado para, em resposta a uma instrução de escrita durante um único ciclo de relógio, armazenar os elementos de dados N na memória de porta dual por meio da porta de escrita unitária e durante cada um dos ciclos de relógio P, prover os elementos de dados N para cada um dos circuitos de interface de entrada P da memória de porta dual, onde P é um número inteiro igual a N dividido por L, onde L é um número inteiro igual ou maior que 2,0 onde cada um dos circuitos de interface de entrada P com- preende um caminho de entrada configurado para conduzir os elemen- tos de dados L em paralelo, e onde durante cada um desses ciclos de relógio P, a memória de porta dual é configurada para receber elemen- tos de dados N por meio de um dos circuitos selecionados de interface de entrada P.
[0009] O arquivo registrador de vetor ainda pode ser configurado para, em resposta a uma instrução de leitura durante um único ciclo de relógio, recuperar os elementos de dados N a partir da memória de porta dual por meio da porta de leitura unitária e durante cada um dos ciclos de relógio Q prover os elementos de dados L de cada um dos circuitos de interface de saída Q da memória de porta dual, onde Q é um número inteiro igual a N dividido por L, e onde cada um dos circuitos de interface de saída Q compreende um caminho de saída configurado para condu- zir os elementos de dados L em paralelo, e onde durante cada um des- ses ciclos de relógio Q, a memória de porta dual é configurada para prover elementos de dados N para um dos circuitos selecionados de interface de saída Q.
[00010] Este Sumário foi provido para introduzir uma seleção de con- ceitos de uma forma simplificada, os quais serão melhor descritos abaixo na Descrição Detalhada. Este Sumário não se destina a identifi- car características cruciais ou essenciais do tema reivindicado, nem a ser usado para limitar o escopo do tema reivindicado.
BREVE DESCRIÇÃO DOS DESENHOS
[00011] A presente invenção é ilustrada a título de exemplo e não é limitada pelas figuras em anexo, nas quais símbolos de referência iguais indicam elementos similares. Os elementos nas figuras são ilustrados de forma simples e clara e não foram necessariamente desenhados em escala.
[00012] A figura 1 é um diagrama em bloco de um processador de acordo com um exemplo;
[00013] A figura2 é um diagrama em bloco de uma unidade multipli- cadora de matriz-vetor de acordo com um exemplo;
[00014] —Afigura3é um diagrama em bloco de um arquivo registrador de vetor de acordo com um exemplo;
[00015] —Afigura4é um diagrama em bloco de um arquivo registrador de vetor de acordo com outro exemplo; e
[00016] A figura5 mostra um diagrama de fluxo de um método para processar elementos de dados de vetor usando o processador da figura 1 e um arquivo registrador de vetor de acordo com um exemplo.
DESCRIÇÃO DETALHADA
[00017] Os exemplos descritos neste documento referem-se a um processador que inclui um multiplicador de matriz-vetor com um arquivo registrador de vetor. O arquivo registrador de vetor pode ser usado para ler/escrever dados de vetor a partir de/para o multiplicador de matriz- vetor. Determinados exemplos referem-se ao uso de uma memória com múltiplas portas, por exemplo, uma memória de porta dual, com circuitos de interface de entrada e circuitos de interface de saída que permitem que a memória de porta dual que possa ter uma única porta de escrita e uma única porta de leitura a serem usadas de um modo rápido e efi- ciente para executar computações de rede neural.
[00018] Tantoas Redes Neurais Convolucionais (CNNs) quanto as
Redes Neurais Recorrentes (RNNs) são núcleos computacionais am- plamente usados na aprendizagem de máquina tradicional. Apesar de CNNs e RNNs poderem ser expressas de modo eficiente em termos de multiplicação de matriz-vetor, o paralelismo e as estruturas de dados inerentes de cada uma diferem de maneira significativa. Portanto, torna- se um desafio produzir uma única arquitetura de computador em escala Terflops que possa computar de modo eficiente tanto CNNs quanto RNNs. Tal problema é agravado quando as exigências de latência em tempo real são incluídas no modelo. Como resultado, as soluções ante- riores foram especializadas para CNNs ou RNNs sem priorizar um de- sempenho robusto em ambas. Determinados exemplos descritos na presente invenção referem-se ao uso de um sistema, métodos e com- ponentes que provêm computação eficiente tanto para CNNs quanto para RNNs.
[00019] “Como um exemplo, a presente invenção descreve um pro- cessador que alavanca o paralelismo entre ativações de saída individu- ais em uma CNN para executar uma forma limitada de multiplicação matriz-matriz dentro de uma avaliação de CNN individual. Tal parale- lismo é mapeado em um circuito na forma de um conjunto de mecanrnis- mos em bloco quase independentes de multiplicação de matriz-vetor que recebem os mesmos dados da matriz, porém, diferentes dados de vetor. Essa abordagem permite uma intensa utilização em lote=1 para entradas de CNN, que por sua vez, gera uma alta produtividade em la- tência baixa. Uma das maneiras de possibilitar esta abordagem é o uso de um arquivo registrador de vetor de múltiplas portas (VRF), que per- mite várias leituras e escritas vetorizadas simultâneas em um espaço de memória compartilhado. Esta abordagem também é viabilizada por uma arquitetura do conjunto de instruções com reconhecimento de CNN (ISA) que provê uma expressão com alta densidade de informações de CNNs no mesmo código de nível de montagem que pode ser usado para expressar RNNs.
[00020] Os processadores descritos neste relatório descritivo podem ser implementados usando-se porções ou combinações de Conjuntos de Portas Programáveis em Campo (FPGAs), Circuitos Integrados de Aplicação Específica (ASICs), Dispositivos Lógicos Programáveis Apa- gáveis e/ou Complexos (PLDs), dispositivos de Conjunto Lógico Progra- mável (PAL) e dispositivos Lógicos de Conjunto Genérico (GAL). Um arquivo de imagem pode ser usado para configurar ou reconfigurar pro- cessadores, tais como FPGAs. O arquivo de imagem ou arquivo ou pro- grama similar pode ser entregue por meio de um link de rede ou de um link local (por exemplo, PCle) a partir de uma CPU hospedeira. As infor- mações incluídas em um arquivo de imagem podem ser usadas para programar os blocos de hardware de uns processadores (por exemplo, blocos lógicos e interconexões reconfiguráveis de um FPGA) e imple- mentar a funcionalidade desejada. Tal funcionalidade desejada pode ser implementada para suportar qualquer serviço que possa ser ofere- cido por meio de uma combinação de recursos de computação, conexão em rede e armazenamento, tais como por meio de uma central de dados ou outra infraestrutura para a prestação de um serviço.
[00021] Em um exemplo, processadores (por exemplo, FPGAs) ou grupos de tais processadores podem ser acoplados uns aos outros por meio de uma rede de latência baixa. De maneira vantajosa, uma plata- forma convergida que alavanca de centenas a milhares desses proces- sadores (por exemplo, FPGAs) pode oferecer: (1) períodos de treina- mento significativamente reduzidos por meio da exploração de parale- lismo ao longo de centenas de milhares de nodos, (2) permitir novos cenários de treinamento, tais como aprendizagem online in situ em da- dos ao vivo e (3) modelos de treinamento de escala sem precedente enquanto alavanca recursos de FPGA homogêneos, flexíveis e fungí- veis em uma central de dados de hiper escala que abrange centenas de milhares de servidores. Em um exemplo, tais vantagens podem ser ob- tidas explorando-se representações de dados não convencionais capa- zes de alavancar a arquitetura de processadores, tais como FPGAs.
[00022] Os aspectos descritos acima também podem ser implemen- tados em ambientes de computação em nuvem. O termo “computação em nuvem” pode referir-se a um modelo para habilitar o acesso sob de- manda rede a um pool compartilhado de recursos de computação con- figuráveis. Por exemplo, a computação em nuvem pode ser empregada no mercado para oferecer acesso sob demanda onipresente e conveni- ente para o pool compartilhado de recursos de computação configurá- veis. O pool compartilhado de recursos de computação configuráveis pode ser provido rapidamente por meio de virtualização e liberada com pouco esforço de gerenciamento ou por interação com o provedor do serviço e em seguida escalonada de forma adequada. Um modelo de computação em nuvem pode ser composto por várias características, tais como, por exemplo, autosserviço sob demanda, acesso à rede am- pla, pool de recursos, elasticidade rápida, serviço medido e assim por diante. Um modelo de computação em nuvem pode ser usado para ex- por vários modelos de serviço, tais como, por exemplo, Hardware como um Serviço (“HaaS”), Software como um Serviço ("SaaS"), Plataforma como um Serviço ("PaaS") e Infraestrutura como um Serviço ("laaS"). Um modelo de computação em nuvem também pode ser implantado usando-se diferentes modelos de implantação, tais como nuvem parti- cular, nuvem comunitária, nuvem pública, nuvem híbrida e assim por diante.
[00023] Serviços de aprendizagem de máquina, tais como aqueles baseados em Redes Neurais Recorrentes (RNNs), Redes Neurais de Convolução (CNNs), redes neurais de Memória de Longo e Curto Prazo (LSTM) ou Unidades Recorrentes de Porta (GRUs) podem ser imple-
mentados usando-se os processadores descritos neste relatório descri- tivo. Em um exemplo, o conteúdo relacionado a serviço ou outras infor- mações, tais como palavras, frases, imagens, vídeos, ou outros desses conteúdos/informações pode ser traduzido em uma representação ve- torial, a qual pode corresponder a técnicas, tais como RNN, CNN, LSTM ou GRU. Os modelos de aprendizagem profunda podem ser treinados off-line antes da inicialização do serviço e em seguida, podem ser im- plantados usando-se os sistemas e processadores descritos neste rela- tório descritivo.
[00024] Emum exemplo, o modelo de rede neural pode compreender várias camadas, e cada camada pode ser codificada como matrizes ou vetores de pesos expressos na forma de coeficientes ou constantes que foram obtidas por meio do treinamento off-line de uma rede neural. Blo- cos lógicos de hardware programáveis nos nodos podem processar as matrizes ou vetores para executar várias operações, tais como multipli- cação, adição e outras operações em comparação com vetores de en- trada que representam as informações codificadas relacionadas com o serviço. Em um exemplo, as matrizes ou vetores de pesos podem ser divididos e afixados ao longo de múltiplos nodos usando-se técnicas, tal como divisão gráfica. Como parte deste processo, uma grande rede neural pode ser traduzida em uma representação intermediária (por exemplo, um gráfico) e em seguida, tal representação intermediária pode ser dividida em representações menores (por exemplo, subgráfi- cos) e cada uma das matrizes de pesos correspondentes a cada sub- gráfico pode ser afixada para às memórias em chip de um nodo. Em um exemplo, os modelos podem ser traduzidos em matrizes e vetores de tamanho fixo. Desse modo, os recursos dos nodos podem operar em paralelo nas matrizes e vetores de tamanho fixo.
[00025] “Considerando o exemplo de LSTM, uma rede LSTM pode compreender uma sequência de camadas de RNN repetidas ou de ou- tros tipos de camadas. Cada camada da rede LSTM pode consumir uma entrada em uma determinada etapa de tempo, por exemplo, um estado de camada a partir de uma etapa de tempo anterior, e pode produzir uma nova série de saídas ou estados. Caso seja usada a LSTM, uma única parcela de conteúdo pode ser codificada dentro de um único vetor ou de múltiplos vetores. Como um exemplo, uma palavra ou uma com- binação de palavras (por exemplo, uma expressão, uma frase ou um parágrafo) pode ser codificada como um único vetor. Cada parcela pode ser codificada dentro de uma camada individual (por exemplo, uma etapa de tempo particular) de uma rede LSTM. Uma camada de LSTM pode ser descrita usando-se uma série de equações, tais como as des- critas abaixo: if = o(W,zixt + Whiheoa + WoiCe1a + Dbi fi = 0(W,fxe + Whfheo1 + WogCrw1 + bp) cr = ficeirtanh(Wixe + Whehe-1 + bo) o; = T(WroXt + Whohea + Wooce + bo) h, = o,tanh(c;)
[00026] Neste exemplo, dentro de cada camada de LSTM, as entra- das e os estados ocultos podem ser processados usando-se uma com- binação de operações de vetor (por exemplo, produto escalar, produto interno ou adição de vetor) e funções não lineares (por exemplo, sigmoi- des, hiperbólicas e tangentes). Em determinados casos, a maior parte das operações de computação intensiva pode derivar dos produtos es- calares, que podem ser implementados usando-se rotinas densas de multiplicação de matriz-vetor e matriz-matriz. Em um exemplo, o proces- samento das operações de vetor e funções não lineares pode ser exe- cutado em paralelo.
[00027] Em um exemplo, processadores individuais podem enviar mensagens contendo pacotes diretamente uns para os outros, o que permite, portanto, a divisão de até mesmo uma única rede neural ao longo de múltiplos processadores sem a ocorrência de latências inacei- táveis. Para se comunicarem, os processadores podem usar um proto- colo leve, que inclui, por exemplo, RDMA. Uma paralelização também poderia ser executada dentro de uma camada de uma rede neural divi- dindo-se os pesos neurais entre múltiplos processadores. Como um exemplo, um único modelo de CNN ou RNN (por exemplo, que inclui matrizes de peso LSTM) pode ser dividido e processado pelos proces- sadores.
[00028] A figura 1 é um diagrama em bloco de um processador 100 de acordo com um exemplo. Cada processador 100 pode incluir um Pro- cessador de Mensagens de Entrada (IMP) 104 para receber mensagens de outros processadores e um Processador de Mensagens de Saída (OMP) 106 para processar mensagens enviadas para outros processa- dores ou componentes. Tais mensagens podem ser recebidas e trans- mitidas através da rede 102. Cada processador 100 também pode incluir um multiplicador de matriz-vetor (MVM) 110, duas ou mais unidades multifuncionais (MFUs) (por exemplo, MFU[0] 140 e MFU[1] 160). Cada processador 100 ainda pode incluir um gerenciador de memória de ma- triz 170, um gerenciador de memória de vetor 180, uma DRAM de vetor 182 e uma DRAM de matriz 184. Neste exemplo, o processador pode aceitar mensagens off-chip contendo informações auxiliares, tais como dados de controle e escalares, bem como dados de carga útil (por exem- plo, vetores, matrizes ou outras estruturas de dados de tensor). Neste exemplo, as mensagens recebidas podem ser gerenciadas por um pro- cessador leve de mensagens de entrada (IMP) 104, que envia os veto- res para o gerenciador de memória de vetor 180. O IMP 104 pode enviar as matrizes para o gerenciador de memória de matriz 170.
[00029] — Ainda com referência à figura 1, cada uma das matrizes pode ter um tamanho N por N e cada um dos vetores pode ter um tamanho de N por 1. Neste exemplo, todas as instruções correspondentes ao processador 100 podem operar em dados de tamanho original. Vetores e matrizes lógicas correspondentes às aplicações gerenciadas pelo pro- cessador 100 são geralmente maiores que o tamanho original; nesses Casos, os vetores e matrizes são divididos em blocos em tamanho ori- ginal. Em um exemplo, para a multiplicação de matriz-vetor, os dados da matriz e os dados de vetor podem ser expressos no formato ponto flutuante em bloco (BFP). Neste exemplo, o tamanho do bloco dos da- dos no formato BFP pode ser igual à dimensão original. Portanto, cada vetor original N por 1 pode ter um exponente compartilhado e cada fileira de uma matriz N por N pode ter um exponente compartilhado. O expo- nente compartilhado pode ser de 5 bits. Cada um dos dados de vetor e dos dados da matriz pode ter uma porção de mantissa complementar de dois, e o tamanho de mantissa para os dados de vetor e os dados da matriz pode ser diferente.
[00030] —MVM 110 pode incluir um arquivo registrador de vetor (VRF) 112, um arquivo registrador de matriz (MRF) 120 e mecanismos em bloco (por exemplo, mecanismos em bloco 114, 116 e 118). Os meca- nismos em bloco podem receber dados da matriz de entrada e do vetor de entrada a partir de VRF 112. MVM 110 também pode incluir conver- sores de formato, quando necessário, tal como o ponto flutuante em bloco (BFP) para conversores de ponto flutuante (FP). Em um exemplo, dois formatos de BFP internos podem ser usados por MVM 110 para expressar sua entrada e saída: BFP curto, para o armazenamento de vetor e matriz e BFP longo para acúmulos. Em um exemplo de MVM 110, o BFP curto pode usar valores de ponto fixo q1. 15 com um expo- nente de 5 bits compartilhado, e o BFP longo pode usar valores de ponto fixo g34.40 com um exponente de 5 bits compartilhado. Neste exemplo, a multiplicação matriz-vetor pode resultar em um BFP longo, que pode ser convertido de volta para um formato de ponto flutuante como um estágio de saída final. Desse modo, o exemplo MVM 110 mostrado na figura 1 pode incluir conversores de BFP para FP16 122, 124 e 126 nos estágios de saída. Os mecanismos em bloco 114, 116 e 118 podem, em paralelo, prover saídas para os respectivos conversores conforme mos- trado no exemplo da figura 1. Detalhes adicionais referentes a MVM 110 são providos na figura 2 e detalhes adicionais de VRF 112 são providos nas figuras 3 e 4.
[00031] Os dados da matriz podem ser comunicados entre a Matriz DRAM 184 e o gerenciador de Memória de Matriz 170 usando-se nú- mero de canais M. O gerenciador de memória de vetor pode mover da- dos de vetor por cima do número C de canais.
[00032] Ainda com referência à figura 1, cada MFU (por exemplo, MFU[0] 140 e MFU[1] 160) pode incluir barras cruzadas (por exemplo, barras cruzadas classificadas como xbars). MFU[O0] 140 pode suportar operações vetoriais, tais como multiplicação e adição de vetor-vetor, uma função Sigmoide, uma função TanH, uma operação softmax, uma operação de Unidade Linear Retificada (ReLU) e/ou um operação de bloco de ativação. Desse modo, conforme mostrado na figura 1, MFU[O] 140 pode incluir barras cruzadas (por exemplo, xbar 146, 148 e 150) capaz de transferir um vetor de seu barramento de entrada e através de uma sequência segmentada de operações. Desse modo, um vetor pode ser recebido por meio de um arquivo registrador classificado MulVrf 142 ou outro arquivo registrador classificado como Vrf[0] 144, e tais vetores podem ser submetidos a qualquer uma dentre: uma operação de multi- plicação, uma operação de adição ou alguma outra operação. MFU[(O0] 140 pode incluir vários blocos de hardware para efetuar adição (por exemplo, 153, 157, e 161). MFU[O] 140 também pode incluir vários blo- cos de hardware para efetuar multiplicação (por exemplo, 152, 156 e 159). MFU[0] 140 também pode incluir vários blocos de hardware para efetuar ativação (por exemplo, 151, 154 e 158).
[00033] Ainda com referência à figura 1, MFU[1] 160 pode incluir bar- ras cruzadas (por exemplo, xbar 162, 163, e 164) que permitem a MFU[1] 160 receber saídas a partir de MFU[0] 140 e efetuar operações adicionais nessas saídas e em quaisquer entradas adicionais recebidas por meio de AD/SUB VRF 168. MFU[1] 160 pode incluir vários blocos de hardware para efetuar adição (por exemplo, 169, 171 e 172). MFU[1] 160 também pode incluir vários blocos de hardware para efetuar ativa- ção. As saídas de MFU[1] 160 recebidas por meio de canais C podem ser acopladas por meio de um circuito de multiplexação 174 ao geren- ciador de memória de vetor 180. Embora a figura 1 mostre um determi- nado número de componentes de processador 100 dispostos de uma certa maneira, poderia haver mais ou menos componentes dispostos de um modo diferente.
[00034] O processador 100 pode ser usado para permitir a emissão de instruções capazes de desencadear milhões de operações usando um pequeno número de instruções. Como um exemplo, a Tabela 1 abaixo mostra instruções correspondentes a uma LSTM totalmente pa- rametrizada: void LSTM (int steps) f for (int t=0;t< steps; t+) f v 1d (s , NegQ, DONTCARE); v wr(s, Initial Vrf , Istm 3 ivrf xt); WXWF =xt* Wf+ bf v 1d (s, Initial Vrf, Istm 3 ivrf xt); mv mul (s, Istm 3 mrf Wf); vv add (s, Istm 3 asvrf bf); v wr(s, AddSubVrf, Istm > asvrf xWf);
/xWf=xt*Wo+bo.. VxWe=x1*We+be.. // fgate 2 multiply by c prev v 1d (s, Initial Vrf, Istm 3 ivrf h prev); mv mul (s, Istm 3 mrf UF); vv add (s, Istm 3 asvrf xWf) ; v sigm (s) ;// ft vv mul (s, Istm > mulvrf c prev); v wr(s, AddSubVrf, Istm 3 asvrf ft mod); /Vigate... //ogale.. // c gate store ctandce prev v 1d (s, Initial Vrf, Istm 3 ivrf h prev); mv mul (s, lstm 3 mrf Uc); vv add (s, Istm 3 asvrf xWo); v tanh(s); vv mul (s, Istm > mulvrf it); vv add (s, Istm 3 asvrf ft mod) ;// ct v wr(s, Multiply Vrf, lstm 3 mulvrf c prev) v wr (s, Initial VIf, 1stm 3 ivrf ct); // produce ht, store and send to network v 1d (s , Initial Vrf, Istm 3 ivrf ct); v tanh(s); vv mul (s, Istm > mulvrf ot) ;// ht v wr(s, Initial Vrf, Istm 3 ivrf h prev); v wr(s, NetQ, DONTCARE); ) Jj Tabela 1
[00035] “Embora a Tabela 1 mostre um determinado número de ins- truções que possui um determinado formato, o processador 100 pode executar mais ou menos instruções que possuem um formato diferente para atingir os mesmos objetivos.
[00036] A Tabela2 abaixo mostra como computar uma convolução 1 X 1 como parte de uma avaliação de CNN. Setlterations(bs, args->iterations); SetRowsCols(bs, 1, args->cols); // Compute v rd inc(bs, ISA Mem Mvmlnitial Vrf, mvuivrf input, args->cols); mv mul(bs, mrf weights);, vv add inc(bs, ISA Mem AddSubVWVrf O, asvrfO bias, O); vv add inc(bs, ISA Mem AddSubVrf 1, asvrfl residual, 1); v relu(bs); v wr inc(bs, ISA Mem NetOutputQ, DONTCARE, DONTCARE). Tabela 2
[00037] Conforme mostrado na tabela acima, o número de iterações em uma cadeia de instruções para computação pode ser especificado. Em seguida, quando necessário, a dimensão original de cada cadeia de instrução pode ser escalonada por um fator de escalonamento de co- luna. E após a leitura dos dados de vetor no arquivo registrador de vetor, ele pode ser multiplicado com os pesos recuperados do arquivo regis- trador de matriz. Depois de efetuar operações adicionais quando forem necessárias para avaliação de CNN, a saída pode ser provida. Como um exemplo, uma operação pontual da Unidade Linear Retificada (ReLU) pode ser executada em cada elemento dos dados de vetor.
[00038] A Tabela3 abaixo mostra como computar uma convolução N X N como parte de uma avaliação de CNN. As instruções abaixo que são similares à convolução 1 X 1 não serão descritas novamente. A ins- trução Set2dWindows pode ser usada para definir o tamanho total da janela e em seguida, a instrução Setlterations pode ser usada para des- lizar essa janela ao longo do volume de entrada. As instruções * inc (por exemplo, v rd incev ad inc) podem ser usadas para incrementar o endereço da instrução com base no salto (“stride”). Como um exem- plo, um salto de 2 pode resultar na omissão de todos os outros vetores no arquivo registrador de vetor que sejam usados para armazenar da- dos de vetor para operações, tais como adição. SetRowsCols(bs, 1, args->windowCols * args->windowCols * args- >volumeDepth); Set2dWindow(bs, args->windowCols * args->volumeDepth, input cols); SetlIterations(bs, output cols); for (unsigned imageRow = 0; imageRow < output rows; imageRow++)
Í for (unsigned filter = O; filter < args->filterCount; filter++) tí v rd inc(bs, ISA Mem Mvmlnitial Vrf, ivrf input + imageRow * args- >windowStride * input cols, args->volumeDepth * args->windowStride); mv mul(bs, mrf weights + filter * args->windowCols * args- >windowCols * args->volumeDepth); vv add inc(bs, ISA Mem AddSubVrf 0, asvrfo bias ! filter, O); v relu(bs); v wr inc(bs, ISA Mem Dram, dram buffer wr ptr + filter, output depth); 1 dram buffer wr ptr += output cols * output depth; ) Tabela 3
[00039] A figura2 é um diagrama em bloco de um multiplicador de matriz-vetor (MVM) 200 de acordo com um exemplo. Neste exemplo, MVM 200 pode ser usado para implementar MVM 110 da figura 1. MVM 200 pode incluir um arquivo registrador de vetor (VRF) 210, um arquivo registrador de matriz (MRF) 220 e um processador de MVM 230. VRF 210 também pode incluir um decodificador de endereço 212 e um de- tector de perigo 214. VRF 210 pode receber tanto comandos quanto dados de vetor, tais como tensores.
MRF 220 pode incluir um decodifi- cador de endereço 222 e um detector de perigo 224. MRF 220 pode receber tanto comandos quanto dados da matriz.
O processador de MVM 230 pode incluir os mecanismos em bloco 232, 234 e 236. O pro- cessador de MVM 230 também pode incluir armazenamentos temporá- rios para receber e prover tensores (por exemplo, armazenamentos temporários de tensor 242, 244 e 246). O processador de MVM 230 também pode incluir um controlador de MVM 250. Neste exemplo, MVM 200 pode instanciar uma série de mecanismos em bloco, cada qual po- dendo ser projetado para acelerar uma MVM em tamanho original.
Neste exemplo, cada mecanismo em bloco é composto por uma série de unidades de produto escalar (DPUs), para que cada unidade de pro- duto escalar possa ser responsável pela computação de produto escalar que corresponde a uma fileira original no bloco de matriz.
Em um exem- plo, quando o processador 100 é implementado usando-se um FPGA, uma pequena série de BRAMs e DSPs pode ser configurada para criar um mecanismo em bloco.
Como um exemplo, cada um pode incluir me- mórias de acesso aleatório em bloco (BRAM;s) e blocos lógicos de pro- cessamento (por exemplo, processadores de sinal digital (DSPs)). Os blocos lógicos de processamento podem ser usados para multiplicar um vetor de entrada com uma fileira de pesos.
A saída dos blocos lógicos de processamento pode ser adicionada usando-se um adicionador.
Desse modo, neste exemplo, cada bloco pode efetuar uma operação de produto escalar pontual.
As unidades de produto escalar podem ser compostas por caminhos de multiplicadores paralelos que podem ser introduzidos em uma árvore de acúmulo.
Esses caminhos podem prover paralelismo dentro das colunas de uma fileira de um bloco de matriz.
Desse modo, a MVM 200 pode explorar pelo menos quatro dimensões de paralelismo: inter-MVM, MVM em blocos, ao longo das fileiras de um bloco e dentro das colunas da fileira.
Neste exemplo, a produtividade total de uma MVM pode ser expressa como: FLOP's por ciclo = 2* nº de unidades de tile x nº de DPUs x nº de caminhos.
[00040] —MRF 220 pode incluir vários arquivos registradores de matriz que podem ser configurados para suprir dados ou elementos de matriz para as unidades de produto escalar dentro de cada bloco. Cada multi- plicador pode receber um vetor elemento a partir de VRF 210 por ciclo e um elemento de matriz a partir de um dos arquivos registradores de matriz por ciclo. Os elementos de matriz podem ser entregues por uma porta dedicada do arquivo registrador de matriz posicionado adjacente a esse multiplicador. O MRF 220 pode ser organizado como se segue: as matrizes armazenadas podem ser divididas em blocos em tamanho original e cada bloco pode ser armazenado em apenas um único meca- nismo em bloco. A matriz armazenada em um determinado mecanismo em bloco pode ser visualizada como um banco de MRF. Cada unidade de produto escalar pode estar associada com um sub-banco do MRF que contém uma fileira de cada bloco de matriz nesse banco de MRF. As fileiras podem ser estaticamente atribuídas para as unidades de pro- duto escalar, para que a primeira unidade de produto escalar contenha a primeira fileira de cada bloco de matriz no banco de MRF. Por fim, os elementos da fileira podem ser intercalados em uma SRAM para que a porta de leitura SRAM possa ser diretamente conectada aos caminhos do multiplicador apenas por fios. As escritas no arquivo registrador de matriz podem ser gerenciadas de um modo diferente visto que os dados da matriz para escrita na MRF 220 podem vir de uma memória off-chip, tal como DRAM. Embora a figura 2 mostre um determinado número de componentes de MVM 200 dispostos de uma certa maneira, poderia ha- ver mais ou menos componentes dispostos de um modo diferente.
[00041] —Afigura3é um diagrama em bloco de um arquivo registrador de vetor (VRF) 300 de acordo com um exemplo. VRF 300 pode ser usado para implementar pelo menos uma porção do VRF 112 da figura
1. VRF 300 também pode ser usado para implementar pelo menos uma porção do VRF 210 da figura 2. Neste exemplo, as interfaces de dados de leitura/escrita para o VRF 300 podem consistir em uma série de in- terfaces ITensorRead e ITensorWrite, cada qual podendo ler/escrever CAMINHOS de elementos de dados por ciclo.
Cada interface pode se- guir um protocolo de tensor e pode ter uma contrapressão indepen- dente.
As interfaces de VRF 300 de leitura/escrita podem incluir arma- zenamentos temporários de entrada 302, 304 e 306 e armazenamentos temporários de saída 352, 354 e 356. Em resposta a uma operação de escrita, os armazenamentos temporários de entrada podem ser usados para receber tensores (por exemplo, dados de vetor de entrada corres- pondentes a uma camada de uma rede neural). Neste exemplo, o VRF 300 pode processar os dados de vetor em um formato ponto flutuante em bloco (BFP). O exponente (por exemplo, um exponente comparti- Ihado) pode ser armazenado em registradores de exponente (por exem- plo, EXP REGs 314, 316 e 318) e a mantissa pode ser armazenada em registradores de mudança (por exemplo, SHIFT REGs 308, 310 e 312). As saídas dos registradores de exponente podem ser acopladas a um multiplexador 322 e as saídas dos registradores de mudança podem ser acopladas a um multiplexador 320, que pode ser escrito em uma me- mória (por exemplo, uma RAM em bloco (BRAM)). Desse modo, o ex- ponente pode ser escrito em EXP BRAM 352 e a mantissa pode ser escrita em MANTISAA BRAM 330. Em resposta a uma leitura, os dados da memória podem ser enviados para as interfaces de saída.
Desse modo, os exponentes podem ser enviados para registradores de expo- nente (por exemplo, EXP REGs 344, 346 e 348) e a mantissa pode ser enviada para registradores de mudança (por exemplo, SHIFT REGs 338,340 e 342). A partir desses registradores, os dados de vetor BFP podem ser providos para armazenamentos temporários de saída (por exemplo, os armazenamentos temporários 352, 354 e 356). A lógica de controle 370 pode controlar o movimento dos dados de vetor por meio dos vários componentes de VRF 300, o que inclui, por exemplo, os mul- tiplexadores 320 e 322. A lógica de controle 370 pode incluir decodifica- ção de endereço (por exemplo, ADDRESS DECODE 372), decodifica- ção de comando (por exemplo, por meio de COMMAND DECODE 374) e controle de leitura/escrita (por exemplo, por meio de READ FSM 378 e WRITE FSM 376). Desse modo, após o recebimento de um comando e endereço por meio de barramento INfuCmd, o comando e o endereço podem ser decodificados para determinar o padrão de acesso a ende- reço e seleção de porta. A Tabela 4 abaixo mostra campos de comando ou parâmetros que podem ser decodificados pela lógica de controle 370. is write: especifica se o comando é uma operação de leitura ou escrita. -vrf addr: provê o endereço do primeiro vetor original a ser lido. -increment: o número de endereços a serem incrementados em cada iteração (esse valor pode ser definido pelas instruções v rd inc, v wr inc ou vv ad inc). -batch: especifica o número de vetores originais consecutivos a serem lidos ou escritos, formando um vetor lógico (em um exemplo, esse nú- mero pode ser especificado por meio dos parâmetros tileRows ou tile- Cols). -iterations: especifica o número de vezes em que a cadeia de comando é executada. - window cols: especifica o número de vetores originais em uma única fileira da janela 2D. -window offset: provê o endereço desviado para a próxima fileira na ja- nela. Tabela 4
[00042] Em um exemplo, a lógica de controle associada com o pro- cessador 100 pode decodificar os parâmetros especificados na Tabela 2 para determinar tanto o endereço do vetor original quanto a interface para leitura a partir de ou escrita em. Pode ser necessário que os mó- dulos conectados ao VRF 300 decodifiquem os comandos e esses pa- râmetros do mesmo modo para que esses módulos possam ler/escrever os dados corretos na interface apropriada e em uma ordem adequada dentro ou fora do VRF 300.
[00043] Em um exemplo, essa tarefa pode ser efetuada usando-se uma decodificação hierárquica e arquitetura de expedição. Desse modo, em um caso em que o processador 100 é implementado com base em um FPGA, um processador de controle pode ser criado usando-se um processador off-the-shelf Nios Il/f que faz par com um código personali- zado. Um escalonador de nível superior associado com o processador de controle pode receber um fluxo de instruções que pode ser agrupado em cadeias. Depois de decodificar as instruções, o escalonador de nível superior pode expedir sinais de controle distribuídos em uma série de escalonadores de nível secundário e em outra série de decodificadores de nível secundário. Esses escalonadores e decodificadores de nível secundário podem expedir sinais de controle adicionais que são distri- buídos para os decodificadores de menor nível. Na implementação exemplar que utiliza o processador Nios, o processador Nios pode trans- ferir iterações T de instruções N dentro do escalonador de nível superior. Em seguida, o escalonador de nível superior pode expedir a porção de instruções específica à MVM para um escalonador de nível secundário, que pode expandir as operações ao longo das fileiras N e colunas N da matriz desejada. Esses escalonamentos de MVM podem ser mapeados nos mecanismos em bloco de matriz-vetor E as operações podem ser expedidas para uma série de decodificadores E, cada uma para os me- canismos em bloco e seus arquivos registradores de vetor e unidades de acúmulo associados. A série de decodificadores E pode gerar sinais de controle que se dispersam dentro do plano de dados, com cada me-
canismo em bloco expedidor que se dispersam em centenas de unida- des de produto escalar capazes de ler os dados de vetor a partir do arquivo registrador de vetor e escrever os dados de vetor novamente no arquivo registrador de vetor.
[00044] Em termos de operações de leitura/escrita, neste exemplo, o VRF 300 pode usar internamente uma memória com múltiplas portas (por exemplo, uma de BRAM porta dual) de dados largura NATIVE DIM x BFP WIDTH + EXP WIDTH. Em um exemplo, a memória de porta dual (por exemplo, a BRAM) pode girar para disponibilizar os dados em um circuito de interface diferente a cada ciclo. Desse modo, neste exem- plo, em estado constante, o VRF 300 pode obter a largura de banda total de leitura/escrita sem nenhum conflito entre portas. Embora a figura 3 mostre um determinado número de componentes de VRF 300 dispos- tos de uma certa maneira, poderia haver mais ou menos componentes dispostos de um modo diferente. Como um exemplo, embora a memória de porta dual seja descrita como uma BRAM, outros tipos de memórias em outros tipos de processadores também podem ser usados. Como um exemplo, a SRAM ou outros tipos de memórias de porta dual em GPUs, CPUs ou outros tipos de processadores também podem ser usa- dos. Além disso, embora a figura 3 descreva uma memória de porta dual (uma porta para leitura e uma porta para escrita), uma memória com portas adicionais também pode ser usada; por exemplo, uma memória com duas portas de leitura e duas portas de escrita pode ser usada.
[00045] —Afigura4é um diagrama em bloco de um arquivo registrador de vetor 400 de acordo com outro exemplo. Este exemplo foi simplifi- cado para explicar a operação de um arquivo registrador de vetor (por exemplo, VRF 300 da figura 3) que inclui uma memória de porta dual
430. Este exemplo pressupõe que a dimensão original N de um vetor ou matriz é de 128 palavras. Desse modo, um multiplicador de matriz-vetor pode multiplicar uma matriz N X N com um vetor N X 1 como parte do processamento da rede neural.
Este exemplo também pressupõe que cada elemento é uma palavra com W bits de largura.
Este exemplo tam- bém pressupõe que cada unidade de produto escalar pode processar L- palavras (ou L-elementos) dos dados de vetor e matriz que produzirão um produto escalar parcial.
A MVM pode incluir uma árvore de redução de adições para acumular os produtos escalares parciais.
A saída de redução de adições pode ser então provida para um acumulador que reúne todas as somas parciais para prover o produto escalar final para uma fileira inteira de uma matriz.
O VRF 400 pode receber dados de vetor por meio de oito interfaces, com cada interface tendo L caminhos.
VRF 400 interface de escrita pode ter circuitos de interface de entrada, tais como, por exemplo, o circuito de interface de entrada 401, o circuito de interface de entrada 403 e o circuito de interface de entrada 405. À interface de leitura do VRF 400 pode ter circuitos de interface de saída, tais como, por exemplo, o circuito de interface de saída 451, o circuito de interface de saída 453 e o circuito de interface de saída 455. Cada circuito de interface de entrada pode incluir um armazenamento tempo- rário de entrada (por exemplo, os armazenamentos temporários de en- trada 402, 404 e 406) e cada circuito de interface de saída pode incluir um armazenamento temporário de saída (por exemplo, os armazena- mentos temporários de saída 462, 464 e 466). Os armazenamentos temporários de entrada também podem ser acoplados a elementos de interface adicionais (por exemplo, os elementos de interface 412, 414 e 416). Os armazenamentos temporários de saída também podem ser acoplados a elementos interface de saída adicionais (por exemplo, ele- mentos de interface de saída 452, 454 e 456). A interface de escrita também pode compreender um multiplexador 420, que pode ser aco- plado para receber as saídas de cada um dos circuitos de interface de entrada.
A saída do multiplexador 420 pode ser acoplada a uma porta de leitura de memória de porta dual 430. A interface de leitura também pode compreender um desmultiplexador 440, que pode ser acoplado para receber a saída da memória de porta dual 430. As saídas do des- multiplexador podem ser acopladas aos circuitos de interface de saída.
[00046] Em resposta a uma operação de escrita, os circuitos de in- terface de entrada podem ser usados para receber tensores e em res- posta a uma operação de leitura, os circuitos de interface de saída po- dem prover os dados de vetor. Neste exemplo, em resposta a uma ins- trução de escrita durante um único ciclo de relógio, os elementos de dados N podem ser armazenados na memória de porta dual por meio de uma ampla interface (classificada como V na figura 4). Durante cada um dos ciclos de relógio P (N/L), o VRF 400 pode receber por meio de cada interface de entrada um dos tensores (por exemplo, um vetor N por 1). No exemplo mostrado na figura 4, P = 8, N= 128 eL=16.Pre- sumindo-se que cada elemento de dado é uma palavra, que possui W bits, a cada oito ciclos de relógio cada circuito de interface de entrada pode receber N multiplicado por W bits (V bits). Neste exemplo, N é 128 e presumindo-se que o tamanho da palavra é 4 bits, a cada ciclo de relógio, VRF 400 pode armazenar 512 bits. Durante cada ciclo de relógio L (por exemplo, 16 neste caso), os caminhos de entrada que fazem parte dos circuitos de interface de entrada podem conduzir elementos de dados L (por exemplo, L palavras) em paralelo. Os registradores de mudança (por exemplo, os registradores de mudança 412, 414 e 416) que fazem parte dos circuitos de interface de entrada podem prover 512 bits a cada ciclo de relógio para o multiplexador 420.
[00047] De modo similar, em resposta a uma instrução de leitura, a cada oito ciclos de relógio, o VRF 400 pode prover V bits (512 bits), por meio de uma porta de leitura com V-bit de largura, para pelo menos um dos circuitos de interface de saída por meio de multiplexador 440. Os registradores de mudança (por exemplo, os registradores de mudança 452, 454 e 456) podem prover os elementos de dados L por ciclo de relógio para o respectivo armazenamento temporário de saída. As ins- truções de leitura e escrita podem ser escalonadas para serem execu- tadas ao mesmo tempo. Desse modo, “girando-se” a memória de porta dual 430 de interface para interface, a cada ciclo de relógio um vetor inteiro com uma dimensão original de N pode ser lido e escrito em VRF
400. De maneira vantajosa, tal ação permite que o processador 100 seja baseado em um FPGA ou outro tipo de nodo de hardware que possui uma quantidade limitada de SRAM, tal como a quantidade limitada de BRAM em um FPGA, o que é vantajoso visto que a multiplicação de matriz-vetor poderia ser projetada para aumentar a maioria dos recursos de FPGA e, sem desperdiçar os recursos de FPGA, prover BRAMs de múltiplas portas dedicadas. A lógica de controle 425 pode prover sinais de controle, tais como INPUT CONTROL e OUTPUT control. Mais de- talhes referentes ao aspecto de controle do VRF 400 são providos em relação à figura 3 e a outra descrição. Embora a figura 4 descreva a operação de VRF 400 usando-se matrizes 2D de tamanho N X N e ve- tores 1D de comprimento N, o VRF 400 pode ser operado usando-se outros tamanhos também. A seleção do tamanho do vetor pode depen- der da série desejada de modelos— selecionar um vetor grande demais pode causar “suboptimal padding”, enquanto selecionar um vetor pe- queno demais pode aumentar a sobrecarga de controle do processador. Além disso, embora a figura 4 descreva a operação de VRF 400 usando uma memória de porta dual, a memória pode ter portas de leitura/escrita adicionais.
[00048] A figura5 mostra um diagrama de fluxo de um método para processar elementos de dados de vetor usando o processador e o ar- quivo registrador de vetor de acordo com um exemplo. Neste exemplo, a etapa 510 pode incluir decodificar um comando do arquivo registrador de vetor (VRF) para determinar um padrão de acesso a endereço e se- leção de porta. A decodificação de comando 374 pode executar esta etapa. Conforme descrito anteriormente em um exemplo, tal ação pode ser efetuada usando-se uma decodificação hierárquica e arquitetura de expedição. Desse modo, em um caso no qual o processador 100 é im- plementado com base em um FPGA, um processador de controle pode ser criado usando um processador off-the-shelf Nios II/f que faz par com um código personalizado. Um escalonador de nível superior associado com o processador de controle pode receber um fluxo de instruções que pode ser agrupado em cadeias. Depois de decodificar as instruções, o escalonador de nível superior pode expedir sinais de controle distribuí- dos em uma série de escalonadores de nível secundário e em outra série de decodificadores de nível secundário. Esses escalonadores e decodificadores de nível secundário podem expedir sinais de controle adicionais que são distribuídos para os decodificadores de menor nível. Na implementação exemplar que utiliza o processador Nios, o proces- sador Nios pode transferir iterações T de instruções N dentro do esca- lonador de nível superior. Em seguida, o escalonador de nível superior pode expedir a porção de instruções específica à MVM para um escalo- nador de nível secundário, que pode expandir as operações ao longo das fileiras N e colunas N da matriz desejada. Esses escalonamentos de MVM podem ser mapeados nos mecanismos em bloco de matriz- vetor E as operações podem ser expedidas para uma série de decodifi- cadores E, cada uma para os mecanismos em bloco e seus arquivos registradores de vetor e unidades de acúmulo associados. A série de decodificadores E pode gerar sinais de controle que se dispersam den- tro do plano de dados, com cada mecanismo em bloco expedidor que se dispersam em centenas de unidades de produto escalar capazes de ler os dados de vetor a partir do arquivo registrador de vetor e escrever os dados de vetor novamente no arquivo registrador de vetor.
[00049] — Além disso, visto que é possível ter perigos de Leitura-Após-
Escrita, “Read-After-Write" (RAW), ou Escrita-Após-Leitura, “Write-Af- ter-Read" (WAR), no arquivo registrador de vetor, uma detecção de pe- rigo pode ser usada. Desse modo, em um exemplo, o detector de perigo (por exemplo, 214 da figura 2) pode rastrear os endereços acessados pelas instruções de leitura ou escrita, e quando uma instrução de leitura chegar e já houver uma escrita em progresso, o detector de perigo po- derá verificar se os endereços acessados pela instrução recebida de leitura estão sobrepondo os endereços acessados pela instrução de es- crita atual. Em um exemplo, o detector de perigo pode efetuar essa ta- refa mantendo um par de registradores para o rastreamento de um de- terminado número de endereços acessados por essas instruções.
[00050] A etapa 520 pode incluir dispor pelo menos um endereço de VRF decodificado em uma fila. Neste exemplo, a decodificação de en- dereço 372 pode executar esta etapa.
[00051] A etapa 530 pode incluir remoção da fila após a chegada de dados de vetor que possuem uma dimensão original de N. A lógica de controle 370 associada com o VRF 370 pode executar esta etapa.
[00052] A etapa 540 pode incluir, em resposta a uma instrução de escrita durante um único ciclo de relógio, armazenar os elementos de dados N na memória de porta dual e durante cada um dos ciclos de relógio P, prover os elementos de dados N para cada um dos circuitos de interface de entrada P da memória de porta dual, onde P é um nú- mero inteiro igual a N dividido por L e onde cada um dos circuitos de interface de entrada P compreende um caminho de entrada configurado para conduzir os elementos de dados L em paralelo, e onde durante cada um desses ciclos de relógio P, a memória de porta dual é configu- rada para receber elementos de dados N por meio de um dos circuitos selecionados de interface de entrada P. Neste exemplo, uma máquina de estado finito (por exemplo, WRITE FSM 376) pode executar esta etapa. Detalhes adicionais referentes a esta etapa são providos em re- lação à figura 4.
[00053] A etapa 550 pode incluir, em resposta a uma instrução de leitura durante um único ciclo de relógio, recuperar os elementos de da- dos N a partir da memória de porta dual e durante cada um dos ciclos de relógio P, prover os elementos de dados L de cada um de circuitos de interface de saída Q da memória de porta dual, onde cada um dos circuitos de interface de saída Q compreende um caminho de saída con- figurado para conduzir os elementos de dados L em paralelo, e onde durante cada um desses ciclos de relógio P, a memória de porta dual é configurada para prover elementos de dados N para um dos circuitos selecionados de interface de saída Q. Neste exemplo, uma máquina de estado finito (por exemplo, READ FSM 378) pode executar esta etapa. Detalhes adicionais referentes a esta etapa são providos em relação à figura 4. Embora a figura 5 descreva um determinado número de etapas executado em uma ordem determinada, mais ou menos etapas em uma ordem diferente podem ser executadas. Além disso, embora a figura 5 descreva o método em relação a uma memória de porta dual, uma me- mória com portas adicionais pode ser usada. Como um exemplo, uma memória com duas portas de leitura e duas portas de escrita pode ser usada.
[00054] Em suma, a presente invenção refere-se a um processador que compreende um arquivo registrador de vetor contendo uma memó- ria com múltiplas portas (por exemplo, uma memória de porta dual). O processador também pode incluir uma pluralidade de blocos configura- dos para processar uma matriz N por N de elementos de dados e um vetor N por 1 de elementos de dados, onde N é um número inteiro igual ou maior que 8, e onde cada um da pluralidade de blocos é configurado para processar os elementos de dados N. O arquivo registrador de vetor pode ser configurado para, em resposta a uma instrução de escrita du- rante um único ciclo de relógio, armazenar os elementos de dados N na memória com múltiplas portas e durante cada um dos ciclos de relógio P, prover os elementos de dados N para cada um dos circuitos de inter- face de entrada P da memória com múltiplas portas, onde P é um nú- mero inteiro igual a N dividido por L, onde L é um número inteiro igual ou maior que 2, e onde cada um dos circuitos de interface de entrada P compreende um caminho de entrada configurado para conduzir os ele- mentos de dados L em paralelo, e onde durante cada um desses ciclos de relógio P, a memória com múltiplas portas é configurada para receber elementos de dados N por meio de pelo menos um dos circuitos seleci- onados de interface de entrada P.
[00055] O arquivo registrador de vetor também pode ser configurado para, em resposta a uma instrução de leitura durante um único ciclo de relógio, recuperar os elementos de dados N a partir da memória com múltiplas portas e durante cada um dos ciclos de relógio Q prover os elementos de dados L de cada um dos circuitos de interface de saída Q da memória com múltiplas portas, onde Q é um número inteiro igual a N dividido por L, e onde cada um dos circuitos de interface de saída Q compreende um caminho de saída configurado para conduzir os ele- mentos de dados L em paralelo, e onde durante cada um desses ciclos de relógio Q, a memória com múltiplas portas é configurada para prover elementos de dados N para pelo menos um dos circuitos selecionados de interface de saída Q.
[00056] Em um exemplo, amemória com múltiplas portas pode ser configurada como uma memória de porta dual, e a memória de porta dual pode compreender uma única porta de leitura e uma única porta de escrita. Neste exemplo, a instrução de leitura pode ser processada de modo substancialmente simultâneo com a instrução de escrita.
[00057] Em um exemplo, cada de um dos circuitos de interface de entrada P compreende um armazenamento temporário de entrada con- figurado para armazenar vetores N por 1 e cada um dos circuitos de interface de saída Q compreende um armazenamento temporário de sa- ída configurado para armazenar vetores N por 1. Neste exemplo, cada um dos circuitos de interface de entrada P compreende pelo menos um registrador de mudança acoplado para receber os vetores N por 1 a partir do armazenamento temporário de entrada e cada um dos circuitos de interface de saída Q compreende pelo menos um registrador de mu- dança acoplado para prover os vetores N por 1 para o armazenamento temporário de saída.
[00058] Em outro exemplo, a presente invenção refere-se a um mé- todo em um sistema que compreende uma pluralidade de blocos e um arquivo registrador de vetor que compreende uma memória de porta dual, onde cada um da pluralidade de blocos é configurado para proces- sar uma matriz N por N de elementos de dados e um vetor N por 1 de elementos de dados, onde N é um número inteiro igual ou maior que 8, e onde cada um da pluralidade de blocos é configurado para processar os elementos de dados N.
[00059] O método pode incluir, em resposta a uma instrução de es- crita durante um único ciclo de relógio, armazenar os elementos de da- dos N na memória de porta dual e durante cada um dos ciclos de relógio P, prover os elementos de dados N para cada um dos circuitos de inter- face de entrada P da memória de porta dual, onde P é um número inteiro igual a N dividido por L, onde L é um número inteiro igual ou maior que 2, e onde cada um dos circuitos de interface de entrada P compreende um caminho de entrada configurado para conduzir os elementos de da- dos L em paralelo, e onde durante cada um desses ciclos de relógio P, a memória de porta dual é configurada para receber elementos de da- dos N por meio de um dos circuitos selecionados de interface de entrada P.
[00060] O método ainda pode incluir, em resposta a uma instrução de leitura durante um único ciclo de relógio, recuperar os elementos de dados N a partir da memória de porta dual e durante cada um dos ciclos de relógio Q prover os elementos de dados L de cada um dos circuitos de interface de saída Q da memória de porta dual, onde Q é um número inteiro igual a N dividido por L, e onde cada um dos circuitos de interface de saída Q compreende um caminho de saída configurado para condu- zir os elementos de dados L em paralelo, e onde durante cada um des- ses ciclos de relógio Q, a memória de porta dual é configurada para prover elementos de dados N para um dos circuitos selecionados de interface de saída Q.
[00061] Emum exemplo, amemória de porta dual pode compreender uma única porta de leitura e uma única porta de escrita. Neste exemplo, a instrução de leitura pode ser processada de modo substancialmente simultâneo com a instrução de escrita.
[00062] Em um exemplo, cada de um dos circuitos de interface de entrada P compreende um armazenamento temporário de entrada con- figurado para armazenar vetores N por 1 e cada um dos circuitos de interface de saída Q compreende um armazenamento temporário de sa- ída configurado para armazenar vetores N por 1. Neste exemplo, cada um dos circuitos de interface de entrada P compreende pelo menos um registrador de mudança acoplado para receber os vetores N por 1 a partir do armazenamento temporário de entrada e cada um dos circuitos de interface de saída Q compreende pelo menos um registrador de mu- dança acoplado para prover os vetores N por 1 para o armazenamento temporário de saída.
[00063] Em mais outro exemplo, a presente invenção refere-se a um processador que compreende um arquivo registrador de vetor que com- preende uma memória de porta dual incluindo uma única porta de leitura e uma única porta de escrita. O processador também pode compreen- der uma pluralidade de blocos configurados para processar uma matriz N por N e um vetor N por 1, onde N é um número inteiro igual ou maior que 8, e onde cada um da pluralidade de blocos é configurado para pro- cessar os elementos de dados N.
[00064] O arquivo registrador de vetor pode ser configurado para, em resposta a uma instrução de escrita durante um único ciclo de relógio, armazenar os elementos de dados N na memória de porta dual por meio da porta de escrita unitária e durante cada um dos ciclos de relógio P, prover os elementos de dados N para cada um dos circuitos de interface de entrada P da memória de porta dual, onde P é um número inteiro igual a N dividido por L, onde L é um número inteiro igual ou maior que 2, e onde cada um dos circuitos de interface de entrada P compreende um caminho de entrada configurado para conduzir os elementos de da- dos L em paralelo, e onde durante cada um desses ciclos de relógio P, a memória de porta dual é configurada para receber elementos de da- dos N por meio de um dos circuitos selecionados de interface de entrada P.
[00065] O arquivo registrador de vetor ainda pode ser configurado para, em resposta a uma instrução de leitura durante um único ciclo de relógio, recuperar os elementos de dados N a partir da memória de porta dual por meio da porta de leitura unitária e durante cada um dos ciclos de relógio Q prover os elementos de dados L de cada um dos circuitos de interface de saída Q da memória de porta dual, onde Q é um número inteiro igual a N dividido por L, e onde cada um dos circuitos de interface de saída Q compreende um caminho de saída configurado para condu- zir os elementos de dados L em paralelo, e onde durante cada um des- ses ciclos de relógio Q, a memória de porta dual é configurada para prover elementos de dados N para um dos circuitos selecionados de interface de saída Q.
[00066] Em um exemplo, cada de um dos circuitos de interface de entrada P compreende um armazenamento temporário de entrada con- figurado para armazenar vetores N por 1 e cada um dos circuitos de interface de saída Q compreende um armazenamento temporário de sa- ída configurado para armazenar vetores N por 1. Neste exemplo, cada um dos circuitos de interface de entrada P compreende pelo menos um registrador de mudança acoplado para receber os vetores N por 1 a partir do armazenamento temporário de entrada e cada um dos circuitos de interface de saída Q compreende pelo menos um registrador de mu- dança acoplado para prover os vetores N por 1 para o armazenamento temporário de saída. Neste exemplo, a instrução de leitura pode ser pro- cessada de modo substancialmente simultâneo com a instrução de es- crita.
[00067] É válido observar que os métodos, módulos e componentes descritos aqui são meramente exemplares. De maneira alternativa ou adicional, a funcionalmente descrita neste documento pode ser execu- tada, pelo menos em parte, por um ou mais componentes lógicos de hardware. A título de exemplo e sem limitação, tipos ilustrativos de com- ponentes lógicos de hardware que podem ser usados incluem Conjun- tos de Portas Programáveis em Campo (FPGAs), Circuitos Integrados de Aplicação Específica (ASICs), Produtos Padrão de Aplicação Espe- cífica (ASSPs), Sistema-em-um-Chip (SOCs), Dispositivos Lógicos Pro- gramáveis Apagáveis e/ou Complexos (CPLDs), etc. Em um sentido abstrato, mas ainda definido, qualquer arranjo de componentes para a obtenção da mesma funcionalidade é de fato "associado" para que a funcionalidade desejada seja obtida. Consequentemente, quaisquer dois componentes neste documento que sejam combinados para a ob- tenção de uma funcionalidade particular podem ser vistos como "asso- ciados" um com o outro para que a funcionalidade desejada seja obtida, independentemente das arquiteturas ou componentes intermediários.
Do mesmo modo, quaisquer dois componentes associados assim tam- bém podem ser vistos como sendo "operativamente conectados" ou "acoplados" um ao outro para a obtenção da funcionalidade desejada.
[00068] A funcionalidade associada com alguns exemplos descritos neste relatório descritivo também pode incluir instruções armazenadas em um meio não transitório. O termo “meio não transitório” conforme usado neste documento refere-se a qualquer meio que armazena dados e/ou instruções que faça uma máquina operar de um modo específico. Meios não transitórios exemplares incluem meio não volátil e/ou meio volátil. Meios não voláteis incluem, por exemplo, um disco rígido, uni- dade de estado sólido, um disco ou fita magnética, um disco ou fita ótica, uma memória flash, uma EPROM, NVRAM, PRAM ou outros desses meios, ou versões em rede de tais meios. Meios voláteis incluem, por exemplo, memórias dinâmicas, tais como DRAM, SRAM, cachê ou ou- tros desses meios. Um meio não transitório é distinto, mas pode ser usado em conjunção com um meio de transmissão. Um meio de trans- missão é usado para transferir dados e/ou instruções para ou a partir de uma máquina. Meios de transmissão exemplares incluem cabos coaxi- ais, cabos de fibra ótica, fios de cobre e meios sem fio, tais como ondas de rádio.
[00069] — Além disso, pessoas versadas na técnica serão capazes de reconhecer que os limites entre a funcionalidade das operações descri- tas acima são meramente ilustrativos. A funcionalidade de múltiplas operações pode ser combinada em uma única operação, e/ou a funcio- nalidade de uma única operação pode ser distribuída em operações adi- cionais. Adicionalmente, as modalidades alternativas podem incluir múl- tiplos casos de uma operação particular e a ordem das operações pode ser alterada em várias outras modalidades.
[00070] Embora esta descrição forneça exemplos específicos, várias modificações e mudanças podem ser feitas sem desvio do escopo da presente invenção tal como enunciado nas reivindicações a seguir. Con- sequentemente, o presente relatório descritivo e as figuras em anexo devem ser interpretados em um sentido ilustrativo, e não restritivo, e todas essas modificações estão abrangidas pelo escopo da presente invenção. Quaisquer benefícios, vantagens ou soluções para os proble- mas que foram descritos neste documento em relação a um exemplo específico não devem ser considerados como uma característica ou ele- mento crucial, necessário ou essencial de nenhuma ou de todas as rei- vindicações.
[00071] Além disso, os termos "um" ou "uma", conforme usados neste documento, são definidos como um ou mais de um. E o uso de expressões introdutórias, tais como "pelo menos um" e "um ou mais" nas reivindicações não significa que a introdução de outro elemento de reivindicação por meio dos artigos indefinidos "um" ou "uma" limita qual- quer reivindicação particular que contenha tal elemento de reivindicação introduzido a apenas uma unidade desse elemento, mesmo quando a mesma reivindicação incluir as expressões introdutórias "um ou mais" ou "pelo menos um" e artigos indefinidos, tais como "um" ou "uma". O mesmo se aplica ao uso de artigos definidos.
[00072] A menos que seja afirmado o contrário, termos, tais como "primeiro" e "segundo" são usados para distinguir de forma arbitrária entre os elementos que esses termos descrevem. Desse modo, esses termos não se destinam necessariamente a indicar uma priorização temporal ou de outra natureza desses elementos.

Claims (15)

REIVINDICAÇÕES
1. Processador, caracterizado pelo fato de que compreende: um arquivo registrador de vetor que compreende uma me- mória com múltiplas portas, e uma pluralidade de blocos configurados para processar uma matriz N por N de elementos de dados e um vetor N por 1 de elementos de dados, em que N é um número inteiro igual ou maior que 8, e em que cada um da pluralidade de blocos é configurado para processar os elementos de dados N, e em que o arquivo registrador de vetor é configurado para: em resposta a uma instrução de escrita durante um único ciclo de relógio, armazenar elementos de dados N na memória com múl- tiplas portas e durante cada um dos ciclos de relógio P, prover os ele- mentos de dados N para cada um dos circuitos de interface de entrada P da memória com múltiplas portas, em que P é um número inteiro igual a N dividido por L, em que L é um número inteiro igual ou maior que 2, e em que cada um dos circuitos de interface de entrada P compreende um caminho de entrada configurado para conduzir os elementos de da- dos L em paralelo, e em que durante cada um desses ciclos de relógio P, a memória com múltiplas portas é configurada para receber elemen- tos de dados N por meio de pelo menos um dos circuitos selecionados de interface de entrada P, e em resposta a uma instrução de leitura durante um único ci- clo de relógio, recuperar os elementos de dados N a partir da memória com múltiplas portas e durante cada um dos ciclos de relógio Q prover os elementos de dados L de cada um dos circuitos de interface de saída Q da memória com múltiplas portas, em que Q é um número inteiro igual a N dividido por L, e em que cada um dos circuitos de interface de saída Q compreende um caminho de saída configurado para conduzir os ele- mentos de dados L em paralelo, e em que durante cada um desses ci- clos de relógio Q, a memória com múltiplas portas é configurada para prover elementos de dados N para pelo menos um dos circuitos seleci- onados de interface de saída Q.
2. Processador, de acordo com a reivindicação 1, caracteri- zado pelo fato de que a memória com múltiplas portas é uma memória de porta dual, e em que a memória de porta dual compreende uma única porta de leitura e uma única porta de escrita.
3. Processador, de acordo com a reivindicação 1, caracteri- zado pelo fato de que a instrução de leitura é processada de modo subs- tancialmente simultâneo com a instrução de escrita.
4. Processador, de acordo com a reivindicação 1, caracteri- zado pelo fato de que cada um dos circuitos de interface de entrada P compreende um armazenamento temporário de entrada configurado para armazenar vetores N por 1.
5. Processador, de acordo com a reivindicação 1, caracteri- zado pelo fato de que cada um dos circuitos de interface de saída Q compreende um armazenamento temporário de saída configurado para armazenar vetores N por 1.
6. Processador, de acordo com a reivindicação 4, caracteri- zado pelo fato de que cada um dos circuitos de interface de entrada P compreende pelo menos um registrador de mudança acoplado para re- ceber os vetores N por 1 a partir do armazenamento temporário de en- trada.
7. Processador, de acordo com a reivindicação 5, caracteri- zado pelo fato de que cada um dos circuitos de interface de saída Q compreende pelo menos um registrador de mudança acoplado para pro- ver os vetores N por 1 no armazenamento temporário de saída.
8. Método em um sistema que compreende uma pluralidade de blocos e um arquivo registrador de vetor que compreende uma me- mória de porta dual, em que cada um da pluralidade de blocos é confi- gurado para processar uma matriz N por N de elementos de dados e um vetor N por 1 de elementos de dados, em que N é um número inteiro igual ou maior que 8, e em que cada um da pluralidade de blocos é configurado para processar os elementos de dados N, caracterizado pelo fato de que o método compreende: em resposta a uma instrução de escrita durante um único ciclo de relógio, armazenar os elementos de dados N na memória de porta dual e durante cada um dos ciclos de relógio P, prover os elemen- tos de dados N para cada um dos circuitos de interface de entrada P da memória de porta dual, em que P é um número inteiro igual a N dividido por L, em que L é um número inteiro igual ou maior que 2, e em que cada um dos circuitos de interface de entrada P compreende um cami- nho de entrada configurado para conduzir os elementos de dados L em paralelo, e em que durante cada um desses ciclos de relógio P, a me- mória de porta dual é configurada para receber elementos de dados N por meio de um dos circuitos selecionados de interface de entrada P; e em resposta a uma instrução de leitura durante um único ci- clo de relógio, recuperar os elementos de dados N a partir da memória de porta dual e durante cada um dos ciclos de relógio Q prover os ele- mentos de dados L de cada um dos circuitos de interface de saída Q da memória de porta dual, em que Q é um número inteiro igual a N dividido por L, e em que cada um dos circuitos de interface de saída Q compre- ende um caminho de saída configurado para conduzir os elementos de dados L em paralelo, e em que durante cada um desses ciclos de relógio Q, a memória de porta dual é configurada para prover elementos de dados N para um dos circuitos selecionados de interface de saída Q.
9. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que a memória de porta dual compreende uma única porta de leitura e uma única porta de escrita.
10. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que a instrução de leitura é processada de modo substan- cialmente simultâneo com a instrução de escrita.
11. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que cada um dos circuitos de interface de entrada P com- preende um armazenamento temporário de entrada configurado para armazenar vetores N por 1.
12. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que cada um dos circuitos de interface de saída Q compre- ende um armazenamento temporário de saída configurado para arma- zenar vetores N por 1.
13. Método, de acordo com a reivindicação 11, caracterizado pelo fato de que cada um dos circuitos de interface de entrada P com- preende pelo menos um registrador de mudança acoplado para receber os vetores N por 1 a partir do armazenamento temporário de entrada.
14. Método, de acordo com a reivindicação 12, caracterizado pelo fato de que cada um dos circuitos de interface de saída Q compre- ende pelo menos um registrador de mudança acoplado para prover os vetores N por 1 para o armazenamento temporário de saída.
15. Processador, caracterizado pelo fato de que compre- ende: um arquivo registrador de vetor que compreende uma me- mória de porta dual incluindo uma única porta de leitura e uma única porta de escrita; e uma pluralidade de blocos configurados para processar uma matriz N por N e um vetor N por 1, em que N é um número inteiro igual ou maior que 8, e em que cada um da pluralidade de blocos é configu- rado para processar os elementos de dados N, e em que o arquivo re- gistrador de vetor é configurado para: em resposta a uma instrução de escrita durante um único ciclo de relógio, armazenar elementos de dados N na memória de porta dual por meio da porta de escrita unitária e durante cada um dos ciclos de relógio P, prover os elementos de dados N para cada um dos circui- tos de interface de entrada P da memória de porta dual, em que P é um número inteiro igual a N dividido por L, em que L é um número inteiro igual ou maior que 2, e em que cada um dos circuitos de interface de entrada P compreende um caminho de entrada configurado para con- duzir os elementos de dados L em paralelo, e em que durante cada um desses ciclos de relógio P, a memória de porta dual é configurada para receber elementos de dados N por meio de um dos circuitos seleciona- dos de interface de entrada P, e em resposta a uma instrução de leitura durante um único ci- clo de relógio, recuperar os elementos de dados N a partir da memória de porta dual por meio da porta de leitura unitária e durante cada um dos ciclos de relógio Q prover os elementos de dados L de cada um dos circuitos de interface de saída Q da memória de porta dual, em que Q é um número inteiro igual a N dividido por L, e em que cada um dos cir- cuitos de interface de saída Q compreende um caminho de saída confi- gurado para conduzir os elementos de dados L em paralelo, e em que durante cada um desses ciclos de relógio Q, a memória de porta dual é configurada para prover elementos de dados N para um dos circuitos selecionados de interface de saída Q.
BR112020019457-3A 2018-04-21 2019-04-06 Multiplicador de matriz-vetor com um arquivo registrador de vetor que compreende uma memória com múltiplas portas BR112020019457A2 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/959,209 2018-04-21
US15/959,209 US10795678B2 (en) 2018-04-21 2018-04-21 Matrix vector multiplier with a vector register file comprising a multi-port memory
PCT/US2019/026205 WO2019204068A1 (en) 2018-04-21 2019-04-06 Matrix vector multiplier with a vector register file comprising a multi-port memory

Publications (1)

Publication Number Publication Date
BR112020019457A2 true BR112020019457A2 (pt) 2021-01-05

Family

ID=66248741

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112020019457-3A BR112020019457A2 (pt) 2018-04-21 2019-04-06 Multiplicador de matriz-vetor com um arquivo registrador de vetor que compreende uma memória com múltiplas portas

Country Status (13)

Country Link
US (1) US10795678B2 (pt)
EP (1) EP3785112B1 (pt)
JP (1) JP7262569B2 (pt)
KR (1) KR20210002495A (pt)
CN (1) CN112005214B (pt)
AU (1) AU2019257260B2 (pt)
BR (1) BR112020019457A2 (pt)
CA (1) CA3096443A1 (pt)
IL (1) IL278050B2 (pt)
MX (1) MX2020010916A (pt)
PH (1) PH12020551746A1 (pt)
SG (1) SG11202009936XA (pt)
WO (1) WO2019204068A1 (pt)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11574659B2 (en) * 2018-09-11 2023-02-07 Micron Technology, Inc. Parallel access to volatile memory by a processing device for machine learning
US11579883B2 (en) * 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
EP3623984A1 (en) * 2018-09-17 2020-03-18 Secure-IC SAS Circuit configured to monitor a sensitive payload
US11983616B2 (en) * 2018-10-01 2024-05-14 Expedera, Inc. Methods and apparatus for constructing digital circuits for performing matrix operations
US11586883B2 (en) * 2018-12-14 2023-02-21 Microsoft Technology Licensing, Llc Residual quantization for neural networks
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
US11907827B2 (en) * 2019-06-28 2024-02-20 Intel Corporation Schedule-aware tensor distribution module
KR102371451B1 (ko) 2021-05-27 2022-03-07 충남대학교 산학협력단 멀티포트 메모리를 이용한 병렬 곱셈장치
US20220413852A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Processor embedded streaming buffer

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4036455C1 (pt) * 1990-11-15 1992-04-02 Siemens Ag, 8000 Muenchen, De
JP3297925B2 (ja) * 1991-09-12 2002-07-02 ソニー株式会社 信号処理用プロセッサ
EP1311945A1 (en) 2000-08-22 2003-05-21 Jean-Paul Theis A configurable register file with multi-range shift register support
IL145245A0 (en) * 2001-09-03 2002-06-30 Jtc 2000 Dev Delaware Inc System and method including vector-matrix multiplication
US7284113B2 (en) * 2003-01-29 2007-10-16 Via Technologies, Inc. Synchronous periodical orthogonal data converter
GB2399900B (en) * 2003-03-27 2005-10-05 Micron Technology Inc Data reording processor and method for use in an active memory device
US8155113B1 (en) 2004-12-13 2012-04-10 Massachusetts Institute Of Technology Processing data in a parallel processing environment
JP2007280297A (ja) * 2006-04-11 2007-10-25 Seiko Epson Corp プロセッサ、レジスタファイル回路、集積回路装置、マイクロコンピュータ及び電子機器
US8984043B2 (en) * 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
EP2953792B1 (en) 2013-02-05 2019-03-20 3M Innovative Properties Company Graphic article
US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
JP6253514B2 (ja) * 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
GB2540940B (en) * 2015-07-31 2018-01-03 Advanced Risc Mach Ltd An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
US20170371657A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Scatter to gather operation
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
AU2019257260A1 (en) 2020-10-01
MX2020010916A (es) 2020-11-09
CA3096443A1 (en) 2019-10-24
EP3785112A1 (en) 2021-03-03
SG11202009936XA (en) 2020-11-27
IL278050B1 (en) 2023-07-01
IL278050A (en) 2020-11-30
EP3785112B1 (en) 2022-03-16
CN112005214B (zh) 2024-02-20
IL278050B2 (en) 2023-11-01
US10795678B2 (en) 2020-10-06
US20190324748A1 (en) 2019-10-24
AU2019257260B2 (en) 2023-09-28
PH12020551746A1 (en) 2021-07-26
KR20210002495A (ko) 2021-01-08
WO2019204068A1 (en) 2019-10-24
JP2021522630A (ja) 2021-08-30
JP7262569B2 (ja) 2023-04-21
CN112005214A (zh) 2020-11-27

Similar Documents

Publication Publication Date Title
BR112020019457A2 (pt) Multiplicador de matriz-vetor com um arquivo registrador de vetor que compreende uma memória com múltiplas portas
US11151445B2 (en) Neural network processor with a window expander circuit
CN110998570B (zh) 具有带有块浮点处理的矩阵矢量单元的硬件节点
US11237880B1 (en) Dataflow all-reduce for reconfigurable processor systems
US11847395B2 (en) Executing a neural network graph using a non-homogenous set of reconfigurable processors
US11714780B2 (en) Compiler flow logic for reconfigurable architectures
US11816560B2 (en) Performance estimation-based resource allocation for reconfigurable architectures
US10877812B2 (en) Hardware environment and method of performing matrix multiplication in artificial intelligence applications
US20210312266A1 (en) Deep neural network accelerator with independent datapaths for simultaneous processing of different classes of operations
US20210209450A1 (en) Compressed weight distribution in networks of neural processors
US20170193351A1 (en) Methods and systems for vector length management
US11580397B2 (en) Tensor dropout using a mask having a different ordering than the tensor
US20210232902A1 (en) Data Flow Architecture for Processing with Memory Computation Modules
TWI784845B (zh) 對可重配置處理器之資料流功能卸載
US11328209B1 (en) Dual cycle tensor dropout in a neural network
RU2795887C2 (ru) Матрично-векторный умножитель с набором регистров для хранения векторов, содержащим многопортовую память

Legal Events

Date Code Title Description
B350 Update of information on the portal [chapter 15.35 patent gazette]