BR102021001391A2 - Aceleração por multiplicação matricial esparsa escalável com o uso de arranjos sistólicos com entradas de retroalimentação - Google Patents

Aceleração por multiplicação matricial esparsa escalável com o uso de arranjos sistólicos com entradas de retroalimentação Download PDF

Info

Publication number
BR102021001391A2
BR102021001391A2 BR102021001391-5A BR102021001391A BR102021001391A2 BR 102021001391 A2 BR102021001391 A2 BR 102021001391A2 BR 102021001391 A BR102021001391 A BR 102021001391A BR 102021001391 A2 BR102021001391 A2 BR 102021001391A2
Authority
BR
Brazil
Prior art keywords
pipeline
memory
graphics
processing
logic
Prior art date
Application number
BR102021001391-5A
Other languages
English (en)
Inventor
Subramaniam Maiyuran
Varghese George
Supratim Pal
Ashutosh Garg
Darin Starkey
Jorge PARRA
Durgesh Borkar
Chandra Gurram
Shubra Marwaha
Original Assignee
Intel Corporation
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/913,800 external-priority patent/US11204977B2/en
Application filed by Intel Corporation filed Critical Intel Corporation
Publication of BR102021001391A2 publication Critical patent/BR102021001391A2/pt

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Neurology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

aceleração por multiplicação matricial esparsa escalável com o uso de arranjos sistólicos com entradas de retroalimentação. trata-se de um dispositivo de acelerador que inclui uma interface de hospedeiro, uma interconexão de malha acoplada à interface de hospedeiro e um ou mais blocos de hardware acoplados à interconexão de malha, em que o um ou mais blocos de hardware de aceleração por multiplicação matricial esparsa incluem um arranjo sistólico com entradas de retroalimentação.

Description

ACELERAÇÃO POR MULTIPLICAÇÃO MATRICIAL ESPARSA ESCALÁVEL COM O USO DE ARRANJOS SISTÓLICOS COM ENTRADAS DE RETROALIMENTAÇÃO REFERÊNCIA CRUZADA
[0001] Este pedido reivindica prioridade ao Pedido de Patente Provisório Indiano sob n° 202041019059, depositado em 5 de maio de 2020, o que é incorporado aqui no presente documento a título de referência.
HISTÓRICO
[0002] A multiplicação de matriz sistólica usada em cargas de trabalho de aprendizado de máquina tem uma porcentagem significativa de zeros (cargas de trabalho de dados esparsos). A multiplicação desses zeros pode ser ignorada e, portanto, o desempenho geral melhorado. As arquiteturas sistólicas atuais podem fornecer suporte para esparsidade nas cargas de trabalho, mas essas arquiteturas podem não escalar normalmente.
BREVE DESCRIÇÃO DOS DESENHOS
[0003] Desse modo, a maneira na qual os recursos citados acima das presentes modalidades podem ser entendidos em detalhes, uma descrição mais particular das modalidades, brevemente resumida acima, pode ser obtida em referência às modalidades, algumas das quais são ilustradas nos desenhos anexos. No entanto, deve ser observado que os desenhos anexos ilustram apenas modalidades típicas e, portanto, não devem ser considerados limitantes ao seu escopo.
[0004] A Figura 1 é um diagrama de blocos de um sistema de processamento de acordo com uma modalidade;
[0005] As Figuras 2A a 2D ilustram sistemas de computação e processadores gráficos fornecidos por modalidades descritas no presente documento;
[0006] As Figuras 3A a 3C ilustram diagramas de blocos de arquiteturas de processador gráfico e acelerador de computação adicionais fornecidas através de modalidades descritas no presente documento;
[0007] A Figura 4 é um diagrama de blocos de um motor de processamento gráfico 410 de um processador gráfico de acordo com algumas modalidades;
[0008] As Figuras 5A e 5B ilustram lógica de execução de encadeamento que inclui um arranjo de elementos de processamento empregados em um núcleo de processador gráfico de acordo com modalidades descritas no presente documento;
[0009] A Figura 6 ilustra uma unidade de execução adicional, de acordo com uma modalidade.
[0010] A Figura 7 é um diagrama de blocos que ilustra formatos de instrução de processador gráfico de acordo com algumas modalidades;
[0011] A Figura 8 é um diagrama de blocos de um processador gráfico de acordo com outra modalidade;
[0012] As Figuras 9A a 9B ilustram um formato de comando de processador gráfico e sequência de comandos, de acordo com algumas modalidades;
[0013] A Figura 10 ilustra uma arquitetura de software gráfico exemplificativa para um sistema de processamento de dados de acordo com algumas modalidades;
[0014] A Figura 11A é uma diagrama de blocos que ilustra um sistema de desenvolvimento de núcleo de IP, de acordo com uma modalidade;
[0015] A Figura 11B ilustra uma vista lateral de corte transversal de um conjunto de pacote de circuito integrado, de acordo com algumas modalidades descritas no presente documento;
[0016] A Figura 11C ilustra um conjunto de pacote que inclui múltiplas unidades de chiplets de lógica de hardware conectados a um substrato;
[0017] A Figura 11D ilustra um conjunto de pacotes que inclui chiplets intercambiáveis, de acordo com uma modalidade;
[0018] A Figura 12 é um diagrama de blocos que ilustra um sistema exemplificativo em um circuito integrado de chip que pode ser fabricado com uso de um ou mais núcleos de IP, de acordo com uma modalidade.
[0019] As Figuras 13A a 13B são diagramas de blocos que ilustram processadores gráficos exemplificativos para uso dentro de um SoC, de acordo com modalidades descritas no presente documento.
[0020] A Figura 14 é um diagrama de blocos de um sistema de processamento de dados acordo com uma modalidade;
[0021] A Figura 15 ilustra uma operação matricial realizada por um pipeline de instrução, de acordo com uma modalidade;
[0022] A Figura 16 ilustra um arranjo sistólico de circuitos de multiplicadores/somadores organizados de modo em pipeline;
[0023] As Figuras 17A a 17B ilustram o uso de um arranjo sistólico de quatro profundidades para computar um arranjo equivalente de oito estágios sistólicos;
[0024] As Figuras 18A a 18B mostram diagramas de tempo de arquiteturas sistólicas;
[0025] A Figura 19 ilustra um acelerador por multiplicação matricial de dois caminhos em que cada caminho tem uma profundidade de quatro estágios;
[0026] A Figura 20 ilustra um acelerador por multiplicação matricial de quatro caminhos em que cada caminho tem uma profundidade de dois estágios.
[0027] A Figura 21 ilustra um acelerador por multiplicação matricial esparsa escalonável usando-se arranjos sistólicos com entradas de retroalimentação;
[0028] A Figura 22 ilustra entradas de Src2 incluindo dados esparsos;
[0029] A Figura 23 ilustra um acelerador por multiplicação matricial esparsa escalonável usando-se arranjos sistólicos com entradas e saídas de retroalimentação em cada estágio;
[0030] A Figura 24 ilustra um método para realizar operações em um acelerador por multiplicação matricial esparsa escalonável descrito no presente documento;
[0031] A Figura 25 ilustra um método para realizar uma operação de multiplicação de matriz usando-se uma matriz de entrada de Src2 esparsa; e
[0032] A Figura 26 é um diagrama de blocos de um dispositivo de computação que inclui um processador gráfico, de acordo com uma modalidade.
DESCRIÇÃO DETALHADA
[0033] São descritos no presente documento dispositivos, sistemas e métodos para habilitar a aceleração por multiplicação matricial esparsa escalonável usando-se arranjos sistólicos com entradas de retroalimentação.
[0034] Para propósitos de explicação, inúmeros detalhes específicos são apresentados para fornecer uma compreensão meticulosa das várias modalidades descritas abaixo. Entretanto, será evidente para um indivíduo versado na técnica que as modalidades podem ser praticadas sem parte desses detalhes específicos. Em outros exemplos, estruturas e dispositivos bem conhecidos são mostrados em forma de diagrama de blocos para evitar obscurecer os princípios subjacentes, e para fornecer uma compreensão mais meticulosa de modalidades. Embora algumas das seguintes modalidades sejam descritas com referência a um processador gráfico, as técnicas e os ensinamentos descritos no presente documento podem ser aplicados a vários tipos de conjunto de circuitos ou dispositivos semicondutores, incluindo dispositivos de processamento de uso geral ou dispositivos de processamento gráfico. Referência no presente documento a "uma modalidade" indica que um recurso, estrutura ou característica particular descrita em conexão ou associação à modalidade pode ser incluída em pelo menos uma dessas modalidades. Entretanto, as ocorrências do sintagma "em uma modalidade" ao longo do presente relatório descritivo não necessariamente se referem à mesma modalidade.
[0035] Na descrição e reivindicações a seguir, os termos "acoplado(a)" e "conectado(a)", junto com seus derivados, podem ser usados. Deve-se compreender que esses termos não são concebidos como sinônimos entre si. "Acoplado" é usado para indicar que dois ou mais elementos, que podem estar ou não em contato físico direto ou em contato elétrico entre si, cooperam ou interagem entre si. "Conectado" é usado para indicar o estabelecimento de comunicação entre dois ou mais elementos que são acoplados entre si.
[0036] Na descrição que se segue, as Figuras 1 a 13A a 13B fornecem uma visão geral do sistema de processamento de dados exemplificativo e lógica do processador gráfico que incorpora ou se relaciona com as várias modalidades. As Figuras 14 a 26 fornecem detalhes específicos das várias modalidades. Alguns aspectos das seguintes modalidades são descritos com referência a um processador gráfico, enquanto outros aspectos são descritos em relação a um processador de uso geral, como uma unidade de processamento central (CPU). Técnicas e ensinamentos semelhantes podem ser aplicados a outros tipos de circuitos ou dispositivos semicondutores, incluindo, sem limitação, muitos processadores de núcleo integrado, um agrupamento de GPU ou uma ou mais instâncias de um arranjo de porta programável em campo (FPGA). Em geral, os ensinamentos são aplicáveis a qualquer processador ou máquina que manipule ou processe imagem (por exemplo, amostra, pixel), dados de vértice ou dados de geometria ou que execute operações de processamento paralelo para aprendizado de máquina e aplicativos de computação de alto desempenho.
Visão Geral do Sistema
[0037] A Figura 1 é um diagrama de blocos de um sistema de processamento 100, de acordo com uma modalidade. O sistema 100 pode ser usado em um sistema de computador de mesa de processador único, um sistema de estação de trabalho de múltiplos processadores, ou um sistema de servidor que tem um grande número de processadores 102 ou núcleos de processador 107. Em uma modalidade, o sistema 100 é uma plataforma de processamento incorporada dentro de um circuito integrado de sistema em um chip (SoC) para uso em dispositivo móvel, portátil, ou dispositivos embutidos tais como dentro de dispositivos de Internet-das-Coisas (IoT) com conectividade com fio ou sem fio a uma rede de área local ou ampla.
[0038] Em uma modalidade, o sistema 100 pode incluir, se acoplar com, ou ser integrado dentro de: uma plataforma de jogos com base em servidor; um console de jogos, incluindo um jogo e console de mídia; um console de jogos móvel, um console de jogo portátil ou um console de jogo online. Em algumas modalidades o sistema 100 é parte de um telefone móvel, telefone inteligente, dispositivo de computação tipo tablet ou dispositivo conectado à internet móvel tal como um computador tipo laptop com baixa capacidade de armazenamento interno. O sistema de processamento 100 também pode incluir, acoplar ou ser integrado dentro de: um dispositivo utilizável junto ao corpo, tal como um dispositivo utilizável junto ao corpo tipo relógio inteligente; óculos inteligente ou vestimenta aprimorada com recursos de realidade aumentada (AR) ou realidade virtual (VR) para fornecer saídas visuais, de áudio ou tácteis para suplementar experiências visuais, de áudio ou tácteis do mundo real ou de outro modo fornecer texto, áudio, gráfico, vídeo, imagens holográficas ou vídeo, ou retorno táctil; outro dispositivo de realidade aumentada (AR); ou outro dispositivo de realidade virtual (VR). Em algumas modalidades, o sistema de processamento 100 inclui ou é parte de uma televisão ou dispositivo decodificador. Em uma modalidade, o sistema 100 pode incluir, se acoplar ou ser integrado a um veículo de autocondução, tal como um ônibus, trator-reboque, carro, motor ou ciclo de energia elétrica, avião ou planador (ou qualquer combinação dos mesmos). O veículo de autocondução pode usar o sistema 100 para processar o ambiente detectado ao redor do veículo.
[0039] Em algumas modalidades, o um ou mais processadores 102 incluem, cada um, um ou mais núcleos de processador 107 para processar instruções que, quando executadas, realizam operações para software de sistema ou usuário. Em algumas modalidades, pelo menos um dentre o um ou mais núcleos de processador 107 é configurado para processar um conjunto de instruções específicas 109. Em algumas modalidades, o conjunto de instruções 109 pode facilitar a Computação de Conjunto de Instruções Complexa (CISC), Computação de Conjunto de Instruções Reduzida (RISC) ou computação por meio de uma Palavra de Instrução Muito Longa (VLIW). Um ou mais núcleos de processador 107 podem processar um conjunto de instruções diferentes 109, que pode incluir instruções para facilitar a emulação de outros conjuntos de instruções. O núcleo de processador 107 também pode incluir outros dispositivos de processamento, tal como um Processador de Sinal Digital (DSP).
[0040] Em algumas modalidades, o processador 102 inclui memória cache 104. Dependendo da arquitetura, o processador 102 pode ter um cache interno único ou múltiplos níveis de cache interno. Em algumas modalidades, a memória cache é compartilhada entre vários componentes do processador 102. Em algumas modalidades, o processador 102 também usa um cache externo (por exemplo, um cache de Nível-3 (L3) ou Cache de Último Nível (LLC)) (não mostrado) que pode ser compartilhado entre os núcleos de processador 107 que usam técnicas de coerência de cache conhecidas. Um arquivo de registro 106 pode ser adicionalmente incluído no processador 102 que pode incluir tipos diferentes de registros para armazenar tipos diferentes de dados (por exemplo, registros inteiros, registros de ponto flutuante, registros de situação e um registro indicador de instrução). Alguns registros podem ser registros de propósito geral, enquanto outros registros podem ser específicos para o projeto do processador 102.
[0041] Em algumas modalidades, um ou mais processadores 102 são acoplados a um ou mais barramentos de interface 110 para transmitir sinais de comunicação como endereço, dados, ou sinais de controle entre processador 102 e outros componentes no sistema 100. O barramento de interface 110, em uma modalidade, pode ser um barramento de processador, tal como uma versão do barramento de Interface de Mídia Direta (DMI). No entanto, barramentos de processador não se limitam ao barramento de DMI, e podem incluir um ou mais barramentos de Interconexão de Componente Periférico (por exemplo, PCI, PCI expressa), barramentos de memória ou outros tipos de barramentos de interface. Em uma modalidade, o processador (ou processadores) 102 inclui um controlador de memória integrado 116 e uma parte central de controlador de plataforma 130. O controlador de memória 116 facilita a comunicação entre um dispositivo de memória e outros componentes do sistema 100, embora a parte central de controlador de plataforma (PCH) 130 forneça conexões aos dispositivos de I/O por meio de um barramento de I/O local.
[0042] O dispositivo de memória 120 pode ser um dispositivo de memória de acesso aleatório dinâmica (DRAM), um dispositivo de memória de acesso aleatório estática (SRAM), um dispositivo de memória flash, dispositivo de memória de alteração de fase ou algum outro dispositivo de memória que tenha desempenho adequado para servir como memória de processo. Em uma modalidade, o dispositivo de memória 120 pode operar como memória de sistema para o sistema 100, para armazenar dados 122 e instruções 121 para uso quando o um ou mais processadores 102 executam um aplicativo ou processo. Controlador de memória 116 também se acopla a um processador gráfico externo opcional 118, que pode se comunicar com o um ou mais processadores gráficos 108 em processadores 102 para realizar operações de mídia e gráficas. Em algumas modalidades, operações de gráficos, mídia e/ou computação podem ser assistidas por um acelerador 112 que é um coprocessador que pode ser configurado para realizar um conjunto especializado de operações de gráficos, mídia ou computação. Por exemplo, em uma modalidade, o acelerador 112 é um acelerador por multiplicação matricial usado para otimizar aprendizado de máquina ou operações de computação. Em uma modalidade, o acelerador 112 é um acelerador de traçado de raio que pode ser usado para realizar operações de traçado de raio em conjunto com o processador gráfico 108. Em uma modalidade, um acelerador externo 119 pode ser usado no lugar do acelerador 112 ou em conjunto com o mesmo.
[0043] Em algumas modalidades um dispositivo de exibição 111 pode se conectar ao processador (ou processadores) 102. O dispositivo de exibição 111 pode ser um ou mais dentre um dispositivo de exibição interno, como em um dispositivo eletrônico móvel ou um dispositivo do tipo laptop ou um dispositivo de exibição externo afixado por meio de uma interface de exibição (por exemplo, DisplayPort, etc.). Em uma modalidade, o dispositivo de exibição 111 pode ser um visor de cabeça montada (HMD), tal como um dispositivo de exibição estereoscópico para uso em aplicativos de realidade virtual (VR) ou aplicativos de realidade aumentada (AR).
[0044] Em algumas modalidades, a parte central de controlador de plataforma 130 permite que periféricos se conectem ao dispositivo de memória 120 e processador 102 por meio de um barramento de I/O de alta velocidade. Os periféricos de I/O incluem, porém, sem limitação, um controlador de áudio 146, um controlador de rede 134, uma interface de firmware 128, um transceptor sem fio 126, sensores de toque 125, um dispositivo de armazenamento de dados 124 (por exemplo, memória não volátil, memória volátil, disco rígido, memória flash, NAND, NAND 3D, XPoint 3D, etc.). O dispositivo de armazenamento de dados 124 pode se conectar por meio de uma interface de armazenamento (por exemplo, SATA) ou por meio de um barramento periférico, tal como um barramento de Interconexão de Componente Periférico (por exemplo, PCI, PCI expressa). Os sensores de toque 125 podem incluir sensores de tela sensível ao toque, sensores de pressão, ou sensores de impressões digitais. O transceptor sem fio 126 pode ser um transceptor de WiFi, um transceptor de Bluetooth, ou um transceptor de rede móvel tal como um transceptor 3G, 4G, 5G, ou de Evolução a Longo Prazo (LTE). A interface de firmware 128 permite comunicação com firmware de sistema, e pode ser, por exemplo, uma interface de firmware extensível unificada (UEFI) . O controlador de rede 134 pode permitir uma conexão de rede a uma rede com fio. Em algumas modalidades, um controlador de rede de alto desempenho (não mostrado) se acopla ao barramento de interface 110. O controlador de áudio 146, em uma modalidade, é um controlador de áudio de alta definição de múltiplos canais. Em uma modalidade, o sistema 100 inclui um controlador I/O de legado opcional 140 para acoplar dispositivos de legado (por exemplo, Personal System 2 (PS/2)) ao sistema. O concentrador de controlador de plataforma 130 também pode se conectar a um ou mais dispositivos de entrada de conexão de controladores de Barramento Serial Universal (USB) 142, tais como combinações de teclado e mouse 143, uma câmera 144, ou outros dispositivos de entrada de USB.
[0045] Será verificado que o sistema 100 mostrado é exemplificador e não limitador, tendo em vista que outros tipos de sistemas de processamento de dados que são configurados de modo diferente também podem ser usados. Por exemplo, uma instância do concentrador de controlador de plataforma 130 e controlador de memória 116 pode ser integrada em um processador gráfico externo discreto, tal como o processador gráfico externo 118. Em uma modalidade, o concentrador de controlador de plataforma 130 e/ou controlador de memória 116 pode ser externo ao um ou mais processador (ou processadores) 102. Por exemplo, o sistema 100 pode incluir um controlador de memória externo 116 e concentrador de controlador de plataforma 130, que pode ser configurado como um concentrador de controlador de memória e concentrador de controlador periférico dentro de um chipset de sistema que está em comunicação com o processador (ou processadores) 102.
[0046] Por exemplo, placas de circuito ("sleds") podem ser usadas nas quais componentes tais como CPUs, memória, e outros componentes são colocados são projetados para desempenho térmico aumentado. Em alguns exemplos, componentes de processamento tais como os processadores são localizados em um lado de topo de um sled enquanto a memória próxima, tais como DIMMs, são localizadas em um lado de fundo do sled. Como resultado do fluxo de ar intensificado fornecido por esse projeto, os componentes podem operar em maiores frequências e níveis de potência do que em sistemas típicos, aumentando assim o desempenho. Além disso, os sleds são configurados para se encaixar cegamente com cabos de potência e comunicação de dados em uma prateleira, intensificando assim sua capacidade de ser rapidamente removidos, atualizados, reinstalados, e/ou substituídos. De modo similar, componentes individuais localizados nos sleds, tais como processadores, aceleradores, memória, e unidades de armazenamento de dados, são configurados para serem facilmente atualizados devido ao seu espaçamento aumentado um do outro. Na modalidade ilustrativa, os componentes incluem adicionalmente recursos de certificado de hardware para fornecer sua autenticidade.
[0047] Uma central de dados pode utilizar uma arquitetura de rede única ("malha") que suporta múltiplas outras arquiteturas de rede incluindo Ethernet e Omni-Path. Os sleds podem ser acoplados a comutadores por meio de fibras ópticas, que fornecem maior largura de banda e menor latência do que cabeamento de par torcido típico (por exemplo, Categoria 5, Categoria 5e, Categoria 6, etc.) . Devido à alta largura de banda, interconexões de baixa latência e arquitetura de rede, a central de dados pode, em uso, agrupar recursos, tal como memória, aceleradores (por exemplo, GPUs, aceleradores gráficos, FPGAs, ASICs, rede neural e/ou aceleradores de inteligência artificial, etc.), e unidades de armazenamento de dados que são fisicamente desintegrados, e fornecem os mesmos a recursos de computação (por exemplo, processadores) em base conforme necessário, permitindo que os recursos de computação acessem os recursos agrupados como se os mesmos fossem locais.
[0048] Um suprimento ou fonte de alimentação pode fornecer tensão e/ou corrente ao sistema 100 ou qualquer componente ou sistema descrito no presente documento. Em um exemplo, a fonte de alimentação inclui um adaptador de CA a CC (corrente alternada a corrente contínua) para conexão a uma tomada de parede. Tal potência de CA pode ser fonte de potência de energia renovável (por exemplo, potência solar). Em um exemplo, a fonte de potência inclui uma fonte de potência de CC, tal como um conversor externo de CA a CC. Em um exemplo, a fonte de potência ou fonte de alimentação inclui hardware de carregamento sem fio para carregamento por meio de proximidade a um campo de carregamento. Em um exemplo, a fonte de potência pode incluir uma bateria interna, suprimento de corrente alternada, fonte de alimentação com base em movimento, fonte de alimentação solar, ou fonte de célula de combustível.
[0049] As Figuras 2A a 2D ilustram sistemas de computação e processadores gráficos fornecidos pelas modalidades descritas no presente documento. Os elementos da Figura 2A a 2D que têm os mesmos números de referência (ou nomes) que os elementos de qualquer outra Figura no presente documento podem operar ou funcionar de qualquer maneira similar àquela descrita em outro lugar no presente documento, porém, sem limitação à mesma.
[0050] A Figura 2A é um diagrama de blocos de uma modalidade de um processador 200 que tem um ou mais núcleos de processador 202A a 202N, um controlador de memória integrado 214 e um processador gráfico integrado 208. O processador 200 pode incluir núcleos adicionais até e incluindo o núcleo adicional 202N representado pelas caixas com linha tracejada. Cada um dos núcleos de processador 202A-202N inclui uma ou mais unidades de cache interno 204A-204N. Em algumas modalidades, cada núcleo de processador também tem acesso a uma ou mais unidades de cache compartilhado 206. As unidades de cache interno 204A a 204N e as unidades de cache compartilhado 206 representam uma hierarquia de memória cache dentro do processador 200. A hierarquia de memória cache pode incluir pelo menos um nível de instrução e cache de dados dentro de cada núcleo de processador e um ou mais níveis de cache de nível intermediário compartilhado, tal como Nível 2 (L2), Nível 3 (L3), Nível 4 (L4) ou outros níveis de cache, em que o nível mais alto de cache antes de memória externa é classificado como o LLC. Em algumas modalidades, a lógica de coerência de cache mantém a coerência entre as várias unidades de cache 206 e 204A a 204N.
[0051] Em algumas modalidades, o processador 200 também pode incluir um conjunto de uma ou mais unidades de controlador de barramento 216 e um núcleo de agente de sistema 210. A uma ou mais unidades de controlador de barramento 216 gerenciam um conjunto de barramentos periféricos, tais como um ou mais barramentos de PCI ou PCI express. O núcleo de agente de sistema 210 fornece funcionalidade de gerenciamento para os vários componentes de processador. Em algumas modalidades, núcleo de agente de sistema 210 inclui um ou mais controladores de memória integrados 214 para gerenciar acesso a vários dispositivos de memória externa (não mostrados).
[0052] Em algumas modalidades, um ou mais dos núcleos de processador 202A a 202N incluem suporte para realização de encadeamento múltiplo simultâneo. Em tal modalidade, o núcleo de agente de sistema 210 inclui componentes para coordenar e operar núcleos 202A a 202N durante o processamento de múltiplos encadeamentos. O núcleo de agente de sistema 210 pode incluir adicionalmente uma unidade de controle de potência (PCU), que inclui lógica e componentes para regular o estado de potência de núcleos de processador 202A a 202N e processador gráfico 208.
[0053] Em algumas modalidades, o processador 200 inclui adicionalmente processador gráfico 208 para executar operações de processamento gráfico. Em algumas modalidades, o processador gráfico 208 se acopla ao conjunto de unidades de cache compartilhado 206 e ao núcleo de agente de sistema 210, o que inclui os um ou mais controladores de memória integrados 214. Em algumas modalidades, o núcleo de agente de sistema 210 também inclui um controlador de exibição 211 para acionar a saída de processador gráfico a um ou mais visores acoplados. Em algumas modalidades, o controlador de exibição 211 também pode ser um módulo separado acoplado ao processador gráfico por meio de pelo menos uma interconexão, oi pode ser integrado dentro do processador gráfico 208.
[0054] Em algumas modalidades, uma unidade de interconexão com base em anel 212 é usada para acoplar os componentes internos do processador 200. No entanto, uma unidade de interconexão alternativa pode ser usada, tal como uma interconexão de ponto a ponto, uma interconexão comutada ou outras técnicas, que incluem técnicas bem conhecidas na arte. Em algumas modalidades, o processador de gráficos 208 de acopla à interconexão de anel 212 por meio de um enlace de I/O 213.
[0055] O enlace de I/O exemplificativo 213 representa pelo menos um dentre múltiplas variedades de interconexões de I/O, que incluem uma interconexão de I/O em pacote que facilita a comunicação entre vários componentes de processador e um módulo de memória embutida de alto desempenho 218, tal como um módulo de eDRAM. Em algumas modalidades, cada um dos núcleos de processador 202A-202N e processador gráfico 208 pode usar módulos de memória embutida 218 como um Cache de Último Nível compartilhado.
[0056] Em algumas modalidades, núcleos de processador 202A-202N são núcleos homogêneos que executam o mesmo conjunto de instruções arquitetura. Em outra modalidade, os núcleos de processador 202A a 202N são heterogêneos em termos de arquitetura de conjunto de instruções (ISA), em que um ou mais dentre os núcleos de processador 202A a 202N executam um primeiro conjunto de instruções, enquanto pelo menos um dentre os outros núcleos executa um subconjunto do primeiro conjunto de instruções ou um conjunto de instruções diferente. Em uma modalidade, núcleos de processador 202A-202N são heterogêneos em termos de microarquitetura, em que um ou mais núcleos que têm um consumo de potência relativamente maior se acoplam a um ou mais núcleos de potência que têm um consumo de potência inferior. Em uma modalidade, núcleos de processador 202A-202N são heterogêneos em termos de capacidade computacional. Adicionalmente, o processador 200 pode ser implantado em um ou mais chips ou como um circuito integrado de SoC que tem os componentes ilustrados, além de outros componentes.
[0057] A Figura 2B é um diagrama de blocos de lógica de hardware de um núcleo de processador gráfico 219, de acordo com algumas modalidades descritas no presente documento. Elementos da Figura 2B que têm os mesmos numerais de referência (ou nomes) que os elementos de qualquer outra Figura no presente documento podem operar ou funcionar de qualquer maneira similar à descrita em qualquer ponto no presente documento, porém, sem limitação a isso. O núcleo de processador gráfico 219, algumas vezes denominado como uma fatia de núcleo, pode ser um ou múltiplos núcleos gráficos dentro de um processador gráfico modular. O núcleo de processador gráfico 219 é exemplificador de uma fatia de núcleo gráfico, e um processador gráfico conforme descrito no presente documento pode incluir múltiplas fatias de núcleo gráfico com base em envelope de potência e desempenho-alvo. Cada núcleo de processador gráfico 219 pode incluir um bloco de função fixa 230 acoplado aos múltiplos subnúcleos 221A a 221F, também denominados como subfatias, que incluem blocos modulares de propósito geral e lógica de função fixa.
[0058] Em algumas modalidades, o bloco de função fixo 230 inclui uma geometria/pipeline de função fixa 231 que pode ser compartilhada por todos os subnúcleos no núcleo de processador gráfico 219, por exemplo, em implantações de processador gráfico de desempenho inferior e/ou potência inferior. Em várias modalidades, o pipeline de geometria/função fixa 231 inclui um pipeline de função fixa 3D (por exemplo, pipeline de 3D 312 como na Figura 3A e na Figura 4, descritas abaixo) uma unidade de front-end de vídeo, um gerador de encadeamento e expedidor de encadeamento, e um gerenciador de armazenamento temporário de retorno unificado, que gerencia tampões de retorno unificado (por exemplo, armazenamento temporário de retorno unificado 418 na Figura 4, conforme descrito abaixo).
[0059] Em uma modalidade, o bloco de função fixa 230 também inclui uma interface de SoC de gráficos 232, um microcontrolador de gráficos 233, e um pipeline de mídia 234. A interface de SoC de gráficos 232 fornece uma interface entre o núcleo de processador gráfico 219 e outros núcleos de processador dentro de um sistema em um circuito integrado de chip. O microcontrolador de gráficos 233 é um subprocessador programável que é configurável para gerenciar diversas funções do núcleo de processador gráfico 219, incluindo envio de encadeamento, agendamento, e preempção. O pipeline de mídia 234 (por exemplo, pipeline de mídia 316 da Figura 3 e da Figura 4) inclui lógica para facilitar a decodificação, codificação, pré-processamento, e/ou pós-processamento de dados multimídia, incluindo dados de imagem e vídeo. O pipeline de mídia 234 implanta operações de mídia por meio de solicitações para computar ou amostrar lógica dentro dos subnúcleos 221-221F.
[0060] Em uma modalidade, a interface de SoC 232 possibilita que o núcleo de processador gráfico 219 se comunique com núcleos de processador de aplicativo de propósito geral (por exemplo, CPUs) e/ou outros componentes dentro de um SoC, incluindo elementos de hierarquia de memória, como uma memória cache de último nível compartilhada, a RAM de sistema, e/ou DRAM em chio ou em pacote embutida. A interface de SoC 232 também pode possibilitar comunicação com dispositivos de função fixa dentro do SoC, como pipelines de imageamento de câmera, e possibilita o uso de e/ou implanta atômicas de memória global que podem ser compartilhadas entre o núcleo de processador gráfico 219 e CPUs dentro do SoC. A interface de SoC 232 também pode implantar controles de gerenciamento de potência para o núcleo de processador gráfico 219 e possibilitar uma interface entre um domínio de relógio do núcleo de gráfico 219 e outros domínios de relógio dentro do SoC. Em uma modalidade, a interface de SoC 232 possibilita o recebimento de armazenamentos temporários de comando de um gerador de fluxo contínuo de comando e despachante de encadeamento global que são configurados para fornecer comandos e instruções para cada um dentre um ou mais núcleos de gráficos dentro de um processador gráfico. Os comandos e instruções podem ser despachados para o pipeline de mídia 234, quando operações de mídia devem ser realizadas, ou uma geometria e pipeline de função fixa (por exemplo, geometria e pipeline de função fixa 231, geometria e pipeline de função fixa 237) quando operações de processamento de gráficos devem ser realizadas.
[0061] O microcontrolador de gráficos 233 pode ser configurado para executar diversas tarefas de agendamento e gerenciamento para o núcleo de processador gráfico 219. Em uma modalidade, o microcontrolador de gráficos 233 pode executar agendamento de carga de trabalho de computação e/ou gráficos nos diversos mecanismos paralelos de gráficos dentro de matrizes de unidade de execução (EU) 222A-222F, 224A-224F dentro dos subnúcleos 221A-221F. Nesse modelo de agendamento, o software hospedeiro que é executado em um núcleo de CPU de um SoC, incluindo o núcleo de processador gráfico 219 pode submeter cargas de trabalho, uma dentre múltiplas campainhas de processador de gráfico, o que invoca uma operação de agendamento no motor gráfico apropriado. As operações de agendamento incluem determinar qual carga de trabalho executar a seguir, submeter uma carga de trabalho a um transmissor contínuo de comando, pré-esvaziar cargas de trabalho existentes que são executadas em um motor, monitorar o progresso de uma carga de trabalho e notificar o software hospedeiro quando uma carga de trabalho está concluída. Em uma modalidade, o microcontrolador de gráficos 233 também pode facilitar estados ociosos ou de baixa potência para o núcleo de processador gráfico 219, fornecendo o núcleo de processador gráfico 219 com a capacidade de salvar e restaurar registros dentro do núcleo de processador gráfico 219 através de transições de estado de baixa potência independentemente do sistema operacional e/ou software acionador de gráficos no sistema.
[0062] O núcleo de processador gráfico 219 pode ter mais ou menos do que os subnúcleos ilustrados 221A a 221F, até N subnúcleos modulares. Para cada conjunto de N subnúcleos, o núcleo de processador gráfico 219 também pode incluir lógica de função compartilhada 235, memória compartilhada e/ou em cache 236, um pipeline de geometria/função fixa 237, assim como lógica de função fixa adicional 238 para acelerar vários gráficos e computar operações de processamento. A lógica de função compartilhada 235 pode incluir unidades lógicas associadas à lógica de função compartilhada 420 da Figura 4 (por exemplo, lógica de comunicação de interencadeamento, amostrador e/ou matemática) que pode ser compartilhada por cada N subnúcleos dentro do núcleo de processador gráfico 219. A memória compartilhada e/ou em cache 236 pode ser um cache de último nível para o conjunto de N subnúcleos 221A a 221F dentro do núcleo de processador gráfico 219, e também pode servir como memória compartilhada que é acessível por múltiplos subnúcleos. O pipeline de geometria/função fixa 237 pode ser incluído em vez do pipeline de geometria/função fixa 231 dentro do bloco de função fixa 230 e pode incluir as mesmas unidades lógicas ou unidades lógicas similares.
[0063] Em uma modalidade, o núcleo de processador gráfico 219 inclui lógica de função fixa adicional 238 que pode incluir várias lógicas de aceleração de função fixa para uso pelo núcleo de processador gráfico 219. Em uma modalidade, a lógica de função fixa adicional 238 inclui um pipeline de geometria adicional para uso em sombreamento somente de posição. Em sombreamento somente em posição, dois pipelines de geometria existem, o pipeline de geometria total dentro do pipeline de geometria/função fixa 238, 231, e um pipeline de seleção, que é um pipeline de geometria adicional que pode ser incluído dentro da lógica de função fixa adicional 238. Em uma modalidade, o pipeline de seleção é uma versão reduzida do pipeline de geometria total. O pipeline total e o pipeline de seleção podem executar instâncias diferentes da mesma aplicação, sendo que cada instância tem um contexto separado. Posicionar somente sombreamento pode ocultar longas execuções de seleção de triângulos descartados, permitindo que sombreamento seja concluído mais cedo em algumas instâncias. Por exemplo, e em uma modalidade, o pipeline de seleção lógica dentro da lógica de função fixa adicional 238 pode executar sombreadores de posição em paralelo com a aplicação principal e geralmente gera resultados críticos mais rapidamente do que o pipeline total, visto que o pipeline de seleção coleta e sombreia somente o atributo de posição dos vértices, sem realizar varredura e renderização dos pixels ao armazenamento temporário de quadro. O pipeline de seleção pode usar os resultados críticos gerados para computar informações de visibilidade para todos os triângulos sem relação a se aqueles triângulos são selecionados. O pipeline total (que nessa instância, pode ser denominada como um pipeline de reprodução) pode consumir as informações de visibilidade para saltar os triângulos selecionados para sombrear somente os triângulos visíveis que são finalmente passados para a fase de varredura.
[0064] Em uma modalidade, a lógica de função fixa adicional 238 também pode incluir lógica de aceleração de aprendizado por máquina, tal como lógica de multiplicação de matriz de função fixa, para implantação incluindo otimizações para treinamento ou interferência de aprendizado por máquina.
[0065] Dentro de cada subnúcleo gráfico 221A a 221F inclui um conjunto de recursos de execução que pode ser usado para realizar operações gráficas, mídia e operações em resposta a solicitações por pipeline gráfico, pipeline de mídia ou programas sombreadores. Os subnúcleos gráficos 221A a 221F incluem múltiplos arranjos de EU 222A a 222F, 224A a 224F, expedição de encadeamento e lógica de comunicação interencadeamento (TD/IC) 223A-223F, um amostrador 3D (por exemplo, textura) 225A a 225F, um amostrador de mídia 206A a 206F, um processador de sombreador 227A a 227F, e memória local compartilhada (SLM) 228A a 228F. Os arranjos de EU 222A a 222F, 224A a 224F incluem, cada um, múltiplas unidades de execução, que são unidades de processamento gráfico de propósito geral com capacidade de realizar operações de lógica de ponto de flutuação e número inteiro/ponto fixo em serviço de uma operação gráfica, mídia ou computação, incluindo programas sombreadores gráficos, mídia, ou computação. A lógica de TD/IC 223A a 223F realiza expedição de encadeamento local e operações de controle de encadeamento para as unidades de execução dentro de um subnúcleo e facilita a comunicação entre encadeamentos que executa nas unidades de execução do subnúcleo. O amostrador 3D 225A a 225F pode ler textura ou outros dados relacionados a gráficos 3D na memória. O amostrador 3D pode ler dados de textura de modo diferente com base em um estado de amostra configurada e o formato de textura associado a uma dada textura. O amostrador de mídia 206A a 206F pode realizar operações de leitura similares com base no tipo e formato associados aos dados de mídia. Em uma modalidade, cada subnúcleo gráfico 221A a 221F pode incluir alternativamente um amostrador 3D e de mídia unificados. encadeamentos em execução nas unidades de execução dentro de cada um dos subnúcleos 221A a 221F pode fazer uso de memória local compartilhada 228A a 228F dentro de cada subnúcleo, para permitir encadeamentos em execução dentro de um grupo de encadeamentos para execução com uso de um agrupamento comum de memória no chip.
[0066] A Figura 2C ilustra uma unidade de processamento gráfico (GPU) 239 que inclui conjuntos dedicados de recursos de processamento gráfico dispostos em grupos de múltiplos núcleos 240A a 240N. Embora os detalhes de somente um único grupo de múltiplos núcleos 240A sejam fornecidos, será verificado que os outros grupos de múltiplos núcleos 240B a 240N podem ser equipados com os mesmos conjuntos ou conjuntos similares de recursos de processamento gráfico.
[0067] Conforme ilustrado, um grupo de múltiplos núcleos 240A pode incluir um conjunto de núcleos gráficos 243, um conjunto de núcleos de tensor 244, e um conjunto de núcleos de traçado de raio 245. Um programador/expedidor 241 programa e expede os encadeamentos gráficos para execução nos vários núcleos 243, 244, 245. Um conjunto de arquivos de registro 242 armazena valores de operando usados pelos núcleos 243, 244, 245 ao executar os encadeamentos gráficos. Os mesmos podem incluir, por exemplo, registros de número inteiro para armazenar valores de número inteiro, registros de ponto de flutuação para armazenar valores de ponto de flutuação, registros de vetor para armazenar elementos de dados empacotados (número inteiro e/ou elementos de dados de ponto de flutuação) e registros de peça para armazenar valores de tensor/matriz. Em uma modalidade, os registros de bloco de lado a lado são implantados como conjuntos combinados de registros de vetor.
[0068] Um ou mais caches de nível 1 (L1) combinados e unidades de memória compartilhadas 247 armazenam dados de gráficos, tais como dados de textura, dados de vértice, dados de pixel, dados de raio, dados de volume delimitador, etc., localmente dentro de cada grupo de múltiplos núcleos 240A. Uma ou mais unidades de textura 247 também podem ser usadas para realizar operações de texturização, tais como mapeamento e amostragem de textura. Um cache de Nível 2 (L2) 253 compartilhado por todos ou por um subconjunto dos grupos de múltiplos núcleos 240A a 240N armazena dados de gráficos e/ou instruções para múltiplos encadeamentos de gráficos simultâneos. Conforme ilustrado, o cache L2 253 pode ser compartilhado através de uma pluralidade de grupos de múltiplos núcleos 240A a 240N. Um ou mais controladores de memória 248 acoplam a GPU 239 a uma memória 249 que pode ser uma memória de sistema (por exemplo, DRAM) e/ou uma memória de gráficos dedicada (por exemplo, memória GDDR6).
[0069] O conjunto de circuitos de entrada/saída (I/O) 250 acopla a GPU 239 a um ou mais dispositivos de I/O 252, como processadores de sinal digital (DSPs), controladores de rede ou dispositivos de entrada de usuário. Uma interconexão em chip pode ser usada para acoplar os dispositivos de I/O 252 à GPU 239 e à memória 249. Uma ou mais unidades de gerenciamento de memória de I/O (IOMMUs) 251 do conjunto de circuitos de I/O 250 acoplam os dispositivos de I/O 252 diretamente à memória de sistema 249. Em uma modalidade, a IOMMU 251 gerencia múltiplos conjuntos de tabelas de páginas para mapear endereços virtuais para endereços físicos na memória de sistema 249. Nessa modalidade, os dispositivos de I/O 252, a CPU (ou CPUs) 246 e a GPU (ou GPUs) 239 podem compartilhar o mesmo espaço de endereço virtual.
[0070] Em uma implantação, a IOMMU 251 suportar virtualização. Nesse caso, a mesma pode gerenciar um primeiro conjunto de tabelas de páginas para mapear endereços virtuais de gráficos/visitante para endereços físicos de gráficos/visitante e um segundo conjunto de tabelas de páginas para mapear os endereços físicos de gráficos/visitante para endereços físicos hospedeiro/sistema (por exemplo, dentro da memória de sistema 249). Os endereços de base de cada um dentre o primeiro e o segundo conjuntos de tabelas de páginas podem ser armazenados em registros de controle e desativados em uma comutação de contexto (por exemplo, de modo que o novo contexto seja dotado de acesso ao conjunto relevante de tabelas de páginas). Embora não ilustrado na Figura 2C, cada um dos núcleos 243, 244, 245 e/ou grupos de múltiplos núcleos 240A a 240N pode incluir armazenamentos temporários laterais de tradução (TLBs) para armazenar em cache traduções de convidado virtual para convidado físico, traduções de convidado físico para hospedeiro físico, e traduções de convidado virtual para hospedeiro físico.
[0071] Em uma modalidade, as CPUs 246, GPUs 239, e dispositivos de I/O 252 são integrados em um chip semicondutor único e/ou pacote de chip. A memória ilustrada 249 pode ser integrada no mesmo chip ou pode ser acoplada aos controladores de memória 248 por meio de uma interface sem chip. Em uma implantação, a memória 249 compreende memória GDDR6 que compartilha o mesmo espaço de endereço virtual como outras memórias de nível de sistema físico, embora os princípios subjacentes da invenção não são limitados a essa implantação específica.
[0072] Em uma modalidade, os núcleos de tensor 244 incluem uma pluralidade de unidades de execução especificamente projetadas para executar operações de matriz, que são a operação de computação fundamental usada para executar operações de aprendizado profundo. Por exemplo, operações de multiplicação matricial simultâneas podem ser usadas para treinamento e inferência de rede neural. Os núcleos de tensor 244 podem realizar processamento matricial com o uso de uma variedade de precisões de operando que incluem ponto de flutuação de precisão único (por exemplo, 32 bits), meio ponto de flutuação de precisão (por exemplo, 16 bits), palavras inteiras (16 bits), bytes (8 bits) e meio byte (4 bits). Em uma modalidade, uma implantação de rede neural extrai recursos de cada cena renderizada, que combina, potencialmente, detalhes dos múltiplos quadros, para construir uma imagem final de alta qualidade.
[0073] Em implantações de aprendizado profundo, trabalho de multiplicação matricial paralelo pode ser programado para execução nos núcleos de tensor 244. O treinamento de redes neurais, em particular, exige operações de produto escalar matricial de número significativo. De modo a processar uma formulação de produto interno de uma multiplicação matricial N x N x N, os núcleos de tensor 244 podem incluir pelo menos N elementos de processamento de produto escalar. Antes da multiplicação matricial começar, uma matriz inteira é carregada em registros de bloco de lado a lado e pelo menos uma coluna de uma segunda matriz é carregada em cada ciclo para N ciclos. Em cada ciclo, há N produtos escalares que são processados.
[0074] Elementos matriciais podem ser armazenados em diferentes precisões dependendo da implantação particular que inclui palavras de 16 bits, bytes de 8 bits (por exemplo, INT8) e meio byte de 4 bits (por exemplo, INT4). Modos de precisão diferentes pode, ser especificados para os núcleos de tensor 244 para garantir que a precisão mais eficaz seja usada para diferentes cargas de trabalho (por exemplo, como cargas de trabalho de inferência que podem tolerar quantização para bytes e meio byte).
[0075] Em uma modalidade, os núcleos de traçado de raios 245 aceleram operações de traçado de raios tanto para implantações de traçado de raios em tempo não real quanto traçado de raios em tempo real. Em particular, os núcleos de traçado de raios 245 incluem conjunto de circuitos de interseção/travessia de raio para executar travessia de raio com o uso de hierarquias de volume limitantes (BVHs) e interseções de identificação entre raios e primitivos envolvidos dentro dos volumes de BVH. Os núcleos de traçado de raios 245 também podem incluir conjuntos de circuito para executar teste e seleção de profundidade (por exemplo, com o uso de um armazenamento temporário Z ou disposição similar). Em uma implantação, os núcleos de traçado de raios 245 realizam operações transversais e de interseção em consonância com as técnicas de eliminação de ruído de imagem descritas no presente documento, pelo menos uma porção da qual pode ser executada nos núcleos de tensor 244. Por exemplo, em uma modalidade, os núcleos de tensor 244 implantam uma rede neural de aprendizado profundo para executar eliminação de ruído de quadros gerados pelos núcleos de traçado de raios 245. No entanto, a CPU (ou CPUs) 246, núcleos de gráficos 243, e/ou núcleos de traçado de raios 245 também podem implantar todos ou uma porção dos algoritmos de eliminação de ruído e/ou aprendizado profundo.
[0076] Adicionalmente, conforme descrito acima, uma abordagem distribuída para retirada de ruído pode ser empregada na qual a GPU 239 está em um dispositivo de computação acoplado a outros dispositivos de computação através de uma rede ou interconexão de alta velocidade. Nessa modalidade, os dispositivos de computação interconectados compartilham dados de aprendizado/treinamento de rede neural para melhorar a velocidade com a qual o sistema geral aprende a realizar eliminação de ruído para diferentes tipos de quadros de imagem e/ou diferentes aplicações de gráficos.
[0077] Em uma modalidade, os núcleos de traçado de raio 245 processam todas as interseções de travessia de BVH e primitivo de raio, o que evita que os núcleos de gráficos 243 sejam sobrecarregados com centenas de instruções por raio. Em uma modalidade, cada núcleo de traçado de raio 245 inclui um primeiro conjunto de conjunto de circuitos especializado para realizar testes de caixa delimitadora (por exemplo, para operações de travessia) e um segundo conjunto de conjunto de circuitos especializado para realizar os testes de interseção de raio e triângulo (por exemplo, raios de interseção que foram atravessados). Assim, em uma modalidade, o grupo de múltiplos núcleos 240A pode simplesmente lançar uma sonda de raio, e os núcleos de traçado de raio 245 realizam, independentemente, travessia e interseção de raio e retornam dados de impacto (por exemplo, um impacto, nenhum impacto, múltiplos impactos, etc.) ao contexto de encadeamento. Os outros núcleos 243, 244 são liberados para realizar outros gráficos ou computar trabalho enquanto os núcleos de traçado de raio 245 realizam as operações de travessia e interseção.
[0078] Em uma modalidade, cada núcleo de traçado de raio 245 inclui uma unidade de travessia para realizar operações de teste de BVH e uma unidade de interseção que realiza testes de interseção de primitivo de raio. A unidade de interseção gera uma resposta de "impacto", "nenhum impacto", ou "múltiplos impactos", que é fornecida ao encadeamento apropriado. Durante as operações de travessia e interseção, os recursos de execução dos outros núcleos (por exemplo, núcleos de gráficos 243 e núcleos de tensor 244) são liberados para realizar outras formas de trabalho de gráficos.
[0079] Em uma modalidade particular descrita abaixo, uma abordagem de rasterização/traçado de raio híbrida é usada, na qual o trabalho é distribuído entre os núcleos de gráficos 243 e os núcleos de traçado de raio 245.
[0080] Em uma modalidade, os núcleos de traçado de raio 245 (e/ou outros núcleos 243, 244) incluem suporte de hardware para um conjunto de instruções de traçado de raio, tal como Traçado de Raio DirectX da Microsoft (DXR) que inclui um comando DispatchRays, assim como geração de raio, impacto mais próximo, qualquer impacto e sombreadores de perda, que permitem a atribuição de conjuntos de sombreadores únicos e texturas para cada objeto. Outra plataforma de traçado de raio que pode ser sustentada pelos núcleos de traçado de raio 245, núcleos de gráficos 243 e núcleos de tensor 244 é Vulkan 1.1.85. No entanto, nota-se que os princípios subjacentes da invenção não se limitam a nenhuma ISA de traçado de raio particular.
[0081] Em geral, os vários núcleos 245, 244, 243 podem sustentar um conjunto de instruções de traçado de raio que inclui instruções/funções para geração de raio, impacto mais próximo, qualquer impacto, interseção de primitivo de raio, construção de caixa delimitadora hierárquica e por primitivo, perda, visita e exceções. Mais especificamente, uma modalidade inclui instruções de traçado de raio para realizar as seguintes funções:
Geração de Raio - Instruções de geração de raio podem ser executadas para cada pixel, amostra, ou outra atribuição de trabalho definida pelo usuário.
Ocorrência Mais Próxima - Uma instrução de ocorrência mais próxima pode ser executada para localizar o ponto de interseção mais próximo de um raio com primitivos dentro de uma cena.
Qualquer Ocorrência - Uma instrução de qualquer ocorrência identifica múltiplas interseções entre um raio e primitivos dentro de uma cena, potencialmente para identificar um novo ponto de interseção mais próximo.
Interseção - Uma instrução de interseção realiza um teste de interseção de raios primitivo e emite um resultado.
Construção de Caixa Delimitadora Por Primitivo -Essa instrução constrói uma caixa delimitadora ao redor de um dado primitivo ou grupo de primitivos (por exemplo, ao construir uma nova BVH ou outra estrutura de dados de aceleração).
Perda - Indica que um raio erra toda a geometria dentro de uma cena, ou região especificada de uma cena.
Visita - Indica os volumes filhos que um raio atravessará.
Exceções - Inclui vários tipos de manipuladores de exceção (por exemplo, invocados para várias condições de erro).
[0082] A Figura 2D é um diagrama de blocos de unidade de processamento gráfico de propósito geral (GPGPU) 270 que podem ser configurados como um processador gráfico e/ou acelerador de computação, de acordo com modalidades descritas no presente documento. A GPGPU 270 pode se interconectar com processadores hospedeiros (por exemplo, uma ou mais CPU (ou CPUs) 246) e memória 271, 272 por meio de um ou mais sistemas e/ou barramentos de memória. Em uma modalidade, a memória 271 é a memória de sistema que pode ser compartilhada com a uma ou mais CPU (ou CPUs) 246, enquanto a memória 272 é memória de dispositivo que é dedicada à GPGPU 270. Em uma modalidade, componentes dentro da GPGPU 270 e memória de dispositivo 272 podem ser mapeados em endereços de memória que são acessíveis a uma ou mais CPU (ou CPUs) 246. O acesso à memória 271 e 272 pode ser facilitado por meio de um controlador de memória 268. Em uma modalidade, a controlador de memória 268 inclui um controlador de acesso de memória direta interna (DMA) 269 ou pode incluir lógica para realizar operações que seria de outro modo realizada por um controlador de DMA.
[0083] A GPGPU 270 inclui múltiplas memórias de cache, incluindo um cache L2 253, cache L1 254, uma cache de instrução 255, e memória compartilhada 256, da qual pelo menos uma porção também pode ser particionada como uma memória cache. A GPGPU 270 também inclui múltiplas unidades de computação 260A a 260N. Cada unidade de computação 260A-260N inclui um conjunto de registros de vetor 261, registros escalares 262, unidades de lógica de vetor 263, e unidades de lógica escalar 264. As unidades de computação 260A-260N também podem incluir memória compartilhada local 265 e um contador de programa 266. As unidades de computação 260A a 260N podem se acoplar com um cache constante 267, que pode ser usado para armazenar dados constantes, que são dados que não mudam durante a execução de kernel ou programa de sombreador que é executado na GPGPU 270. Em uma modalidade, a cache constante 267 é um cache de dados escalar e dados em cache podem ser coletados diretamente nos registros escalares 262.
[0084] Durante operação, a uma ou mais CPU (ou CPUs) 246 pode gravar comandos em registros ou memória no GPGPU 270 que foram mapeados em um espaço de endereço acessível. Os processadores de comando 257 podem ler os comandos de registros ou memória e determinar como aqueles comandos serão processados dentro da GPGPU 270. Um expedidor de encadeamento 258 pode então ser usados para expedir encadeamentos às unidades de computação 260A a 260N para realizar aqueles comandos. Cada unidade de computação 260A a 260N pode executar encadeamentos independentemente das outras unidades de computação. Adicionalmente, cada unidade de computação 260A a 260N pode ser independentemente configurada para computação condicional e para emitir condicionalmente os resultados de computação à memória. Os processadores de comando 257 podem interromper a uma ou mais CPU (ou CPUs) 246 quando os comandos enviados são concluídos.
[0085] As Figuras 3A a 3C ilustram diagramas de blocos de arquiteturas de processador gráfico e acelerador de computação adicionais fornecidas através de modalidades descritas no presente documento. Os elementos das Figuras 3A a 3C que têm os mesmos números de referência (ou nomes) que os elementos de qualquer outra Figura no presente documento podem operar ou funcionar de qualquer maneira similar àquela descrita em outro lugar no presente documento, porém, sem limitação a tal.
[0086] A Figura 3A é um diagrama de blocos de um processador gráfico 300, que pode ser uma unidade de processamento gráfico discreta, ou pode ser um processador gráfico integrado com uma pluralidade de núcleos de processamento, ou outros dispositivos de semicondutor, tais como, porém, sem limitação, dispositivos de memória ou interfaces de rede. Em algumas modalidades, o processador gráfico se comunica por meio de uma interface de I/O mapeada de memória com os registros no processador gráfico e com comandos colocados na memória de processador. Em algumas modalidades, o processador gráfico 300 inclui uma interface de memória 314 para acessar a memória. A interface de memória 314 pode ser uma interface para memória local, um ou mais caches internos, um ou mais caches externos compartilhados e/ou para memória de sistema.
[0087] Em algumas modalidades, o processador gráfico 300 também inclui um controlador de exibição 302 para acionar dados de saída de exibição para um dispositivo de exibição 318. O controlador de exibição 302 inclui hardware para um ou mais planos de sobreposição para a exibição e a composição de múltiplas camadas de elementos de interface de vídeo ou de usuário. O dispositivo de exibição 318 pode ser um dispositivo de exibição interno ou externo. Em uma modalidade, o dispositivo de exibição 318 é um dispositivo de exibição montado em cabeça, como um dispositivo de exibição de realidade virtual (VR) ou um dispositivo de exibição de realidade aumentada (AR). Em algumas modalidades, o processador gráfico 300 inclui um motor de codec de vídeo 306 para codificar, decodificar ou transcodificar mídia para, de, ou entre um ou mais formatos de codificação de mídia, incluindo, mas não limitado a formatos de Grupo de Especialistas de Figuração em Movimento (MPEG) como MPEG-2, formatos de Codificação de Vídeo Avançada (AVC) como H.264/MPEG-4 AVC, H.265/HEVC, Aliança para Mídia Aberta (AOMedia) VP8, VP9, bem como a Sociedade de Engenheiros de Televisão e Figuração em Movimento (SMPTE) 421M/VC-1, e formatos de Grupo de Especialistas de Fotografia Conjunto (JPEG), como JPEG, e formatos de JPEG em Movimento (MJPEG).
[0088] Em algumas modalidades, o processador gráfico 300 inclui um motor de transferência de imagem em bloco (BLIT) 304 para executar operações de rasterizador bidimensionais (2D), incluindo, por exemplo, transferências de bloco limitado por bits. No entanto, em uma modalidade, as operações de gráficos 2D são realizadas com o uso de um ou mais componentes de motor de processamento de gráficos (GPE) 310. Em algumas modalidades, GPE 310 é um motor de computação para executar operações de gráficos, incluindo operações de gráficos tridimensionais (3D) e operações de mídia.
[0089] Em algumas modalidades, GPE 310 inclui um pipeline 3D 312 para realizar operações 3D, como renderizar cenas e imagens tridimensionais com o uso de funções de processamento que atuam sobre formatos primitivos 3D (por exemplo, retângulo, triângulo, etc.). O pipeline 3D 312 inclui elementos de função fixa e programável que realizam diversas tarefas dentro do elemento e/ou geram encadeamentos de execução para um subsistema de Mídia/3D 315. Embora o pipeline 3D 312 possa ser usado para executar operações de mídia, uma modalidade de GPE 310 também inclui um pipeline de mídia 316 que é especificamente usado para executar operações de mídia, como aperfeiçoamento de imagem e pós-processamento de vídeo.
[0090] Em algumas modalidades, o pipeline de mídia 316 inclui unidades de função fixa ou de lógica programável para realizar uma ou mais operações de mídia especializadas, tais como aceleração de decodificação de vídeo, desentrelaçamento de vídeo e aceleração de codificação de vídeo em vez de, ou em prol do motor de codec de vídeo 306. Em algumas modalidades, o pipeline de mídia 316 inclui adicionalmente uma unidade de geração de encadeamento para gerar encadeamentos para execução no subsistema 3D/de Mídia 315. Os encadeamentos gerados realizam cálculos para as operações de mídia em uma ou mais unidades de execução de gráficos incluídas no subsistema 3D/de Mídia 315.
[0091] Em algumas modalidades, o subsistema 3D/de Mídia 315 inclui lógica para executar encadeamentos gerados pelo pipeline de 3D 312 e pelo pipeline de mídia 316. Em uma modalidade, os pipelines enviam solicitações de execução de encadeamento ao subsistema 3D/de Mídia 315, que inclui lógica de expedir de encadeamento para arbitrar e expedir as várias solicitações para recursos de execução de encadeamento disponíveis. Os recursos de execução incluem um arranjo de unidades de execução de gráficos para processar os encadeamentos 3D e de mídia. Em algumas modalidades, o subsistema 3D/de Mídia 315 inclui um ou mais caches internos for instruções e dados de encadeamento. Em algumas modalidades, o subsistema também inclui memória compartilhada, inclusive registros e memória endereçável, para compartilhar dados entre encadeamentos e para armazenar dados de saída.
[0092] A Figura 3B ilustra um processador gráfico 320 que tem uma arquitetura em peças, de acordo com modalidades descritas no presente documento. Em uma modalidade, o processador gráfico 320 inclui um agrupamento de motor de motor de processamento gráfico 322 que tem múltiplas instâncias do motor de processamento gráfico 310 da Figura 3A dentro de uma peça de motor gráfico 310A a 310D. Cada peça de motor gráfico 310A a 310D pode ser interconectada por meio de um conjunto de interconexões de peça 323A a 323F. Cada peça de motor gráfico 310A a 310D também pode ser conectada a um módulo de memória ou dispositivo de memória 326A a 326D por meio de interconexões de memória 325A a 325D. Os dispositivos de memória 326A a 326D podem usar qualquer tecnologia de memória gráfica. Por exemplo, os dispositivos de memória 326A a 326D podem ser memória de taxa de dados dupla gráfica (GDDR). Os dispositivos de memória 326A a 326D, em uma modalidade, são módulos de memória de alta largura de banda (HBM) que pode ser em molde com sua respectiva peça de motor gráfico 310A a 310D. Em uma modalidade, os dispositivos de memória 326A a 326D são dispositivos de memória empilhados que podem ser empilhados no topo de sua respectiva peça de motor gráfico 310A a 310D. Em uma modalidade, cada bloco de lado a lado de motor gráfico 310A a 310D e memória associada 326A a 326D reside em pequenos chips separados, que são ligados a um molde de base ou substrato de base, conforme descrito em mais detalhes nas Figuras 11B a 11D.
[0093] O processador gráfico 320 pode ser configurado com um sistema de acesso não uniforme à memória (NUMA) no qual dispositivos de memória 326A-326D são acoplados a blocos de motor gráfico 310A-310D associados. Um determinado dispositivo de memória pode ser acessado por blocos de motor gráfico diferentes do bloco ao qual o mesmo está diretamente conectado. No entanto, a latência de acesso aos dispositivos de memória 326A-326D pode ser mais baixa ao acessar um bloco local. Em uma modalidade, um sistema NUMA coerente de cache (ccNUMA) é habilitado, o qual usa as interconexões de bloco 323A-323F para permitir a comunicação entre controladores de cache dentro dos blocos de motor gráfico 310A-310D para manter uma imagem de memória consistente quando mais de um cache armazena o mesmo localização da memória.
[0094] O agrupamento de motor de processamento de gráficos 322 pode se conectar a uma interconexão de malha em chip ou em pacote 324. A interconexão de malha 324 pode permitir comunicação entre blocos de lado a lado de motor de gráficos 310A a 310D e componentes, tais como o codec de vídeo 306 e um ou mais motores de cópia 304. Os mecanismos de cópia 304 podem ser usados para mover dados para fora de, para e entre os dispositivos de memória 326A-326D e memória que é externa ao processador gráfico 320 (por exemplo, memória de sistema). A interconexão de malha 324 também pode ser usada para interconectar os blocos de motor gráfico 310A-310D. O processador gráfico 320 pode incluir opcionalmente um controlador de exibição 302 para possibilitar uma conexão com um dispositivo de exibição externo 318. O processador gráfico também pode ser configurado como um acelerador de computação ou gráfico. Na configuração de acelerador, o controlador de exibição 302 e o dispositivo de exibição 318 podem ser omitidos.
[0095] O processador gráfico 320 pode se conectar a um sistema de hospedeiro por meio de uma interface de hospedeiro 328. A interface de hospedeiro 328 pode permitir comunicação entre o processador gráfico 320, a memória de sistema e/ou outros componentes de sistema. A interface de hospedeiro 328 pode ser, por exemplo, um barramento de PCI expressa ou outro tipo de interface de sistema de hospedeiro.
[0096] A Figura 3C ilustra um acelerador de computação 330, de acordo com modalidades descritas no presente documento. O acelerador de computação 330 pode incluir similaridades arquiteturais com o processador gráfico 320 da Figura 3B e é otimizado para aceleração de computação. Um agrupamento de motor de computação 332 pode incluir um conjunto de peças de motor de computação 340A a 340D que incluem execução lógica que é otimizada para operações de computação de propósito geral paralelas ou baseadas em vetor. Em algumas modalidades, as peças de motor de computação 340A a 340D não incluem lógica de processamento gráfico de função fixa, embora em uma modalidade uma ou mais das peças de motor de computação 340A a 340D pode incluir lógica para realizar aceleração de mídia. As peças de motor de computação 340A a 340D podem se conectar à memória 326A a 326D por meio de interconexões de memória 325A a 325D. A memória 326A a 326D e interconexões de memória 325A a 325D pode ser tecnologia similar como no processador gráfico 320, ou pode ser diferente. As peças de motor de computação gráfica 340A a 340D também podem ser interconectadas por meio de um conjunto de interconexões de peças 323A a 323F e podem ser conectadas com uma interconexão de malha 324 e/ou interconectadas pela mesma. Em uma modalidade, o acelerador de computação 330 inclui um grande cache L3 336 que podem ser configuradas como um cache amplo de dispositivo. O acelerador de computação 330 também pode se conectar a um processador hospedeiro e memória por meio de uma interface hospedeira 328 de maneira similar ao processador gráfico 320 da Figura 3B.
Mecanismo de Processamento Gráfico
[0097] A Figura 4 é um diagrama de blocos de um motor de processamento gráfico 410 de um processador gráfico de acordo com algumas modalidades. Em uma modalidade, o motor de processamento gráfico (GPE) 410 é uma versão do GPE 310 mostrado na Figura 3A, e também pode representar uma peça de motor gráfico 310A a 310D da Figura 3B. Elementos da Figura 4 que têm os mesmos numerais de referência (ou nomes) que os elementos de qualquer outra Figura no presente documento podem operar ou funcionar de qualquer maneira similar à descrita em qualquer ponto no presente documento, porém, sem limitação a isso. Por exemplo, o pipeline de 3D 312 e pipeline de mídia 316 da Figura 3A são ilustrados. O pipeline de mídia 316 é opcional em algumas modalidades do GPE 410 e pode não ser explicitamente incluído dentro do GPE 410. Por exemplo, e em pelo menos uma modalidade, uma mídia separada e/ou processador de imagem é acoplada ao GPE 410 .
[0098] Em algumas modalidades, GPE 410 se acopla com ou inclui um gerador de fluxo contínuo de comando 403, que fornece um fluxo contínuo de comando ao pipeline de 3D 312 e/ou pipelines de mídia 316. Em algumas modalidades, o gerador de fluxo contínuo de comando 403 é acoplado à memória, que pode ser memória de sistema, ou uma ou mais dentre memória de cache interno e memória de cache compartilhado. Em algumas modalidades, o gerador de fluxo contínuo de comando 403 recebe comandos a partir da memória e envia os comandos ao pipeline de 3D 312 e/ou o pipeline de mídia 316. Os comandos são diretrizes coletadas a partir de um armazenamento temporário de anel, que armazena comandos para o pipeline de 3D 312 e pipeline de mídia 316. Em uma modalidade, o armazenamento temporário de anel pode incluir adicionalmente tampões de comando de lote que armazenam lotes de múltiplos comandos. Os comandos para o pipeline de 3D 312 também podem incluir referências a dados armazenados na memória, tais como porém, sem limitação dados de vértice e geometria para o pipeline de 3D 312 e/ou dados de imagem e objetos de memória para o pipeline de mídia 316. O pipeline de 3D 312 e pipeline de mídia 316 processam os comandos e dados realizando-se operações por meio de lógica dentro dos respectivos pipelines ou expedindo-se um ou mais encadeamentos de execução a um arranjo de núcleo gráfico 414. Em uma modalidade, o arranjo de núcleo gráfico 414 incluem um ou mais blocos de núcleos gráficos (por exemplo, núcleo (ou núcleos) gráfico 415A, núcleo (ou núcleos) gráfico 415B), sendo que cada bloco inclui um ou mais núcleos gráficos. Cada núcleo gráfico inclui um conjunto de recursos de execução de gráfico que inclui lógica de execução de propósito geral e específica de gráfico para realizar operações de gráfico e de computação, assim como processamento de textura fixa e/ou máquina de aprendizado e lógica de aceleração de inteligência artificial.
[0099] Em várias modalidades o pipeline de 3D 312 pode incluir função fixa e lógica programável para processar um ou mais programas sombreadores, tais como sombreadores de vértice, sombreadores de geometria, sombreadores de pixel, sombreadores de fragmento, sombreadores de computação, ou outros programas sombreadores, processando-se as instruções e expedindo encadeamentos de execução ao arranjo de núcleo gráfico 414. O arranjo de núcleo gráfico 414 fornece um bloco unificado de recursos de execução para uso em processar esses programas sombreadores. A lógica de execução de múltiplos propósitos (por exemplo, unidades de execução) dentro do núcleo (ou núcleos) gráfico 415A a 414B do arranjo de núcleo gráfico 414 inclui suporte para várias linguagens de sombreador de API 3D e pode executar múltiplos encadeamentos de execução simultâneos associados a múltiplos sombreadores.
[00100] Em algumas modalidades, o arranjo de núcleo gráfico 414 inclui execução lógica para realizar funções de mídia, tais como vídeo e/ou processamento de imagem. Em uma modalidade, as unidades de execução incluem lógica de propósito geral que é programável para realizar operações computacionais de propósito geral paralelas, além das operações de processamento gráfico. A lógica de propósito geral pode realizar operações de processamento em paralelo ou em conjunto com lógica de propósito geral dentro do núcleo (ou núcleos) de processador 107 da Figura 1 ou núcleo 202A a 202N como na Figura 2A.
[00101] Dados de saída gerados por encadeamentos em execução no arranjo de núcleo gráfico 414 pode emitir dados à memória em um armazenamento temporário de retorno unificado (URB) 418. O URB 418 pode armazenar dados para múltiplos encadeamentos. Em algumas modalidades, o URB 418 pode ser usado para enviar dados entre diferentes encadeamentos que são executados no arranjo de núcleos gráficos 414. Em algumas modalidades, o URB 418 pode ser adicionalmente usado para sincronização entre encadeamentos no arranjo de núcleos gráficos e lógica de função fixa dentro da lógica de função compartilhada 420.
[00102] Em algumas modalidades, arranjo de núcleos gráficos 414 é escalonável, de modo que o arranjo inclua um número variável de núcleos de gráficos, em que cada um tem um número variável de unidades de execução com base no nível de desempenho e potência alvo de GPE 410. Em uma modalidade, os recursos de execução são dinamicamente escalonáveis, de modo que os recursos de execução possam ser ativados ou desativados, conforme necessário.
[00103] O arranjo de núcleos gráficos 414 se acopla à lógica de função compartilhada 420 que inclui múltiplos recursos que são compartilhados entre os núcleos de gráficos no arranjo de núcleos gráficos. As funções compartilhadas dentro da lógica de função compartilhada 420 são unidades de lógica de hardware que fornecem funcionalidade complementar especializada ao arranjo de núcleos gráficos 414. Em várias modalidades, a lógica de função compartilhada 420 inclui, porém, sem limitação, o amostrador 421, a matemática 422 e a lógica de comunicação entre encadeamentos (ITC) 423. Adicionalmente, algumas modalidades implantam um ou mais caches 425 dentro da lógica de função compartilhada 420.
[00104] Uma função compartilhada é implantada pelo menos em um caso em que a demanda por uma dada função especializada é insuficiente para inclusão no arranjo de núcleos gráficos 414. Em vez de uma única instanciação dessa função especializada ser implantada como uma entidade independente na lógica de função compartilhada 420 e compartilhada entre os recursos de execução dentro do arranjo de núcleos gráficos 414. O conjunto preciso de funções que são compartilhadas entre o arranjo de núcleos gráficos 414 e incluídas no arranjo de núcleos gráficos 414 varia pelas modalidades. Em algumas modalidades, as funções compartilhadas específicas dentro da lógica de função compartilhada 420 que são usadas extensivamente pelo arranjo de núcleos gráficos 414 podem ser incluídas na lógica de função compartilhada 416 dentro do arranjo de núcleos gráficos 414. Em várias modalidades, a lógica de função compartilhada 416 dentro do arranjo de núcleos gráficos 414 pode incluir alguma ou toda a lógica dentro da lógica de função compartilhada 420. Em uma modalidade, todos os elementos de lógica dentro da lógica de função compartilhada 420 podem ser duplicados dentro da lógica de função compartilhada 416 do arranjo de núcleos gráficos 414. Em uma modalidade, a lógica de função compartilhada 420 é excluída em favor da lógica de função compartilhada 416 dentro do arranjo de núcleos gráficos 414.
Unidades de Execução
[00105] As Figuras 5A e 5B ilustram lógica de execução de encadeamento 500 que inclui um arranjo de elementos de processamento empregados em um núcleo de processador gráfico de acordo com modalidades descritas no presente documento. Os elementos das Figuras 5A a 5B que têm os mesmos números de referência (ou nomes) que os elementos de qualquer outra Figura no presente documento podem operar ou funcionar de qualquer maneira similar àquela descrita em outro lugar no presente documento, porém, sem limitação a tal. As Figuras 5A e 5B ilustram uma vista geral da lógica de execução de encadeamento 500, que pode ser representativa de lógica de hardware ilustrada com cada subnúcleo 221A a 221F da Figura 2B. A Figura 5A é representativa de uma unidade de execução dentro de um processador de propósito geral, enquanto a Figura 5B é representativa de uma unidade de execução que pode ser usada dentro de um acelerador de computação.
[00106] Conforme ilustrado na Figura 5A, em algumas modalidades, a lógica de execução de encadeamento 500 inclui um processador de sombreador 502, um expedidor de encadeamento 504, cache de instrução 506, um arranjo de unidade de execução escalonável incluindo uma pluralidade de unidades de execução 508A-508N, um amostrador 510, memória local compartilhada 511, um cache de dados 512, e uma porta de dados 514. Em uma modalidade, o arranjo de unidade de execução escalonável pode escalar dinamicamente habilitando ou desabilitando uma ou mais unidades de execução (por exemplo, qualquer uma das unidades de execução 508A, 508B, 508C, 508D, através de 508N-1 e 508N) com base nos requisitos computacionais de uma carga de trabalho. Em uma modalidade, os componentes incluídos são interconectados por meio de uma malha de interconexão que se liga a cada um dos componentes. Em algumas modalidades, lógica de execução de encadeamento 500 inclui uma ou mais conexões à memória, como memória de sistema ou cache de memória, através de um ou mais dentre cache de instrução 506, porta de dados 514, amostrador 510, e unidades de execução 508A-508N. Em algumas modalidades, cada unidade de execução (por exemplo, 508A) é uma unidade computacional de propósito geral programável independente que tem capacidade para executar múltiplos encadeamentos de hardware simultâneos enquanto se processam múltiplos elementos de dados em paralelo para cada encadeamento. Em várias modalidades, o arranjo de unidades de execução 508A a 508N é escalonável para incluir qualquer número de unidades de execução individuais.
[00107] Em algumas modalidades, as unidades de execução 508A-508N são principalmente usadas para executar programas de sombreador. Um processador de sombreador 502 pode processar os diversos programas de sombreador e despachar encadeamentos de execução associados aos programas de sombreador por meio de um despachante de encadeamento 504. Em uma modalidade, o despachante de encadeamento inclui lógica para arbitrar solicitações de iniciação de encadeamento dos pipelines de mídia e gráficos e instanciar os encadeamentos solicitados em uma ou mais unidades de execução nas unidades de execução 508A-508N. Por exemplo, um pipeline de geometria pode enviar sombreadores de vértice, tesselação ou geometria para a lógica de execução de encadeamento para processamento. Em algumas modalidades, o expedidor de encadeamento 504 também pode processar solicitações de geração de encadeamento de tempo de execução a partir de programas de sombreador de execução.
[00108] Em algumas modalidades, as unidades de execução 508A a 508N suportam um conjunto de instruções que inclui suporte nativo para muitas instruções-padrão de sombreador de gráficos 3D, de modo que programas de sombreador de bibliotecas de gráficos (por exemplo, Direct 3D e OpenGL) sejam executados com uma tradução mínima. As unidades de execução suportam processamento de vértice e geometria (por exemplo, programas de vértice, programas de geometria, sombreadores de vértice), processamento de pixel (por exemplo, sombreadores de pixel, sombreadores de fragmento) e processamento de propósito geral (por exemplo, sombreadores de computação e de mídia) . Cada uma das unidades de execução 508A-508N tem capacidade de execução de múltiplos dados de instrução única de múltiplas questões (SIMD) e operação com múltiplos encadeamentos possibilita um ambiente de execução eficaz na face de acessos de memória de latência superior. Cada encadeamento de hardware dentro de cada unidade de execução tem um arquivo de registro de largura de banda elevada dedicado e estado de encadeamento independente e associado. Execução tem múltiplas questões por tempo em pipelines que têm capacidade para operações de ponto de flutuação de precisão de número inteiro, única e dupla, capacidade de ramificação de SIMD, operações lógicas, operações transcendentais e outras operações diversas. Enquanto se espera pelos dados da memória ou uma das funções compartilhadas, a lógica de dependência dentro das unidades de execução 508A a 508N fazem um encadeamento de esperar dormir até que os dados solicitados tenham sido retornados. Enquanto o encadeamento de espera dorme, os recursos de hardware podem ser devotados ao processamento de outros encadeamentos. Por exemplo, durante um atraso associado a uma operação de sombreador de vértice, uma unidade de execução pode realizar operações para um sombreador de pixel, sombreador de fragmento ou outro tipo de programa de sombreador que inclui um diferente sombreador de vértice. Várias modalidades podem se aplicar para usar a execução através do Múltiplo Encadeamento de Instrução Única (SIMT) como uma alternativa ao uso de SIMD ou adicionalmente ao uso de SIMD. Referência a um núcleo ou operação de SIMD também pode se aplicar ao SIMT ou se aplicar aos SIMD em combinação com SIMT.
[00109] Cada unidade de execução em unidades de execução 508A a 508N opera em arranjos de elementos de dados. A quantidade de elementos de dados é o "tamanho de execução", ou a quantidade de canais para a instrução. Um canal de execução é uma unidade lógica de execução para acesso de elemento de dados, mascaramento e controle de fluxo dentro de instruções. O número de canais pode ser independente do número de Unidades Lógicas de Aritmética (ALUs) física ou Unidade de Ponto de Flutuação (FPUs) para um processador gráfico particular. Em algumas modalidades, unidades de execução 508A-508N suportam tipos de dados de número inteiro e ponto de flutuação.
[00110] O conjunto de instruções de unidade de execução inclui instruções de SIMD. Os vários elementos de dados podem ser armazenados como um tipo de dados de pacote em um registro e a unidade de execução processará os vários elementos com base no tamanho de dados dos elementos. Por exemplo, quando se opera em um vetor amplo de 256 bits, os 256 bits do vetor são armazenados em um registrador e a unidade de execução opera no vetor como quatro elementos de dados de pacote de 54-bit separados (elementos de dados de tamanho de Palavra Dupla (QW)), oito elementos de dados de pacote de 32-bit separados (elementos de dados de tamanho de Palavra Dupla (DW)), dezesseis elementos de dados de pacote de 16-bit separados (elementos de dados de tamanho de Palavra (W)), ou trinta e dois elementos de dados de 8-bit separados (elementos de dados de tamanho de byte (B) ) . Entretanto, larguras de vetor e tamanhos de registros diferentes são possíveis.
[00111] Em uma modalidade uma ou mais unidades de execução pode ser combinada em uma unidade de execução fundida 509A a 509N que tem lógica de controle de encadeamento (507A a 507N) que é comum aos EUs fundidos. Múltiplos EUs podem ser fundidos em um grupo de EU. Cada EU no grupo de EU fundida pode ser configurada para executar um encadeamento de hardware de SIMD separado. O número de EUs em um grupo de EU fundida pode variar de acordo com modalidades. Adicionalmente, várias larguras de SIMD podem ser reveladas por EU, que incluem, porém, sem limitação, SIMD8, SIMD16 e SIMD32. Cada unidade de execução de gráficos fundidos 509A a 509N inclui pelo menos duas unidades de execução. Por exemplo, unidade de execução fundida 509A inclui uma primeira EU 508A, segunda EU 508B e lógica de controle de encadeamento 507A que é comum à primeira EU 508A e à segunda EU 508B. A lógica de controle de encadeamento 507A controla encadeamentos executados na unidade de execução de gráficos fundidos 509A, que permite que cada EU dentro das unidades de execução fundidas 509A a 509N executem com o uso de um registro de indicador de instrução comum.
[00112] Um ou mais caches de instrução internos (por exemplo, 506) são incluídos na lógica de execução de encadeamento 500 para armazenar em cache instruções de encadeamento para as unidades de execução. Em algumas modalidades, um ou mais caches de dados (por exemplo, 512) são incluídos para armazenar em cache dados de encadeamento durante a execução de encadeamento. A execução de encadeamentos na lógica de execução 500 também pode armazenar explicitamente dados gerenciados na memória local compartilhada 511. Em algumas modalidades, um amostrador 510 é incluído para fornecer amostragem de textura para operações 3D e amostragem de mídia para operações de mídia. Em algumas modalidades, o amostrador 510 inclui funcionalidade de amostragem de textura ou de mídia especializada para processar dados de textura ou de mídia durante o processo de amostragem antes de fornecer os dados amostrados para uma unidade de execução.
[00113] Durante a execução, os pipelines de mídia e gráfico enviam solicitações de iniciação de encadeamento à lógica de execução de encadeamento 500 por meio de lógica de geração e expedição de encadeamento. Uma vez que um grupo de objetos geométricos foi processado e submetido a varredura em dados de pixel, lógica de processador de pixel (por exemplo, lógica de sombreador de pixel, lógica de sombreador de fragmento, etc.) dentro do processador de sombreador 502 é evocada para computar adicionalmente informações de saída e fazer com que resultados sejam gravados nas superfícies de saída(por exemplo, armazenamentos temporários de cor, armazenamentos temporários de profundidade, armazenamentos temporários de estêncil, etc.). Em algumas modalidades, um sombreador de pixel ou sombreador de fragmento calcula os valores dos vários atributos de vértice que devem ser interpolados através do objeto rasterizado. Em algumas modalidades, a lógica de processador de pixel dentro do processador de sombreador 502, então, executa um programa de sombreador de pixel ou fragmento abastecido pela interface de programação de aplicativo (API). Para executar o programa de sombreador, o processador de sombreador 502 envia encadeamentos a uma unidade de execução (por exemplo, 508A) por meio de despachante de encadeamento 504. Em algumas modalidades, o processador de sombreador 502 usa lógica de amostragem de textura no amostrador 510 para acessar dados de textura em mapas de textura armazenados em memória. Operações aritméticas nos dados de textura e nos dados de geometria de entrada computam dados de cor em pixel para cada fragmento geométrico, ou descarta um ou mais pixels de processamento adicional.
[00114] Em algumas modalidades, a porta de dados 514 fornece um mecanismo de acesso de memória para a lógica de execução de encadeamento 500 para emitir dados processados para memória para processamento adicional em um pipeline de saída de processador gráfico. Em algumas modalidades, a porta de dados 514 inclui ou se acopla a uma ou mais memórias cache (por exemplo, cache de dados 512) para armazenar em cache dados para acesso de memória por meio da porta de dados.
[00115] Em uma modalidade, a execução lógica 500 também pode incluir um traçador de raio 505 que pode fornecer funcionalidade de aceleração de traçado de raio. O traçador de raio 505 pode suportar um conjunto de instruções de traçado de raio que inclui instruções/funções para geração de raio. O conjunto de instruções de traçado de raio pode ser similar diferente do conjunto de instruções de traçado de raio suportado pelos núcleos de traçado de raio 245 na Figura 2C.
[00116] A Figura 5B ilustra detalhes internos exemplificadores de uma unidade de execução 508, de acordo com modalidades. Uma unidade de execução gráfica 508 pode incluir uma unidade de coleta de instrução 537, um arranjo de arquivo de registro geral (GRF) 524, um arranjo de arquivo de registro arquitetural (ARF) 526, um arbitrador de encadeamento 522, uma unidade de envio 530, uma unidade de ramificação 532, um conjunto de unidades de ponto de flutuação de SIMD (FPUs) 534, e em uma modalidade um conjunto de ALUs de SIMD de número inteiro dedicado 535. O GRF 524 e ARF 526 inclui o conjunto de arquivos de registro geral e arquivos de registro de arquitetura associados a cada encadeamento de hardware simultâneo que pode ser ativo na unidade de execução gráfica 508. Em uma modalidade, estado arquitetural por encadeamento é mantido no ARF 526, enquanto dados usados durante execução de encadeamento são armazenados no GRF 524. O estado de execução de cada encadeamento, incluindo os apontadores de instrução para cada encadeamento, pode ser mantido em registros específicos de encadeamento no ARF 526.
[00117] Em uma modalidade, a unidade de execução gráfica 508 tem uma arquitetura que é uma combinação de Multiencadeamento Simultâneo (SMT) e Multiencadeamento Intervalado refinado (IMT). A arquitetura tem uma configuração modular que pode ser submetida a ajuste fino no tempo de projeto com base em um número-alvo de encadeamentos simultâneos e número de registros por unidade de execução, em que os recursos de unidade de execução são divididos através de lógica usada para executar múltiplos encadeamentos simultâneos. O número de encadeamentos lógicos que podem ser executados pela unidade de execução gráfica 508 não é limitada ao número de encadeamentos de hardware, e múltiplos encadeamentos lógicos podem ser atribuídos a cada encadeamento de hardware.
[00118] Em uma modalidade, a unidade de execução gráfica 508 pode coemitir múltiplas instruções, que podem ser, cada uma, instruções diferentes. O arbitrador de encadeamento 522 da unidade de execução gráfica encadeamento 508 pode expedir as instruções a uma dentre a unidade de envio 530, unidade de ramificação 532, ou FPU (ou FPUs) de SIMD 534 para execução. Cada encadeamento de execução pode acessar 128 registros de propósito geral dentro do GRF 524, em que cada registro pode armazenar 32 bytes, acessíveis a um vetor de 8 elementos de SIMD de elementos de dados de 32 bits. Em uma modalidade, cada unidade de encadeamento de execução tem acesso a 4 Kbytes dentro do GRF 524, embora modalidades não sejam tão limitadas, e mais ou menos recursos de registro podem ser fornecidas em outras modalidades. Em uma modalidade, a unidade de execução gráfica 508 é particionada em sete encadeamentos de hardware que podem realizar, independentemente, operações computacionais, embora o número de encadeamentos por unidade de execução também pode variar de acordo com modalidades. Por exemplo, em uma modalidade, até 16 encadeamentos de hardware são suportadas. Em uma modalidade na qual sete encadeamentos podem acessar 4 Kbytes, a GRF 524 pode armazenar um total de 28 Kbytes. Quando 16 encadeamentos podem acessar 4 Kbytes, a GRF 524 pode armazenar um total de 64 Kbytes. Modos de endereçamento flexíveis podem permitir que registros sejam endereçados juntos para construir registros efetivamente mais amplos ou para representar estruturas de dados de bloco retangulares distanciadas.
[00119] Em uma modalidade, operações de memória, operações de amostrador e outras comunicações de sistema de latência mais longa são expedidas por meio de instruções de "envio" que são executadas pela unidade de envio de passagem de mensagem 530. Em uma modalidade, as instruções de ramificação são expedidas para uma unidade de ramificação dedicada 532 para facilitar divergência de SIMD e eventual convergência.
[00120] Em uma modalidade, a unidade de execução de gráficos 508 inclui uma ou mais unidades de ponto de flutuação de SIMD (FPU (ou FPUs)) 534 para realizar operações de ponto de flutuação. Em uma modalidade, a FPU (ou FPUs) 534 também suporta computação de número inteiro. Em uma modalidade, a FPU (ou FPUs) 534 pode executar SIMD até o M número de operações de ponto de flutuação de 32-bits (ou número inteiro), ou execução de SIMD até 2M número inteiro de 16-bits ou operações de ponto de flutuação de 16-bits. Em uma modalidade, pelo menos uma dentre a FPU (ou FPUs) fornece capacidade matemática estendida para suportar funções de matemática transcendental de alto rendimento e ponto de flutuação de 54 bits de precisão dupla. Em algumas modalidades, um conjunto de ALUs de SIMD de número inteiro de 8 bits 535 também estão presentes, e podem ser especificamente otimizadas para realizar operações associadas às computações de aprendizado de máquina.
[00121] Em uma modalidade, os arranjos de múltiplos exemplos da unidade de execução de gráficos 508 podem ser instanciados em um agrupamento de subnúcleo de gráficos (por exemplo, uma subfatia). For redimensionabilidade, arquitetos de produto podem escolher o número exato de unidades de execução por agrupamento de subnúcleo. Em uma modalidade, a unidade de execução 508 pode executar instruções através de uma pluralidade de canais de execução. Em uma modalidade adicional, cada encadeamento executado na unidade de execução gráfica 508 é executado em um canal diferente.
[00122] A Figura 6 ilustra uma unidade de execução adicional 600, de acordo com uma modalidade. A unidade de execução 600 pode ser uma unidade de execução otimizada com computação para uso em, por exemplo, uma peça de motor de computação 340A a 340D como na Figura 3C, porém, sem limitação a isso. Variantes da unidade de execução 600 também podem ser usados em uma peça de motor gráfico 310A a 310D como na Figura 3B. Em uma modalidade, a unidade de execução 600 inclui uma unidade de controle de encadeamento 601, uma unidade de estado de encadeamento 602, uma unidade de coleta/pré-coleta de instrução 603, e uma unidade de decodificação de instrução 604. A unidade de execução 600 inclui adicionalmente um arquivo de registro 606 que armazena registros que podem ser designados para encadeamentos de hardware dentro da unidade de execução. A unidade de execução 600 inclui adicionalmente uma unidade de envio 607 e uma unidade de ramificação 608. Em uma modalidade, a unidade de envio 607 e unidade de ramificação 608 pode operar de modo similar como a unidade de envio 530 e uma unidade de ramificação 532 da unidade de execução gráfica 508 da Figura 5B.
[00123] A unidade de execução 600 também inclui uma unidade de computação 610 que inclui múltiplos tipos diferentes de unidades funcionais. Em uma modalidade, a unidade de computação 610 inclui uma unidade de ALU 611 que inclui um arranjo de unidades lógicas aritméticas. A unidade de ALU 611 pode ser configurada para realizar operações de número inteiro e ponto de flutuação de 64 bits, 32 bits e 16 bits. Operações de número inteiro e ponto de flutuação podem ser realizadas simultaneamente. A unidade de computação 610 também pode incluir um arranjo sistólico 612, e uma unidade de matemática 613. O arranjo sistólico 612 inclui uma rede com W amplitude e D de profundidade de unidades de processamento de dados que pode ser usada para realizar vetor ou outras operações paralelas de dados de maneira sistólica. Em uma modalidade, o arranjo sistólico 612 pode ser configurado para realizar operações de matriz, tais como operações de produto escalar de matriz. Em uma modalidade, o arranjo sistólico 612 suporta operações de ponto de flutuação de 16 bits, assim como operações de número inteiro de 8 bits e 4 bits. Em uma modalidade, o arranjo sistólico 612 pode ser configurado para acelerar operações de aprendizado por máquina. Em tais modalidades, o arranjo sistólico 612 pode ser configurado com suporte para o formato de ponto de flutuação de 16 bits bfloat. Em uma modalidade, uma unidade matemática 613 pode ser inclusa para realizar um subconjunto específico de operações matemáticas de maneira eficiente e com potência menor do que então a unidade de ALU 611. A unidade de matemática 613 pode incluir uma variante de lógica matemática que pode ser encontrada em lógica de função compartilhada de um motor de processamento gráfico fornecido por outras modalidades (por exemplo, lógica matemática 422 da lógica de função compartilhada 420 da Figura 4). Em uma modalidade, a unidade de matemática 613 pode ser configurada para realizar operações de ponto de flutuação de 32 bits e 64 bits.
[00124] A unidade de controle de encadeamento 601 inclui lógica para controlar a execução de encadeamentos dentro da unidade de execução. A unidade de controle de encadeamento 601 pode incluir lógica de arbitragem de encadeamento para iniciar, parar e antecipar a execução de encadeamentos dentro da unidade de execução 600. A unidade de estado de encadeamento 602 pode ser usada para armazenar o estado de encadeamento para encadeamentos atribuídos para execução na unidade de execução 600. Armazenar o estado de encadeamento dentro da unidade de execução 600 permite a rápida preferência de encadeamentos quando aqueles encadeamentos se tornam bloqueados ou ociosos. A unidade de coleta/pré-coleta de instrução 603 pode buscar instruções de um cache de instrução de lógica de execução de nível mais alto (por exemplo, cache de instrução 506 como na Figura 5A) . A unidade de coleta/pré-coleta de instrução 603 também pode emitir solicitações de pré-coleta para instruções a serem carregadas no cache de instrução com base em uma análise de encadeamentos atualmente executados. A unidade de decodificação de instrução 604 pode ser usada para decodificar instruções a serem executadas pelas unidades de computação. Em uma modalidade, a unidade de decodificação de instrução 604 pode ser usada como um decodificador secundário para decodificar instruções complexas em micro-operações constituintes.
[00125] A unidade de execução 600 inclui adicionalmente um arquivo de registro 606 que pode ser usado por encadeamentos de hardware que são executados na unidade de execução 600. Registros no arquivo de registro 606 podem ser divididos através da lógica usada para executar múltiplos encadeamentos simultâneos dentro da unidade de computação 610 da unidade de execução 600. O número de encadeamentos lógicos que podem ser executados pela unidade de execução de gráficos 508 não é limitado ao número de encadeamentos de hardware, e múltiplos encadeamentos lógicos podem ser atribuídos a cada encadeamento de hardware. O tamanho do arquivo de registro 606 pode variar através das modalidades com base no número de encadeamentos de hardware suportados. Em uma modalidade, a renomeação de registro pode ser usada para alocar dinamicamente registros em encadeamentos de hardware.
[00126] A Figura 7 é um diagrama de blocos que ilustra formatos de instrução de processador gráfico 700 de acordo com algumas modalidades. Em uma ou mais modalidades, as unidades de execução de processador gráfico suportam um conjunto de instruções que tem instruções em múltiplos formatos. As caixas com linha sólida ilustram os componentes que são geralmente incluídos em uma instrução de unidade de execução, enquanto as de linhas tracejadas incluem componentes que são opcionais ou que são somente incluídos em um subconjunto das instruções. Em algumas modalidades, o formato de instrução 700 descrito e ilustrado são macroinstruções, na medida em que as mesmas são instruções fornecidas para a unidade de execução, em oposição a micro-operações que resultam de decodificação de instrução uma vez que a instrução seja processada.
[00127] Em algumas modalidades, as unidades de execução de processador gráfico suportam nativamente instruções em um formato de instrução de 128 bits 710. Um formato de instrução compacto de 64 bits 730 está disponível para algumas instruções com base na instrução selecionada, opções de instrução e quantidade de operandos. O formato de instrução de 128 bits nativo 710 fornece acesso a todas as opções de instrução, enquanto algumas opções e operações são restritas ao formato de 64 bits 730. As instruções nativas disponíveis no formato de 64 bits 730 variam de acordo com a modalidade. Em algumas modalidades, a instrução é compactada em parte com o uso de um conjunto de valores de índice em um campo de índice 713. O hardware de unidade de execução faz referência a um conjunto de tabelas de compactação com base nos valores de índice e usa as saídas de tabela de compactação para reconstruir uma instrução nativa no formato de instrução de 128-bits 710. Outros tamanhos e formatos de instrução podem ser usados.
[00128] Para cada formato, código operacional de instrução 712 define a operação que a unidade de execução deve executar. As unidades de execução executam cada instrução em paralelo através dos múltiplos elementos de dados de cada operando. Por exemplo, em resposta a uma instrução de adição, a unidade de execução realiza uma operação de adição simultânea através de cada canal de cor que representa um elemento de textura ou elemento de figuração. Por padrão, a unidade de execução realiza cada instrução através de todos os canais de dados dos operandos. Em algumas modalidades, um campo de controle de instrução 714 permite o controle sobre certas opções de execução, tais como seleção de canais (por exemplo, predicação) e ordem de canal de dados (por exemplo, efetuar swizzling). Para instruções no formato de instrução de 128 bits 710 um campo de tamanho de execução 716 limita a quantidade de canais de dados que será executada em paralelo. Em algumas modalidades, o campo de tamanho de execução 716 não está disponível para uso no formato de instrução compacto de 64 bits 730.
[00129] Algumas instruções de unidade de execução têm até três operandos que incluem dois operandos-fonte, src0 722, src1 722, e um destino 718. Em algumas modalidades, as unidades de execução suportam instruções de destino duplo, em que um dentre os destinos está implicado. As instruções de manipulação de dados podem ter um operando de terceira fonte (por exemplo, SRC2 724), em que o código operacional de instrução 712 determina o número de operandos de fonte. Um último operando-fonte da instrução pode ser um valor imediato (por exemplo, codificado permanentemente) passado com a instrução.
[00130] Em algumas modalidades, o formato de instrução de 128-bits 710 inclui um campo de modo de acesso/endereço 726 que especifica, por exemplo, se modo de endereçamento de registro direto ou modo de endereçamento de registro indireto é usado. Quando o modo de endereçamento de registro direto é usado, o endereço de registro de um ou mais operandos é diretamente fornecido em bits na instrução.
[00131] Em algumas modalidades, o formato de instrução de 128 bits 710 inclui um campo de modo de acesso/endereço 726, que especifica um modo de endereço e/ou um modo de acesso para a instrução. Em uma modalidade, o modo de acesso é usado para definir um alinhamento de acesso de dados para a instrução. Algumas modalidades suportam modos de acesso que incluem um modo de acesso alinhado de 16 bytes e um modo de acesso alinhado de 1 byte, em que o alinhamento de byte do modo de acesso determina o alinhamento de acesso dos operandos de instrução. Por exemplo, quando em um primeiro modo, a instrução pode usar endereçamento alinhado por byte para operandos de fonte e destino e, quando em um segundo modo, a instrução pode usar endereçamento alinhado de 16-bytes para todos os operandos de fonte e destino.
[00132] Em uma modalidade, a porção de modo de endereço do campo de modo de acesso/endereço 726 determina se a instrução é usar endereçamento direto ou indireto. Quando o modo de endereçamento de registro direto é usado bits na instrução fornecem diretamente o endereço de registro de um ou mais operandos. Quando o modo de endereçamento de registro indireto é usado, o endereço de registro de um ou mais operandos pode ser computado com base em um valor de registro de endereço e um campo imediato de endereço na instrução.
[00133] Em uma modalidade, instruções são agrupadas com base em campos de bits de código operacional 712 para simplificar a decodificação de Código operacional 740. Para um código operacional de 8 bits, os bits 4, 5 e 6 permitem que a unidade de execução determine o tipo de código operacional. O agrupamento de código operacional preciso mostrado é meramente um exemplo. Em algumas modalidades, um grupo de código operacional de movimentação e lógica 742 inclui instruções de movimento e lógica de dados (por exemplo, movimentação (mov), comparação (cmp)). Em algumas modalidades, grupo de movimentação e lógica 742 compartilha os cinco bits mais significativos (MSB), em que instruções de movimentação (mov) estão na forma de 0000xxxxb e instruções de lógica estão na forma de 0001xxxxb. Um grupo de instruções de controle de fluxo 744 (por exemplo, chamada, pulo (jmp)) inclui instruções na forma de 0010xxxxb (por exemplo, 0x20) . Um grupo de instruções diversas 746 inclui uma mistura de instruções, que inclui instruções de sincronização (por exemplo, aguardar, enviar) na forma de 0011xxxxb (por exemplo, 0x30). Um grupo de instruções de matemática paralela 748 inclui instruções aritméticas em termos de componente (por exemplo, adicionar, multiplicar (mul)) na forma de 0100xxxxb (por exemplo, 0x40). O grupo de matemática paralela 748 realiza as operações aritméticas em paralelo através de canais de dados. O grupo de matemática de vetor 750 inclui instruções aritméticas (por exemplo, dp4) na forma de 0101xxxxb (por exemplo, 0x50). O grupo de matemática de vetor realiza a aritmética tal como cálculos de produto escalar em operandos de vetor. A decodificação de código operacional ilustrada 740, em uma modalidade, pode ser usada para determinar qual porção de uma unidade de execução será usada para executar uma instrução decodificada. Por exemplo, algumas instruções podem ser projetadas como instruções sistólicas que serão reveladas por um arranjo sistólico. Outras instruções, tais como instruções de traçado de raios (não mostrado) podem ser encaminhadas para um núcleo de traçado de raios ou lógica de traçado de raios dentro de uma fatia ou divisão de lógica de execução.
Pipeline de Gráficos
[00134] A Figura 8 é um diagrama de blocos de outra modalidade de um processador gráfico 800. Elementos da Figura 8 que têm os mesmos numerais de referência (ou nomes) que os elementos de qualquer outra Figura no presente documento podem operar ou funcionar de qualquer maneira similar à descrita em qualquer ponto no presente documento, porém, sem limitação a isso.
[00135] Em algumas modalidades, processador gráfico 800 inclui um pipeline de geometria 820, um pipeline de mídia 830, um motor de exibição 840, lógica de execução de encadeamento 850, e um pipeline de saída de renderização 870. Em algumas modalidades, processador gráfico 800 é um processador gráfico dentro de um sistema de processamento de múltiplos núcleos que inclui um ou mais núcleos de processamento de propósito geral. O processador gráfico é controlado por gravações de registro para um ou mais registros de controle (não mostrados) ou por meio de comandos emitidos ao processador gráfico 800 por meio de uma interconexão de anel 802. Em algumas modalidades, interconexão de anel 802 acopla o processador gráfico 800 a outros componentes de processamento, tais como outros processadores gráficos ou processadores de propósito geral. Comandos de interconexão de anel 802 são interpretados por um gerador de fluxo contínuo de comando 803, que fornece instruções aos componentes individuais do pipeline de geometria 820 ou do pipeline de mídia 830.
[00136] Em algumas modalidades, o gerador de fluxo contínuo de comando 803 direciona a operação de um coletor de vértice 805 que lê dados de vértice de memória e executa comandos de processamento de vértice fornecidos pelo gerador de fluxo contínuo de comando 803. Em algumas modalidades, o coletor de vértice 805 fornece dados de vértice para um sombreador de vértice 807, que realiza transformação de espaço coordenada e operações de iluminação para cada vértice. Em algumas modalidades, o coletor de vértice 805 e o sombreador de vértice 807 executam instruções de processamento de vértice ao despachar encadeamentos de execução para unidades de execução 852A-852B por meio de um despachante de encadeamento 831.
[00137] Em algumas modalidades, as unidades de execução 852A a 852B são um arranjo de processadores de vetor que têm um conjunto de instruções para realizar operações de gráficos e de mídia. Em algumas modalidades, as unidades de execução 852A a 852B têm um cache L1 afixado 851 que é específico para cada arranjo ou compartilhado entre os arranjos. O cache pode ser configurado como um cache de dados, um cache de instrução ou um cache único que é particionado para conter dados e instruções em partições diferentes.
[00138] Em algumas modalidades, o pipeline de geometria 820 inclui componentes de tesselação para executar tesselação acelerada por hardware de objetos 3D. Em algumas modalidades, um sombreador de hull programável 811 configura as operações de tesselação. Um sombreador de domínio programável 817 fornece avaliação de extremidade posterior de saída de tesselação. Um tessellador 813 opera na direção do sombreador de hull 811 e contém lógica de propósito especial para gerar um conjunto de objetos geométricos detalhados com base em um modelo geométrico grosseiro que é fornecido como entrada para o pipeline de geometria 820. Em algumas modalidades, se a tesselação não for usada, componentes de tesselação (por exemplo, sombreador de hull 811, tesselador 813, e sombreador de domínio 817) podem ser desviados.
[00139] Em algumas modalidades, os objetos geométricos completos podem ser processados por um sombreador de geometria 819 por meio de um ou mais encadeamentos expedidos às unidades de execução 852A a 852B, ou podem prosseguir diretamente para o cortador 829. Em algumas modalidades, o sombreador de geometria opera em objetos geométricos inteiros, em vez de em vértices ou remendos de vértices como em estágios anteriores do pipeline de gráficos. Caso a tesselação seja desabilitada, o sombreador de geometria 819 recebe a entrada a partir do sombreador de vértice 807. Em algumas modalidades, o sombreador de geometria 819 é programável por um programa de sombreador de geometria para realizar tesselação de geometria caso as unidades de tesselação estejam desabilitadas.
[00140] Antes da rasterização, um limitador 829 processa dados de vértice. O limitador 829 pode ser um limitador de função fixa ou um limitador programável que tem funções de sombreador de limitação e geometria. Em algumas modalidades, um componente varredor de teste de profundidade 873 no pipeline de saída de renderização 870 expede sombreadores de pixel para converter os objetos geométricos em representações por pixel. Em algumas modalidades, lógica de sombreador de pixel é incluída na lógica de execução de encadeamento 850. Em algumas modalidades, uma aplicação pode desviar o componente varredor de teste de profundidade 873 e dados de vértice não submetidos a varredura de acesso por meio de uma unidade de fluxo contínuo externo 823.
[00141] O processador gráfico 800 tem um barramento de interconexão, uma malha de interconexão ou algum outro mecanismo de interconexão que permite que os dados e a mensagem passem entre os componentes principais do processador gráfico. Em algumas modalidades, unidades de execução 852A a 852B e unidades lógicas associadas (por exemplo, cache L1 851, amostrador 854, cache de textura 858, etc.) se interconectam por meio de uma porta de dados 856 para realizar acesso à memória e se comunicar com componente de pipeline de saída de renderização do processador. Em algumas modalidades, o amostrador 854, os caches 851, 858 e as unidades de execução 852A, -852B, cada um, têm trajetos de acesso de memória separados. Em uma modalidade, o cache de textura 858 também pode ser configurado como um cache de amostrador.
[00142] Em algumas modalidades, o pipeline de saída de renderizador 870 contém um rasterizador e o componente de teste de profundidade 873 que converte objetos com base em vértice em uma representação com base em pixel associada. Em algumas modalidades, a lógica de rasterizador inclui uma unidade para colocar em janela/mascaradora para realizar rasterização de linha e triângulo de função fixa. Um cache de renderização associado 878 e cache de profundidade 879 também estão disponíveis em algumas modalidades. Um componente de operações de pixel 877 realiza operações com base em pixel nos dados, embora em alguns exemplos, operações de pixel associadas a operações 2D (por exemplo, transferências de imagem de bloco em bits com mesclagem) são realizadas pelo motor 2D 841, ou substituídas em tempo de exibição pelo controlador de exibição 843 com o uso de planos de exibição de sobreposição. Em algumas modalidades, um cache L3 compartilhado 875 está disponível para todos os componentes de gráficos, o que permite o compartilhamento de dados sem o uso de memória de sistema principal.
[00143] Em algumas modalidades, o pipeline de mídia de processador gráfico 830 inclui um motor de mídia 837 e um front-end de vídeo 834. Em algumas modalidades, o front-end de vídeo 834 recebe comando de pipeline a partir do gerador de fluxo contínuo de comando 803. Em algumas modalidades, o pipeline de mídia 830 inclui um gerador de fluxo contínuo de comando separado. Em algumas modalidades, o front-end de vídeo 834 processa comandos de mídia antes de enviar o comando ao motor de mídia 837. Em algumas modalidades, o motor de mídia 837 inclui funcionalidade de geração de encadeamento para gerar encadeamentos para expedir para a lógica de execução de encadeamento 850 por meio do expedidor de encadeamento 831.
[00144] Em algumas modalidades, o processador gráfico 800 inclui um motor de exibição 840. Em algumas modalidades, o motor de exibição 840 é externo ao processador 800 e de acopla com o processador gráfico por meio da interconexão de anel 802, ou algum outro barramento ou malha de interconexão. Em algumas modalidades, o motor de exibição 840 inclui um motor 2D 841 e um controlador de exibição 843. Em algumas modalidades, o motor de exibição 840 contém lógica de propósito especial com capacidade para operar independentemente do pipeline de 3D. Em algumas modalidades, o controlador de exibição 843 se acopla a um dispositivo de exibição (não mostrado), que pode ser um dispositivo de exibição integrado de sistema, como em um computador do tipo laptop, ou um dispositivo de exibição externo afixado por meio de um conector de dispositivo de exibição.
[00145] Em algumas modalidades, o pipeline de geometria 820 e o pipeline de mídia 830 são configuráveis para realizar operações com base em múltiplas interfaces de programação de mídia e gráfica e não são específicos para qualquer uma interface de programação de aplicativo (API). Em algumas modalidades, o software acionador para o processador gráfico traduz chamadas de API que são específicas para uma biblioteca de mídia ou gráfica particular em comandos que podem ser processados pelo processador gráfico. Em algumas modalidades, o suporte é fornecido pela Biblioteca de Gráficos Aberta (OpenGL), Linguagem de Computação Aberta (OpenCL), e/ou gráficos Vulkan e API de computação, todos do grupo Khronos. Em algumas modalidades, o suporte também pode ser fornecido pela biblioteca Direct3D da Microsoft Corporation. Em algumas modalidades, uma combinação dessas bibliotecas pode ser suportada. O suporte também pode ser fornecido para a Biblioteca de Visão Computadorizada de Fonte Aberta (OpenCV). Uma API futura como um pipeline 3D compatível também seria suportada se um mapeamento pudesse ser realizado a partir do pipeline da API futura para o pipeline do processador gráfico.
Programação de Pipeline de Gráficos
[00146] A Figura 9A é um diagrama de blocos que ilustra um formato de comando de processador gráfico 900 de acordo com algumas modalidades. A Figura 9B é um diagrama de blocos que ilustra uma sequência de comando de processador gráfico 910 de acordo com uma modalidade. As caixas com linha sólida na Figura 9A ilustram os componentes que são geralmente incluídos em um comando de gráficos enquanto as de linhas tracejadas incluem componentes que são opcionais ou que são somente incluídos em um subconjunto dos gráficos comandos. O formato de comando de processador gráfico 900 exemplificador da Figura 9A inclui campos de dados para identificar um cliente 902, um código operacional de comando (código operacional) 904, e dados 906 para o comando. Um subcódigo operacional 905 e um tamanho de comando 908 também são incluídos em alguns comandos.
[00147] Em algumas modalidades, o cliente 902 especifica a unidade de cliente do dispositivo de gráficos que processa os dados de comando. Em algumas modalidades, um analisador de processador de comando de gráficos examina o campo de cliente de cada comando para condicionar o processamento adicional do comando e rotear os dados de comando para a unidade de cliente apropriada. Em algumas modalidades, as unidades de cliente de processador gráfico incluem uma unidade de interface de memória, uma unidade de renderização, uma unidade 2D, uma unidade 3D e uma unidade de mídia. Cada unidade de cliente tem um pipeline de processamento correspondente que processa os comandos. Uma vez que o comando é recebido pela unidade de cliente, a unidade de cliente lê o código operacional 904 e, se presente, subcódigo operacional 905 para determinar a operação para se executar. A unidade de cliente executa o comando com o uso de informações no campo de dados 906. Para alguns comandos, um tamanho de comando explicito 908 é esperado para especificar o tamanho do comando. Em algumas modalidades, o analisador de comando determina automaticamente o tamanho de pelo menos alguns dos comandos com base no código operacional de comando. Em algumas modalidades, os comandos são alinhados por meio de múltiplos de uma palavra dupla. Outros formatos de comando podem ser usados.
[00148] O fluxograma na Figura 9B ilustra uma sequência de comando de processador gráfico 910 exemplificadora. Em algumas modalidades, o software ou o firmware de um sistema de processamento de dados que caracteriza uma modalidade do processador gráfico usa uma versão da sequência de comando mostrada para estabelecer, executar e concluir um conjunto de operações de gráficos. Uma sequência de comando de amostra é mostrada e descrita para fins de exemplo somente, visto que as modalidades não são limitadas a esses comandos específicos ou a essa sequência de comandos. Além disso, os comandos podem ser emitidos como lote de comandos em uma sequência de comando, de modo que o processador gráfico processe a sequência de comandos em concorrência pelo menos parcialmente.
[00149] Em algumas modalidades, a sequência de comando de processador gráfico 910 pode começar com um comando de liberação de pipeline 912 para fazer com que qualquer pipeline de gráficos ativo conclua os comandos atualmente pendentes para o pipeline. Em algumas modalidades, o pipeline de 3D 922 e o pipeline de mídia 924 não operam simultaneamente. A liberação de pipeline é realizada para fazer com que o pipeline gráfico ativo conclua quaisquer comandos pendentes. Em resposta a uma liberação de pipeline, o analisador de comando para o processador gráfico interromperá o processamento de comando até que os motores de desenho ativos concluam as operações pendentes e os caches de leitura relevantes sejam invalidados. Opcionalmente, quaisquer dados no cache de renderização que sejam marcados "sujo" podem ser liberados para a memória. Em algumas modalidades, o comando de liberação de pipeline 912 pode ser usado para sincronização de pipeline ou antes de colocar o processador gráfico em um estado de baixa potência.
[00150] Em algumas modalidades, um comando de seleção de pipeline 913 é usado quando uma sequência de comando exige que o processador gráfico comute explicitamente entre pipelines. Em algumas modalidades, um comando de seleção de pipeline 913 é exigido apenas uma vez dentro de um contexto de execução antes de emitir o comando de pipeline, a menos que o contexto seja emitir comandos para ambos os pipelines. Em algumas modalidades, um comando de alinhamento de pipeline 912 é exigido imediatamente antes de um pipeline comutar por meio do comando de seleção de pipeline 913.
[00151] Em algumas modalidades, um comando de controle de pipeline 914 configura um pipeline de gráficos para operação e é usado para programar o pipeline de 3D 922 e o pipeline de mídia 924. Em algumas modalidades, o comando de controle de pipeline 914 configura o estado de pipeline para o pipeline ativo. Em uma modalidade, o comando de controle de pipeline 914 é usado para sincronização de pipeline e para limpar dados de uma ou mais memórias cache dentro do pipeline ativo antes de processar um lote de comandos.
[00152] Em algumas modalidades, os comandos de estado de armazenamento temporário de retorno 916 são usados para configurar um conjunto de armazenamentos temporários de retorno para os respectivos pipelines gravarem dados. Algumas operações de pipeline exigem a alocação, seleção ou configuração de um ou mais armazenamentos temporários de retorno em que as operações gravam dados intermediário durante o processamento. Em algumas modalidades, o processador gráfico também usa um ou mais armazenamentos temporários de retorno para armazenar dados de saída e para realizar comunicação de encadeamento cruzada. Em algumas modalidades, o estado de armazenamento temporário de retorno 916 inclui a seleção do tamanho e da quantidade de armazenamentos temporários de retorno a ser usada para um conjunto de operações de pipeline.
[00153] Os comandos remanescentes na sequência de comando diferem com base no pipeline ativo para operações. Com base em uma determinação de pipeline 920, a sequência de comando é adaptada ao pipeline 3D 922 que começa com o estado de pipeline 3D 930, ou o pipeline de mídia 924 que começa no estado de pipeline de mídia 940.
[00154] Os comandos para configurar o estado de pipeline 3D 930 incluem comandos de definição de estado 3D para estado de armazenamento temporário de vértice, estado de elemento de vértice, estado de cor constante, estado de armazenamento temporário de profundidade e outras variáveis de estado que devem ser configuradas antes de comandos primitivos 3D serem processados. Os valores desses comandos são determinados, pelo menos em parte, com base na API 3D particular em uso. Em algumas modalidades, os comandos de estado de pipeline 3D 930 também têm capacidade para desabilitar ou desviar seletivamente certos elementos de pipeline, caso esses elementos não sejam usados.
[00155] Em algumas modalidades, o comando primitivo 3D 932 é usado para submeter primitivos 3D a serem processados pelo pipeline 3D. Os comandos e parâmetros associados que são passados para o processador gráfico por meio do comando primitivo 3D 932 são encaminhados para a função de coleta de vértice no pipeline de gráficos. A função de coleta de vértice usa os dados de comando primitivos 3D 932 para gerar estruturas de dados de vértice. As estruturas de dados de vértice são armazenadas em um ou mais armazenamentos temporários de retorno. Em algumas modalidades, o comando primitivo 3D 932 é usado para realizar operações de vértice em primitivos 3D por meio de sombreadores de vértice. Para processar sombreadores de vértice, o pipeline 3D 922 despacha encadeamentos de execução de sombreador para unidades de execução de processador de gráficos.
[00156] Em algumas modalidades, pipeline de 3D 922 é disparado por meio de um comando ou evento de execução 934. Em algumas modalidades, uma gravação de registro dispara a execução de comando. Em algumas modalidades, a execução é disparada por meio de um comando "ir" ou "pontapé" na sequência de comando. Em uma modalidade, a execução de comando é disparada com o uso de um comando de sincronização de pipeline para liberar a sequência de comando através do pipeline de gráficos. O pipeline 3D realizará processamento de geometria para os primitivos 3D. Uma vez que operações sejam concluídas, os objetos geométricos resultantes são rasterizados e o mecanismo de pixel colore os pixels resultantes. Comandos adicionais para controlar operações de sombreamento de pixel e de extremidade posterior de pixel também podem ser incluídos para essas operações.
[00157] Em algumas modalidades, a sequência de comando de processador gráfico 910 segue o caminho de pipeline de mídia 924 ao realizar operações de mídia. Em geral, o uso específico e a maneira de programar o pipeline de mídia 924 depende das operações de mídia ou computação a serem realizadas. Operações de decodificação de mídia específicas podem ser descarregadas para o pipeline de mídia durante a decodificação de mídia. Em algumas modalidades, o pipeline de mídia também pode ser desviado e a decodificação de mídia pode ser realizada como um todo ou em parte com o uso de recursos fornecidos por um ou mais núcleos de processamento de propósito geral. Em uma modalidade, o pipeline de mídia também inclui elementos para operações de unidade de processador de propósito geral de gráficos (GPGPU), em que o processador gráfico é usado para realizar operações de vetor de SIMD com o uso de programas de sombreador computacionais que não são explicitamente relacionados à renderização de primitivos de gráficos.
[00158] Em algumas modalidades, pipeline de mídia 924 é configurado de maneira similar ao pipeline de 3D 922. Um conjunto de comandos para configurar o estado de pipeline de mídia 940 são expedidos ou colocados em uma fila de comandos antes dos comandos de objeto de mídia 942. Em algumas modalidades, comandos para o estado de pipeline de mídia 940 incluem dados para configurar o pipeline de mídia elementos que serão usados para processar os objetos de mídia. Isso inclui dados para configurar a lógica de decodificação de vídeo e de codificação de vídeo dentro do pipeline de mídia, tal como formato de codificação ou de decodificação. Em algumas modalidades, comandos para o estado de pipeline de mídia 940 também suportam o uso de um ou mais indicadores para elementos de estado "indiretos" que contêm um lote de configurações de estado.
[00159] Em algumas modalidades, comandos de objeto de mídia 942 fornecem indicadores para objetos de mídia para processar através do pipeline de mídia. Os objetos de mídia incluem armazenamentos temporários de memória que contêm dados de vídeo a serem processados. Em algumas modalidades, todos os estados de pipeline de mídia devem ser válidos antes de emitir um comando de objeto de mídia 942. Uma vez que o estado de pipeline esteja configurado e os comandos de objeto de mídia 942 estejam em fila, o pipeline de mídia 924 é disparado por meio de um comando de execução 944 ou um evento de execução equivalente (por exemplo, gravação de registro). A saída do pipeline de mídia 924 pode, então, ser pós-processada por operações fornecidas pelo pipeline de 3D 922 ou pelo pipeline de mídia 924. Em algumas modalidades, operações de GPGPU são configuradas e executadas de uma maneira similar às operações de mídia.
Arquitetura de Software de Gráficos
[00160] A Figura 10 ilustra uma arquitetura de software gráfico exemplificadora para um sistema de processamento de dados 1000 de acordo com algumas modalidades. Em algumas modalidades, a arquitetura de software inclui um aplicativo de gráficos 3D 1010, um sistema operacional 1020 e pelo menos um processador 1030. Em algumas modalidades, o processador 1030 inclui um processador gráfico 1032 e um ou mais núcleos de processador de propósito geral 1034. O aplicativo de gráficos 1010 e o sistema operacional 1020, cada um, são executados na memória de sistema 1050 do sistema de processamento de dados.
[00161] Em algumas modalidades, o aplicativo de gráficos 3D 1010 contém um ou mais programas de sombreador que incluem instruções de sombreador 1012. As instruções de linguagem de sombreador podem estar em uma linguagem de sombreador de alto nível, tal como a Linguagem de Sombreador de Alto Nível (HLSL) de Direct3D, a Linguagem de Sombreador OpenGL (GLSL), e assim por diante. O aplicativo também inclui instruções executáveis 1014 em uma linguagem de máquina adequada para execução pelo núcleo de processador de propósito geral 1034. O aplicativo também inclui objetos de gráficos 1016 definidos por dados de vértice.
[00162] Em algumas modalidades, o sistema operacional 1020 é um sistema operacional Microsoft® Windows® disponível junto à Microsoft Corporation, um sistema operacional como UNIX proprietário, ou um sistema operacional como UNIX de fonte aberta com o uso de uma variante do kernel do Linux. O sistema operacional 1020 pode suportar uma API de gráficos 1022 como a API Direct3D, a API OpenGL, ou a API Vulkan. Quando a API Direct3D está em uso, o sistema operacional 1020 usa um compilador de sombreador de front-end 1024 para compilar quaisquer instruções de sombreador 1012 em HLSL em uma linguagem de sombreador de nível inferior. A compilação pode ser uma compilação no tempo certo (JIT) ou o aplicativo pode realizar pré-compilação de sombreador. Em algumas modalidades, sombreadores de alto nível são compilados em sombreadores de baixo nível durante a compilação do aplicativo de gráficos 3D 1010. Em algumas modalidades, as instruções de sombreador 1012 são fornecidas em uma forma intermediária, tais como uma versão da Representação Intermediária Portátil Padrão (SPIR) usada pela API Vulkan.
[00163] Em algumas modalidades, o acionador de gráficos de modo de usuário 1026 contém um compilador de sombreador de extremidade posterior 1027 para converter as instruções de sombreador 1012 para uma representação específica de hardware. Quando a API OpenGL está em uso, instruções de sombreador 1012 na linguagem de alto nível de GLSL são passadas para um acionador de gráficos de modo de usuário 1026 para compilação. Em algumas modalidades, a unidade de gráfico de modo de usuário 1026 usa funções de modo de kernel de sistema operacional 1028 para se comunicar com um acionador de gráficos de modo de kernel 1029. Em algumas modalidades, o acionador de gráficos de modo de kernel 1029 se comunica com o processador gráfico 1032 para expedir comandos e instruções.
Implantações de Núcleo de IP
[00164] Um ou mais aspectos da pelo menos uma modalidade podem ser implantados por código representativo armazenado em uma mídia legível por máquina que representa e/ou define lógica dentro de um circuito integrado, tal como um processador. Por exemplo, a mídia legível por máquina pode incluir instruções que representam várias lógicas dentro do processador. Quando lidas por uma máquina, as instruções podem fazer a máquina fabricar a lógica para realizar as técnicas descritas no presente documento. Tais representações, conhecidas como "núcleos de IP", são unidades reutilizáveis da lógica para um circuito integrado que pode ser armazenado em uma mídia legível por máquina tangível como um modelo de hardware que descreve a estrutura do circuito integrado. O modelo de hardware pode ser fornecido aos vários clientes ou instalações de fabricação, que carregam o modelo de hardware em máquinas de fabricação que fabricam o circuito integrado. O circuito integrado pode ser fabricado de modo que o circuito realize operações descritas em associação com qualquer uma das modalidades descritas no presente documento.
[00165] A Figura 11A é um diagrama de blocos que ilustra um sistema de desenvolvimento de núcleo de IP 1100 que pode ser usado para fabricar um circuito integrado para realizar operações de acordo com uma modalidade. O sistema de desenvolvimento de núcleo de IP 1100 pode ser usado para gerar projetos modulares reutilizáveis que podem ser incorporados em um projeto maior ou usado para construir um circuito integrado inteiro (por exemplo, um circuito integrado de SOC). Uma instalação de projeto 1130 pode gerar uma simulação de software 1110 de um projeto de núcleo de IP em uma linguagem de programação de alto nível (por exemplo, C/C++). A simulação de software 1110 pode ser usada para projetar, testar e verificar o comportamento do núcleo de IP com o uso de um modelo de simulação 1112. O modelo de simulação 1112 pode incluir simulações funcionais, comportamentais e/ou temporais. Um projeto de nível de transferência de registro (RTL) 1115 pode, então, ser criado ou sintetizado a partir do modelo de simulação 1112. O projeto de RTL 1115 é uma abstração do comportamento do circuito integrado que modela o fluxo de sinais digitais entre registros de hardware, que incluem a lógica associada revelada com o uso dos sinais digitais modelados. Adicionalmente a um projeto de RTL 1115, projetos de nível inferior no nível de lógica ou nível de transistor também podem ser criados, projetados ou sintetizados. Assim, os detalhes particulares do projeto inicial e simulação podem variar.
[00166] O projeto de RTL 1115 ou equivalente pode ser ainda sintetizado pela instalação de projeto em um modelo de hardware 1120, que pode estar em uma linguagem de descrição de hardware (HDL), ou alguma outra representação de dados de projeto físico. A HDL pode ser adicionalmente simulado ou testado para verificar o projeto de núcleo de IP. O projeto de núcleo de IP pode ser armazenado para entrega para uma instalação de fabricação terceirizada 1165 com o uso de memória não volátil 1140 (por exemplo, disco rígido, memória flash, ou qualquer mídia de armazenamento não volátil). Alternativamente, o projeto de núcleo de IP pode ser transmitido (por exemplo, por meio da Internet) através de uma conexão com fio 1150 ou conexão sem fio 1160. A instalação de fabricação 1165 pode, então, fabricar um circuito integrado que tem como base, pelo menos em parte, o projeto de núcleo de IP. O circuito integrado fabricado pode ser configurado para realizar operações de acordo com pelo menos uma modalidade descrita no presente documento.
[00167] A Figura 11B ilustra uma vista lateral de corte transversal de um conjunto de pacote de circuito integrado 1170, de acordo com algumas modalidades descritas no presente documento. O conjunto de pacote de circuito integrado 1170 ilustra uma implantação de um ou mais dispositivos de processador ou acelerador conforme descrito no presente documento. O conjunto de pacote 1170 inclui múltiplas unidades de lógica de hardware 1172, 1174 conectadas a um substrato 1180. A lógica 1172, 1174 pode ser implantada pelo menos parcialmente em hardware de lógica configurável ou hardware de lógica de funcionalidade fixada, e pode incluir uma ou mais porções de qualquer um dentre o núcleo (ou núcleos) de processador, processador (ou processadores) de gráficos, ou outros dispositivos de acelerador descritos no presente documento. Cada unidade de lógica 1172, 1174 pode ser implantada dentro de uma matriz semicondutora e acoplada com o substrato 1180 por meio de uma estrutura de interconexão 1173. A estrutura de interconexão 1173 pode ser configurada para rotear sinais elétricos entre a lógica 1172, 1174 e o substrato 1180, e pode incluir interconexões, tais como, porém, sem limitação, saliências ou pilares. Em algumas modalidades, a estrutura de interconexão 1173 pode ser configurada para rotear sinais elétricos, tais como, por exemplo, sinais de entrada/saída (I/O) e/ou sinais de potência ou solo associados à operação da lógica 1172, 1174. Em algumas modalidades, o substrato 1180 é um substrato de laminado à base de epóxi. O substrato 1180 pode incluir outros tipos adequados de substratos em outras modalidades. A montagem de pacote 1170 pode estar conectada a outros dispositivos elétricos por meio de uma interconexão de pacote 1183. A interconexão de pacote 1183 pode ser acoplada a uma superfície do substrato 1180 para rotear sinais elétricos para outros dispositivos elétricos, tal como uma placa-mãe, outro conjunto de chips, ou módulo de múltiplos chips.
[00168] Em algumas modalidades, as unidades de lógica 1172, 1174 são eletricamente acopladas a uma ponte 1182 que é configurada para rotear sinais elétricos entre as lógicas 1172, 1174. A ponte 1182 pode ser uma estrutura de interconexão densa que fornece uma rota para sinais elétricos. A ponte 1182 pode incluir um substrato de ponte composto de vidro ou um material semicondutor adequado. Recursos de roteamento elétricos podem ser formados no substrato de ponte para fornecer uma conexão de chip a chip entre a lógica 1172, 1174.
[00169] Embora duas unidades de lógica 1172, 1174 e uma ponte 1182 sejam ilustradas, modalidades descritas no presente documento pode incluir mais ou menos unidades lógicas em uma ou mais matrizes. A uma ou mais matrizes podem ser conectadas por zero ou mais pontes, visto que a ponte 1182 pode ser excluída quando a lógica é incluída em uma matriz única. Alternativamente, múltiplas matrizes ou unidades de lógica podem ser conectadas por uma ou mais pontes. Adicionalmente, múltiplas unidades lógicas, matrizes, e pontes podem ser conectadas entre si em outras configurações possíveis, incluindo configurações tridimensionais.
[00170] A Figura 11C ilustra um conjunto de pacote 1190 que inclui múltiplas unidades de chiplets de lógica de hardware conectadas a um substrato 1180 (por exemplo, matriz de base). Uma unidade de processamento gráfico, processador gráfico, e/ou acelerador de computação conforme descrito no presente documento pode ser composto de diversos chiplets de silicone que são separadamente fabricados. Nesse contexto, um chiplet é um pelo menos circuito integrado parcialmente empacotado que inclui unidades distintas de lógica que podem ser montadas com outros chiplets em um pacote maior. Um conjunto diverso de chiplets com lógica de núcleo de IP diferente pode ser montada em um dispositivo único. Adicionalmente, os chiplets podem ser integrados em uma matriz de base ou chiplet de base com uso de tecnologia de interposição ativa. Os conceitos descritos no presente documento permitem a interconexão e comunicação entre as diferentes formas de IP dentro da GPU. Núcleos de IP podem ser fabricados com o uso de diferentes tecnologias de processo e compostos durante a fabricação, o que evita a complexidade de convergir múltiplos IPs, especialmente em um grande SoC com diversos tipos de IPs, no mesmo processo de fabricação. Permitir o uso de múltiplas tecnologias de processo aumenta o tempo de comercialização e fornece uma maneira rentável de criar múltiplas SKUs de produto. Adicionalmente, os IPs desagregados são mais passíveis de serem acionados por potência independentemente, componentes que não estão em uso em uma dada carga de trabalho podem ser desligados, o que reduz o consumo de potência geral.
[00171] Os pequenos chips de lógica de hardware podem incluir pequenos chips de lógica de hardware de propósito especial 1172, pequenos chips de lógica ou I/O 1174 e/ou pequenos chips de memória 1175. Os pequenos chips de lógica de hardware 1172 e pequenos chips de lógica ou I/O 1174 podem ser implantados pelo menos parcialmente em lógica configurável ou hardware de lógica de funcionalidade fixada e podem incluir uma ou mais porções de qualquer um dentre o núcleo (ou núcleos) de processador, processador (ou processadores) de gráficos, processadores paralelos ou outros dispositivos de acelerador descritos no presente documento. Os pequenos chips de memória 1175 podem ser memória DRAM (por exemplo, GDDR, HBM) ou memória cache (SRAM).
[00172] Cada pequeno chip pode ser fabricado como molde de semicondutor separado e acoplado ao substrato 1180 por meio de uma estrutura de interconexão 1173. A estrutura de interconexão 1173 pode ser configurada para rotear sinais elétricos entre os vários pequenos chips e lógica dentro do substrato 1180. A estrutura de interconexão 1173 pode incluir interconexões, tais como, porém, sem limitação, saliências ou pilares. Em algumas modalidades, a estrutura de interconexão 1173 pode ser configurada para rotear sinais elétricos, tais como, por exemplo, sinais de entrada/saída (I/O) e/ou sinais de potência ou solo associados à operação dos pequenos chips de lógica, I/O e memória.
[00173] Em algumas modalidades, o substrato 1180 é um substrato de laminado à base de epóxi. O substrato 1180 pode incluir outros tipos adequados de substratos em outras modalidades. A montagem de pacote 1190 pode estar conectada a outros dispositivos elétricos por meio de uma interconexão de pacote 1183. A interconexão de pacote 1183 pode ser acoplada a uma superfície do substrato 1180 para rotear sinais elétricos para outros dispositivos elétricos, tal como uma placa-mãe, outro conjunto de chips, ou módulo de múltiplos chips.
[00174] Em algumas modalidades, um pequeno chip de lógica ou I/O 1174 e um pequeno chip de memória 1175 pode ser eletricamente acoplado por meio de uma ponte 1187 que é configurada para rotear sinais elétricos entre o pequeno chip de lógica ou I/O 1174 e um pequeno chip de memória 1175. A ponte 1187 pode ser uma estrutura de interconexão densa que fornece uma rota para sinais elétricos. A ponte 1187 pode incluir um substrato de ponte composto de vidro ou um material semicondutor adequado. Recursos de roteamento elétricos podem ser formados no substrato de ponte para fornecer uma conexão de chip a chip entre o chiplet de lógica ou I/O 1174 e um chiplet de memória 1175. A ponte 1187 também pode ser denominada como uma ponte de silício ou uma ponte de interconexão. Por exemplo, a ponte 1187, em algumas modalidades, é uma Ponte de Interconexão de Múltiplas matrizes Embutida (EMIB). Em algumas modalidades, a ponte 1187 pode ser simplesmente uma conexão direta de um chiplet a outro chiplet.
[00175] O substrato 1180 pode incluir componentes de hardware para I/O 1191, memória cache 1192, e outra lógica de hardware 1193. Uma malha 1185 pode ser embutida no substrato 1180 para permitir comunicação entre os vários chiplets de lógica e a lógica 1191, 1193 dentro do substrato 1180. Em uma modalidade, o I/O 1191, a malha 1185, cache, ponte, e outra lógica de hardware 1193 podem ser integrados em um molde de base que é estratificada no topo do substrato 1180. A malha 1185 pode ser uma rede em uma interconexão de chip ou outra forma de malha com comutação de pacote que comuta pacotes de dados entre componentes do conjunto de pacote.
[00176] Em diversas modalidades, uma montagem de pacote 1190 pode incluir mais ou menos número de componentes e chiplets que são interconectados por uma malha 1185 ou uma ou mais pontes 1187. Os chiplets dentro da montagem de pacote 1190 podem ser dispostos em uma disposição 3D ou 2,5D. Em geral, as estruturas de ponte 1187 podem ser usadas para facilitar uma interconexão ponto a ponto entre, por exemplo, chiplets de lógica ou I/O e chiplets de memória. A malha 1185 pode ser usada para interconectar os vários pequenos chips de lógica e/ou I/O (por exemplo, pequenos chips 1172, 1174, 1191, 1193) com outros pequenos chips de lógica e/ou I/O. Em uma modalidade, a memória cache 1192 dentro do substrato pode atuar como um cache global para a montagem de pacote 1190, parte de um cache global distribuído ou como um cache dedicado à malha 1185.
[00177] A Figura 11D ilustra um conjunto de pacote 1194 que inclui chiplets intercambiáveis 1195, de acordo com uma modalidade. O chiplets intercambiáveis 1195 pode ser montado em slots padronizados em um ou mais chiplets de base 1196, 1198. Os chiplets de base 1196, 1198 podem ser acoplados por meio de uma interconexão em ponte 1197, que pode ser similar às outras interconexões em ponte descritas no presente documento e podem ser, por exemplo, um EMIB. Chiplets de memória também podem ser conectados aos chiplets de lógica ou I/O por meio de uma interconexão em ponte. Chiplets de I/O e lógica podem se comunicar por meio de uma malha de interconexão. Os chiplets de base podem, cada um, suportar uma ou mais fendas em um formato padronizado para um dentre lógica ou I/O ou memória/cache.
[00178] Em uma modalidade, SRAM e circuitos de entrega de potência podem ser fabricados em um ou mais dos chiplets de base 1196, 1198, que podem ser fabricados com o uso de uma tecnologia de processo diferente em relação aos chiplets intercambiáveis 1195 que são empilhados no topo dos chiplets de base. Por exemplo, os chiplets de base 1196, 1198 podem ser fabricados com o uso de uma tecnologia de processo maior, enquanto os chiplets intercambiáveis podem ser fabricados com o uso de uma tecnologia de processo menor. Um ou mais dos chiplets intercambiáveis 1195 podem ser chiplets de memória (por exemplo, DRAM). Diferentes densidades de memória podem ser selecionadas para o conjunto de pacote 1194 com base na potência, e/ou desempenho alvejado para o produto que usa o conjunto de pacote 1194. Adicionalmente, chiplets de lógica com um diferente número de tipos de unidades funcionais podem ser selecionados no período de montagem com base na potência, e/ou desempenho alvejado para o produto. Adicionalmente, chiplets que contêm núcleos de lógica de IP de tipos diferentes podem ser inseridos nos slots de chiplet intercambiáveis, permitindo projetos de processador híbrido que podem se misturar e combinar com diferentes blocos de IP de tecnologia.
Circuito Integrado de Sistema em um Chip Exemplificativo
[00179] As Figuras 12 a 13B ilustram circuitos integrados exemplificativos e processadores gráficos associados que podem ser fabricados com o uso de um ou mais núcleos de IP, de acordo com várias modalidades descritas no presente documento. Adicionalmente ao que é ilustrado, outra lógica e circuitos podem ser incluídos, incluindo processadores gráficos/núcleos adicionais, controladores de interface periféricos, ou núcleos de processador de propósito geral.
[00180] A Figura 12 é um diagrama de blocos que ilustra um sistema exemplificativo em um circuito integrado de chip 1200 que pode ser fabricado com uso de um ou mais núcleos de IP, de acordo com uma modalidade. Circuito integrado exemplificador 1200 inclui um ou mais processadores de aplicação (ou processadores) 1205 (por exemplo, CPUs), pelo menos um processador gráfico 1210, e pode incluir adicionalmente um processador de imagem 1215 e/ou um vídeo processador 1220, do qual qualquer um pode ser um núcleo de IP modular das mesmas instalações ou de múltiplas instalações de projeto diferentes. O circuito integrado 1200 inclui lógica periférica ou de barramento incluindo um controlador de USB 1225, controlador de UART 1230, um controlador de SPI/SDIO 1235, e um controlador de I2S/I2C 1240. Adicionalmente, o circuito integrado pode incluir um dispositivo de exibição 1245 acoplado a um ou mais de um controlador de interface de multimídia de alta definição (HDMI) 1250 e uma interface de exibição de interface de processador de indústria móvel (MIPI) 1255. Armazenamento pode ser fornecido por um subsistema de memória flash 1260 incluindo memória flash e uma controlador de memória flash. A interface de memória pode ser fornecida por meio de um controlador de memória 1265 para acesso a dispositivos de memória de SDRAM ou SRAM. Alguns circuitos integrados incluem adicionalmente um motor de segurança embutida 1270.
[00181] As Figuras 13A a 13B são diagramas de blocos que ilustram processadores gráficos exemplificativos para uso dentro de um SoC, de acordo com modalidades descritas no presente documento. A Figura 13A ilustra um processador gráfico 1310 exemplificador de um sistema em um circuito integrado de chip que pode ser fabricado com uso de um ou mais núcleos de IP, de acordo com uma modalidade. A Figura 13B ilustra um processador gráfico 1340 exemplificador adicional de um sistema em um circuito integrado de chip que pode ser fabricado com uso de um ou mais núcleos de IP, de acordo com uma modalidade. O processador gráfico 1310 da Figura 13A é um exemplo de um núcleo de processador gráfico de baixa potência. O processador gráfico 1340 da Figura 13B é um exemplo de um núcleo de processador gráfico de maior desempenho. Cada um dos processadores gráficos 1310, 1340 pode ser variantes do processador gráfico 1210 da Figura 12.
[00182] Conforme mostrado na Figura 13A, o processador gráfico 1310 inclui um processador de vértice 1305 e um ou mais processador (ou processadores) de fragmento 1315A a 1315N (por exemplo, 1315A, 1315B, 1315C, 1315D, a 1315N-1, e 1315N). O processador gráfico 1310 pode executar diferentes programas sombreadores por meio de lógica separada, de modo que o processador de vértice 1305 seja otimizado para executar operações para programas sombreadores de vértice, enquanto o um ou mais processador (ou processadores) de fragmento 1315A a 1315N executam operações de sombreamento de fragmento (por exemplo, pixel) para programas sombreadores de fragmento ou pixel. O processador de vértice 1305 realiza o estágio de processamento de vértice do pipeline gráfico 3D e gera primitivos e dados de vértice. O processador (ou processadores) de fragmento 1315A a 1315N usam o primitivo e dados de vértice gerado pelo processador de vértice 1305 para produzir um armazenamento temporário de quadro que é exibido em um dispositivo de exibição. Em uma modalidade, o processador (ou processadores) de fragmento 1315A a 1315N são otimizados para executar programas sombreadores de fragmento conforme fornecido na API de OpenGL, que pode ser usada para realizar operações similares como um programa sombreador de pixel conforme fornecido para na API de Direct 3D.
[00183] O processador gráfico 1310 inclui adicionalmente um ou mais unidades de gerenciamento de memória (MMUs) 1320A a 1320B, cache (ou caches) 1325A a 1325B, e interconexão (ou interconexões) de circuito 1330A a 1330B. A uma ou mais MMU (ou MMUs) 1320A a 1320B fornecem para mapeamento de endereço virtual a físico para o processador gráfico 1310, incluindo para o processador de vértice 1305 e/ou processador (ou processadores) de fragmento 1315A a 1315N, que pode fazer referência a vértice ou dados de imagem/textura armazenado em memória, além de vértice ou dados de imagem/textura armazenados no um ou mais cache(s) 1325A a 132 5B. Em uma modalidade, o uma ou mais MMU (ou MMUs) 1320A a 1320B podem ser sincronizados com outras MMUs dentro do sistema, incluindo uma ou mais MMUs associadas ao um ou mais processadores de aplicação (ou processadores) 1205, processador de imagem 1215, e/ou vídeo processador 1220 da Figura 12, de modo que cada processador 1205 a 1220 possa participar de um sistema de memória virtual compartilhada ou unificada. A uma ou mais interconexão (ou interconexões) de circuito 1330A a 1330B permitem que o processador gráfico 1310 faça interface com outros núcleos de IP dentro do SoC, tanto por meio de um barramento interno do SoC como por meio de uma conexão direta, de acordo com modalidades.
[00184] Conforme mostrado na Figura 13B, o processador gráfico 1340 inclui as uma ou mais MMU (ou MMUs) 1320A a 1320B, cache (ou caches) 1325A a 1325B, e interconexão (ou interconexões) de circuito 1330A a 1330B do processador gráfico 1310 da Figura 13A. O processador gráfico 1340 inclui um ou mais núcleo (ou núcleos) de sombreador 1355A a 1355N (por exemplo, 1355A, 1355B, 1355C, 1355D, 1355E, 1355F, através de 1355N-1, e 1355N), que fornece uma arquitetura de núcleo de sombreador unificado na qual um núcleo ou tipo único ou núcleo pode executar todos os tipos de código de sombreador programável, incluindo código de programa de sombreador para implantar sombreadores de vértice, sombreadores de fragmento, e/ou sombreadores de computação. O número exato de núcleos de sombreador presentes podem variar entre modalidades e implantação. Adicionalmente, o processador gráfico 1340 inclui um gerenciador de tarefas internúcleo 1345, que atua como um expedidor de encadeamento a encadeamentos de execução de expedição a um ou mais núcleos de sombreador 1355A a 1355N e uma unidade de formação de peça 1358 para acelerar operações de formação de peça para renderização com base em peça, na qual operações de renderização para uma cena são subdivididas em espaço de imagem, por exemplo, para explorar coerência espacial local dentro de uma cena ou para otimizar o uso de caches internos.
Lógica de Aceleração de Tensor para Cargas de Trabalho de Aprendizado por Máquina
[00185] A Figura 14 é um diagrama de blocos de um sistema de processamento de dados 1400, de acordo com uma modalidade. O sistema de processamento de dados 1400 é um sistema de processamento heterogêneo que tem processador 1402, memória unificada 1410 e uma GPGPU 1420 que inclui lógica de aceleração de aprendizado por máquina. O processador 1402 e a GPGPU 1420 pode consistir em qualquer um dos processadores e GPGPU/processadores paralelos conforme descrito no presente documento. O processador 1402 pode executar instruções para um compilador 1415 armazenado no sistema de memória 1412. O compilador 1415 executa no processador 1402 para compilar o código-fonte 1414A em código compilado 1414B. O código compilado 1414B pode incluir instruções que podem ser executadas pelo processador 1402 e/ou instruções que podem ser executadas pela GPGPU 1420. Durante a compilação, o compilador 1415 pode realizar operações para inserir metadados, incluindo sugestões quanto ao nível de paralelismo de dados presente no código compilado 1414B e/ou sugestões relacionadas à localidade de dados associada a encadeamentos a ser expedidos com base no código compilado 1414B. O compilador 1415 pode incluir as informações necessárias para executar tais operações ou as operações podem ser realizadas com o auxílio de uma biblioteca de runtime 1416. A biblioteca de runtime 1416 também pode auxiliar o compilador 1415 na compilação do código-fonte 1414A e também pode incluir instruções que estão ligadas no runtime com o código compilado 1414B para facilitar a execução das instruções compiladas na GPGPU 1420.
[00186] A memória unificada 1410 representa um espaço de endereço unificado que pode ser acessado pelo processador 1402 e a GPGPU 1420. A memória unificada pode incluir memória de sistema 1412, bem como memória de GPGPU 1418. A memória de GPGPU 1418 é a memória dentro de um ritmo de endereço da GPGPU 1420 e pode incluir algum ou todo o sistema de memória 1412. Em uma modalidade, a memória de GPGPU 1418 também pode incluir pelo menos uma porção de qualquer memória dedicada para uso exclusivamente pela GPGPU 1420. Em uma modalidade, o código compilado 1414B armazenado no sistema de memória 1412 pode ser mapeado na memória de GPGPU 1418 para acesso pela GPGPU 1420.
[00187] A GPGPU 1420 inclui múltiplos blocos de computação1424A-1424N, que podem incluir um ou mais dentre uma variedade de recursos de processamento descritos no presente documento. Os recursos de processamento podem ser ou incluir uma variedade de diferentes recursos computacionais, como, por exemplo, unidades de execução, unidades de computação, multiprocessadores de transmissão contínua, multiprocessadores gráficos ou grupos de múltiplos núcleos. Em uma modalidade, a GPGPU 1420 inclui adicionalmente um tensor (por exemplo, matriz) o acelerador 1423, que pode incluir uma ou mais unidades de computação de função específica que são projetados para acelerar um subconjunto de operações matriciais (por exemplo, produto escalar, etc.). O acelerador de tensor 1423 também pode ser referido como um acelerador de tensor ou núcleo de tensor. Em uma modalidade, os componentes lógicos dentro do acelerador de tensor 1423 podem ser distribuído entre os recursos de processamento dos múltiplos blocos de computação 1424A-1424N.
[00188] A GPGPU 1420 também pode incluir um conjunto de recursos que podem ser compartilhados pelos blocos de computação 1424A-1424N e o acelerador de tensor 1423, que incluem, sem limitação, um conjunto de registros 1425, um módulo de potência e desempenho 1426, e um cache 1427. Em uma modalidade, os registradores 1425 incluem registradores acessíveis direta e indiretamente, em que os registradores indiretamente acessíveis são otimizados para uso pelo acelerador de tensor 1423. O módulo de potência e desempenho 1426 pode ser configurado para ajustar entrega de potência e frequências de relógio para os blocos de computação 1424A-1424N para componentes ociosos de porta de potência dentro dos blocos de computação 1424A-1424N. Em diversas modalidades, o cache 1427 pode incluir um cache de instrução e/ou um cache de dados de nível inferior.
[00189] A GPGPU 1420 pode incluir adicionalmente um cache de dados L3 1430, que pode ser usado para dados de cache acessados a partir da memória unificada 1410 pelo acelerador de tensor 1423 e/ou os elementos de computação dentro dos blocos de computação 1424A-1424N. Em uma modalidade, o cache de dados L3 1430 inclui memória local compartilhada 1432 que pode ser compartilhada pelos elementos de computação dentro dos blocos de computação 1424A-1424N e do acelerador de tensor 1423.
[00190] Em uma modalidade, a GPGPU 1420 inclui lógica de gerenciamento de instrução, como uma unidade de coleta e decodificação 1421 e umcontrolador de agendador 1422. A e unidade de coleta e decodificação1421 inclui uma unidade de coleta e unidade de decodificação para coletar e decodificar instruções para execução por um ou mais blocos de computação 1424A-1424N ou o acelerador de tensor1423. As instruções podem ser agendadas para a unidade funcional adequada dentro do bloco de computação 1424A-1424N ou o acelerador de tensor por meio docontrolador de agendador 1422. Em uma modalidade, o controlador de agendador 1422 é um ASIC configurável para realizar operações de agendamento avançadas. Em uma modalidade, o controlador de agendador 1422 é um microcontrolador ou um núcleo de processamento de energia por instrução baixa com capacidade de executar instruções de programador carregadas a partir de um módulo de firmware.
[00191] Em uma modalidade, algumas funções a serem realizadas pelos blocos de computação 1424A-1424N pode ser agendadas diretamente ou descarregadas para o acelerador de tensor 1423. Em diversas modalidades, o acelerador de tensor 1423 inclui lógica de elemento de processamento configurada para realizar de modo eficaz operações de computação de matriz, como operações de multiplicação e soma e operações de produto escalar usadas por gráficos 3D ou programas de sombreador de computação. Em uma modalidade, o acelerador de tensor 1423 pode ser configurado para acelerar operações usadas por estruturas de aprendizado por máquina. Em uma modalidade, o acelerador de tensor 1423 é um circuito integrado específico para aplicativo configurado explicitamente para realizar um conjunto específico de operações de multiplicação matricial paralela e/ou adição. Em uma modalidade, o acelerador de tensor 1423 é um arranjo de porta programável em campo (FPGA) que fornece lógica de função fixa que pode ser atualizada entre cargas de trabalho. O conjunto de operações matriciais que podem ser realizadas pelo acelerador de tensor 1423 pode ser limitado em relação às operações que podem ser realizadas pelo bloco de computação 1424A-1424N. Entretanto, o acelerador de tensor 1423 pode realizar aquelas operações em uma taxa de transferência significativamente maior e relação ao bloco de computação 1424A-1424N.
[00192] A Figura 15 ilustra uma operação matricial 1505 realizada por um pipeline de instrução 1500, de acordo com uma modalidade. O pipeline de instrução 1500 pode ser configurado para realizar uma operação matricial 1505, como, sem limitação, operação de produto escalar. O produto escalar de dois vetores é um valor escalar que é igual à soma de produtos de componentes correspondentes dos vetores. O produto escalar pode ser calculado como mostrado na equação(1) abaixo.
Figure img0001
[00193] O produto escalar pode ser usado em uma operação de convolução para uma rede neural convolucional (CNN). A Figura 15 ilustra uma convolução bidimensional (2D) usando-se uma operação matricial 1505 que inclui uma operação de produto escalar. Embora a convolução 2D seja ilustrada, convolução N-dimensional pode ser realizada em um volume N-dimensional com o uso de filtros N-dimensionais. Uma peça de campo receptivo1502 destaca uma porção de um volume de entrada em um armazenamento temporário de volume de entrada 1504. O armazenamento temporário de volume de entrada pode ser armazenado na memória 1530. Uma operação matricial de produto escalar 1505 pode ser realizada entre os dados dentro dapeça de campo receptivo 1502 e um filtro convolucional para gerar um ponto de dados dentro do armazenamento temporário de saída 1506, que também pode ser armazenado na memória 1530. A memória 1530 pode ser qualquer uma das memórias aqui descritas, incluindo memória do sistema 1412, memória de GPGPU 1418, ou uma ou mais memórias cache 1427, 1430 como na Figura 14.
[00194] A combinação dos pontos de dados dentro do armazenamento temporário de saída 1506 representa um mapa de ativação gerado pela operação de convolução. Cada ponto dentro do mapa de ativação é gerado deslizando-se o bloco de campo receptivo pelo armazenamento temporário de volume de entrada 1504. O mapa de ativação dados pode ser inserido para uma função de ativação para determinar um valor de ativação de saída. Em uma modalidade, a convolução do armazenamento temporário de volume de entrada 1504 pode ser definida dentro de uma estrutura comooperação matricial de alto nível 1505. As operações de matriz de alto nível podem ser realizadas por meio de operações primitivas, como uma operação de subprograma de álgebra linear básica (BLAS). As operações primitivas podem ser aceleradas por meio de instruções de hardware executadas pelo pipeline de instrução 1500.
[00195] O pipeline de instrução 1500 usado para acelerar as instruções de hardware pode incluir a unidade de coleta e decodificação de instrução 1421, que pode coletar e decodificar instruções de hardware, e o controlador de agendador 1422 que pode agendar instruções decodificadas para um ou mais recursos de processamento dentro dos blocos de computação computador 1424A-1424N e/ou o acelerador de tensor 1423. Em uma modalidade, uma instrução de hardware pode ser agendada aos blocos de computação 1424A-1424N e descarregada ao acelerador de tensor 1423. A uma ou mais instruções de hardware e dados associados para realizar a operação matricial 1505 podem ser armazenados na memória 1530. A saída da instrução de hardware também pode ser armazenada na memória 1530.
[00196] Em uma modalidade, o acelerador de tensor 1423 pode executar uma ou mais instruções de hardware para realizar a operação matricial 1505 usando um arranjo sistólica integrado 1508 (Lógica de DP). O arranjo sistólico 1508 pode incluir uma combinação de hardware de função programável e fixa que é configurável para realizar operações de produto escalar. Embora as unidades funcionais dentro dos blocos de computação1424A-1424N também sejam configurados para realizar operações de produto escalar, o arranjo sistólico 1508 pode ser configurado para realizar um subconjunto limitado de operações de produto escalar a uma produtividade significativamente maior em relação ao bloco de computação 1424A-1424N.
Aceleração por multiplicação Matricial Esparsa Escalonável Usando-se Arranjos Sistólicos com Entradas de Retroalimentação
[00197] É descrita no presente documento uma arquitetura para permitir uma aceleração por multiplicação matricial esparsa escalonável usando-se arranjos sistólicos com entradas de retroalimentação. A arquitetura acelera a multiplicação de matriz sistólica em cargas de trabalho cujos dados exibem um grande número de zeros. Essa arquitetura é facilmente escalonável, preservando os ganhos dados pelas otimizações introduzidas para aproveitar a esparsidade encontrada nos dados da carga de trabalho e permitindo incrementar a produtividade das instruções. As vantagens incluem área reduzida, consumo de energia reduzido e maior desempenho em relação a outros arranjos sistólicos. Esta arquitetura melhora o desempenho das operações de acumulação de produto escalar sistólico, reduzindo o número de computações em cargas de dados altamente esparsas. A redução das computações resulta em uma redução do consumo de energia quando comparado às arquiteturas anteriores. Essa arquitetura também escalona melhor do que os arranjos sistólicos existentes simplificando-se o projeto do arranjo sistólico. O design simplificado permite que a arquitetura seja amplamente incorporada em projetos de aceleradores para aumentar a produtividade de processamento de matriz desses aceleradores.
[00198] Os dados usados em computações de algoritmos de aprendizado por máquina exibem um grande número de zeros como elementos de entrada. Em aplicativos de rede neural, isso é causado naturalmente pela topologia da rede implantada e pelas características dos neurônios modelados. Por exemplo, em uma rede neural totalmente interconectada, as saídas de uma coluna ou camada de neurônios são conectadas a uma entrada de cada neurônio na próxima camada. Uma rede é composta de muitas camadas, cada uma possivelmente apresentando um grande número de neurônios. O último estágio na computação da saída de um neurônio é a execução da função de ativação. Essa função geralmente produz a avaliação de uma função positiva quando as computações das entradas do neurônio são positivas e emite zero quando são negativas. Devido a isso, grande parte dos resultados de saída de um neurônio podem ser zeros e, em uma etapa seguinte da computação da rede neural, alimentados para a próxima camada de rede.
[00199] Na execução de uma rede neural com um grande número de camadas e neurônios, cada camada é representada por uma matriz dos valores dos pesos de entrada dos neurônios e uma matriz dos valores das entradas dos neurônios. Todas as entradas de um neurônio são multiplicadas por seu peso e adicionadas ao resultado das outras entradas ao neurônio. Depois disso, a função de ativação é aplicada para obter a saída do neurônio que alimenta a próxima camada de rede. Para computar rapidamente a multiplicação e adição das entradas e peso dos neurônios, várias técnicas têm sido usadas em hardware. O que pertence a esta invenção é o uso de arranjos sistólicos para operações de multiplicação e acumulação.
[00200] A Figura 16 ilustra um arranjo sistólico 1600 que inclui circuitos multiplicadores e adicionadores organizados em uma forma de pipeline. As Entradas 1612A-1612H para a primeira matriz de entrada são representadas pelos elementos de dados contidos nas entradas rotuladas Src1 e Src1+1 a Src1+7. As entradas 1610A-1610B correspondem à segunda matriz de entrada e são rotuladas como Src2. A Entrada 1602, que pode incluir valores iniciais do acumulador, pode ser fornecida como Src0. Os elementos de processamento 1611A-1611H do arranjo sistólico 1600 operam como uma estrutura em pipeline e cada estágio é executado em um ciclo de relógio. Em cada ciclo, cada estágio pode receber uma nova entrada src2 que pode ser calculada com uma nova entrada Src1 ou uma mais antiga. Uma entrada Src2 opera com oito entradas Src1 (por exemplo, uma entrada Src1 por estágio). Os elementos de dados de um canal da entrada Src2 são transmitidos por todos os canais dos elementos de processamento 1611A-1611H. Os elementos de processamento operam então o canal Src2 com todos os canais de uma entrada Src1. Em um primeiro ciclo de relógio, uma entrada Src1 é operada com elementos de dados do primeiro canal de Src2. No próximo ciclo, um segundo Src1 (rotulado como Src1+1) opera com os elementos de dados do segundo canal de Src2. Essa sequência se repete nos 8 estágios do pipeline. Cada estágio adiciona sua operação à saída do estágio anterior. Em todos os estágios do pipeline, várias entradas Src2 são operadas de modo em pipeline. Conforme canais sucessivos de uma primeira entrada Src2 são empurrados através dos estágios do pipeline, uma nova entrada Src2 pode ser fornecida no primeiro estágio.
[00201] A saída 1622 do estágio final é rotulada como Dst. Em que d = a profundidade sistólica e e = o número de elementos de dados por canal, a saída de um canal é descrita pela equação (2) abaixo:
Figure img0002
[00202] Conforme mostrado na equação (2), cada canal pode incluir múltiplos elementos de dados nos quais as operações são realizadas em paralelo. Em uma modalidade, cada canal representa um vetor de dados de quatro elementos, embora um número diferente de elementos possa ser configurado para cada canal. Em uma modalidade, o número de elementos de dados dentro de um canal pode variar com base no tamanho de cada elemento de dados. Os produtos escalares podem ser executados usando, por exemplo, quatro vetores de elemento com tipos de dados de 8 bits por elemento, dois vetores de elemento com tipos de dados de 16 bits, oito vetores de elemento com tipos de dados de 4 bits (por exemplo, INT4) ou 16 elementos vetores com tipos de dados de 2 bits (por exemplo, INT2). O número de canais pode ser ajustado automaticamente dependendo do tipo de dados de Src1 e Src2. Uma instrução também pode especificar uma profundidade sistólica necessária a ser usada para a instrução.
[00203] Em uma modalidade, o elementos de processamento 1611A-1611H pode ler as entradas 1610A-1610H, 1612A- 1612H diretamente do arquivo de registro de uso geral. Em uma modalidade, o arranjo sistólico 1600 inclui lógica para ler as entradas 1610A-1610H, 1612A-1612H do arquivo de registro de propósito geral e armazena dados de entrada em registros, armazenamentos temporários ou memória que é interna ao arranjo sistólico. A lógica interna pode, então, alimentar os elementos de dados de entrada para os elementos de processamento 1611A-1611H para processamento. A saída 1622 pode ser gravada em registros internos ou memória do arranjo sistólico 1600 e/ou gravada diretamente no arquivo de registro de uso geral.
[00204] Em uma modalidade, quando os elementos que entram em um multiplicador/somador em um estágio são determinados como zero, a multiplicação/adição pode ser contornada e apenas a entrada anterior é propagada. Quando uma matriz de entrada é esparsa (por exemplo, contém um grande número de zeros), o número de operações a serem realizadas é reduzido. Algumas implantações podem ignorar os estágios de multiplicação/acumulação para evitar o gasto de energia fazendo a operação de multiplicação/adição. No entanto, simplesmente ignorar uma operação resulta em estágios ociosos na cadeia sistólica. Por exemplo, se um elemento de uma entrada Src2 for todo zeros, ignorar esse estágio associado a esse elemento economizará energia. No entanto, nenhuma operação será realizada nesse ciclo. Assim, a produtividade das operações permanecerá inalterada. Outras implantações podem reorganizar as entradas de tal forma que seções inteiras do arranjo podem ser contornadas. Reorganizar a entrada aumenta o custo de aumento de escala devido à adição de hardware extra para reorganizar as entradas. A arquitetura precisa considerar casos de entradas sem esparsidade, o que exigirá o uso de toda a profundidade do pipeline. Assim, a arquitetura deve ser projetada com todas as etapas sempre disponíveis.
[00205] Descreve-se no presente documento, em várias modalidades, arquiteturas com otimizações para manipular entradas esparsas de uma maneira enquanto evita os problemas acima. As modalidades fornecem um arranjo sistólico modular que pode ser facilmente escalonável para atender às necessidades de diferentes produtos e permitir a computação de apenas elementos diferentes de zero sem hardware adicional ou ciclos de relógio ociosos. Esses conceitos são descritos de forma incremental nas próximas seções deste relatório descritivo.
Um Acelerador por Multiplicação Matricial com Entradas de Retroalimentação
[00206] O arranjo sistólico 1600 é um arranjo de multiplicação/adição de oito profundidades com acumulações e pode ser referido como arranjo DPAS (Sistólico de Acumulação de Produto Escalar). A profundidade dessa arquitetura é benéfica para alguns produtos, projetos e/ou casos de uso. Outros produtos, projetos e/ou casos de uso podem não ter a necessidade de um arranjo com essa profundidade e se beneficiariam de um arranjo com menor produtividade, mas com área menor e/ou menor consumo de energia. Como alternativa, outros produtos, projetos e/ou casos de uso podem se beneficiar de uma produtividade de DPAS mais alta, alcançável usando uma profundidade de pipeline mais alta. Para reduzir a quantidade de hardware usado em um arranjo sistólico, enquanto conserva o mesmo modelo de agendamento que é usado para arranjos mais profundas, as entradas de retroalimentação são adicionadas a uma versão de profundidade reduzida das arranjos sistólicos mostradas na Figura 16
[00207] As Figuras 17A-17B ilustram o uso de um arranjo sistólico de quatro profundidades 1700 para calcular uma arranjo equivalente de oito estágios sistólicos. A Figura 17A mostra o arranjo recebendo entradas Src0 de uma fonte externa e processando os primeiros quatro estágios com entradas Src1 e Src2. A saída desse arranjo é alimentada de volta para a segunda etapa mostrada na Figura 17B. Figura 17B mostra que os próximos quatro estágios são calculados usando os dados de retroalimentação que incluem o valores já processados e as entradas Src1 e Src2.
[00208] Como mostrado na Figura 17A, o arranjo sistólico 1700 pode aceitar entrada 1602, como entrada Src0, que é lida (1702) por meio do seletor de dados 1704. Seletor de dados 1704 seleciona entre a entrada 1602 e a entrada de retroalimentação 1706. Os elementos de processamento 1611A-1611D podem processar entradas 1610A-1610D e 1612A-1612D de uma maneira semelhante ao arranjo sistólico 1600. Se quatro estágios forem suficientes para completar uma operação, o elemento de processamento 1611D pode escrever (1722) a saída 1622 em um registro Dst especificado ou memória via seletor de dados 1724. Onde outros estágios são necessários, o seletor de dados 1724 pode escrever a saída de retroalimentação 1726, que é fornecida como entrada de retroalimentação 1706 para o elemento de processamento 1611A.
[00209] Como mostrado na Figura 17B, em uma modalidade, a entrada de retroalimentação 1706 pode ser posteriormente processada por elementos de processamento 1611A-1611D. A entrada de retroalimentação 1706 inclui os valores já processados. Em uma modalidade, a entrada de retroalimentação 1706 também pode incluir i entrada 1610E-1610H, entrada 1612E-1612H, que pode ser pré-buscado durante o processamento dos primeiros quatro estágios. O seletor de dados 1704 seleciona a entrada de retroalimentação 1706 para entrada pelo elemento de processamento 1611A. Os elementos de processamento 1611A-1611D podem, então, processar as entradas 1610E-1610H e 1612E-1612H. O seletor de dados 1724 pode, então, gravar (1722) o resultado do oitavo estágio como saída 1622 para o registro Dst especificado.
[00210] Os diagramas de tempo das matrizes da Figura 16 e Figura 17A-17B são mostrados na Figura 18A-18B.
[00211] As Figuras 18A-18B mostram dois diagramas de temporização 1800, 1850. A Figura 18A mostra um diagrama de temporização 1800 que corresponde ao arranjo sistólico de 8 profundidades 1600 representado na Figura 16 A Figura 18B mostra um diagrama de temporização 1850 que corresponde ao arranjo sistólica com entradas de retroalimentação representadas na Figura 17 A-17B. Vários ciclos de relógio são mostrados.
[00212] Como mostrado na Figura 18A, diagrama de tempo 1800 mostra ler ciclos de 1802 que correspondem à lógica de leitura do arranjo sistólico 1600 que lê a entrada que será fornecida à matriz. Os Ciclos sistólicos 1804 correspondem a como essas entradas são processadas em cada estágio do arranjo. Os ciclos de gravação 1806 correspondem à lógica de saída que grava a saída em locais de destino especificados. As entradas lidas no ciclo 0 dos ciclos lidos 1802 são processadas pelo arranjo sistólico nos ciclos 0-7 dos ciclos sistólicos 1804. As entradas lidas no ciclo 1 dos ciclos lidos 1802 são processadas nos ciclos 1-8 dos ciclos sistólicos 1804. Processamento que começa no ciclo 0 dos ciclos sistólicos 1804 são produzidos no ciclo "N" dos ciclos de gravação 1806. Em uma modalidade, o valor de N pode estar relacionado à profundidade do arranjo sistólica. O processamento que começa no ciclo 1 dos ciclos sistólicos 1804 é processado nos ciclos 1-8 e enviado para o ciclo N+1 dos ciclos de gravação 1806. Devido à natureza em pipeline do arranjo, as computações que resultarão em saídas no ciclo N e N+1 são realizados em paralelo pelos vários estágios em pipeline (Estágio 1-Estágio 8) do arranjo sistólica.
[00213] Os ciclos dos ciclos de leitura 1802 conduzem os ciclos sistólicos 1804 em um ou mais ciclos. Por exemplo, o ciclo 0 dos ciclos de leitura 1802 pode ocorrer antes do ciclo 0 dos ciclos sistólicos 1804. Em uma modalidade, o ciclo 1 dos ciclos de leitura 1802 pode acontecer simultaneamente com o ciclo 0 dos ciclos sistólicos 1804. Durante o ciclo 0 dos ciclos sistólicos 1804, o estágio 1 do arranjo sistólica calcula Src0+Src1 * Src2.0 com base na entrada que é lida no ciclo 0 dos ciclos de leitura. Cada um dos elementos 0-7 de Src1 são multiplicados em paralelo com o elemento 0 de Src2 e adicionados aos elementos correspondentes 0-7 de Src0. O resultado do Estágio 1 é passado para o Estágio 2. No ciclo 1 dos ciclos sistólicos 1804, o Estágio 2 acumula o resultado calculado pelo Estágio 1 no ciclo 0 com o resultado de [Src1 + 1] * Src2.1, em que o elemento 1 de Src2 é multiplicado por cada elemento de [Src1 + 1] . Src1 permanece com o Estágio 1, de forma que no ciclo 1, o Estágio 1 calcula [Src0+1]+Src1 * [Src2+1.0] com as próximas entradas Src0 e Src2. No estágio 1, cada um dos elementos 0-7 de Src1 são multiplicados em paralelo com o elemento 0 de [Src2+1] e adicionados aos elementos correspondentes de [Src0 + 1] . O processamento continua neste padrão para cada estágio e cada ciclo, com resultados sendo produzidos a partir do estágio 8, começando no ciclo N dos ciclos de gravação 1806.
[00214] Como mostrado na Figura 18B, o diagrama de tempo 1850 mostra esse arranjo sistólico 1700 da Figura 17A-17B processa o primeiro grupo de entradas lidas no ciclo 0 dos ciclos de leitura 1852 são processados, começando com o ciclo 0 dos ciclos sistólicos 1854, da mesma forma que os primeiros quatro estágios da tubulação profunda de oito do arranjo sistólico 1600 de Figura 16 Será entendido que na Figura 18B, os ciclos de leitura 1852 não são necessariamente mostrados como alinhados com o seu ciclo correspondente nos ciclos sistólicos 1854. A lógica de leitura do arranjo sistólico 1700 pode ler o primeiro grupo de entradas da mesma maneira que o arranjo sistólico 1600. As primeiras quatro entradas lidas nos ciclos de 0 a 3 dos ciclos de leitura 1852 podem ser processadas de uma forma em pipeline pelo arranjo sistólico 1700. A saída é produzida no ciclo rotulado como "N" nos ciclos de gravação de 1856. Assim, a latência para a primeira saída no ciclo N do arranjo sistólico 1700 é a mesma que com o arranjo sistólico 1700. No entanto, a produtividade do arranjo sistólico 1700 é reduzida, pois há um atraso entre a saída de Dst3 e Dst4, que são gravados no ciclo N+8 a N+11 dos ciclos de gravação 1856 devido ao retroalimentação.
[00215] Para o arranjo sistólico 1700, o retroalimentação começa no ciclo 4 dos ciclos sistólicos 1854. O retroalimentação ocorre até o ciclo 7. Uma vez que o retroalimentação começa no ciclo 4 dos ciclos sistólicos 1854, apenas as entradas Src1 são lidas pelos elementos de processamento, conforme representado pelas entradas de linha pontilhada para o ciclo 4, 5, 6 e 7 dos ciclos sistólicos 1854. O próximo grupo de entradas src0 e src2 será lido pelos elementos de processamento começando no ciclo 8 dos ciclos sistólicos de 1854. A lógica de leitura pode atrasar a leitura das entradas Src0 e Src2 até que essas entradas sejam necessárias ou, conforme ilustrado, pode ler essas entradas em conjunto com as entradas Src1. Depois que as entradas são lidas, essas entradas podem ser armazenadas em armazenamento temporário e reutilizadas pelo arranjo sistólico.
[00216] As vantagens de um acelerador por multiplicação matricial com retroalimentação (arranjo sistólico 1700) em relação ao arranjo sistólico 1600 podem ser resumidas da seguinte forma: O arranjo sistólico 1700 pode computar uma profundidade de pipeline semelhante ao arranjo sistólico 1600 usando-se menos hardware. O arranjo sistólico 1700 permite o uso das mesmas instruções que o arranjo sistólico 1600, permitindo que as cargas de trabalho desenvolvidas para o arranjo sistólico 1600 sejam reutilizadas com o arranjo sistólico 1700. O arranjo sistólico 1700 consome menos energia, utilizando menos estágios de pipeline. O arranjo sistólico 1700 pode operar em largura de banda reduzida para leituras e gravações em relação ao arranjo sistólico 1600. O arranjo sistólico 1700 pode ser implementado com qualquer número de estágios, embora possa ser melhor usar múltiplos de dois, a fim de habilitar recursos das modalidades mostradas abaixo. Enquanto a arquitetura de arranjo sistólico 1700 reduziu totalmente, a mesma produtividade do arranjo sistólico 1600 pode ser ativada pela implantação de várias instâncias do arranjo sistólico 1700 em paralelo.
Acelerador por Multiplicação Matricial Escalonável com Entradas de Retroalimentação
[00217] Uma segunda modalidade permite maior rendimento através do uso de execução de instruções simultâneas usando unidades paralelas. Várias instâncias ou caminhos do acelerador por multiplicação são executados em paralelo. Essas instâncias podem compartilhar Src1 ou podem ter entradas Src1 independentes. Cada caminho terá suas próprias entradas Src2 e Src0. Essas instâncias terão suas próprias entradas src2 e src0. Uma versão mostrando dois caminhos com uma profundidade de quatro estágios é mostrada na Figura 19 Alternativamente, uma versão usando quatro caminhos de profundidade de dois estágios é mostrada na Figura 20
[00218] A Figura 19 ilustra um acelerador por multiplicação matricial de dois caminhos 1900 no em que cada caminho tem uma profundidade de 4 etapas. O acelerador por multiplicação matricial de dois caminhos 1900 inclui lógica de entrada 1902A-1902B para entradas Src0, armazenamentos temporários de entrada 1911A-1911B para armazenar elementos de dados recebidos da lógica de entrada 1910A-1910B e armazenamentos temporários de entrada 1913A-1913B para armazenar elementos de dados recebidos da lógica de entrada compartilhada 1912 para Src1. Cada estágio inclui um par de elementos de processamento, que podem operar em paralelo. O estágio um inclui elementos de processamento 1931A-1931B, o estágio dois inclui elementos de processamento 1932A-1932B, o estágio três inclui elementos de processamento 1933A-1933B, o estágio quatro inclui elementos de processamento 1934A-1934B. A lógica de hardware de cada um dos elementos de processamento 1931A-1931B, 1932A -1932B, 1931A-1933B, 1934A-1934 B pode ser igual ou semelhante à lógica de hardware de elementos de processamento (por exemplo, elementos de processamento 1611A-1611D) do arranjo sistólico 1600 ou arranjo sistólico 1700 e pode ser fabricada com a mesma tecnologia de processo ou uma tecnologia de processo mais avançada. Os elementos de processamento do acelerador por multiplicação matricial de dois caminhos 1900 também podem operar em uma frequência mais alta em relação às implantações do arranjo sistólico 1600. Os elementos de processamento podem ser fabricados usando tecnologia de processo mais avançada.
[00219] O retroalimentação pode ser implementado usando seletores de dados iguais ou semelhantes aos seletores de dados 1704, 1724. Dependendo da configuração da lógica de leitura, os dados de entrada podem ser pré-buscados no armazenamento temporário de entrada com antecedência ou lidos a partir de registros ou um cache dentro do acelerador por multiplicação matricial de dois caminhos 1900 um ou mais ciclos antes da entrada nos elementos de processamento 1931A -1931B. Os elementos de processamento 1934A-1934B do estágio quatro podem realimentar os elementos de processamento correspondentes 1931A-1931B do estágio um. A profundidade lógica dinâmica pode ser ativada em múltiplos de quatro. Após um número configurado de estágios lógicos, os resultados podem ser escritos por lógica de saída 1922A-1922B para um destino especificado.
[00220] A Figura 20 ilustra um acelerador por multiplicação matricial de quatro caminhos 2000 em que cada caminho tem uma profundidade de 2 estágios. O acelerador por multiplicação matricial de quatro caminhos 2000 inclui o mesmo número de elementos de processamento que o acelerador por multiplicação matricial de dois caminhos 1900, com os elementos de processamento configurados com o dobro de caminhos, mas cada caminho tem metade da profundidade. O acelerador por multiplicação matricial de quatro caminhos 2000 inclui a lógica de entrada 2002A-2002D para Src0, armazenamentos temporários de entrada 2011A-211D para armazenar elementos de entrada lidos pela lógica de entrada 2010A-2010D para Src2 e armazenamentos temporários de entrada 2013A-2013D para armazenar elementos de entrada lidos pela lógica de entrada compartilhada 2012 para Src1. Os elementos de processamento 2031A-2031B habilitam o processamento paralelo para o estágio 1. Os elementos de processamento 2032A-2032B habilitam o processamento paralelo para o estágio 2. O estágio 2 de cada caminho pode retornar ao estágio 1 ou gravar os resultados por meio de lógica de saída 2022A-2022D para um destino especificado. Os elementos de processamento 2031A-2031B, 2032A-2032B podem incluir lógica de hardware semelhante àquela dos elementos de processamento 1931A-1931B, 1932A-1932B, 1931A-1933B, 1934A-1934B e pode implantar a funcionalidade de loopback usando-se lógica de hardware semelhante.
[00221] As vantagens de um acelerador por multiplicação matricial de dois caminhos 1900 ou uma acelerador por multiplicação matricial de quatro caminhos 2000 incluem escalabilidade, compatibilidade de software e produtividade. A arquitetura modular desses aceleradores permite um escalonamento mais eficiente em relação a um arranjo sistólico de 8 profundidades. Diferentes configurações de um acelerador por multiplicação matricial podem ser adaptadas para diferentes necessidades de produto ou casos de uso sem reprojetar. Além disso, o mesmo modelo de software usado é independente da implantação de hardware. Algoritmos projetados para uma instrução destinada a ser executada por um pipeline sistólico de oito estágios podem ser usados em uma implantação usando um acelerador por multiplicação matricial de 4 estágios. O hardware usará retroalimentação para simular um pipeline de 8 estágios de uma forma transparente para o software. Vários caminhos podem ser usados em um projeto que requer alto rendimento de instrução DPAS. As implantações com um número maior de caminhos podem ser acopladas a uma lógica de entrada e saída de largura de banda maior. Em uma modalidade, o acelerador por multiplicação matricial de dois caminhos 1900 e um acelerador por multiplicação matricial de quatro caminhos 2000 são configurados para ignorar entradas com esparsidade de bloco em uma maior eficiência e/ou granularidade mais fina do que possível com um arranjo sistólico de 8 profundidades.
Multiplicações esparsas no Acelerador por Multiplicação Matricial Escalonável
[00222] Uma terceira modalidade facilita o aumento da produtividade de instruções ao processar dados com dispersão irregular. Os elementos das entradas Src1 e Src2 podem ser selecionados individualmente por meio da lógica do multiplexador de entrada e o processamento pode ser executado usando apenas valores diferentes de zero.
[00223] A Figura 21 ilustra um acelerador por multiplicação matricial esparsa escalonável 2100 usando arranjos sistólicos com entradas de retroalimentação. O acelerador por multiplicação matricial esparsa escalonável 2100 pode incluir elementos de processamento 2031A-2031D como no acelerador múltiplo 2000 de matriz de quatro caminhos ou quaisquer outros elementos de processamento aqui descritos. Os elementos de processamento 2031A-2021B no início de cada caminho incluem lógica de entrada para Src0. Cada estágio de cada caminho de matriz esparsa escalonável multiplica o acelerador 2100 pode receber qualquer elemento de um Src1 independente ou compartilhado por meio dos seletores de entrada 2112A-2112D. Cada estágio de cada caminho também pode receber qualquer elemento de um Src2. As entradas Src2 independentes são fornecidas via seletores de elemento de entrada (por exemplo, Src2A via seletor de entrada 2110A e seletor de entrada 2111A, Src2B via seletor de entrada 2110B e seletor de entrada 2111B). A entrada Src2 separada permite que os caminhos separados calculem instruções diferentes. A lógica de saída separada 2122A-2122B está presente para cada caminho para habilitar a saída para as diferentes instruções.
[00224] Figura 22 ilustra entradas Src2 2200 incluindo dados esparsos. No exemplo ilustrado, entradas Src2 esparsas 2200A-2200B (Entrada Src2A 2200A [A0, A1, 0, A3, A4, A5, A6, 0], entrada Src2B 2200B [B0, 0, B2, B3, 0, 0, 0, 0] ) pode ser processado em cada caminho de uma variante de acelerador por multiplicação matricial esparsa escalonável 2100 usando uma entrada Src1 comum. Cada caminho do acelerador por multiplicação matricial esparsa escalonável 2100 pode receber uma entrada Src0 própria separada.
[00225] A primeira etapa no processo de computação é leia o primeiro elemento Src2 e reorganize os elementos em grupos de N elementos cada, em que N é a profundidade do caminho no qual os elementos serão processados. Outras implantações com diferentes números de caminhos podem ter grupos de tamanhos diferentes. Por exemplo, um acelerador com base em um acelerador por multiplicação matricial de quatro caminhos 2000 usaria grupos de quatro elementos de dados. Se possível, apenas elementos de dados diferentes de zero serão selecionados. Por exemplo, valores diferentes de zero de Src2A 2200A são reorganizados em três grupos: [A0, A1], [A3, A4], [A5, A6] . Os valores diferentes de zero de Src2B 2200B são reorganizados em dois grupos: [B0, B2], [B3,0], com um preenchimento de zero usado para completar o segundo grupo. Esta redisposição é usada para permitir que o primeiro elemento de cada grupo seja alimentado ao primeiro estágio do caminho e o segundo elemento de cada grupo ao segundo estágio do caminho. Embora o acelerador por multiplicação matricial esparsa escalonável 2100 não exija que os elementos sejam grupos, agrupar os elementos reduz o número de elementos que possivelmente precisam ser alimentados a um estágio.
[00226] Na segunda etapa do processo de computação, os grupos são alimentados para os caminhos. Em vez de realizar quatro passagens para calcular uma instrução com uma profundidade de oito (por exemplo, oito passagens de retroalimentação, cada uma usando dois estágios), apenas três passagens de retroalimentação são necessárias, pois dois elementos são zero e não requerem processamento. A natureza do retroalimentação permite que essa passagem seja contornada, com o valor do acumulador sendo enviado diretamente para a saída sem consumir um estágio computacional. Para manter a computação funcional correto, o elemento Src1 correto é inserido no estágio para que um determinado elemento Src2 seja calculado. Assim, ao processar o segundo grupo ([A3, A4]), o primeiro estágio lê Src1-3 e o segundo estágio lê Src1-4. Ao processar Src2B 2200B, apenas dois grupos ([B0, B2], [B3,0]) computados. Os dois grupos podem ser calculados usando duas passagens de retroalimentação em vez de quatro. Na primeira passagem, Src1-0 e Src1-2 são inseridos no primeiro e segundo estágios. Na segunda passagem, Src1-3 e qualquer elemento Src1 são inseridos no primeiro e segundo estágios, respectivamente.
[00227] Para a terceira modalidade, a profundidade do caminho restringe o número de zeros que podem ser reduzidos. Em um acelerador por multiplicação matricial com dois estágios em seus caminhos (por exemplo, acelerador por multiplicação matricial esparsa escalonável 2100) para entradas de oito elementos, apenas reduções de oito, seis, quatro e dois zeros podem ser realizadas. Em um acelerador por multiplicação matricial com quatro estágios em seus caminhos, apenas reduções de oito e quatro zeros podem ser realizadas. Para permitir uma resolução mais alta de redução esparsa, uma quarta modalidade adiciona uma saída em cada estágio dos caminhos e permite que cada estágio receba a entrada Src0, como mostrado na Figura 23
[00228] A Figura 23 mostra um acelerador por multiplicação matricial esparsa escalonável 2300 usando arranjos sistólicos com entradas e saídas de retroalimentação em cada estágio. O acelerador por multiplicação matricial esparsa escalonável 2300 inclui lógica de hardware semelhante ao acelerador por multiplicação matricial esparsa escalonável 2100, junto com entrada adicional e lógica de saída para permitir que elementos Src0 sejam fornecidos para cada estágio de cada caminho e para fornecer saídas separadas para cada estágio de cada caminho. Além de seletores de entrada 2110A e 2111A para selecionar elementos Src2A para o primeiro caminho e os seletores de entrada 2110A e 2111B para selecionar a entrada Src2B para o segundo caminho, um divisor de entrada 2303A-2303B é adicionado para cada caminho para entrada Src0. Cada divisor de entrada 230A-2302B pode incluir um demultiplexador ou lógica de hardware semelhante para permitir que elementos de entrada Src0 que são lidos pela lógica de entrada 2302A-2302B sejam enviados para cada estágio. Os seletores de entrada 2112A-2112D também estão incluídos para permitir que a entrada Src1 seja eleita por cada estágio de cada caminho. Além da lógica de saída 2122A-2122B do segundo estágio de cada caminho (elemento de processamento 2331C-2331D), a lógica de saída adicional 2322A-2322B é fornecida para permitir a saída do primeiro estágio de cada caminho (2331A-2331B). Os elementos de processamento 2331A-2331C podem ser semelhantes a outros elementos de processamento aqui descritos.
[00229] Durante a operação, o acelerador por multiplicação matricial esparsa escalonável 2300 é configurável para aceitar grupos de apenas um elemento. Dois grupos ([B0, B2], [B3,0]) são feitos para os elementos diferentes de zero em Src2 para a terceira modalidade (por exemplo, acelerador por multiplicação matricial esparsa escalonável 2100), com o segundo grupo incluindo um preenchimento de zero. As otimizações mostradas na Figura 23 permitem que os grupos sejam formados como [B0, B2], [B3]. B0 e B2 serão atribuídos ao primeiro e ao segundo estágio de um caminho (por exemplo, qualquer um de um primeiro conjunto incluindo elemento de processamento 2331A e elemento de processamento 2331C ou um segundo conjunto incluindo elemento de processamento 2331B e elemento de processamento 2331D). Após o retroalimentação, B3 será atribuído ao primeiro estágio desse caminho. Como o primeiro estágio de um caminho pode fornecer saída (por exemplo, via lógica de saída 2322A ou 2322B), não há necessidade de consumir o segundo estágio do caminho (qualquer um dos elemento de processamento 2331C ou elemento de processamento 2331D). Além disso, a próxima entrada Src2 aceita para esse caminho pode começar no segundo estágio, então um grupo de dois elementos será atribuído ao segundo e primeiro estágio, respectivamente. Src0 para processar a nova entrada Src2 pode ser atribuída ao segundo estágio do caminho (por exemplo, via lógica de saída 2322A ou 2322B)
[00230] Além da lógica de hardware do acelerador por multiplicação matricial esparsa escalonável 2100 ilustrado na Figura 21 e o acelerador por multiplicação matricial esparsa escalonável 2300 ilustrado na Figura 23, algumas modalidades incluem adicionalmente armazenamentos temporários de memória de hardware de entrada e saída. Os armazenamentos temporários de memória de entrada podem ser usados para armazenar e ter grupos prontos de entradas Src0 e Src2, o que reduz a necessidade de lógica de entrada de largura de banda alta. O armazenamento temporário de saída permite que as saídas Dst geradas em um mesmo ciclo sejam gravadas continuamente na memória em uma taxa mais lenta, o que reduz a necessidade de lógica de saída de largura de banda alta.
[00231] Além disso, algumas modalidades incluem um desvio para entradas em que todos os elementos são zero. O contorno permite uma gravação direta de Src0 como pela lógica de saída, sem passar pelo arranjo sistólico. Este desvio é usado em conjunto com uma estratégia de dependência de dados para evitar riscos de leitura após gravação (RAW) entre as instruções que podem danificar a integridade dos dados.
[00232] A Figura 24 ilustra um método 2400 pelo qual a lógica de hardware em uma unidade funcional pode executar uma instrução para realizar um produto escalar sistólico com acumular, de acordo com uma modalidade. O Método 2400 pode ser realizado por meio de hardware e/ou lógica de firmware de um acelerador por multiplicação matricial esparsa escalonável, conforme descrito no presente documento. O hardware e/ou a lógica do firmware pode receber valores de fonte diferentes de zero e uma profundidade de cálculo para uma instrução a ser executada por um acelerador de operação matricial de um GPGPU (2402). Os valores de fonte diferentes de zero podem ser valores diferentes de zero que são agrupados de acordo com uma profundidade de pipeline para um caminho do acelerador por multiplicação matricial esparsa escalonável. A profundidade do cálculo pode especificar um número de camadas sistólicas para usar para calcular o produto escalar para a instrução. A lógica também recebe um valor de acumulador e armazena o valor inicial em um acumulador (2404) O valor do acumulador pode ser um valor zero, um valor inicial do acumulador ou um resultado de um estágio anterior do pipeline. Para uma camada de cálculo especificada, a lógica pode avaliar uma máscara habilitada para gravação para determinar um conjunto de canais de processamento paralelo habilitados (2406). A máscara de habilitação de gravação pode ser usada para desabilitar o cálculo de canais específicos. A máscara de habilitação de gravação pode ser configurada com base em uma máscara de predicado fornecida com a instrução a ser executada.
[00233] Para cada canal de processamento habilitado, a lógica pode gerar um conjunto de produtos com base em um multiplicação em elementos dos elementos de entrada de fonte (2408) . Por exemplo, para um produto escalar de quatro elementos, quatro elementos de duas fontes são multiplicados para gerar o conjunto de produtos. Em cada camada do pipeline sistólico, o mesmo valor do elemento Src2 é multiplicado por vários valores Src1 diferentes. A lógica pode, então, calcular uma soma do conjunto de produtos e adicionar a soma a um valor no acumulador (2410) .
[00234] Quando o método 2400 for executado em um elemento de processamento na última camada de cálculo (2411) , o elemento de processamento pode enviar a soma calculada para um registro de destino especificado (2414). Caso contrário, o elemento de processamento pode enviar seu valor acumulador para a próxima camada (2412) . A próxima camada pode ser uma próxima camada física ou uma próxima camada virtual. A saída para a próxima camada virtual inclui o fornecimento de um valor de retroalimentação para um elemento de processamento no primeiro estágio do pipeline de processamento.
[00235] Em uma modalidade, o método 2400 da Figura 24 pode ser executado pela lógica de hardware configurada com base no pseudocódigo mostrado abaixo.
Produto Escalar Sistólico de Quatro Elementos com Acumulação
Figure img0003
[00236] No pseudocódigo mostrado acima, Src0, Src1 e Src2 são registros que armazenam dados de operando. Uma profundidade sistólica é especificada por sdepth. O tamanho da execução corresponde a exec_size e especifica o número de canais de processamento paralelo. O destino é especificado pelo registro Dst. No pseudocódigo, os registros identificados fazem referência aos campos regnum e subregnum. O campo regnum fornece o número de registro do operando. O campo subregnum fornece o número do sub-registro para o operando. O campo subregnum, junto com o campo RegNum correspondente, fornece um endereço alinhado por byte para a origem da região de registro. Para algumas instruções, este campo fornece bits [4 : 0] do endereço de byte, enquanto o campo RegNum fornece bits [12 : 5] .
[00237] A Figura 25 ilustra um método 2500 para realizar uma operação de multiplicação matricial usando uma matriz de entrada Src2 esparsa. O método 2500 pode ser realizado por meio de hardware e/ou lógica de firmware de um acelerador por multiplicação matricial esparsa escalonável, conforme descrito no presente documento. O método 2500 especifica operações usando dados esparsos, como entradas Src2 esparsas 2200A-2200B da Figura 22 O método 2500 pode ser implementado usando o acelerador múltiplo 2100 de matriz esparsa escalonável da Figura 21 e/ou acelerador por multiplicação matricial esparsa escalonável 2300 da Figura 23
[00238] O método 2500 inclui a lógica de hardware e/ou firmware para ler múltiplos elementos de dados de uma primeira matriz e uma segunda matriz na memória de um acelerador por multiplicação matricial (2502). A lógica pode então detectar valores diferentes de zero dentro dos múltiplos elementos de dados da segunda matriz (2504). A detecção pode ser realizada usando a lógica de comparação vetorial dentro do acelerador por multiplicação de matrizes. A lógica pode, então, agrupar valores diferentes de zero detectados dentro dos múltiplos elementos de dados da segunda matriz em um grupo que inclui um ou mais elementos de dados (2506). A lógica pode, então, fornecer elementos de dados do grupo a estágios correspondentes de um pipeline de processamento do acelerador por multiplicação matricial (2508) . Para um caminho com um pipeline de dois estágios, os grupos incluirão dois elementos Src2. O primeiro elemento do grupo será disponibilizado para a primeira fase e o segundo elemento do grupo será disponibilizado para a segunda fase. Para o acelerador por multiplicação matricial esparsa escalonável 2100, o preenchimento de zero é usado para preencher um grupo, se necessário. Para o acelerador por multiplicação matricial esparsa escalonável 2300, não é necessário preenchimento de zero.
[00239] A lógica, então, fornece os múltiplos elementos de dados da primeira matriz a estágios correspondentes do pipeline de processamento (2510). Os múltiplos elementos de dados fornecidos são aqueles elementos Src1 que correspondem aos canais ativos que serão calculados para um estágio de pipeline. Qualquer elemento Src1 pode ser fornecido se o elemento for operado usando um valor de preenchimento zero Src2. Os elementos de processamento em cada estágio ativo do pipeline de processamento realiza operações de multiplicação e acumulação (2512). Em algumas circunstâncias, por exemplo, em que o acelerador por multiplicação matricial esparsa escalonável 2300 está processando um único grupo de elementos, nem todos os estágios do pipeline estão ativos para uma instrução. Se um estágio não estiver ativo para a instrução, o estágio ainda pode ser usado para realizar operações para uma instrução diferente. A lógica, pode, então, emitir ou retroalimentar um valor acumulado de cada estágio ativo do pipeline de processamento (2514). A saída pode ser gravada em um registro de destino ou local de memória quando o último estágio de processamento de uma instrução for concluído. Como alternativa, um valor acumulado pode ser enviado para o próximo estágio do pipeline. A saída para o próximo estágio de pipeline pode envolver uma saída de retroalimentação de gravação para o primeiro estágio físico do pipeline de processamento.
Dispositivo de Computação Exemplificativo Adicional
[00240] A Figura 26 é um diagrama de blocos de um dispositivo de computação 2600 incluindo um processador gráfico 2604, de acordo com uma modalidade. As versões do dispositivo de computação 2600 podem ser ou estar inclusas dentro de um dispositivo de comunicação como um decodificador (por exemplo, decodificadores de televisão a cabo com base em Internet, etc.), dispositivos com base em sistema de posicionamento global (GPS), etc. O dispositivo de computação 2600 também pode ser ou estar incluso dentro de dispositivos de computação móveis como telefones celulares, telefones inteligentes, assistentes pessoais digitais (PDAs), computadores do tipo tablet, computadores do tipo laptop, leitores eletrônicos, televisões inteligentes, plataformas de televisão, dispositivos utilizáveis junto ao corpo (por exemplo, óculos, relógios, braceletes, cartões inteligentes, joias, itens de vestuário, etc.), reprodutores de mídia, etc. Por exemplo, em uma modalidade, o dispositivo de computação 2600 inclui um dispositivo de computação móvel que emprega um circuito integrado ("IC"), como sistema em um chip ("SoC" ou "SOC"), integrando vários componentes de hardware e/ou software do dispositivo de computação 2600 em um único chip. O dispositivo de computação 2600 pode ser um dispositivo de computação, como o sistema de processamento de dados 100 como na Figura 1
[00241] O dispositivo de computação 2600 inclui um processador gráfico 2604. O processador gráfico 2604 representa qualquer processador gráfico aqui descrito. Em uma modalidade, o processador gráfico 2604 inclui um cache 2614, que pode ser um único cache ou dividido em vários segmentos de memória cache, incluindo, mas não se limitando a qualquer número de caches L1, L2, L3 ou L4, caches de renderização, profundidade caches, caches de amostrador e/ou caches de unidade de sombreador. Em uma modalidade, o cache 2614 pode ser um cache de último nível que é compartilhado com o processador de aplicativo 2606.
[00242] Em uma modalidade, o processador gráfico 2604 inclui um microcontrolador gráfico que implementa controle e lógica de agendamento para o processador gráfico. A lógica de controle e agendamento pode ser executada por firmware pelo microcontrolador gráfico 2615. O firmware pode ser carregado na inicialização pela lógica do driver gráfico 2622. O firmware também pode ser programado para uma memória somente leitura programável apagável eletronicamente ou carregado a partir de um dispositivo de memória flash dentro do microcontrolador gráfico 2615. O firmware pode habilitar um OS de GPU 2616 que inclui gerenciamento de dispositivo/lógica de driver 2617, 2618 e um planejador 2619. O OS de GPU 2616 também pode incluir um gerenciador de memória gráfica 2620 que pode complementar ou substituir o gerenciador de memória gráfica 2621 dentro da lógica do driver gráfico 2622.
[00243] O processador gráfico 2604 também inclui um motor de GPGPU 2644 que inclui um ou mais mecanismos gráficos, núcleos de processador gráfico e outros recursos de execução gráfica, conforme descrito no presente documento. Esses recursos de execução de gráficos podem ser apresentados nas formas, incluindo, mas não se limitando a unidades de execução, mecanismos de sombreamento, processadores de fragmento, processadores de vértice, multiprocessadores de transmissão contínua, clusters de processadores gráficos ou qualquer coleção de recursos de computação adequados para o processamento de recursos gráficos ou recursos de imagem, ou executar operações computacionais de propósito geral em um processador heterogêneo. Os recursos de processamento do motor GPGPU 2644 podem ser incluídos em vários blocos de lógica de hardware conectados a um substrato, como ilustrado na Figura 11B-11D. O motor de GPGPU 2644 pode incluir blocos de GPU 2645 que incluem recursos de processamento e execução de gráficos, caches, amostradores, etc. Os blocos de GPU 2645 também podem incluir memória volátil local ou podem ser acoplados a um ou mais blocos de memória, por exemplo, como mostrado em Figura 3B-3C.
[00244] O motor de GPGPU 2644 também pode incluir um ou mais blocos especiais 2646 que incluem, por exemplo, um bloco de memória não volátil 2656, um bloco de processador de rede 2657 e/ou um bloco de computação de uso geral 2658. O motor de GPGPU 2644 também inclui um acelerador por multiplicação matricial 2660. A peça de computação de uso geral 2658 também pode incluir lógica para acelerar as operações de multiplicação de matriz. A peça de memória não volátil 2656 pode incluir células de memória não volátil e lógica do controlador. A lógica do controlador do bloco de memória não volátil 2656 pode ser gerenciada por uma das lógicas de gerenciamento/driver de dispositivo 2617, 2618. A peça de processador de rede 2657 pode incluir recursos de processamento de rede que são acoplados a uma interface física dentro das fontes de entrada/saída (I/O) 2610 do dispositivo de computação 2600. A peça de processador de rede 2657 pode ser gerenciada por um ou mais dentre gerenciamento de dispositivo/lógica de driver 2617, 2618.
[00245] O acelerador por multiplicação matricial 2660 é um acelerador por multiplicação matricial esparsa escalonável modular conforme descrito no presente documento. O acelerador por multiplicação matricial 2660 pode incluir vários caminhos de processamento, com cada caminho de processamento incluindo vários estágios de pipeline. Cada caminho de processamento pode executar uma instrução separada. Em várias modalidades, o acelerador por multiplicação matricial 2660 pode ter características arquitetônicas de qualquer um ou mais dos aceleradores de multiplicação de matriz aqui descritos. Por exemplo, em uma modalidade, o acelerador por multiplicação matricial 2660 é um arranjo sistólico de quatro profundidades 1700 com um ciclo de retroalimentação que é configurável para operar com um múltiplo de quatro números de estágios lógicos (por exemplo, quatro, oito, doze, dezesseis, etc..). Em uma modalidade, o acelerador por multiplicação matricial 2660 inclui uma ou mais instâncias de um acelerador por multiplicação matricial de dois caminhos 1900 com um pipeline de quatro estágios ou um acelerador por multiplicação matricial de quatro caminhos 2000 com um pipeline de dois estágios. Em uma modalidade, o acelerador por multiplicação matricial 2660 inclui elementos de processamento configurados como o acelerador por multiplicação matricial esparsa escalonável 2100 ou o acelerador por multiplicação matricial esparsa escalonável 2300. O acelerador por multiplicação matricial 2660 pode ser configurado para operar apenas em valores diferentes de zero de pelo menos uma entrada Src2 e também pode ignorar operações em que os valores zero estão presentes na entrada Src1. As operações em submatrizes inteiras podem ser contornadas quando a esparsidade de blocos está presente. O acelerador por multiplicação matricial 2660 também pode incluir qualquer lógica com base em qualquer combinação dessas modalidades.
[00246] Conforme ilustrado, em uma modalidade, e além do processador gráfico 2604, o dispositivo de computação 2600 pode incluir ainda qualquer número e tipo de componentes de hardware e/ou componentes de software, incluindo, mas não se limitando a um processador de aplicativo 2606, memória 2608, e fontes de entrada/saída (I/O) 2610. O processador de aplicativo 2606 pode interagir com um pipeline de gráficos de hardware, conforme ilustrado com referência à Figura 3A, para compartilhar a funcionalidade de pipeline de gráficos. Os dados processados são armazenados em um armazenamento temporário no pipeline de gráficos de hardware e informações de estado são armazenadas na memória 2608. Os dados resultantes podem ser transferidos para um controlador de exibição para saída através de um dispositivo de exibição, tal como o dispositivo de exibição 318 da Figura 3A. O dispositivo de exibição pode ser de diversos tipos, como Tubo de Raios Catódicos (CRT), Transistor de Película Fina (TFT), Visor de Cristal Líquido (LCD), matriz de Diodo Emissor de Luz Orgânica (OLED), etc., e pode ser configurado para exibir informações por meio de uma interface de usuário gráfica.
[00247] O processador de aplicativo 2606 pode incluir um ou mais processadores, como processadores 102 da Figura 1 e pode ser a unidade de processamento central (CPU) que é usada pelo menos em parte para executar um sistema operacional (OS) 2602 para o dispositivo de computação 2600. O OS 2602 pode servir como uma interface entre o hardware e/ou recursos físicos do dispositivo de computação 2600 e um ou mais usuários. O OS 2602 pode incluir lógica de driver para vários dispositivos de hardware no dispositivo de computação 2600. A lógica do driver pode incluir a lógica do driver gráfico 2622, que pode incluir o driver gráfico do modo de usuário 1026 e/ou driver gráfico do modo kernel 1029 da Figura 10 A lógica do driver gráfico pode incluir um gerenciador de memória gráfica 2621 para gerenciar uma memória virtual espaço de endereço para o processador gráfico 2604.
[00248] Contempla-se que em algumas modalidades o processador gráfico 2604 pode existir como parte do processador de aplicativo 2606 (como parte de um pacote de CPU físico), caso em que, pelo menos, uma parte da memória 2608 pode ser compartilhada pelo processador de aplicativo 2606 e processador gráfico 2604, embora pelo menos uma parte da memória 2608 possa ser exclusiva para o processador gráfico 2604, ou o processador gráfico 2604 pode ter um armazenamento separado de memória. A memória 2608 pode compreender uma região pré-alocada de um armazenamento temporário (por exemplo, armazenamento temporário de quadro); no entanto, deve ser entendido por um indivíduo versado na técnica que as modalidades não são tão limitadas, e que qualquer memória acessível para o pipeline de gráficos inferior pode ser usada. A memória 2608 pode incluir várias formas de memória de acesso aleatório (RAM) (por exemplo, SDRAM, SRAM, etc.) compreendendo um aplicativo que faz uso do processador gráfico 2604 para renderizar uma área de trabalho ou cena gráfica 3D. Um concentrador de controlador de memória, como controlador de memória 116 da Figura 1, pode acessar dados na memória 2608 e encaminhar os mesmos para o processador gráfico 2604 para processamento de pipeline gráfico. A memória 2608 pode ser disponibilizada para outros componentes dentro do dispositivo de computação 2600. Por exemplo, quaisquer dados (por exemplo, dados gráficos de entrada) recebidos de várias fontes de I/O 2610 do dispositivo de computação 2600 podem ser temporariamente enfileirados na memória 2608 antes de serem operados por um ou mais processadores (por exemplo, processador de aplicativo 2606) na implantação de um programa ou aplicativo de software. De modo similar, dados que um programa de software determina devem ser enviados do dispositivo de computação 2600 para uma entidade externa através de uma das interfaces de sistema de computação, ou armazenados em um elemento de armazenamento interno são, em geral, temporariamente listados na memória 2608 antes de serem transmitidos ou armazenados.
[00249] As fontes de I/O podem incluir dispositivos como telas sensíveis ao toque, painéis sensíveis ao toque, almofadas sensível ao toque, teclados virtuais ou regulares, mouses virtuais ou regulares, portas, conectores, dispositivos de rede ou semelhantes, e podem ser conectados por meio de um hub controlador de plataforma 130, conforme referido na Figura 1 Adicionalmente, as fontes de I/O 2610 podem incluir um ou mais dispositivos de I/O que são implantados para transferir dados para e/ou do dispositivo de computação 2600 (por exemplo, um adaptador de rede); ou, para um armazenamento não volátil em larga escala dentro do dispositivo de computação 2600 (por exemplo, SSD/HDD). Os dispositivos de entrada de usuário, incluindo chaves alfanuméricas e outras chaves, pode ser usado para comunicar informações e seleções de comando para o processo gráfico 2604. Outro tipo de dispositivo de entrada de usuário é controle de cursor, como um mouse, um trackball, uma tela sensível ao toque, um monitor sensível ao toque, ou chaves de direção de cursor para comunicar informações de direção e seleções de comando para GPU e para controlar movimento de cursor no dispositivo de exibição. Os arranjos de câmera e microfone do dispositivo de computação 2600 podem ser empregues para observar gestos, registrar áudio e vídeo e para receber e transmitir comandos visuais e de áudio.
[00250] As fontes de I/O 2610 podem incluir uma ou mais interfaces de rede. As interfaces de rede podem incluir lógica de processamento de rede associada e/ou ser acopladas ao bloco de processador de rede 2657. A uma ou mais interfaces de rede podem fornecer acesso a uma LAN, uma rede de área ampla (WAN), uma rede de área metropolitana (MAN), uma rede de área pessoal (PAN), Bluetooth, uma rede de nuvem, uma rede móvel ou celular (por exemplo, 3a Geração (3G), 4a Geração (4G), 5a Geração (5G), etc.), uma intranet, a Internet, etc. A interface (ou interfaces) de rede pode incluir, por exemplo, uma interface de rede sem fio que tem uma ou mais antenas. A interface (ou interfaces) de rede também pode incluir, por exemplo, uma interface de rede com fio para se comunicar com dispositivos remotos por meio de cabo de rede, que pode ser, por exemplo, um cabo de Ethernet, um cabo coaxial, um cabo de fibra óptica, um cabo em série ou um cabo em paralelo.
[00251] A interface (ou interfaces) de rede pode fornecer acesso a uma LAN, por exemplo, conformando-se aos padrões IEEE 802.11 e/ou a interface de rede sem fio pode fornecer acesso a uma rede de área pessoal, por exemplo, conformando-se a padrões de Bluetooth. Outras interfaces e/ou protocolos de rede sem fio, incluindo versões anteriores e subsequentes dos padrões, também podem ser suportadas. Além disso, ou em vez disso, comunicação por meio dos padrões de LAN sem fio, interface (ou interfaces) de rede podem fornecer comunicação sem fio com o uso de, por exemplo, protocolos de Divisão de Tempo, Múltiplos Acessos (TDMA), protocolos de Sistemas Globais para Comunicações Móveis (GSM), protocolos de Divisão de Código, protocolo de Múltiplos Acessos (CDMA) e/ou qualquer outro tipo de protocolos de comunicações sem fio.
[00252] Deve ser observado que um sistema mais ou menos equipado que o exemplo descrito acima pode ser preferencial para determinadas implantações. Portanto, a configuração do dispositivo de computação 1900 pode variar de implantação para implantação dependendo de diversos fatores, como limitações de preço, exigências de desempenho, aprimoramentos tecnológicos ou outras circunstâncias. Os exemplos incluem (sem limitação) um dispositivo móvel, um assistente pessoal digital, um dispositivo móvel de computação, um telefone inteligente, um telefone celular, um aparelho telefônico, um pager unidirecional, um pager bidirecional, um dispositivo de troca de mensagens, um computador, um computador pessoal (PC), um computador do tipo desktop, um computador do tipo laptop, um computador do tipo notebook, um computador portátil, um computador do tipo tablet, um servidor, uma matriz de servidor ou parque de servidores, um servidor da web, um servidor de rede, um servidor de Internet, uma estação de trabalho, um minicomputador, um computador de quadro principal, um supercomputador, um utensílio de rede, um utensílio da web, um sistema de computação distribuído, sistemas de múltiplos processadores, sistemas com base em processador, aparelhos eletrônicos de consumidor, aparelhos eletrônicos de consumidor programáveis, televisão, televisão digital, decodificador de sinal, ponto de acesso sem fio, estação-base, estação de assinante, centro de assinante móvel, controlador de rede de rádio, roteador, concentrador, porta de comunicação, ponte, comutador, máquina, ou combinações dos mesmos.
[00253] Descreve-se no presente documento um dispositivo de acelerador que inclui uma interface de hospedeiro, uma interconexão de malha acoplada à interface de hospedeiro e um ou mais blocos de hardware acoplados à interconexão de malha, em que o um ou mais blocos de hardware de aceleração por multiplicação matricial esparsa que inclui um arranjo sistólica com entradas de retroalimentação.
[00254] Uma modalidade fornece um processador paralelo que compreende uma unidade de decodificação para decodificar uma instrução em uma instrução decodificada, em que a instrução decodificada é uma instrução para realizar uma operação de produto escalar paralelo, e um unidade de produto escalar sistólico com pipeline. A unidade de produto escalar sistólico em pipeline é configurada para executar a instrução decodificada por meio de vários estágios de pipeline de um pipeline de processamento sistólico. Durante a execução da instrução decodificada, um produto escalar calculado em um primeiro estágio de pipeline é configurado para ser gravado de forma seletiva por meio de hardware de saída a um local selecionado a partir de uma memória de saída e um segundo estágio de pipeline e um produto escalar calculado em um terceiro estágio de pipeline é configurado para ser gravado de forma seletiva por meio do hardware de saída em um local selecionado a partir de uma das memórias de saída e do primeiro estágio de pipeline. Em uma outra modalidade, a instrução decodificada é associada a um primeiro operando-fonte e a um segundo operando-fonte, o primeiro operando-fonte é uma referência à memória que armazena múltiplos elementos de dados de uma primeira matriz e o segundo operando é uma referência à memória que armazena múltiplos elementos de dados de uma segunda matriz.
[00255] Uma modalidade fornece um dispositivo de acelerador que compreende uma interface de hospedeiro, uma interconexão de malha acoplada à interface de hospedeiro e um ou mais blocos de hardware acoplados com a interconexão de malha. Os um ou mais blocos de hardware incluem hardware de aceleração múltipla de matriz esparsa, incluindo uma arranjo de processamento sistólico modular com entradas de retroalimentação. O arranjo de processamento sistólico modular inclui um ou mais módulos de arranjo de processamento tendo um primeiro número de caminhos de pipeline e o primeiro número de caminhos de pipeline tem um segundo número de estágios de pipeline. Um primeiro estágio do pipeline é configurável para receber a saída de retroalimentação de um estágio final do pipeline.
[00256] Uma modalidade fornece um método para realizar uma operação de produto escalar em um conjunto de matrizes de entrada por meio de um acelerador por multiplicação matricial de hardware tendo um pipeline de processamento de múltiplos estágios. O método compreende a leitura, por meio de um primeiro operando-fonte, de múltiplos elementos de dados de uma primeira matriz na memória do acelerador por multiplicação matricial de hardware, leitura, por meio de um segundo operando-fonte, de múltiplos elementos de dados de uma segunda matriz na memória do acelerador por multiplicação matricial de hardware, detectando valores diferentes de zero dentro dos múltiplos elementos de dados da segunda matriz, agrupando os valores diferentes de zero dentro dos múltiplos elementos de dados da segunda matriz em um grupo incluindo um ou mais elementos de dados, em que uma série de elementos de dados do grupo corresponde a uma série de estágios no pipeline de processamento de múltiplos estágios do acelerador por multiplicação matricial de hardware, fornecendo um elemento de dados do grupo para um estágio correspondente do pipeline de processamento, transmitindo o elemento de dados para vários canais de um elemento de processamento do estágio correspondente, multiplicando, um elemento de dados fornecido do grupo com múltiplos elementos de dados da primeira matriz para gerar um conjunto de produtos, somando o conjunto de produtos e acumulando uma soma do conjunto de produtos com um valor acumulador e gravando o valor acumulador em um próximo estágio do pipeline de processamento. Em uma modalidade adicional, gravar o valor de acumulador para o próximo estágio do pipeline de processamento inclui gravar um valor de retroalimentação de pipeline para um primeiro estágio do pipeline de processamento. Além disso, detectar os valores diferentes de zero dentro dos múltiplos elementos de dados da segunda matriz pode incluir a detecção dos valores diferentes de zero dentro do acelerador por matricial de hardware.
[00257] Os versados na técnica observarão, a partir do relatório descritivo supracitado, que as amplas técnicas das modalidades podem ser implantadas em uma variedade de formas. Portanto, embora as modalidades tenham sido descritas em conexão com exemplos particulares dos mesmos, o verdadeiro escopo das modalidades não deve ser tão limitado, uma vez que outras modificações se tornarão evidentes ao praticante versado mediante um estudo dos desenhos, relatório descritivo e reivindicações a seguir.

Claims (23)

  1. Processador paralelo caracterizado por compreender:
    uma unidade de decodificação para decodificar uma instrução em uma instrução decodificada, em que
    a instrução decodificada é uma instrução para realizar uma operação de produto escalar paralelo; e
    uma unidade de produto escalar sistólico em pipeline para executar a instrução decodificada por meio de múltiplos estágios de pipeline de um processamento sistólico de pipeline, em que, durante a execução da instrução decodificada, um produto escalar computado em um primeiro estágio de pipeline é configurado para ser gravado de forma seletiva por meio do hardware de saida para um local selecionado de uma memória de saida e um segundo estágio de pipeline e um produto escalar computado em um terceiro estágio de pipeline é configurado para ser gravado de forma seletiva por meio de hardware de saida para uma localização selecionada de um dentre a memória de saida e o primeiro estágio do pipeline.
  2. Processador paralelo, de acordo com a reivindicação 1, caracterizado pelo fato de que a instrução decodificada está associada a um primeiro operando-fonte e um segundo operando-fonte, o primeiro operando-fonte é uma referência à memória que armazena múltiplos elementos de dados de uma primeira matriz, e o segundo operando é uma referência à memória que armazena múltiplos elementos de dados de uma segunda matriz.
  3. Processador paralelo, de acordo com a reivindicação 2, caracterizado pelo fato de que compreende adicionalmente conjunto de circuitos de hardware para:
    ler, com base no primeiro operando-fonte, os múltiplos elementos de dados dada primeira matriz na memória da unidade de produto escalar sistólico; e
    ler, com base no segundo operando-fonte, os múltiplos elementos de dados da segunda matriz em memória da unidade de produto escalar sistólico.
  4. Processador paralelo, de acordo com a reivindicação 3, caracterizado pelo fato de que compreende adicionalmente conjunto de circuitos de hardware para detectar valores diferentes de zero dentro dos múltiplos elementos de dados da segunda matriz e agrupar valores diferentes de zero detectados dentro dos múltiplos elementos de dados da segunda matriz em um grupo que inclui um ou mais elementos de dados.
  5. Processador paralelo, de acordo com a reivindicação 4, caracterizado pelo fato de que o grupo inclui vários elementos de dados que correspondem a vários estágios de pipeline do pipeline de processamento sistólico.
  6. Processador paralelo, de acordo com a reivindicação 5, caracterizado pelo fato de que compreende adicionalmente conjunto de circuitos de hardware para:
    fornecer um primeiro elemento de dados do grupo para o primeiro estágio de pipeline; e
    fornecer um segundo elemento de dados do grupo para o segundo estágio de pipeline.
  7. Processador paralelo, de acordo com a reivindicação 6, caracterizado pelo fato de que o terceiro estágio de pipeline é o segundo estágio de pipeline e o pipeline de processamento sistólico inclui dois estágios de pipeline.
  8. Processador paralelo, de acordo com a reivindicação 6, caracterizado pelo fato de que compreende adicionalmente um quarto estágio de pipeline entre o segundo estágio de pipeline e o terceiro estágio de pipeline, em que o pipeline de processamento sistólico inclui quatro estágios de pipeline.
  9. Processador paralelo, de acordo com a reivindicação 6, caracterizado pelo fato de que compreende adicionalmente conjunto de circuitos de hardware para:
    fornecer um primeiro conjunto de múltiplos elementos de dados da primeira matriz para o primeiro estágio de pipeline; e
    fornecer um segundo conjunto de múltiplos elementos de dados da segunda matriz para o segundo estágio de pipeline.
  10. Processador paralelo, de acordo com qualquer uma das reivindicações 1 a 9, caracterizado pelo fato de que o pipeline de processamento sistólico é um primeiro pipeline de processamento sistólico e a unidade de produto escalar sistólico em pipeline inclui um segundo pipeline de processamento sistólico.
  11. Processador paralelo, de acordo com a reivindicação 10, caracterizado pelo fato de que cada estágio de pipeline do primeiro pipeline de processamento sistólico e o segundo pipeline de processamento sistólico inclui um ou mais elementos de processamento, em que cada elemento de processamento inclui múltiplos canais de processador paralelo e cada canal de processador paralelo é configurável para executar operações em um vetor de múltiplos elementos de dados.
  12. Dispositivo de acelerador caracterizado por compreender:
    uma interface de hospedeiro;
    uma interconexão de malha acoplada à interface de hospedeiro; e
    um ou mais blocos de hardware acoplados à interconexão de malha, o um ou mais blocos de hardware que incluem hardware de aceleração por multiplicação matricial esparsa incluindo um arranjo de processamento sistólico modular com entradas de retroalimentação, em que o arranjo de processamento sistólico modular inclui um ou mais módulos de arranjo de processamento que tem um primeiro número de caminhos de pipeline, sendo que o primeiro número de caminhos de pipeline tem um segundo número de etapas do pipeline, em que um primeiro estágio de pipeline é configurável para receber saida de retroalimentação de um estágio de pipeline final.
  13. Dispositivo de acelerador, de acordo com a reivindicação 12, caracterizado pelo fato de que o arranjo de processamento sistólico modular inclui vários módulos de matriz.
  14. Dispositivo de acelerador, de acordo com a reivindicação 12, caracterizado pelo fato de que um ou mais módulos de arranjo de processamento incluem caminhos de pipeline configurados com conjunto de circuitos de hardware compartilhados para ler elementos de dados associados a uma primeira entrada de fonte e conjunto de circuitos de hardware separados para ler elementos de dados associados a uma segunda fonte de entrada.
  15. Dispositivo de acelerador, de acordo com a reivindicação 12, caracterizado pelo fato de que o um ou mais módulos de arranjo de processamento incluem caminhos de pipeline configurados com conjunto de circuitos de hardware separados para ler elementos de dados associados a uma primeira entrada de fonte e conjunto de circuitos de hardware separado para ler elementos de dados associado a uma segunda entrada de fonte.
  16. Dispositivo acelerador, de acordo com a reivindicação 15, caracterizado pelo fato de que o um ou mais módulos de arranjo de processamento incluem o conjunto de circuitos de hardware configurado para detectar elementos de dados diferentes de zero na segunda entrada de fonte e realizar seletivamente operações de produto escalar com base nos elementos de dados diferentes de zero da segunda entrada de fonte e elementos de dados da primeira entrada de fonte que corresponde aos elementos de dados diferentes de zero da segunda entrada.
  17. Dispositivo acelerador, de acordo com a reivindicação 16, caracterizado pelo fato de que o um ou mais módulos de arranjo de processamento incluem um caminho de pipeline incluindo hardware de saída separado para cada estágio de pipeline.
  18. Dispositivo acelerador, de acordo com a reivindicação 17, caracterizado pelo fato de que o um ou mais módulos de arranjo de processamento incluem um primeiro caminho de pipeline configurável para executar uma primeira instrução de produto escalar tendo um primeiro conjunto de entradas e um segundo caminho de pipeline configurável para executar uma segunda instrução de produto escalar que tem um segundo conjunto de entradas.
  19. Método para realizar uma operação de produto escalar em um conjunto de matrizes de entrada por meio de um acelerador por multiplicação matricial de hardware tendo um pipeline de processamento de múltiplos estágios, sendo que o método é caracterizado por compreender:
    ler, através de um primeiro operando-fonte, múltiplos elementos de dados de uma primeira matriz na memória do acelerador por multiplicação matricial de hardware;
    ler, por meio de um segundo operando-fonte, múltiplos elementos de dados de uma segunda matriz na memória do acelerador por multiplicação matricial de hardware;
    detectar valores diferentes de zero nos múltiplos elementos de dados da segunda matriz;
    agrupar os valores diferentes de zero dentro dos múltiplos elementos de dados da segunda matriz em um grupo que inclui um ou mais elementos de dados, em que vários elementos de dados do grupo correspondem a vários estágios no pipeline de processamento de múltiplos estágios do acelerador por multiplicação matricial de hardware;
    fornecer um elemento de dados do grupo a um estágio correspondente do pipeline de processamento;
    multiplicar um elemento de dados fornecido do grupo com múltiplos elementos de dados da primeira matriz para gerar um conjunto de produtos;
    somar o conjunto de produtos e acumular uma soma do conjunto de produtos com um valor de acumulador; e
    gravar o valor de acumulador para um próximo estágio do pipeline de processamento.
  20. Método, de acordo com a reivindicação 19, caracterizado pelo fato de que gravar o valor de acumulador para o próximo estágio do pipeline de processamento inclui gravar um valor de retroalimentação de pipeline para um primeiro estágio do pipeline de processamento.
  21. Método, de acordo com a reivindicação 19, caracterizado pelo fato de que fornece um elemento de dados do grupo a um estágio correspondente do pipeline de processamento incluindo a difusão do elemento de dados para múltiplos canais de um elemento de processamento do estágio correspondente.
  22. Método, de acordo com a reivindicação 19, caracterizado pelo fato de que a detecção dos valores diferentes de zero nos múltiplos elementos de dados da segunda matriz inclui detectar os valores diferentes de zero dentro da memória do acelerador por multiplicação matricial de hardware.
  23. Sistema caracterizado por compreender meios para realizar o método conforme definido na reivindicação 19.
BR102021001391-5A 2020-05-05 2021-01-25 Aceleração por multiplicação matricial esparsa escalável com o uso de arranjos sistólicos com entradas de retroalimentação BR102021001391A2 (pt)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
IN202041019059 2020-05-05
IN202041019059 2020-05-05
US16/913,800 2020-06-26
US16/913,800 US11204977B2 (en) 2020-05-05 2020-06-26 Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs

Publications (1)

Publication Number Publication Date
BR102021001391A2 true BR102021001391A2 (pt) 2021-11-16

Family

ID=78232028

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102021001391-5A BR102021001391A2 (pt) 2020-05-05 2021-01-25 Aceleração por multiplicação matricial esparsa escalável com o uso de arranjos sistólicos com entradas de retroalimentação

Country Status (6)

Country Link
US (2) US11636174B2 (pt)
JP (1) JP2021177366A (pt)
CN (1) CN113610697A (pt)
BR (1) BR102021001391A2 (pt)
DE (1) DE102020131666A1 (pt)
TW (1) TW202143031A (pt)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102020131666A1 (de) 2020-05-05 2021-11-11 Intel Corporation Skalierbare Multiplikationsbeschleunigung dünnbesetzter Matrizen unter Verwendung systolischer Arrays mit Rückkopplungseingaben
JP7243006B1 (ja) 2021-12-20 2023-03-22 エッジコーティックス ピーティーイー. リミテッド ネットワークオンチップリコンフィギュアビリティ

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9207908B1 (en) * 2013-01-29 2015-12-08 Altera Corporation Digital signal processing blocks with embedded arithmetic circuits
US9697176B2 (en) * 2014-11-14 2017-07-04 Advanced Micro Devices, Inc. Efficient sparse matrix-vector multiplication on parallel processors
US9846623B2 (en) * 2015-08-20 2017-12-19 Qsigma, Inc. Simultaneous multi-processor apparatus applicable to acheiving exascale performance for algorithms and program systems
US10146738B2 (en) * 2016-12-31 2018-12-04 Intel Corporation Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data
US11373088B2 (en) * 2017-12-30 2022-06-28 Intel Corporation Machine learning accelerator mechanism
US20190278600A1 (en) * 2018-03-09 2019-09-12 Nvidia Corporation Tiled compressed sparse matrix format
US10678508B2 (en) * 2018-03-23 2020-06-09 Amazon Technologies, Inc. Accelerated quantized multiply-and-add operations
US10572568B2 (en) * 2018-03-28 2020-02-25 Intel Corporation Accelerator for sparse-dense matrix multiplication
US10387122B1 (en) * 2018-05-04 2019-08-20 Olsen Ip Reserve, Llc Residue number matrix multiplier
US10963787B2 (en) * 2018-05-31 2021-03-30 Neuralmagic Inc. Systems and methods for generation of sparse code for convolutional neural networks
US10644721B2 (en) * 2018-06-11 2020-05-05 Tenstorrent Inc. Processing core data compression and storage system
US11093250B2 (en) * 2018-09-29 2021-08-17 Intel Corporation Apparatus and method for gang invariant operation optimizations using dynamic evaluation
US10628622B1 (en) * 2019-05-10 2020-04-21 Xilinx, Inc. Stream FIFO insertion in a compilation flow for a heterogeneous multi-core architecture
DE102020131666A1 (de) 2020-05-05 2021-11-11 Intel Corporation Skalierbare Multiplikationsbeschleunigung dünnbesetzter Matrizen unter Verwendung systolischer Arrays mit Rückkopplungseingaben
US11204977B2 (en) 2020-05-05 2021-12-21 Intel Corporation Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs

Also Published As

Publication number Publication date
TW202143031A (zh) 2021-11-16
DE102020131666A1 (de) 2021-11-11
US20230281272A1 (en) 2023-09-07
US20220156343A1 (en) 2022-05-19
JP2021177366A (ja) 2021-11-11
CN113610697A (zh) 2021-11-05
US11636174B2 (en) 2023-04-25

Similar Documents

Publication Publication Date Title
KR20210029662A (ko) 프로그래밍가능 변환 하드웨어
CN112581347A (zh) 使用三角形对和共享变换电路系统来改进光线追踪性能的设备和方法
CN112130752A (zh) 共享本地存储器读取合并和多播返回
US20220291955A1 (en) Asynchronous input dependency resolution mechanism
BR102020019646A2 (pt) aparelho e método para facilitar o particionamento de memória local e unidade de processamento de gráficos
US20230281272A1 (en) Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs
US20230367740A1 (en) Computing efficient cross channel operations in parallel computing machines using systolic arrays
BR102020019652A2 (pt) Aparelho e método para facilitar processamento de matriz; processador de gráficos
CN112233010A (zh) 多块图形引擎中的部分写入管理
CN115129370A (zh) 在计算架构中支持8位浮点格式操作数
CN112561774A (zh) 图形处理单元及其中的方法
US20220164504A1 (en) Technologies for circuit design
US20220308877A1 (en) High performance constant cache and constant access mechanisms
BR102021004500A2 (pt) Aparelho de processamento de gráficos e sistema
EP4177748A1 (en) Programmable gpu command buffers using mutable command lists
EP4187370A1 (en) Run-time profile-guided execution of workloads
US20230205559A1 (en) Kernel source adaptation for execution on a graphics processing unit
CN116341674A (zh) 用于ai和机器学习加速的二进制扩展
US20230094696A1 (en) Efficient caching of resource state for a shared function of a three-dimensional pipeline of a graphics processing unit
US11204977B2 (en) Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs
US11182337B1 (en) Computing efficient cross channel operations in parallel computing machines using systolic arrays
BR102020019666A2 (pt) aparelho e método para facilitar operações de multiplicação de matriz; acelerador de hardware
US20210349717A1 (en) Compaction of diverged lanes for efficient use of alus
EP3907606A1 (en) Compaction of diverged lanes for efficient use of alus
US20240111353A1 (en) Constructing hierarchical clock gating architectures via rewriting

Legal Events

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