BR122023003223B1 - Equipamento para processar uma instrução para processar um laço encaixado e método implementado em computador - Google Patents

Equipamento para processar uma instrução para processar um laço encaixado e método implementado em computador Download PDF

Info

Publication number
BR122023003223B1
BR122023003223B1 BR122023003223-3A BR122023003223A BR122023003223B1 BR 122023003223 B1 BR122023003223 B1 BR 122023003223B1 BR 122023003223 A BR122023003223 A BR 122023003223A BR 122023003223 B1 BR122023003223 B1 BR 122023003223B1
Authority
BR
Brazil
Prior art keywords
tensor
index
elements
loop
value stored
Prior art date
Application number
BR122023003223-3A
Other languages
English (en)
Inventor
Dong Hyuk Woo
Andrew Everett Phelps
Original Assignee
Google Llc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google Llc filed Critical Google Llc
Publication of BR122023003223B1 publication Critical patent/BR122023003223B1/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE

Abstract

Métodos, sistemas e equipamento, incluindo um equipamento para processar uma instrução para acessar um tensor N-dimensional, o equipamento incluindo múltiplos elementos de índices de tensor e múltiplos multiplicadores de dimensões, onde cada um dos elementos multiplicadores de dimensões tem um correspondente elemento de índice de tensor. O equipamento inclui um ou mais processadores configurados para obter uma instrução para acessar um elemento específico de um tensor N-dimensional, onde o tensor N-dimensional tem múltiplos elementos dispostos através de cada uma das N dimensões, e onde N é um inteiro que é igual ou maior que um; determinar, usando um ou mais elementos de índices de tensor dos múltiplos elementos de índices de tensor e um ou mais elementos multiplicadores de dimensões dos múltiplos elementos multiplicadores de dimensões, um endereço do elemento específico; e transmitir dados que indicam o endereço determinado para acessar o elemento específico do tensor N-dimensional.

Description

FUNDAMENTOS
[001] Este pedido de patente refere-se geralmente à utilização de registros para computar valores de endereços de memória. Registros podem ser usados para manusear condições de ramos.
SUMÁRIO
[002] De acordo com um aspecto inovador do assunto descrito neste pedido de patente, registros podem ser usados para iterar estruturas de laços encaixados, para computar correspondentes endereços de memória, e para permitir que programadores manuseiem condições de limites de laços. Em geral, registros podem ser organizados para manter diversos conjuntos de estados arquitetônicos, incluindo valores de limites de laços, uma variável de índice de laço corrente em cada laço, multiplicadores de dimensões para computar um valor de endereço de memória e valores de contadores de programas para manusear limites de laços de ramos. A disposição pode ser boa para processar uma ou mais estruturas de dados multidimensionais. Com estes conjuntos de estados arquitetônicos, um processador pode executar instruções para mover variáveis de índices para novas posições, recuperar valores de endereços de memória e pular para um novo alvo de ramo.
[003] Em geral, um aspecto inovador do assunto descrito nesta especificação pode ser incorporado em um equipamento para processar uma instrução para acessar um tensor N- dimensional. O equipamento inclui múltiplos elementos de índices de tensor e múltiplos elementos multiplicadores de dimensões, onde cada um dos elementos multiplicadores de dimensões tem um correspondente elemento de índice de tensor. O equipamento inclui um ou mais processadores configurados para obter uma instrução para acessar um elemento específico de um tensor N-dimensional, onde o tensor N-dimensional tem múltiplos elementos dispostos através de cada uma das N dimensões, e onde N é um inteiro que é igual ou maior que um; determinar, usando um ou mais elementos de índices de tensor dos múltiplos elementos de índices de tensor e um ou mais elementos multiplicadores de dimensões dos múltiplos elementos multiplicadores de dimensões, um endereço do elemento específico; e transmitir dados que indicam o endereço determinado para acessar o elemento específico do tensor N-dimensional.
[004] Estas e outras implementações podem individualmente incluir opcionalmente um ou mais dos seguintes recursos. Por exemplo, o endereço do elemento específico pode ser um deslocamento de endereço de outro elemento do tensor N-dimensional. Para determinar o endereço do elemento específico, para cada elemento de índice de tensor de um ou mais elementos de índices de tensor, um valor armazenado no respectivo elemento de índice de tensor pode ser multiplicado por um valor armazenado no correspondente elemento de índice de tensor do um ou mais múltiplos elementos de índices de tensor para gerar um respectivo valor multiplicado. O deslocamento de endereço pode ser determinado pela determinação de uma soma dos valores multiplicados.
[005] Os múltiplos elementos de índices de tensor podem ser dispostos em M grupos de elementos de índices de tensor, M sendo um inteiro positivo maior que um. Cada grupo de elementos de índices de tensor pode ser designado a um distinto e diferente tensor multidimensional.
[006] O equipamento pode incluir múltiplos elementos de limites de tensor, onde cada um dos múltiplos elementos de limites de tensor pode ter um correspondente elemento de índice de tensor nos múltiplos elementos de índices de tensor. A instrução pode representar uma instrução para processar um laço encaixado que inclui um primeiro laço e um segundo laço que está em um laço externo do primeiro laço, onde o primeiro laço é iterado usando uma primeira variável de índice e onde o segundo laço é iterado usando uma segunda variável de índice.
[007] O um ou mais processadores podem ser configurados para ajustar valores armazenados nos múltiplos elementos de índices de tensor, nos múltiplos elementos multiplicadores de dimensões e nos múltiplos elementos de limites de tensor para um valor de inicialização. O um ou mais processadores podem ser configurados para ajustar um valor armazenado em um primeiro elemento de limite de tensor dos múltiplos elementos de limites de tensor em um valor limite superior da primeira variável de índice para iterar o primeiro laço; ajustar um valor armazenado em um segundo elemento de limite de tensor dos múltiplos elementos de limites de tensor em um valor limite superior da segunda variável de índice para iterar o segundo laço; ajustar um valor armazenado em um primeiro elemento multiplicador de dimensões dos múltiplos elementos multiplicadores de dimensões em um valor predeterminado; e ajustar um valor armazenado em um segundo elemento multiplicador de dimensões dos múltiplos elementos multiplicadores de dimensões no valor limite superior da primeira variável de índice.
[008] Para determinar o endereço do elemento do tensor N-dimensional, o um ou mais processadores podem ser configurados para ajustar um valor armazenado em um primeiro elemento de índice de tensor dos múltiplos elementos de índices de tensor em um valor corrente da primeira variável de índice; ajustar um valor armazenado em um segundo elemento de índice de tensor dos múltiplos elementos de índices de tensor em um valor corrente da segunda variável de índice; multiplicar o valor armazenado no primeiro elemento multiplicador de dimensões pelo valor armazenado no primeiro elemento de índice de tensor para obter um primeiro valor multiplicado; multiplicar o valor armazenado no segundo elemento multiplicador de dimensões pelo valor armazenado no segundo elemento de índice de tensor para obter um segundo valor multiplicado; e determinar o endereço por ao menos a soma do primeiro valor multiplicado e do segundo valor multiplicado.
[009] O um ou mais processadores podem ser configurados para receber uma instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor, após recepção da instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor, determinando que uma diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor satisfaz um limiar; e em resposta à determinação de que a diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor satisfaz o limiar, atualizar o valor armazenado no primeiro elemento de índice de tensor. A primeira variável de índice pode ser incrementada por um primeiro valor incremental sempre que o primeiro laço se completa. Para atualizar o valor armazenado no primeiro elemento de índice de tensor, o valor armazenado no primeiro elemento de índice de tensor deve ser incrementado pelo primeiro valor incremental.
[0010] O um ou mais processadores podem ser configurados para receber uma instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor; após recepção da instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor, determinando que uma diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor não satisfaz um limiar. Em resposta à determinação de que a diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor não satisfaz o limiar, o um ou mais processadores podem ser configurados para reajustar o valor armazenado no primeiro elemento de índice de tensor, e atualizar o valor armazenado no segundo elemento de índice de tensor. A segunda variável de índice pode ser incrementada por um segundo valor incremental sempre que o segundo laço se completa. Para atualizar o valor armazenado no segundo elemento de índice de tensor, o valor armazenado no segundo elemento de índice de tensor deve ser incrementado pelo segundo valor incremental.
[0011] O um ou mais processadores podem incluir uma ou mais unidades lógicas aritméticas. Cada um dos elementos de índices de tensor e dos elementos multiplicadores de dimensões pode ser um registro. O equipamento pode incluir múltiplos elementos alvos de ramos, onde cada um dos múltiplos elementos alvos de ramos tem um correspondente elemento de índice de tensor nos múltiplos elementos de índices de tensor, e onde cada um dos múltiplos elementos alvos de ramos é configurado para armazenar um endereço para uma instrução a ser executada após o término de uma iteração de um laço que corresponda ao respectivo elemento alvo de ramo.
[0012] O assunto descrito neste pedido de patente pode ser implementado em modalidades específicas de modo a realizar uma ou mais das seguintes vantagens. A utilização de registros para acompanhar os valores de endereços de memória permite que um programa itere laços profundamente encaixados com uma instrução. Os valores de endereços de memória podem ser rapidamente determinados pela aplicação de cálculos aritméticos simples baseados nos valores armazenados nos registros. A determinação de valores de endereços de memória usando unidades lógicas aritméticas permite que o número de ciclos computacionais no processador seja reduzido, e aumenta a largura de banda do processador para outras tarefas computacionais. Tensores podem ser atravessados por um número reduzido de instruções. Uma arquitetura de registros bidimensionais permite tensores multidimensionais tendo cada um diferentes dimensões a serem rastreadas concorrentemente. Ao ter tabelas alvos de ramos, a sobrecarga relacionada a instruções de ramos pode ser reduzida.
[0013] Outras implementações deste e de outros aspectos incluem sistemas, equipamentos e programas computacionais correspondentes, configurados para executar as ações dos métodos, codificadas em dispositivos computacionais de armazenamento. Um sistema de um ou mais computadores pode ser configurado deste modo por meio de software, firmware, hardware, ou uma combinação destes instalados no sistema que em funcionamento faz com que o sistema execute as ações. Um ou mais programas computacionais podem ser configurados deste modo devido a terem instruções que, quando executadas por equipamento de processamento de dados, fazem com que o equipamento execute as ações.
[0014] Os detalhes de uma ou mais implementações do assunto descrito neste pedido de patente são apresentados nos desenhos anexos e na descrição abaixo. Outros recursos, aspectos e vantagens adicionais do assunto tornar-se-ão evidentes a partir da descrição, dos desenhos e das reivindicações.
DESCRIÇÃO RESUMIDA DOS DESENHOS
[0015] A FIG. 1 é um diagrama de blocos de um sistema computacional exemplificativo.
[0016] As FIGS. 2A-2H ilustram uma unidade transversal de tensor exemplificativa.
[0017] A FIG. 3 ilustra uma unidade transversal de tensor exemplificativa.
[0018] A FIG. 4 é um fluxograma que ilustra um exemplo de um processo para determinar um endereço de uma variável de tensor multidimensional.
[0019] Números de referência e designações similares nos diversos desenhos indicam elementos similares.
DESCRIÇÃO DETALHADA
[0020] Em geral, quando um algoritmo de software processa um tensor N-dimensional, pode ser usado um laço encaixado, onde cada laço é responsável por atravessar cada dimensão do tensor N-dimensional. Um tensor multidimensional pode ser uma matriz, ou matrizes multidimensionais. Cada dimensão do tensor N-dimensional pode incluir um ou mais elementos, onde cada elemento pode armazenar um respectivo valor de dados. Por exemplo, um tensor pode ser uma variável em um programa, onde a variável pode ter três dimensões. A primeira dimensão pode ter um comprimento de trezentos elementos, a segunda dimensão pode ter um comprimento de mil elementos e a terceira dimensão pode ter um comprimento de vinte elementos. Atravessar o tensor em um laço encaixado exige uma computação de um valor de endereço de memória de um elemento para carregar ou armazenar o correspondente valor de dados do elemento. Por exemplo, um para-laço é um laço encaixado, onde três laços rastreados por três variáveis de índices de laços podem ser encaixados para atravessar o tensor tridimensional. Em alguns casos, um processador pode necessitar executar uma condição de limite de laço, tal como ajustar um limite de laço de um laço interno com uma variável de índice de laço externo. Por exemplo, ao determinar se sai do laço mais interno de um laço encaixado, o programa pode comparar o valor corrente da variável de índice de laço do laço mais interno com o valor corrente da variável de índice de laço do laço mais externo do laço encaixado.
[0021] Estas tarefas podem exigir um número significativo de instruções tais como instruções de ramos e instruções aritméticas de inteiros. Quando cada limite de laço for pequeno e o número de laços for grande, a computação pode consumir uma porção significativa do tempo total de execução, e degradar seriamente o desempenho global. Por exemplo, um processador pode ser designado para processar a entrada do tensor N-dimensional. O processador pode ser implementado em uma arquitetura bidimensional, a qual deixa (N-2) dimensões para serem processadas por software. Quando N for grande, o manuseio das N-2 dimensões pode ser computacionalmente pesado para o processador porque a computação exige largura de banda de computação escalar muito elevada. Uma unidade transversal de tensor de hardware para um processador pode aumentar a largura de banda de computação do processador pela redução do número de dimensões que o processador necessita para processar quando atravessando um tensor.
[0022] A FIG. 1 mostra um diagrama de blocos de um sistema computacional exemplificativo 100 para atravessar um tensor. Em geral, o sistema computacional 100 processa uma entrada 104 para gerar uma saída 116. O sistema computacional 100 pode ser configurado para executar computações de álgebra linear. A entrada 104 pode ser quaisquer dados adequados que possam ser processados pelo sistema computacional 100. O sistema computacional 100 inclui uma unidade de processamento 102, um meio de armazenamento 104 e uma unidade transversal de tensor 106.
[0023] Em geral, quando a unidade de processamento 102 executa uma instrução para acessar um elemento específico de um tensor, a unidade transversal de tensor 106 determina o endereço do elemento específico do tensor, de modo que a unidade de processamento 102 possa acessar o meio de armazenamento 104 para ler dados 114 que representam o valor do elemento específico. Por exemplo, um programa pode incluir um laço encaixado e a unidade de processamento 102 pode executar uma instrução para acessar um elemento de uma variável de arranjo bidimensional dentro do laço encaixado de acordo com valores de variáveis de índices correntes associados ao laço encaixado. Com base nos valores de variáveis de índices correntes associados ao laço encaixado, a unidade transversal de tensor 106 pode determinar um valor deslocado que representa um deslocamento de um primeiro elemento da variável de arranjo bidimensional. A unidade de processamento 102 pode em seguida acessar, usando o valor deslocado e proveniente do meio de armazenamento, o elemento específico da variável de arranjo bidimensional.
[0024] A unidade de processamento 102 é configurada para processar instruções para execução dentro do sistema computacional 100, incluindo instruções 112 armazenadas no meio de armazenamento 104 ou outras instruções armazenadas em outro dispositivo de armazenamento. A unidade de processamento 102 pode incluir um ou mais processadores. O meio de armazenamento 104 armazena informações dentro do sistema computacional 100. Em algumas implementações, o meio de armazenamento 104 é uma unidade ou unidades de memória volátil. Em algumas outras implementações, o meio de armazenamento 104 é uma unidade ou unidades de memória não- volátil. O meio de armazenamento 104 pode também ser outra forma de meio legível por computador, tal como um dispositivo de disco flexível, um dispositivo de disco rígido, um dispositivo de disco ótico, ou um dispositivo de fita, uma memória flash ou outro dispositivo similar de memória de estado sólido, ou um arranjo de dispositivos, incluindo dispositivos em uma rede de área de armazenamento ou outras configurações. As instruções, quando executadas pela unidade de processamento 102, fazem com que a unidade de processamento 102 execute uma ou mais tarefas.
[0025] A unidade transversal de tensor 106 é configurada para determinar um estado associado a um ou mais tensores. O estado pode incluir valores de limites de laços, valores de variáveis de índices de laços correntes, multiplicadores de dimensões para computar um valor de endereço de memória e/ou valores de contadores de programa para manusear limites de laços de ramos. A unidade transversal de tensor 106 inclui elementos de estado de tensor 122 e uma unidade lógica aritmética 124. Cada um dos elementos de estado de tensor 122 pode ser um elemento de armazenamento, por exemplo um registro ou qualquer outro circuito de armazenamento adequado. Em algumas implementações, os elementos de estado de tensor 122 podem estar física ou logicamente dispostos em diferentes grupos, como descrito em maior detalhe abaixo com referência às FIGS. 2A-2H e FIGS. 3A-3B. Em algumas implementações, um grupo dos elementos de estado de tensor 122 pode estar física ou logicamente disposto em um arranjo multidimensional. Por exemplo, cada grupo dos elementos de estado de tensor 122 pode estar física ou logicamente disposto em um arranjo bidimensional. A unidade lógica aritmética 124 inclui uma ou mais unidades lógicas aritméticas (ALUs) que são configuradas para executar operações aritméticas e lógicas. Por exemplo, a unidade lógica aritmética 124 pode incluir circuitos digitais que são configurados para executar adição, subtração, multiplicação, divisão, E lógico, OU lógico, ou quaisquer outras operações aritméticas e lógicas adequadas.
[0026] A FIG. 2A mostra um conjunto exemplificativo de elementos de estado de tensor 200 de uma unidade transversal de tensor. Os elementos de estado de tensor 200 podem corresponder aos elementos de estado de tensor 122 da unidade transversal de tensor 106. A unidade transversal de tensor 200 inclui um grupo de elementos de índices de tensor 202, um grupo de elementos de limites de tensor 204 e um grupo de elementos multiplicadores de dimensões 206. Os elementos de índices de tensor 202 podem estar física ou logicamente dispostos em um arranjo 2-D com M linhas e N colunas, onde M e N são inteiros maiores ou iguais a um. Em algumas implementações, cada linha dos elementos de índices de tensor 202 pode representar informações de índices de tensor para um tensor. Por exemplo, se um programa definir duas variáveis de arranjo V1 e V2, a unidade transversal de tensor pode designar as linhas 202a e 202b para rastrear as informações de índices de tensor para as variáveis de arranjos V1 e V2, respectivamente. Em algumas implementações, cada coluna dos elementos de índices de tensor 202 pode representar informações de índices de tensor para valores de variáveis de índices de laços encaixados que estão associados a um tensor. Por exemplo, se o programa definir um laço encaixado com três laços para acessar a variável V1, onde cada laço do laço encaixado é indexado por variáveis de índices de laços encaixados i, j e k, a unidade transversal de tensor pode designar os elementos de índices de tensor X1,1, X1,2 e X1,3 para rastrear as variáveis de índices de laços encaixados i, j e k, respectivamente. As informações de índices de tensor são descritas em maior detalhe abaixo com referência às FIGS. 2D-2H abaixo.
[0027] Os elementos de limites de tensor 204 podem ser física ou logicamente dispostos como um arranjo 2-D com as mesmas dimensões que os elementos de índices de tensor 202, onde cada elemento dos elementos de limites de tensor 204 tem um correspondente elemento nos elementos de índices de tensor 202. Em algumas implementações, cada linha dos elementos de limites de tensor 204 pode representar informações de limites de tensor para um tensor. Por exemplo, se o programa definir duas variáveis de arranjos V1 e V2, a unidade transversal de tensor pode designar as linhas 204a e 204b para rastrear as informações de limites de tensor para as variáveis de arranjos V1 e V2, respectivamente. Em algumas implementações, cada coluna dos elementos de limites de tensor 204 pode representar informações de limites de tensor para valores de variáveis de índices de laços encaixados que estão associados a um tensor. Por exemplo, se o programa definir um laço encaixado com três laços para acessar a variável V1, onde cada laço do laço encaixado é indexado por variáveis de índices de laços encaixados i, j e k, a unidade transversal de tensor pode designar os elementos de limites de tensor Y1,1, Y1,2 e Y1,3 para rastrear as informações de limites de tensor associadas às variáveis de índices de laços encaixados i, j e k, respectivamente. As informações de limites de tensor são descritas em maior detalhe abaixo com referência à FIG. 2C abaixo.
[0028] Os elementos multiplicadores de dimensões 206 podem ser física ou logicamente dispostos como um arranjo 2- D com as mesmas dimensões que os elementos de índices de tensor 202, onde cada elemento dos elementos multiplicadores de dimensões 206 tem um correspondente elemento nos elementos de índices de tensor 202. Em algumas implementações, cada linha dos elementos multiplicadores de dimensões 206 pode representar informações de multiplicadores de dimensões para um tensor. Por exemplo, se o programa definir duas variáveis de arranjos V1 e V2, a unidade transversal de tensor pode designar as linhas 206a e 206b para rastrear as informações de multiplicadores de dimensões para as variáveis de arranjos V1 e V2, respectivamente. Em algumas implementações, cada coluna dos elementos multiplicadores de dimensões 206 pode representar informações de multiplicadores de dimensões para valores de variáveis de índices de laços encaixados que estão associados a um tensor. Por exemplo, se o programa definir um laço encaixado com três laços para acessar a variável V1, onde cada laço do laço encaixado é indexado por variáveis de índices de laços encaixados i, j e k, a unidade transversal de tensor pode designar os elementos multiplicadores de dimensões Z1,1, Z1,2 e Z1,3 para rastrear as informações de multiplicadores de dimensões associadas às variáveis de índices de laços encaixados i, j e k, respectivamente. As informações de multiplicadores de dimensões são descritas em maior detalhe abaixo com referência à FIG. 2D abaixo.
[0029] As FIGS. 2B-2H mostram um exemplo de como os elementos de estado de tensor 200 podem ser usados por uma unidade transversal de tensor para processar um tensor. Com referência à FIG. 2B, um programa 212 pode ser armazenado no meio de armazenamento 104 ou outro meio de armazenamento que possa ser executado pela unidade de processamento 102. O programa 212 especifica uma variável de arranjo de caracteres V com uma primeira dimensão de 4 e uma segunda dimensão de 2. O programa 212 especifica um para-laço encaixado para atravessar a variável V, onde o para-laço atravessa a primeira dimensão de V em um laço externo rastreado por uma variável de índices de laço encaixado i, e atravessa a segunda dimensão de V em um laço interno rastreado por uma variável de índices de laço encaixado j. Em algumas implementações, os elementos de estado de tensor 200 podem ser inicializados no início de um programa. Por exemplo, um processador pode executar uma instrução "InicializarElementos" que inicializa os elementos de estado de tensor 200. A instrução pode ser uma instrução de hardware ou um conjunto de instruções executáveis por um processador. Em algumas implementações, após inicialização, cada elemento dos elementos de estado de tensor 200 é ajustado para um valor predeterminado. Aqui, após inicialização, cada elemento dos elementos de estado de tensor 200 pode ser ajustado para zero.
[0030] A FIG. 2C ilustra o ajuste de informações de limites de tensor nos elementos de limites de tensor 204 de acordo com o programa 212. Por exemplo, um processador pode executar uma instrução "AjustarLimiteDeTensor" que ajusta informações de limites de tensor nos elementos de limites de tensor 204. Em algumas implementações, as informações de limites de tensor representam um limite superior da correspondente variável de índice de laço encaixado. Aqui, a variável de índice de laço encaixado interno i tem um limite superior de 4, e a variável de índice de laço encaixado externo j tem um limite superior de 2. Após ajustar as informações de limites de tensor nos elementos de limites de tensor 204, o elemento 214 (isto é, Y1,2) é ajustado para 4 e o elemento 216 (isto é, Y1,1) é ajustado para 2.
[0031] A FIG. 2D ilustra o ajuste de informações de multiplicadores de dimensões nos elementos multiplicadores de dimensões 206 de acordo com o programa 212. Por exemplo, um processador pode executar uma instrução "AjustarMultiplicadoresDeDimensões" que ajusta informações de multiplicadores de dimensões nos elementos multiplicadores de dimensões 206. Em algumas implementações, as informações de multiplicadores de dimensões representam um multiplicador pelo qual um correspondente elemento nos elementos de índices de tensor 202 pode ser multiplicado. Aqui, a variável de caracteres V tem uma primeira dimensão de 4 e uma segunda dimensão de 2. Se o elemento V[0][0] for armazenado em um endereço de memória base P e o elemento V[0][1] for armazenado em um endereço de memória P+1, o elemento V[1][0] é armazenado em um endereço de memória P+2. O endereço de memória correspondente para um elemento V[i][j] é portanto P+(ix2)+(jx1). Portanto, as informações de multiplicadores de dimensões para o laço externo é 2, e as informações de multiplicadores de dimensões para o laço interno é 1. Após ajustar informações de multiplicadores de dimensões nos elementos multiplicadores de dimensões 206, o elemento 222 (isto é, Z1,2) é ajustado para 2, e o elemento 224 (isto é, Z1,1) é ajustado para 1.
[0032] A FIG. 2E ilustra o acesso ao elemento V[0][0] de acordo com o programa 212. Por exemplo, o processador pode executar uma instrução "LocalizarTensor" que localiza um endereço de memória que corresponde ao elemento sendo acessado. Em algumas implementações, a instrução pode incluir um endereço de memória base. Por exemplo, a instrução "LocalizarTensor" pode incluir um endereço de memória do elemento V[0][0] que é o primeiro elemento da variável V. Em algumas implementações, a instrução pode incluir um número de linha correspondente a um tensor a ser acessado. Por exemplo, a instrução "LocalizarTensor" pode incluir um número de linha correspondente à variável V. Aqui, o número de linha é 1.
[0033] Em algumas implementações, em resposta à recepção da instrução, uma unidade de lógica aritmética (por exemplo, a unidade de lógica aritmética 106) determina um deslocamento de endereço de memória pelo cálculo de uma soma do produto multiplicativo entre valores armazenados em cada um dos elementos de índices de tensor 202 e valores armazenados nos correspondentes elementos multiplicadores de dimensões 206. Aqui, a unidade de lógica aritmética multiplica o valor armazenado no elemento X1,N pelo valor armazenado no elemento Z1,N, o valor armazenado no elemento X1,N-1 pelo valor armazenado no elemento Z1,N-1,..., o valor armazenado no elemento X1,2 pelo valor armazenado no elemento Z1,2, e o valor armazenado no elemento X1,1 pelo valor armazenado no elemento Z1,1. A unidade de lógica aritmética soma em seguida todos os produtos multiplicados uns com os outros para determinar o endereço de memória que corresponde ao elemento sendo acessado. Uma vez que todos os valores nos elementos de índices de tensor 202 são zero, o deslocamento de endereço de memória é zero, como indicado pela caixa 230. O processador pode em seguida acessar o elemento V[0][0] pela adição do endereço de memória base (isto é, P) ao deslocamento de endereço de memória (isto é, 0) para determinar um endereço de memória e acessar os dados armazenados no meio de armazenamento com base no endereço de memória determinado.
[0034] A FIG. 2F ilustra o acesso ao elemento V[0][1] de acordo com o programa 212. Por exemplo, após o programa ter iterado através do primeiro laço interno, as variáveis de índices de laços encaixados são atualizadas (isto é, i=0 e j=0), o processador pode executar uma instrução "IterarTensor" que atualiza os elementos de índices de tensor 202 quando o programa entra no segundo laço interno (isto é, i=0 e j=1). Em algumas implementações, a unidade transversal de tensor atualiza os elementos de índices de tensor 202 pelo incremento do elemento de índice de tensor que tem o menor índice por um valor predeterminado. Por exemplo, com referência à FIG. 2F, a unidade transversal de tensor pode incrementar o elemento de índice de tensor 228 (isto é, X1,1) por 1. Em algumas outras implementações, a unidade transversal de tensor pode atualizar os elementos de índices de tensor 202 pelo decremento do elemento de índice de tensor que tem o menor índice por um valor predeterminado.
[0035] Em algumas implementações, a unidade transversal de tensor compara os valores atualizados nos elementos de índices de tensor 202 com os valores nos elementos de limites de tensor 204, e determina se um limiar foi satisfeito. Por exemplo, a unidade transversal de tensor pode comparar o valor atualizado (isto é, 1) no elemento de índice de tensor 228 com o valor (isto é, 2) no elemento de limite de tensor 216, e determinar se o valor atualizado no elemento de índice de tensor 228 é menor que o valor no elemento de limite de tensor 216. Aqui, o valor atualizado no elemento de índice de tensor 228 é menor que o valor no elemento de limite de tensor 216, e o valor atualizado no elemento de índice de tensor 228 permanece 1.
[0036] O processador pode em seguida acessar o elemento V[0][1] pela execução da instrução "LocalizarTensor" para localizar o endereço de memória que corresponde a V[0][1]. Com referência à FIG. 2F, todos os valores nos elementos de índices de tensor 202 exceto o elemento de índice de tensor 228 são zero. O elemento de índice de tensor 228 tem um valor de 1, e a unidade lógica aritmética pode determinar que o deslocamento de endereço de memória é 1, como indicado pela caixa 232. O processador pode em seguida acessar o elemento V[0][1] pela adição do endereço de memória base (isto é, P) ao deslocamento de endereço de memória (isto é, 1) para determinar um endereço de memória, e acessar os dados armazenados no meio de armazenamento com base no endereço de memória determinado.
[0037] A FIG. 2G ilustra o acesso ao elemento V[1][0] de acordo com o programa 212. Por exemplo, após o programa ter iterado através do laço interno pela segunda vez, as variáveis de índices de laços encaixados são atualizadas (isto é, i=1 e j=0), e o processador pode executar uma instrução "IterarTensor" que atualiza os elementos de índices de tensor 202. Por exemplo, a unidade transversal de tensor pode incrementar o elemento de índice de tensor 228 (isto é, X1,1) por 1. A unidade transversal de tensor pode comparar o valor atualizado (isto é, 2) no elemento de índice de tensor 228 com o valor (isto é, 2) no elemento de limite de tensor 216, e determinar que o valor atualizado no elemento de índice de tensor 228 não é menor que o valor no elemento de limite de tensor 216. Em algumas implementações, em resposta à determinação de que o limiar não foi satisfeito, a unidade transversal de tensor pode transferir o valor atualizado para o elemento de índice de tensor seguinte e reajustar o elemento de índice de tensor corrente. Por exemplo, uma vez que o valor atualizado no elemento de índice de tensor 228 não é menor que o valor no elemento de limite de tensor 216, a unidade transversal de tensor pode incrementar o elemento de limite de tensor 216 por 1, e reajustar o elemento de índice de tensor 228 de volta para 0.
[0038] O processador pode em seguida acessar o elemento V[1][0] pela execução da instrução "LocalizarTensor" para localizar o endereço de memória que corresponde a V[1][0]. Com referência à FIG. 2G, todos os valores nos elementos de índices de tensor 202 exceto o elemento de índice de tensor 226 são zero. O elemento de índice de tensor 226 tem um valor de 1, e a unidade lógica aritmética pode determinar que o deslocamento de endereço de memória é 2, como indicado pela caixa 234. O processador pode em seguida acessar o elemento V[1][0] pela adição do endereço de memória base (isto é, P) ao deslocamento de endereço de memória (isto é, 2) para determinar um endereço de memória, e acessar os dados armazenados no meio de armazenamento com base no endereço de memória determinado.
[0039] A FIG. 2H ilustra o acesso ao elemento V[3][1] de acordo com o programa 212. Por exemplo, o programa pode continuar a iterar através do laço interno e do laço externo até que as variáveis de índices de laços encaixados estejam nos seus limites superiores (isto é, i=3 e j=1). O processador pode acessar o elemento V[3][1] pela execução da instrução "LocalizarTensor" para localizar o endereço de memória que corresponde a V[3][1]. Com referência à FIG. 2H, todos os valores nos elementos de índices de tensor 202 exceto os elementos de índices de tensor 226 e 228 são zero. O elemento de índice de tensor 226 tem um valor de 3 e o elemento de índice de tensor 228 tem um valor de 1. A unidade lógica aritmética pode determinar que o deslocamento de endereço de memória é 7, como indicado pela caixa 236. O processador pode em seguida acessar o elemento V[3][1] pela adição do endereço de memória base (isto é, P) ao deslocamento de endereço de memória (isto é, 7) para determinar um endereço de memória, e acessar os dados armazenados no meio de armazenamento com base no endereço de memória determinado.
[0040] O processador pode em seguida executar a instrução "IterarTensor" que atualiza os elementos de índices de tensor 202. Por exemplo, a unidade transversal de tensor pode incrementar o elemento de índice de tensor 228 (isto é, X1,1) por 1. A unidade transversal de tensor pode comparar o valor atualizado (isto é, 2) no elemento de índice de tensor 228 com o valor (isto é, 2) no elemento de limite de tensor 216, e determinar que o valor atualizado no elemento de índice de tensor 228 não é menor que o valor no elemento de limite de tensor 216. Uma vez que o valor atualizado no elemento de índice de tensor 228 não é menor que o valor no elemento de limite de tensor 216, a unidade transversal de tensor pode incrementar o elemento de índice de tensor 226 por 1, e reajustar o elemento de índice de tensor 228 de volta para 0. A unidade transversal de tensor pode comparar o valor atualizado (isto é, 3+1=4) no elemento de índice de tensor 226 com o valor (isto é, 4) no elemento de limite de tensor 214, e determinar que o valor atualizado no elemento de índice de tensor 226 não é menor que o valor no elemento de limite de tensor 214. Uma vez que o valor atualizado no elemento de índice de tensor 228 não é menor que o valor no elemento de limite de tensor 214, a unidade transversal de tensor pode incrementar o elemento de índice de tensor seguinte (isto é, X1,3) por 1, e reajustar o elemento de índice de tensor 226 de volta para 0. Contudo, uma vez que o correspondente elemento de limite de tensor (isto é, Y1,3) é 0, o limiar não é satisfeito. A unidade transversal de tensor continuará a reajustar a primeira linha dos elementos de índices de tensor 202 até que todos os elementos de índices de tensor na primeira linha sejam reajustados para 0.
[0041] No exemplo descrito acima nas referências às FIGS. 2B-2H, a ordem da transversal de tensor para o elemento V é V[0][0], V[0][1], V[1][0], V[1][1], V[2][0], V[2][1], V[3][0] e V[3][1]. Em algumas implementações, um programa pode atravessar o elemento V na ordem V[0][0], V[1][0], V[2][0], V[3][0], V[0][1], V[1][1], V[2][1] e V[3][1], pelo ajuste de informações de limites de tensor no elemento 214 (isto é, Y1,2) para 2 e no elemento 216 (isto é, Y1,1) para 4, e pelo ajuste das informações de multiplicadores de dimensões no elemento 222 (isto é, Z1,2) para 1 e no elemento 224 (isto é, Z1,1) para 2.
[0042] A FIG. 3 mostra um conjunto exemplificativo de elementos de estado de tensor 300 de uma unidade transversal de tensor. Os elementos de estado de tensor 300 podem corresponder aos elementos de estado de tensor 122 da unidade transversal de tensor 106 ou aos elementos de estado de tensor 200. A unidade transversal de tensor 300 inclui um grupo de elementos de índices de tensor 302, um grupo de elementos de limites de tensor 304, um grupo de elementos multiplicadores de dimensões 306 e um grupo de elementos alvos de ramos 308. Os elementos alvos de ramos 308 podem estar física ou logicamente dispostos em um arranjo 2-D, onde cada elemento dos elementos alvos de ramos 308 tem um correspondente elemento nos elementos de índices de tensor 302. Em algumas implementações, cada linha dos elementos alvos de ramos 308 pode representar informações de alvos de ramos para um tensor. Em algumas implementações, cada coluna dos elementos alvos de ramos 308 pode representar informações de alvos de ramos para valores de variáveis de índices de laços encaixados que estão associados a um tensor. Em algumas implementações, para um tensor N-dimensional, onde existem N colunas para os elementos de índices de tensor 302, os elementos de limites de tensor 304, e os elementos multiplicadores de dimensões 306, podem existir N+1 colunas para correspondentes alvos de ramos 308 porque existem N+1 casos para satisfazer o limiar de limites.
[0043] Em algumas implementações, informações de alvos de ramos podem incluir endereço de memória de uma instrução que está para ser executada por um processador após o término de uma iteração de laço em um laço encaixado. Por exemplo, quando o valor em um elemento de índice de tensor é atualizado, o processador pode executar uma instrução de acordo com o endereço de memória armazenado no correspondente elemento alvo de ramo. Com referência à FIG. 3, um programa 312 pode ser armazenado em um meio de armazenamento 104 ou outro meio de armazenamento que possa ser executado pela unidade de processamento 102. O programa 312 especifica uma variável de arranjo de caracteres V com uma primeira dimensão de 4 e uma segunda dimensão de 2. O programa 312 especifica um para-laço encaixado para atravessar a variável V, onde o para-laço atravessa a primeira dimensão de V em um laço externo rastreado por uma variável de índice de laço encaixado i, e atravessa a segunda dimensão de V em um laço interno rastreado por uma variável de índice de laço encaixado j. O programa 312 também especifica uma condição para sair do laço interno, o que exige que o processador execute uma instrução de funções mínimas para comparar o valor corrente da variável de índice de laço encaixado i e o número 2. Em algumas implementações, o endereço de memória da instrução de funções mínimas pode ser armazenado no elemento alvo de ramo 324, de modo que no caso em que existir uma transferência do elemento de índice de tensor 326 para o elemento de índice de tensor 328, a instrução de funções mínimas será executada pelo processador para determinar a condição de ramo para o laço interno e ajustar as informações de limites de tensor para o laço interno. Similarmente, o endereço de memória de uma instrução diferente pode ser armazenado no elemento alvo de ramo 322, de modo que no caso em que existir um incremento no elemento de índice de tensor 326 sem haver uma transferência para o elemento de índice de tensor 328, a instrução diferente será executada pelo processador.
[0044] A FIG. 4 é um fluxograma que ilustra um exemplo de um processo 400 para determinar um endereço de uma variável de tensor multidimensional. O processo 400 pode ser executado por um sistema de um ou mais computadores, por exemplo, o sistema computacional 100. O sistema inclui uma unidade transversal de tensor com múltiplos elementos de índices de tensor e múltiplos elementos multiplicadores de dimensões, onde cada um dos elementos multiplicadores de dimensões tem um correspondente elemento de índice de tensor. Em algumas implementações, o sistema pode incluir múltiplos elementos de limites de tensor, onde cada um dos múltiplos elementos de limites de tensor pode ter um correspondente elemento de índice de tensor nos múltiplos elementos de índices de tensor. Em algumas implementações, o sistema inclui uma ou mais unidades lógicas aritméticas.
[0045] O sistema obtém uma instrução para acessar um elemento específico de um tensor N-dimensional, onde o tensor N-dimensional tem múltiplos elementos dispostos em cada uma das N dimensões, e onde N é um inteiro que é igual ou maior que um (402). Por exemplo, a unidade de processamento 102 pode executar uma instrução para acessar um elemento específico de um tensor.
[0046] Em algumas implementações, a instrução pode representar uma instrução para processar um laço encaixado que inclui um primeiro laço e um segundo laço que é um laço externo do primeiro laço, onde o primeiro laço é iterado usando uma primeira variável de índice, e onde o segundo laço é iterado usando uma segunda variável de índice. Por exemplo, um programa 212 pode ser armazenado no meio de armazenamento 104 ou outro meio de armazenamento que possa ser executado pela unidade de processamento 102. O programa 212 pode especificar uma variável de arranjo de caracteres V com uma primeira dimensão de 4 e uma segunda dimensão de 2. O programa 212 pode especificar um para-laço encaixado para atravessar a variável V, onde o para-laço atravessa a primeira dimensão de V em um laço externo rastreado por uma variável de índice de laço encaixado i, e atravessa a segunda dimensão de V em um laço interno por uma variável de índice de laço encaixado j.
[0047] O sistema determina, usando um ou mais elementos de índices de tensor de múltiplos elementos de índices de tensor e um ou mais elementos multiplicadores de dimensões de múltiplos elementos multiplicadores de dimensões, um endereço do elemento específico (404). Em algumas implementações, o endereço do elemento específico pode ser um deslocamento de endereço de outro elemento do tensor N-dimensional. Para cada elemento de índice de tensor do um ou mais elementos de índices de tensor, o sistema pode multiplicar um valor armazenado no respectivo elemento de índice de tensor por um valor armazenado no correspondente elemento de índice de tensor do um ou mais múltiplos elementos de índices de tensor para gerar um respectivo valor multiplicado. O sistema pode determinar o deslocamento de endereço pela determinação de uma soma dos valores multiplicados. Por exemplo, uma unidade lógica aritmética (por exemplo, a unidade lógica aritmética 106) pode determinar um deslocamento de endereço de memória pelo cálculo de uma soma do produto multiplicativo entre valores armazenados em cada um dos elementos de índices de tensor 202 e valores armazenados nos correspondentes elementos multiplicadores de dimensões 206.
[0048] Em algumas implementações, o sistema pode ajustar valores armazenados nos múltiplos elementos de índices de tensor, nos múltiplos elementos multiplicadores de dimensões e nos múltiplos elementos de limites de tensor para um valor de inicialização. Por exemplo, um processador pode executar uma instrução "InicializarElementos" que inicializa os elementos de estado de tensor 200. Após inicialização, cada elemento dos elementos de estado de tensor 200 pode ser ajustado para zero.
[0049] Em algumas implementações, o sistema pode ajustar um valor armazenado em um primeiro elemento de limite de tensor dos múltiplos elementos de limites de tensor para um valor limite superior da primeira variável de índice para iterar o primeiro laço. O sistema pode ajustar um valor armazenado em um segundo elemento de limite de tensor dos múltiplos elementos de limites de tensor para um valor limite superior da segunda variável de índice para iterar o segundo laço. Por exemplo, um processador pode executar uma instrução "InicializarElementos" que inicializa os elementos de estado de tensor 200. Após inicialização, cada elemento dos elementos de estado de tensor 200 pode ser ajustado para zero. O sistema pode ajustar um valor armazenado em um primeiro elemento multiplicador de dimensões dos múltiplos elementos multiplicadores de dimensões para um valor predeterminado. O sistema pode ajustar um valor armazenado em um segundo elemento multiplicador de dimensões dos múltiplos elementos multiplicadores de dimensões para o valor limite superior da primeira variável de índice. Por exemplo, um processador pode executar uma instrução "AjustarLimiteDeTensor" que ajusta informações de limites de tensor nos elementos de limites de tensor 204. Após ajustar informações de limites de tensor nos elementos de limites de tensor 204, o elemento 214 (isto é, Y1,2) é ajustado para 4, e o elemento 216 (isto é, Y1,1) é ajustado para 2.
[0050] Em algumas implementações, o sistema pode ajustar um valor armazenado em um primeiro elemento de índice de tensor dos múltiplos elementos de índices de tensor para um valor corrente da primeira variável de índice. O sistema pode ajustar um valor armazenado em um segundo elemento de índice de tensor dos múltiplos elementos de índices de tensor para um valor corrente da segunda variável de índice. O sistema pode multiplicar o valor armazenado no primeiro elemento multiplicador de dimensões pelo valor armazenado no primeiro elemento de índice de tensor para obter um primeiro valor multiplicado. O sistema pode multiplicar o valor armazenado no segundo elemento multiplicador de dimensões pelo valor armazenado no segundo elemento de índice de tensor para obter um segundo valor multiplicado. O sistema pode determinar o endereço por ao menos a soma do primeiro valor multiplicado e do segundo valor multiplicado. Por exemplo, uma unidade lógica aritmética multiplica o valor armazenado no elemento X1,N pelo valor armazenado no elemento Z1,N, o valor armazenado no elemento X1,N-1 pelo valor armazenado no elemento Z1,N-1,..., o valor armazenado no elemento X1,2 pelo valor armazenado no elemento Z1,2, e o valor armazenado no elemento X1,1 pelo valor armazenado no elemento Z1,1. A unidade lógica aritmética soma em seguida todos os produtos multiplicados uns aos outros para determinar o endereço de memória que corresponde ao elemento sendo associado.
[0051] Em algumas implementações, o sistema pode receber uma instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor. Por exemplo, o processador pode executar uma instrução "IterarTensor" que atualiza os elementos de índices de tensor 202. Após recepção da instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor, o sistema pode determinar que uma diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor satisfaz um limiar. Em resposta à determinação de que a diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor satisfaz o limiar, o sistema pode atualizar o primeiro elemento de índice de tensor. Por exemplo, com referência à FIG. 2F, a unidade transversal de tensor pode incrementar o elemento de índice de tensor 228 (isto é, X1,1) por 1. O valor atualizado no elemento de índice de tensor 228 é menor que o valor no elemento de limite de tensor 216, e o valor atualizado no elemento de índice de tensor 228 permanece 1.
[0052] Em algumas implementações, a primeira variável de índice pode ser incrementada por um primeiro valor incremental sempre que o primeiro laço se completa. O sistema pode incrementar o valor atualizado no primeiro elemento de índice de tensor pelo primeiro valor incremental. Por exemplo, após o programa entrar no segundo laço interno (isto é, i=0 e j=1), a unidade transversal de tensor pode incrementar o elemento de índice de tensor 228 (isto é, X1,1) por 1.
[0053] Em algumas implementações, o sistema pode receber uma instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor. Por exemplo, o processador pode executar uma instrução "IterarTensor" que atualiza os elementos de índices de tensor 202. Após recepção da instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor, o sistema pode determinar que uma diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor não satisfaz um limiar. Em resposta à determinação de que a diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor não satisfaz o limiar, o sistema pode reajustar o valor armazenado no primeiro elemento de índice de tensor, e atualizar o valor armazenado no segundo elemento de índice de tensor. Por exemplo, a unidade transversal de tensor pode incrementar o elemento de índice de tensor 228 (isto é, X1,1) por 1. A unidade transversal de tensor pode comparar o valor atualizado (isto é, 2) no elemento de índice de tensor 228 com o valor (isto é, 2) no elemento de limite de tensor 216, e determinar que o valor atualizado no elemento de índice de tensor 228 não é menor que o valor no elemento de limite de tensor 216. Uma vez que o valor atualizado no elemento de índice de tensor 228 não é menor que o valor no elemento de limite de tensor 216, a unidade transversal de tensor pode incrementar o elemento de índice de tensor 226 por 1, e reajustar o elemento de índice de tensor 228 de volta para 0.
[0054] Em algumas implementações, a segunda variável de índice pode ser incrementada por um segundo valor incremental sempre que o segundo laço se completa. O sistema pode incrementar o valor armazenado no segundo elemento de índice de tensor pelo segundo valor incremental. Por exemplo, após o programa entrar no laço seguinte do laço externo (isto é, i=1 e j=0), a unidade transversal de tensor pode incrementar o elemento de índice de tensor 226 (isto é, X1,2) por 1.
[0055] O sistema transmite dados que indicam o endereço determinado para acessar o elemento específico do tensor N-dimensional (406). Por exemplo, a unidade de processamento 102 pode acessar, usando um valor deslocado de endereço de memória, um elemento específico de uma variável de arranjos N-dimensionais no meio de armazenamento.
[0056] Em algumas implementações, o sistema inclui múltiplos elementos alvos de ramos, onde cada um dos múltiplos elementos alvos de ramos tem um correspondente elemento de índice de tensor nos múltiplos elementos de índices de tensor, e onde cada um dos múltiplos elementos alvos de ramos é configurado para armazenar um endereço para uma instrução a ser executada após um término de uma iteração de um laço que corresponde ao respectivo elemento alvo de ramo. Por exemplo, a unidade transversal de tensor 300 inclui um grupo de elementos alvos de ramos 308 que armazena informações de alvos de ramos. As informações de alvos de ramos podem incluir um endereço de memória de uma instrução que deve ser executada por um processador após o término de uma iteração de laço em um laço encaixado.
[0057] Modalidades do assunto em questão e das operações funcionais descritas nesta especificação podem ser implementadas em circuitos eletrônicos digitais, em software ou firmware de computador incorporado de forma tangível, em hardware de computador, incluindo as estruturas reveladas nesta especificação e seus equivalentes estruturais, ou em combinações de um ou mais destes. Modalidades do assunto em questão descritas nesta especificação podem ser implementadas como um ou mais programas de computador, isto é, um ou mais módulos de instruções de programa de computador codificadas em uma operadora de programas não-transitórios tangíveis para execução por, ou para controlar o funcionamento de, equipamento de processamento de dados. Alternativamente ou em adição, as instruções de programa podem ser codificadas em um sinal propagado gerado artificialmente, por exemplo, um sinal elétrico, ótico ou eletromagnético gerado por máquina, que é gerado para codificar informações para transmissão a equipamento de recepção adequado para execução por um equipamento de processamento de dados. O meio de armazenamento de computador pode ser um dispositivo de armazenamento legível por máquina, um substrato de armazenamento legível por máquina, um dispositivo de memória de acesso aleatório ou serial, ou uma combinação de um ou mais destes.
[0058] O termo "equipamento de processamento de dados" engloba todos os tipos de equipamentos, dispositivos e máquinas para processar dados, incluindo como exemplo um processador programável, um computador, ou múltiplos processadores ou computadores. O equipamento pode incluir circuitos lógicos de finalidade específica, por exemplo, um FPGA (arranjo de portas programáveis de campo) ou um ASIC (circuito integrado de aplicação específica). O equipamento pode também incluir, além do hardware, código que cria um ambiente de execução para o programa de computador em questão, por exemplo, código que constitua firmware de processador, uma pilha de protocolos, um sistema de gerenciamento de banco de dados, um sistema operacional, ou uma combinação de um ou mais destes.
[0059] Um programa de computador (o qual pode ser também denominado ou descrito como um programa, software, uma aplicação de software, um módulo, um módulo de software, um texto, ou código) pode ser escrito em qualquer forma de linguagem de programação, incluindo linguagens compiladas ou interpretadas, ou linguagens declarativas ou processuais, e pode ser implementado em qualquer forma, incluindo como um programa autônomo ou como um módulo, componente, sub-rotina, ou outra unidade adequada para uso em um ambiente computacional. Um programa de computador pode, mas não necessita, corresponder a um arquivo em um sistema de arquivos. Um programa pode ser armazenado em uma porção de um arquivo que mantém outros programas ou dados, por exemplo, um ou mais textos armazenados em um documento de linguagem de marcação, em um único arquivo dedicado ao programa em questão, ou em múltiplos arquivos coordenados, por exemplo, arquivos que armazenam um ou mais módulos, subprogramas, ou porções de código. Um programa de computador pode ser implementado para ser executado em um computador ou em múltiplos computadores que estão localizados em um portal ou distribuídos por múltiplos portais e interligados por uma rede de comunicação.
[0060] Os processos e fluxos lógicos descritos nesta especificação podem ser executados por um ou mais computadores programáveis que executam um ou mais programas de computador para executar funções mediante operação sobre dados de entrada e geração de saída. Os processos e fluxos lógicos podem também ser executados por, e equipamento pode também ser implementado como, circuitos lógicos de finalidade especial, por exemplo, FPGA (arranjo de portas programáveis de campo), um ASIC (circuito integrado de aplicação específica) ou uma GPGPU (unidade de processamento gráfico de finalidade geral).
[0061] Computadores adequados para a execução de um programa de computador incluem, como exemplo, microprocessadores de uso geral ou especial ou ambos, ou qualquer tipo de unidade de processamento central. Geralmente, uma unidade de processamento central receberá instruções e dados de uma memória apenas de leitura ou de uma memória de acesso aleatório ou de ambas. Os elementos essenciais de um computador são uma unidade de processamento central para realizar ou executar instruções e um ou mais dispositivos para armazenar instruções e dados. Geralmente, um computador incluirá também, ou estará operativamente acoplado a dados recebidos de ou dados transferidos para, ou ambos, um ou mais dispositivos de armazenamento em massa para armazenar dados, por exemplo, magnéticos, discos magneto-óticos, ou discos óticos. Contudo, um computador não necessita ter tais dispositivos. Além disso, um computador pode estar embutido em outro dispositivo, por exemplo, um telefone móvel, um assistente digital pessoal (PDA), um reprodutor móvel de áudio ou vídeo, um console de jogos, um receptor de Sistema de Posicionamento Global (GPS), ou um dispositivo de armazenamento portátil, por exemplo, uma unidade flash de barramento serial universal (USB), apenas para mencionar alguns.
[0062] Meios legíveis por computador para armazenar instruções e dados de programa de computador incluem todas as formas de memória não-volátil, dispositivos de mídia e de memória, incluindo como exemplo dispositivos semicondutores de memória, por exemplo, EPROM, EEPROM e dispositivos de memória flash; discos magnéticos, por exemplo, discos rígidos internos ou discos removíveis; discos magneto- óticos; e discos CD ROM e DVD-ROM. O processador e a memória podem ser suplementados por, ou incorporados em, circuitos lógicos de finalidade especial.
[0063] Para fornecer interação com um usuário, modalidades do assunto descrito nesta especificação podem ser implementadas em um computador com um dispositivo de exibição, por exemplo, um monitor CRT (tubo de raios catódicos) ou LCD (tela de cristal líquido), para exibição de informações ao usuário e um teclado e um dispositivo apontador, por exemplo, um mouse ou uma bola de rota seguida, por meio dos quais o usuário pode propiciar entrada no computador. Outros tipos de dispositivos podem ser usados para propiciar interação também com o usuário; por exemplo, realimentação fornecida ao usuário pode ser qualquer forma de realimentação sensorial, por exemplo, realimentação visual, realimentação auditiva, ou realimentação tátil; e entrada do usuário pode ser recebida em qualquer forma, incluindo entrada acústica, vocal ou tátil. Além disso, um computador pode interagir com um usuário pela transmissão de documentos para e recepção de documentos de um dispositivo que é usado pelo usuário; por exemplo, pela transmissão de páginas da web a um navegador da web em um dispositivo de cliente do usuário em resposta a solicitações recebidas do navegador da web.
[0064] Modalidades do assunto descrito nesta especificação podem ser implementadas em um sistema computacional que inclua um componente de extremidade posterior, por exemplo, como um servidor de dados, ou que inclua um componente de middleware, por exemplo, um servidor de aplicativos, ou que inclua um componente de extremidade dianteira, por exemplo, um computador de cliente com uma interface gráfica de usuário ou um navegador de web através do qual um usuário pode interagir com uma implementação do assunto descrito nesta especificação, ou qualquer combinação de um ou mais de tais componentes de extremidade posterior, middleware ou extremidade dianteira. Os componentes do sistema podem estar interligados por qualquer forma ou meio de comunicação digital de dados, por exemplo, uma rede de comunicação. Exemplos de redes de comunicação incluem uma rede de área local ("LAN") e uma rede de área ampla ("WAN"), por exemplo, a Internet.
[0065] O sistema computacional pode incluir clientes e servidores. Um cliente e um servidor são geralmente remotos entre si e interagem tipicamente através de uma rede de comunicação. A relação de cliente e servidor surge em virtude de programas de computador executados nos respectivos computadores e tendo uma relação cliente-servidor entre si.
[0066] Embora a especificação contenha muitos detalhes específicos de implementação, estes não devem ser considerados como limitações do âmbito de qualquer invenção ou do que possa ser reivindicado, mas ao invés como descrições de recursos que podem ser específicos a modalidades específicas de invenções específicas. Alguns recursos que são descritos nesta especificação no contexto de modalidades separadas podem também ser implementados em combinação em uma única modalidade. Inversamente, diversos recursos que são descritos no contexto de uma única modalidade podem também ser implementados em múltiplas modalidades separadamente ou em qualquer subcombinação adequada. Além disso, embora os recursos possam ser descritos acima como agindo em algumas combinações e mesmo inicialmente reivindicados como tal, um ou mais recursos de uma combinação reivindicada podem em alguns casos ser retiradas da combinação, e a combinação reivindicada pode ser direcionada a uma subcombinação ou variação de uma subcombinação.
[0067] Similarmente, embora as operações sejam representadas nos desenhos em uma ordem específica, isto não deve ser entendido como exigindo que tais operações sejam executadas na ordem específica mostrada ou em ordem sequencial, ou que todas as operações ilustradas sejam executadas, para alcançar resultados desejáveis. Em algumas circunstâncias, processamento multitarefa ou em paralelo pode ser vantajoso. Além disso, a separação de diversos módulos e componentes de sistema nas modalidades descritas acima não deverá ser entendido como exigindo tal separação em todas as modalidades, e deverá ser entendido que os componentes e sistemas de programa descritos podem geralmente ser integrados entre si em um único produto de software ou empacotados em múltiplos produtos de software.
[0068] Foram descritas modalidades específicas do assunto em questão. Outras modalidades estão dentro do âmbito das reivindicações a seguir. Por exemplo, as ações mencionadas nas reivindicações podem ser executadas em uma ordem diferente e ainda alcançar resultados desejáveis. Como exemplo, os processos representados nas figuras anexas não necessariamente exigem a ordem específica mostrada, ou ordem sequencial, para alcançar resultados desejáveis. Em algumas implementações, pode ser vantajoso processamento multitarefa ou em paralelo.

Claims (9)

1. Equipamento (100) para processar uma instrução para processar um laço encaixado que inclui um primeiro laço e um segundo laço que é um laço externo do primeiro laço, em que o primeiro laço é iterado usando uma primeira variável de índice e em que o segundo laço é iterado usando uma segunda variável de índice, a instrução sendo adicionalmente para acessar um tensor N-dimensional, o equipamento caracterizado por compreender: múltiplos elementos de estado de tensor (200), compreendendo elementos de índices de tensor (202) usados para atravessar as dimensões do tensor N-dimensional, elementos de limites de tensor (204) adicionalmente definindo valores de índices de limite superior, e elementos multiplicadores de dimensões (206), onde cada um dos valores de índices de limite superior é ajustado após cada iteração do laço encaixado e cada um dos elementos multiplicadores de dimensões (206) representa um multiplicador constante pelo qual um correspondente elemento de índice de tensor (202) é multiplicado; e um ou mais processadores (102) configurados para: obter uma instrução para acessar um elemento específico de um tensor N-dimensional, onde o tensor N-dimensional tem múltiplos elementos dispostos através de cada uma das N dimensões, e onde N é um inteiro que é igual ou maior que um; determinar, usando um ou mais elementos de índices de tensor (202) dos múltiplos elementos de índices de tensor e um ou mais elementos multiplicadores de dimensões (206) dos múltiplos elementos multiplicadores de dimensões, um endereço de memória no qual o elemento específico é armazenado em memória, em que determinar o endereço de memória do elemento específico compreende ainda multiplicar pelo menos um primeiro elemento de índice de tensor com um primeiro elemento multiplicador de dimensões e um segundo elemento de índice de tensor com um segundo elemento multiplicador de dimensões e somar todos os produtos multiplicados a um endereço de memória de base para determinar o endereço de memória que corresponde ao elemento a ser acessado; e transmitir dados que indicam o endereço determinado para acessar o elemento específico do tensor N-dimensional.
2. Equipamento (100), de acordo com a reivindicação 1, caracterizado pelo fato do um ou mais processadores (102) serem ainda configurados para: ajustar valores armazenados nos múltiplos elementos de índices de tensor, nos múltiplos elementos multiplicadores de dimensões e nos múltiplos elementos de limites de tensor para um valor de inicialização.
3. Equipamento (100), de acordo com a reivindicação 1, caracterizado pelo fato do um ou mais processadores (102) serem ainda configurados para: ajustar um valor armazenado em um primeiro elemento de limite de tensor dos múltiplos elementos de limites de tensor (204) em um valor limite superior da primeira variável de índice para iterar o primeiro laço; ajustar um valor armazenado em um segundo elemento de limite de tensor dos múltiplos elementos de limites de tensor (204) em um valor limite superior da segunda variável de índice para iterar o segundo laço; ajustar um valor armazenado em um primeiro elemento multiplicador de dimensões dos múltiplos elementos multiplicadores de dimensões (206) para um valor predeterminado; e ajustar um valor armazenado em um segundo elemento multiplicador de dimensões dos múltiplos elementos multiplicadores de dimensões (206) para o valor limite superior da primeira variável de índice.
4. Equipamento (100), de acordo com a reivindicação 3, caracterizado pelo fato da determinação do endereço do elemento do tensor N-dimensional compreender: ajustar um valor armazenado em um primeiro elemento de índice de tensor dos múltiplos elementos de índices de tensor (202) para um valor corrente da primeira variável de índice; ajustar um valor armazenado em um segundo elemento de índice de tensor dos múltiplos elementos de índices de tensor (202) para um valor corrente da segunda variável de índice; multiplicar o valor armazenado no primeiro elemento multiplicador de dimensões pelo valor armazenado no primeiro elemento de índice de tensor para obter um primeiro valor multiplicado; multiplicar o valor armazenado no segundo elemento multiplicador de dimensões pelo valor armazenado no segundo elemento de índice de tensor para obter um segundo valor multiplicado; e determinar o endereço por ao menos a soma do primeiro valor multiplicado e do segundo valor multiplicado.
5. Equipamento (100), de acordo com a reivindicação 4, caracterizado pelo fato do um ou mais processadores (102) serem ainda configurados para: receber uma instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor; após recepção da instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor, determinar que uma diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor satisfaz um limiar; e em resposta à determinação de que a diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor satisfaz o limiar, atualizar o valor armazenado no primeiro elemento de índice de tensor.
6. Equipamento (100), de acordo com a reivindicação 5, caracterizado pelo fato da primeira variável de índice ser incrementada por um primeiro valor incremental sempre que o primeiro laço se completa, e pelo fato da atualização do valor armazenado no primeiro elemento de índice de tensor compreender o incremento do valor armazenado no primeiro elemento de índice de tensor pelo primeiro valor incremental.
7. Equipamento (100), de acordo com qualquer uma das reivindicações 4 a 6, caracterizado pelo fato do um ou mais processadores (102) serem ainda configurados para: receber uma instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor; após recepção da instrução para atualizar o valor armazenado no primeiro elemento de índice de tensor, determinar que uma diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor não satisfaz um limiar; e em resposta à determinação de que a diferença entre o valor armazenado no primeiro elemento de índice de tensor e o valor armazenado no primeiro elemento de limite de tensor não satisfaz o limiar: reajustar o valor armazenado no primeiro elemento de índice de tensor; e atualizar o valor armazenado no segundo elemento de índice de tensor.
8. Equipamento (100), de acordo com a reivindicação 7, caracterizado pelo fato da segunda variável de índice ser incrementada por um segundo valor incremental sempre que o segundo laço se completa, e pelo fato da atualização do valor armazenado no segundo elemento de índice de tensor compreender o incremento do valor armazenado no segundo elemento de índice de tensor pelo segundo valor incremental.
9. Método implementado em computador (400), caracterizado por compreender: obter (402) uma instrução para processar um laço encaixado que inclui um primeiro laço e um segundo laço que é um laço externo do primeiro laço, em que o primeiro laço é iterado usando uma primeira variável de índice e em que o segundo laço é iterado usando uma segunda variável de índice, a instrução sendo adicionalmente para acesso a um elemento específico de um tensor N-dimensional, onde o tensor N- dimensional tem múltiplos elementos dispostos através de cada uma das N dimensões, e onde N é um inteiro que é igual ou maior que um, em que múltiplos elementos de estado de tensor (200) compreendem elementos de índices de tensor (202) usados para atravessar as dimensões do tensor N-dimensional, elementos de limites de tensor (204) que adicionalmente definem valores de índices de limite superior, e elementos multiplicadores de dimensões (206), onde cada um dos valores de índices de limite superior é ajustado após cada iteração do laço encaixado e cada um dos elementos multiplicadores de dimensões (206) representa um multiplicador constante pelo qual um correspondente elemento de índice de tensor (202) é multiplicado; determinar (404), usando um ou mais elementos de índices de tensor (202) dos múltiplos elementos de índices de tensor e um ou mais elementos multiplicadores de dimensões (206) dos múltiplos elementos multiplicadores de dimensões, um endereço de memória no qual o elemento específico é armazenado em memória, em que determinar o endereço de memória do elemento específico compreende ainda multiplicar pelo menos um primeiro elemento de índice de tensor com um primeiro elemento multiplicador de dimensões e um segundo elemento de índice de tensor com um segundo elemento multiplicador de dimensões e somar todos os produtos multiplicados a um endereço de memória de base para determinar o endereço de memória que corresponde ao elemento a ser acessado; e transmitir (406) dados que indicam o endereço determinado para acessar o elemento específico do tensor N- dimensional.
BR122023003223-3A 2016-02-03 2016-12-28 Equipamento para processar uma instrução para processar um laço encaixado e método implementado em computador BR122023003223B1 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/014,265 2016-02-03

Publications (1)

Publication Number Publication Date
BR122023003223B1 true BR122023003223B1 (pt) 2023-08-08

Family

ID=

Similar Documents

Publication Publication Date Title
KR102596365B1 (ko) 다차원 텐서들에서의 데이터 액세스
Choudhury et al. PBH formation in EFT of single field inflation with sharp transition
US9940102B2 (en) Partial stochastic rounding that includes sticky and guard bits
Ji et al. A breakdown-free block conjugate gradient method
Petković et al. On an efficient simultaneous method for finding polynomial zeros
Qiu et al. Delay-dividing approach for absolute stability of Lurie control system with mixed delays
CN107003957A (zh) 用于存取存储器中在未对准的地址处的数据的方法
Venetis et al. A direct tridiagonal solver based on Givens rotations for GPU architectures
Terekhov A highly scalable parallel algorithm for solving Toeplitz tridiagonal systems of linear equations
Kreiss et al. Introduction to numerical methods for time dependent differential equations
Trefethen Computing numerically with functions instead of numbers
López et al. An acceleration scheme for Dykstra’s algorithm
Petković et al. Symbolic computation and computer graphics as tools for developing and studying new root-finding methods
BR122023003223B1 (pt) Equipamento para processar uma instrução para processar um laço encaixado e método implementado em computador
BR102016030825B1 (pt) Equipamento e método implementado em computador para processar uma instrução para acessar um tensor n-dimensional
Arumugam et al. A memory efficient algorithm for adaptive multidimensional integration with multiple GPUs
Lubinsky Reflections on the baker–gammel–wills (padé) conjecture
Łanucha Matrix representations of truncated Toeplitz operators
Dzhambov High precision computing of definite integrals with. net framework c# and x-mpir
Adıvar et al. Inequalities and exponential decay in time varying delay differential equations
KR101523468B1 (ko) 다항식 곱셈을 이용한 근사 패턴매칭 방법 및 장치
Bose et al. Equations
Ergül et al. Solutions of Linear Systems of Equations
Sobolev et al. On optima/algorithms for so/ving the problems of numerica/mathematics
Murphy et al. Butterflies Solve Bidiagonal Toeplitz Systems