ES2934979T3 - Aprendizaje máquina acelerado por hardware - Google Patents
Aprendizaje máquina acelerado por hardware Download PDFInfo
- Publication number
- ES2934979T3 ES2934979T3 ES21158563T ES21158563T ES2934979T3 ES 2934979 T3 ES2934979 T3 ES 2934979T3 ES 21158563 T ES21158563 T ES 21158563T ES 21158563 T ES21158563 T ES 21158563T ES 2934979 T3 ES2934979 T3 ES 2934979T3
- Authority
- ES
- Spain
- Prior art keywords
- source data
- processor according
- width
- sram
- data items
- Prior art date
- Legal status (The legal status 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 status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/02—Comparing digital values
- G06F7/023—Comparing digital values adaptive, e.g. self learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/76—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2205/00—Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/48—Indexing scheme relating to groups G06F7/48 - G06F7/575
- G06F2207/4802—Special implementations
- G06F2207/4818—Threshold devices
- G06F2207/4824—Neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Medical Informatics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Health & Medical Sciences (AREA)
- Nonlinear Science (AREA)
- Complex Calculations (AREA)
- Error Detection And Correction (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
Se describen una arquitectura de acelerador de hardware de aprendizaje automático y técnicas asociadas. Por ejemplo, un procesador comprende: una pluralidad de unidades operativas para ejecutar instrucciones asociadas con operaciones de aprendizaje automático, una memoria local que comprende una pluralidad de bancos de memoria estática de acceso aleatorio (SRAM) de dos puertos para almacenar datos asociados con uno o más de los instrucciones, un decodificador para decodificar una instrucción de multiplicación de matrices, circuitos para permutar una primera pluralidad de elementos de datos de origen asociados con una primera matriz multidimensional de acuerdo con un patrón de permutación incluido con la instrucción de multiplicación de matrices y enrutar la primera pluralidad de elementos de datos de origen al pluralidad de unidades operativas. La pluralidad de unidades operativas es para realizar una pluralidad de operaciones paralelas de multiplicación - acumulación (MAC) de acuerdo con la instrucción de multiplicación de matrices. Cada unidad operativa comprende: un multiplicador para multiplicar un primer elemento de datos fuente de la primera pluralidad de elementos de datos fuente proporcionados por el circuito para permutar y un segundo elemento de datos fuente de una segunda pluralidad de elementos de datos fuente asociados con una segunda matriz multidimensional para generar un producto, y un acumulador para agregar el producto a un valor de acumulación para generar un valor de resultado, el primer elemento de datos fuente y el segundo elemento de datos fuente tienen cada uno un primer ancho de bit y el valor de acumulación tiene un segundo ancho de bit al menos dos veces el Ancho del primer bit. (Traducción automática con Google Translate, sin valor legal)
Description
DESCRIPCIÓN
Aprendizaje máquina acelerado por hardware
ANTECEDENTES
El aprendizaje máquina es un subcampo de la informática que se centra en algoritmos que pueden aprender y hacer predicciones basadas en datos. El aprendizaje máquina se basa en gran medida en las redes neuronales para su puesta en práctica y se volvió práctico para un uso amplio con el advenimiento de la informática en la nube, que hizo económico el acceso a grandes cantidades de poder de procesamiento computacional. De hecho, la informática en la nube y, en general, el procesamiento informático económico ha hecho que las variaciones del aprendizaje máquina sean más costosas desde el punto de vista computacional y que requieran más recursos, tales como las redes neuronales profundas que implican la puesta en práctica de capas de redes accesibles desde el punto de vista económico.
En consecuencia, el aprendizaje máquina se realiza, por lo general, utilizando unidades centrales de procesamiento ("CPU") de uso general, unidades de procesamiento gráfico ("GPU") o hardware de procesamiento de uso general masivo. Se han propuesto procesadores de aprendizaje máquina en donde la aceleración por hardware se basó en técnicas orientadas a un algoritmo específico y/o arquitectura de red. De manera alternativa, se ha propuesto hardware de aprendizaje máquina basado en modelización del hardware con mayor proximidad a la arquitectura neurológica. En estos casos, en donde la aceleración estaba basada en el supuesto de que una arquitectura neurológica proporcionaría, de manera inherente, mejoras en el rendimiento, en lugar de realizar la aceleración por hardware en las instrucciones del ordenador y el procesamiento de dichas instrucciones del ordenador.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
La descripción detallada se expone con referencia a las figuras adjuntas.
La Figura 1 es un diagrama de contexto de nivel superior para el aprendizaje máquina acelerado por hardware.
La Figura 2 es un diagrama de bloques de una arquitectura, a modo de ejemplo, para el aprendizaje máquina acelerado por hardware.
La Figura 3 es un diagrama de flujo para una operación, a modo de ejemplo, de un registro de desplazamiento para el aprendizaje máquina acelerado por hardware.
La Figura 4 es un diagrama de flujo para una operación, a modo de ejemplo, para obtener y ejecutar instrucciones legibles por ordenador en un acelerador por hardware de aprendizaje máquina.
DESCRIPCIÓN DETALLADA
Contexto del aprendizaje máquina acelerado por hardware
Tal como se indicó con anterioridad, el aprendizaje máquina es un subcampo de la ciencia informática que se centra en algoritmos que pueden aprender y realizar predicciones basadas en datos. Por lo general, estos algoritmos adoptan la forma de métodos que procesan datos, a modo de ejemplo, y luego hacen generalizaciones a datos similares. A menudo, estos métodos adoptan la forma de regresión o clasificación estadística, aunque el campo también incluye métodos tales como el aprendizaje por refuerzo que modelan el comportamiento de aprendizaje de la interacción de un agente que busca recompensas con el entorno.
Recientemente, un conjunto de métodos, concretamente denominados "aprendizaje profundo", se han vuelto comunes en múltiples usos comercialmente pertinentes. Estos métodos se basan en la investigación de redes neuronales artificiales, aunque en la mayoría de los casos, las técnicas modernas de aprendizaje profundo no intentan modelar directamente aspectos conocidos de la cognición biológica. En cambio, utilizan la idea de una serie de "capas" de "unidades de procesamiento", cada una de las cuales se compone concretamente de una operación lineal seguida de una no linealidad. Estas capas también pueden incluir procesos aleatorios y, por lo general, aunque no universalmente, están densamente conectadas.
Estos métodos pueden incluir perceptrones multicapa, redes convolucionales, memoria a corto plazo, aprendizaje Q profundo, máquinas de Boltzmann restringidas y muchos otros métodos. Si bien estos métodos difieren, en muchos aspectos, comparten una estructura lógica común de capas que procesan entradas y generan salidas, posiblemente recurrentes en el tiempo y posiblemente utilizando ruido estocástico. También pueden utilizar el concepto de una "función de pérdida" que representa para un conjunto dado de datos lo bien que está funcionando la red. Por lo general, esta función de pérdida se descompone aún más en una función de utilidad que representa la pérdida relativa al conjunto de datos a modo de ejemplo, así como una pérdida de regularización que busca minimizar la complejidad y
mejorar el rendimiento de la generalización. Por lo general, pero no de manera universal, estos sistemas aprenden a través del descenso de gradiente estocástico, a menudo con extensiones adicionales.
De manera independiente, tanto el entrenamiento de redes de aprendizaje profundo como el uso de redes entrenadas se pueden dividir en un patrón muy simple de bloques de construcción computacionales fundamentales. Estas son contracciones de tensores generalizadas, ruido aditivo y no linealidades por elementos. Aunque no siempre se abstrae de esta manera, se puede lograr una amplia variedad de métodos de aprendizaje profundo, así como otro aprendizaje máquina o cálculo informático general mediante estos primitivos.
Estos primitivos pueden ponerse en práctica en términos de una arquitectura típica de unidad central de procesamiento ("CPU"), o pueden ponerse en práctica mediante una unidad de procesamiento gráfico ("GPU"), que es un tipo de procesador vectorial que se suele utilizar para cargas de trabajo de gráficos. Sin embargo, el flujo de datos constante, la gran cantidad de multiplicaciones y la naturaleza especializada de las operaciones que no son de multiplicación permiten una aceleración significativa a través del hardware. Se han propuesto métodos de aceleración por hardware, muchos de los cuales son altamente específicos para un algoritmo particular de aprendizaje máquina o arquitectura de red, o son neuromórficos, ya que buscan duplicar el comportamiento de las redes biológicas, en lugar de poner en práctica algoritmos de aprendizaje profundo.
A diferencia de dichos métodos, se propone un método para el aprendizaje máquina acelerado por hardware que no es específico de un algoritmo particular de aprendizaje máquina o arquitectura de red y no es neuromórfico. Conviene señalar que los flujos de trabajo típicos de aprendizaje máquina comprenden tres operaciones básicas: contracciones de tensor, adición de ruido aleatorio y operaciones no lineales por elementos. De las operaciones que anteceden, las contracciones de tensor suelen constituir la mayor parte del trabajo computacional en las arquitecturas informáticas tradicionales. En consecuencia, proponemos una arquitectura informática para realizar estas operaciones junto con un conjunto de instrucciones informáticas asociadas. La Figura 1 es un diagrama de contexto 100 de dicha arquitectura.
La aceleración por hardware de aprendizaje máquina por lo general se encuentra en el contexto de un ordenador 102. El ordenador 102 puede ser cualquier dispositivo informático que incluya un ordenador independiente, un servidor en red o un sistema integrado específico para el aprendizaje máquina. El ordenador 102 suele tener una unidad central de procesamiento ("CPU") que es cualquier procesador que ejecuta instrucciones legibles por ordenador que varían desde la CPUs de uso general hasta los controladores integrados.
La CPU está acoplada, de manera comunicativa, mediante un bus a una memoria general 106. La memoria general 106 puede estar compuesta por una memoria de acceso aleatorio dinámica ("DRAM"), pero este no tiene por qué ser siempre el caso. La memoria general 106 es cualquier medio legible por ordenador y puede almacenar un sistema operativo y otras aplicaciones, cada una de las cuales consta de instrucciones legibles por ordenador.
Los medios legibles por ordenador incluyen, al menos, dos tipos de medios legibles por ordenador, a saber, medios de almacenamiento informático y medios de comunicación. Los medios de almacenamiento informático incluyen medios volátiles y no volátiles, extraíbles y no extraíbles puestos en práctica en cualquier método o tecnología para el almacenamiento de información, tales como instrucciones legibles por ordenador, estructuras de datos, módulos de programas u otros datos. Los medios de almacenamiento informático incluyen, entre otros, memoria RAM, memoria ROM, memoria EEPROM, memoria instantánea u otra tecnología de memoria, CD-ROM, discos versátiles digitales (DVD) u otro almacenamiento óptico, casetes magnéticos, cinta magnética, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético, o cualquier otro medio que no sea de transmisión que pueda utilizarse para almacenar información para el acceso de un dispositivo informático. Por el contrario, los medios de comunicación pueden incorporar instrucciones legibles por ordenador, estructuras de datos, módulos de programa u otros datos en una señal de datos modulada, tal como una onda portadora u otro mecanismo de transmisión. Tal como se define en el presente documento, los medios de almacenamiento informático no incluyen los medios de comunicación.
La interfaz de entrada/salida ("E/S") 108 facilita la interacción del ordenador 102 con otros dispositivos. La interfaz de E/S 108 puede ser cualquier tarjeta de controlador, tal como un receptor/transmisor asíncrono universal (UART) utilizado junto con un protocolo de interfaz de E/S estándar tal como RS-232 y/o Bus Serie Universal (USB). En el caso de aplicaciones altamente paralelas, tales como el aprendizaje máquina, la interfaz de E/S, puede proporcionar uno o más canales de E/S y/o canales de E/S en paralelo.
La interfaz de red 110 puede funcionar de manera potencial en adaptación con la interfaz de E/S 108 y puede ser una tarjeta de interfaz de red compatible con Ethernet y/o Wi-Fi y/o cualquier número de otros protocolos físicos y/o de enlace de datos. De nuevo, en el caso de aplicaciones altamente paralelas tales como el aprendizaje máquina, el ordenador 102 puede admitir múltiples interfaces de red 110.
El ordenador 102 puede albergar uno o más aceleradores de hardware de aprendizaje máquina 112. El acelerador por hardware 112 se compone de múltiples bancos de memoria de ordenador 114, tal como la memoria de acceso aleatorio estática ("SRAM"). Las memorias SRAMs 114 soportan el acceso aleatorio concurrente. En una forma de
realización, Las memorias SRAMs 114 admiten un acceso de memoria muy amplio (por ejemplo, acceso de múltiples bytes dentro de una única instrucción informática), lo que permite acceder a vectores y conjuntos más grandes de valores en una única instrucción informática. Conviene señalar que con respecto al acelerador por hardware 112, los bancos de memoria de ordenador 114 son locales pero la memoria general 106 no es local. A veces, el acelerador por hardware 112 puede intercambiar datos locales y no locales. Dichas transferencias se describen a continuación.
Las memorias SRAMs 114 son objeto de acceso y funcionamiento mediante múltiples unidades operativas 116. Las unidades operativas 116 son capaces de realizar de manera simultánea operaciones de cálculo y admiten un conjunto de instrucciones específicas de operaciones de aprendizaje máquina. Las unidades operativas 116 se prestan a muchas optimizaciones de aprendizaje máquina. En una forma de realización, las unidades operativas 116 pueden configurarse para realizar operaciones de punto fijo de menor precisión. Por ejemplo, la norma IEEE de 32 bits especifica 23 bits explícitos para la mantisa de un número de coma flotante. Una operación de coma flotante de menor precisión tendría menos de 23 bits para representar la mantisa. Concretamente, aunque la mayoría de las investigaciones de aprendizaje profundo se han realizado utilizando aritmética de coma flotante de precisión de 32 bits para representar números reales, los hallazgos recientes han demostrado que, para la mayoría de las cargas de trabajo de aprendizaje profundo, se pueden utilizar métodos de punto fijo y precisión mucho más bajos (menos de 32 bits) particularmente si se utiliza una ronda aleatoria. Las unidades operativas 116 se describen con mayor detalle a continuación.
Una unidad de transferencia SRAM/DRAM 118 facilita la transferencia rápida de datos entre la memoria general 106 y los bancos de memoria SRAM 114. Concretamente, la unidad de transferencia SRAM/DRAM 118 admite operaciones de copia masiva de modo que las transferencias de datos grandes (multibyte) se puedan realizar en una operación única.
Un acelerador por hardware de aprendizaje máquina 112 contiene características adicionales que se describen con mayor detalle con respecto a la Figura 2 siguiente y en otro lugar en esta descripción.
Definiciones y notación
En general, tanto los datos de entrada (es decir, ejemplos para aprendizaje o accionamiento), así como los datos de ponderación (es decir, parámetros de red), se representan de manera natural como tensores multidimensionales. Por lo general, a los efectos de los casos de uso de aprendizaje máquina, estos tensores no tienen una noción de índices covariantes o contravariantes. Además, los tensores simétricos pueden ser pertinentes, pero dicha simetría a menudo no se formaliza o se mantiene explícitamente mediante las operaciones, en lugar de ser un aspecto del tensor en sí mismo, lo que hace que el uso de tensores en el aprendizaje máquina sea más similar a las matrices multidimensionales. Además, las contracciones tienen algunas propiedades ligeramente variantes. Por ejemplo, las convoluciones a menudo no coinciden exactamente con las nociones típicas de cálculo tensorial de una contracción, pero son bastante similares desde el punto de vista computacional. De este modo se define aquí una noción un poco más computacional de tensores y contracciones.
Tensor
Un tensor se define aquí como una matriz rectangular multidimensional de números reales, que se suele representar por una representación de punto fijo de precisión relativamente baja (tal como 16 bits en lugar de 32 bits). Por lo general, los datos de tensor se almacenan en una memoria de acceso aleatorio dinámica ("DRAM") y tienen un diseño de base de etapa simple, o se componen de un conjunto de "mosaicos", cada uno de los cuales tiene un diseño basado en etapa.
Contracción del tensor
Para los fines del presente documento, una contracción de tensor se define como una operación que toma dos tensores de entrada y obtiene un tensor de salida, mediante un conjunto de operaciones de multiplicación y de acumulación. Las contracciones de tensor se definen mediante un conjunto de "variables de índice". El margen de cada variable de índice es un número entero simple y, a menudo, pero no siempre, es simplemente el tamaño de una de las dimensiones del tensor, y el margen de los índices del tensor se puede especificar de forma independiente. En particular, una contracción tensorial adopta la forma:
En este caso, los índices en minúsculas, i, j, etc., representan un índice de tensor específico, las letras mayúsculas fuera de los corchetes representan tensores, y las letras mayúsculas entre corchetes son polinomios multivariados de grado 1 o 0 sobre los índices de tensores establecidos en toda su generalidad, pero por lo general también son solamente un índice de tensor único. Se supone que la operación recorre el margen de todos los índices no especificados en la salida y suma los resultados de la multiplicación de los elementos tensoriales izquierdo y derecho de forma similar a la notación de Einstein. Por ejemplo, una operación de multiplicación matricial se representaría en esta notación como:
0[i, j] - A[i, k] * B[k, j]
Una convolución de una imagen tridimensional (compuesta por dimensiones X, Y y C, es decir, ubicación de píxeles horizontal y vertical y un canal de color o característica) con un núcleo convolucional de cuatro dimensiones que funciona sobre un parche de imagen en todos los canales, se representaría como:
0[x, y, co] = A[i, j, co, ci] * B[x i, y j, ci]
En este caso, se observa el uso de un polinomio simple (x i). Conviene señalar que se debe especificar el margen de x, y, i, j, co, etc., para que esta sea una descripción completa de la operación a realizar. En muchos casos, la opción lógica es suponer que el margen de un índice es idéntico a la magnitud de las dimensiones sobre las que opera, pero esto no es aplicable de manera universal.
También podemos generalizar tanto la operación realizada para cada par de elementos tensoriales (en este caso, la multiplicación) así como el método de acumulación de elementos (en este caso, la sumatoria). Cuando el mecanismo de acumulación no es una suma, lo especificamos como en el siguiente ejemplo, que pone en práctica "max-pooling", y también ilustra el uso de un tensor "constante" que es de dimensión 0 y contiene un único elemento (en este caso 1):
Para una agrupación de 2x2 máx., i y j oscilarían entre [0, 2).
Parámetros
El acelerador por hardware de aprendizaje máquina descrito en este documento es configurable. Para proporcionar ejemplos, para una mayor comprensión, se proporciona un valor típico, así como cualquier restricción probable para algunos parámetros de diseño. Por supuesto, puesto que el acelerador por hardware descrito solamente se entiende como un ejemplo concreto de un método para poner en práctica las operaciones fundamentales descritas mediante una puesta en práctica de hardware eficiente, y estos valores no deben interpretarse como limitantes.
SRAM_BANKS: número de bancos primarios de memoria de acceso aleatorio estática ("SRAM"), mínimo de 2, concretamente 8.
ELEM_WIDTH: Ancho de bits de un elemento, concretamente 16, mínimo 2.
ACCUM_WIDTH: El ancho de un acumulador, concretamente 48, debe ser >= a 2 * ELEM_WIDTH.
SRAM_WIDTH: Número de elementos objeto de lectura durante un acceso único a memoria SRAM de un banco único, concretamente 512. Por lo general una potencia de 2.
SRAM_DEPTH: Número de filas de SRAM, cada una de las cuales contiene bits SRAM_WIDTH * ELEM_WIDTH. Por lo general, 4096, lo que da como resultado un tamaño total de SRAM de SRAM_BANKS * ELEM_WIDTH * SRAM_WIDTH * SRAM_DEPTH/8 = 20 MB.
SHIFT_WIDTH: Número de elementos que son la salida de los bancos SRAM después de la unidad de rotación, debiendo ser <= a (SRAM_BANKS - 1) * SRAM_WIDTH, concretamente 2048. Por lo general una potencia de 2. NUM_UNITS: Número de unidades operativas, debe ser >= a SHIFT_WIDTH, concretamente significativamente mayor, por ejemplo, 131072. Por lo general una potencia de 2.
INDEX_WIDTH: Ancho de un registro de índice, concretamente 32 bits.
NUM_INDEXES: Número de registros de índice, normalmente 8.
Conviene señalar que los anchos de memoria, en particular SRAM_WIDTH, son relativamente grandes. Lo que antecede es, para permitir el procesamiento de elementos tensoriales en una operación única. Concretamente, los grandes anchos de memoria disponibles en un acceso único permiten acceder a vectores y elementos tensoriales completos durante dicha operación única. De no ser así, se utilizarían múltiples accesos y múltiples operaciones, lo que ralentizaría la operación de los cálculos de tensor.
Componentes para un acelerador por hardware de lenguaje máquina
La Figura 2 es un diagrama de bloques 200 de un acelerador por hardware de lenguaje máquina 112. Un acelerador por hardware de lenguaje máquina se pone en práctica concretamente como puertas lógicas dentro de un único circuito integrado. En algunas formas de realización, un acelerador por hardware de lenguaje máquina 112 puede ponerse en práctica en un dispositivo de matriz de puertas programables en campo ("FPGA") o equivalente. En producción, un acelerador por hardware de lenguaje máquina 112 puede ponerse en práctica como un circuito integrado personalizado compuesto por múltiples puertas lógicas.
Un acelerador por hardware de lenguaje máquina 112 se compone de los siguientes componentes:
Memoria SRAM de datos 114
Lector de desplazamientos 202
Red de multidifusión 204
Unidades operativas 116
Registros de índice (direccionamiento) 206
Unidad de transferencia DRAM 118
Decodificador de instrucciones 208
Estos componentes se describen de manera individual con mayor detalle a continuación.
Memoria SRAM de datos
El acelerador por hardware de aprendizaje máquina mantiene la mayoría de los datos para operar en múltiples bancos de SRAM (concretamente de doble puerto). Existe un número de bancos SRa M_Ba Nk S, cada uno con filas SRAM_DEPTH, compuesto cada uno por bits SRAM_WIDTH * ELEM_WIDTH, que se ven lógicamente como elementos SRAM_WIDTH de magnitud de anchura de elementos ELEM_WIDTH. SrAm se ve lógicamente como un único espacio de direcciones lineales que consta de elementos de magnitud de bits ELEM_WIDTH, con un total de elementos SRAM_BANKS * SRAM_WIDTH * SRAM_DEPTH. La ubicación lógica de SRAM i, denominada M[i] a continuación, existe en una ubicación calculada por:
LR = floor(i / SRAM_WTDTH)
LO = i - LR
B = LR % SRAMJBANK.S
R = LR / SRAM_BANKS
O = LO * ELEM_WIDTH
en donde LR representa la "fila lógica", LO representa el "compensación de elemento lógico" dentro de la fila, y B es el número de banco físico, R es el número de fila física dentro de esa parte posterior y O es la compensación binaria dentro de esa fila del primer bit del elemento, comprendiendo los siguientes bits ELEM_WIDTH la totalidad del elemento. (Conviene señalar que el operador % es el operador de módulo).
A continuación, se presentan alternativas a los métodos anteriores junto con otras modificaciones.
Lector de desplazamiento
El lector de desplazamiento 202 proporciona lógica de direccionamiento y una rotación cilíndrica y un desplazador correspondiente para permitir el acceso lógico de SHIFT_WIDTH de elementos lógicamente contiguos que comienzan en cualquier compensación lógica, A, dentro de la memoria SRAM. La Figura 3 es un diagrama de flujo 300 del funcionamiento del lector de desplazamientos 202 dada la dirección del primer elemento.
En el bloque 302, para cada banco B, se debe realizar, de manera simultánea, una lectura de la base de la fila ((A B * SRAM_WIDTH)/SRAM_WIDTH).
En el bloque 304, se deben concatenar las entradas SRAM_BANKS * SRAM_WIDTH en una única lista lógica de entradas.
En el bloque 306, girar los resultados a la izquierda en elementos (floor(A/SRAM_WIDTH) % SRAM_BANKS) * SRAM_WIDTH.
Desplazar los resultados a la izquierda en elementos A % SRAM_WIDTH.
Mediante una canalización adecuada, lo que antecede da lugar a una lectura de elementos contiguos de SHIFT_WIDTH desde cualquier dirección lógica por ciclo de reloj. Al duplicar el direccionamiento y la lógica de rotación/desplazamiento, para memoria SRAM de doble puerto, lo que antecede, por lo general, se extendería hasta dos lecturas independientes de elementos contiguos de SHIFT_WIDTH por ciclo de reloj.
Red de multidifusión
Volviendo a la Figura 2, la red de multidifusión 204 proporciona un mecanismo general para permutar y duplicar las entradas que son objeto de lectura por el lector de desplazamientos 202 y aplicarlas a las unidades operativas 116. Concretamente, sobre una base por instrucción, a cada unidad operativa 116 se le proporcionará un único elemento desde la red de multidifusión 204, y cada uno de estos elementos deberá proceder de una entrada dentro de las salidas SHIFT_WIDTH del lector de desplazamiento asociado 202, o debe ser 0. El reordenamiento y la duplicación realizados por la unidad de multidifusión 204 no son fijos, y puede variar según el software. La modificación se realiza mediante un mecanismo de "precarga" mediante el cual se carga un patrón de multidifusión en la red de multidifusión 204, entre grupos de operación normal, o mediante información de "patrón" adicional presente en cada instrucción, o alguna combinación, lo que permite potencialmente una variabilidad por instrucción de la multidifusión. En el uso típico, habrá dos redes de multidifusión independientes 204, cada una conectada a un lector de desplazamientos independiente 202, lo que permitirá enviar dos elementos a cada unidad operativa para cada ciclo de reloj. Múltiples alternativas se contemplan explícitamente a continuación, y aún más alternativas son posibles.
Por lo general, con respecto a las contracciones de tensor, cada salida se mantiene en el acumulador de una unidad operativa 116, y el objetivo de la red de multidifusión 204 es enrutar los dos operandos de la operación de tensor (concretamente multiplicación) desde los tensores de entrada o mosaicos a la unidad operativa apropiada.
A. Red de multidifusión de operación binaria
Una red de multidifusión de operación binaria 204 consta de una serie de capas, cada una de las cuales pasa a través de los elementos de manera idéntica o realiza una permutación fija o una operación en abanico, en función de un bit, de toda la capa, especificado en la instrucción que se ejecuta en ese momento. Las primeras capas son de una anchura de SHIFT_WIDTH elementos y, mediante disposiciones en abanico, se extienden hasta que las capas tienen una anchura de NUM_UNITS elementos. En la puesta en práctica, se prevé que una capa sea un conjunto de trazas fijas con multiplexores de un bit de ancho de capa *ELEM_WIDTH con una línea de selección compartida. Además, se prevé que, para cumplir con los requisitos de temporización, es posible que sea necesario insertar capas de memoria intermedia en partes de la red de multidifusión 204. En este caso, la ejecución de instrucciones se canalizará de modo que la línea de selección para capas posteriores y la operación que llega en las unidades operativas sea retardada de forma adecuada en relación con la lectura de la memoria original.
La elección del número de capas y las permutaciones fijas a utilizar se basa en proporcionar la máxima flexibilidad entre los flujos de trabajo de aprendizaje máquina típicos, concretamente, las contracciones de tensor. Puesto que la salida se considera un mosaico de un tensor, al redondear todos los tamaños de mosaicos a una potencia de dos, los bits del índice binario de una unidad operativa pueden considerarse un conjunto de coordenadas, en donde cada coordenada comprende un número contiguo de bits dentro del índice. Esta limitación, sobre los tamaños de las dimensiones del tensor, simplifica en gran medida los tipos de reorganización de datos necesarios.
Es probable que los tensores de entrada elijan utilizar solamente algunas de estas coordenadas, posiblemente con una compensación (es decir, la adición del índice de tensor que aparece solamente en el lado derecho). Además, es probable que la entrada elija difundir el mismo valor mediante varias coordenadas de salida, en los casos en que las coordenadas del tensor, de una entrada determinada, sean independientes de uno de los índices de salida.
Por ejemplo, imaginando que SHIFT_WIDTH es 16, a cada entrada que llega desde el rotador de desplazamiento se le puede dar un índice en el margen [0,16), que se puede representar en binario como 4 bits (primero el bit bajo) como (i0, i1, i2, i3). Imaginando NUM_UNITs como 256, las unidades de salida pueden recibir un índice similar (o0, o1, o2... o7).
Ahora, se deberá imaginar que se desea tomar un tensor I de 2x2 de la entrada y aplicarlo a un tensor O de 2x2x2x2, tal que O[w,x,y,z] recibe la entrada desde A[x,y].
Lo que antecede se puede hacer proporcionando a la salida (o0, o1...) el valor de la entrada (o2, o3, o4, o5). Es decir, existe una relación entre qué elemento de entrada se envía a qué unidad operativa y los bits de los índices del elemento de entrada y la unidad operativa asociados.
Para realizar estas operaciones, se utilizan dos conjuntos de capas. El primer conjunto de capas, denominado capas de permutación, está diseñado para permutar elementos de manera que sean de utilidad para los flujos de trabajo de aprendizaje máquina. El segundo conjunto de capas, denominado capas de duplicación, duplica las entradas y proporciona un despliegue en abanico.
El primer conjunto de capas consta de una serie de "mezclas" que reorganizan lógicamente los bits del índice para permitir operaciones de transposición en mosaicos que tienen potencia de dos tamaños, así como para permitir entradas de "empaquetado" para varias acumulaciones. Dicho de otro modo, la primera capa permuta las entradas, de forma que los bits, que componen sus índices, sean también permutados.
Para describir los detalles de esta capa, se comienza definiendo una operación de permutación, parametrizada en un número B que está comprendido entre 0 y SHIFT_WIDTH-2 inclusive. Esta operación traslada el bit B+1 al bit inferior y desplaza todos los bits posteriores al bit B+1 a la izquierda, dejando los bits anteriores a B+1 tal como están. Esta permutación se describe mediante el siguiente código Python:
def do_perm(x, B):
N = len(x)
P = 2 ** (B+1)
P2 = 2 ** (B+2)
return [x[(i/P2)*P2 2*(i%P) ((i%P2)/P)] for i in range(N)]
Utilizamos 2*(SHIFT_WIDTH-1) capas, cada una de las cuales realiza una permutación específica, o realiza una permutación de identidad. Las permutaciones comienzan con B = SHIFT_WIDTH-2 y bajan a 0, y luego repiten el mismo patrón de nuevo. Describiendo todo este procedimiento en código Python, se escribe lo siguiente:
def do_penns(x, bits):
B = intfmath Iog(len(x), 2)) # Número de bits
L = 2*(B-1)
for i in range(L):
ifbitsfij:
x = do_perm(x, B -(i%(B-l)) - 2)
el se:
x = x
return x
Para un ejemplo simple de una transposición de un tensor 4x4, en donde SHIFT_WIDTH = 4, se desea realizar las permutaciones 0, 2 y 1 en ese orden. Puesto que las opciones de permutación son [2, 1, 0, 2, 1, 0], se realizarán permutaciones en el patrón de bits [0, 0, 1, 1, 1,0]. Utilizando el código ejemplo anterior se muestra:
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
print do_perms(x, [0, 0, 1, 1, 1, 0])
De las cuales, son salidas
[0, 4, 8, 12, 1,5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15]
Si observamos la X original como un tensor 4x4, esto es claramente una transposición de dicho tensor.
En general, es posible reorganizar los bits para solicitar numerosos tipos de permutaciones de tensor. Para tensores bidimensionales, lo que antecede permite todas las permutaciones. Para tensores tridimensionales, esto admite 5 de las 6 permutaciones posibles. Para tensores de cuatro dimensiones, este método admite 6 de las 12 permutaciones posibles, concretamente, las que se enumeran a continuación:
0 1 23
0 13 2
0 2 13
023 1
0 3 12
1023
1203
1 23 0
1 3 02
2 0 13
2 3 01
3 0 12
Las permutaciones no admitidas pueden ponerse en práctica a costa de ciclos adicionales haciendo contracciones contra un tensor constante para poner en práctica parte de la permutación, seguido de una segunda operación para poner en práctica la permutación restante. Sin embargo, mediante la disposición cuidadosa del orden de las dimensiones del tensor mediante software, lo que antecede puede evitarse en la gran mayoría de los casos.
El segundo conjunto de capas (después de salir del lector de desplazamientos) sirven para duplicar entradas. Inicialmente, el ancho de la capa se duplica con cada capa. Si se solicita la duplicación, cada entrada da como resultado dos entradas. Si no se solicita la duplicación, se pasan las entradas con el índice más bajo y las entradas con el índice más alto se rellenan con 0. Una vez que el ancho de la capa coincide con el número de unidades operativas, las duplicaciones posteriores copian la mitad de las entradas y descartan la otra mitad, y en el caso de transferencia es una función de identidad trivial. El patrón de duplicación específico sugerido varía en cada capa y está parametrizado por el número de capa L, que varía de 0 a log2 (NUM_UNITS)-1, de modo que el vector de entradas de salida O[i] se extrae desde el conjunto de admisiones de entradas tal como sigue:
P = 2AL
Como ejemplo ilustrativo, se supone que SHIFT_WIDTH = 8 y que NUM_UNITS = 16. Lo que antecede daría como resultado 4 capas. Además, se supone que el valor objeto de lectura del lector de desplazamientos 202 fue el siguiente: 0, 1,2, 3, 4, 5, 6, 7
Si la duplicación 0S y 1s están comprometidas, pero la 2a y 3S se dejan como identidad, llegamos a la siguiente entrada en las unidades operativas 116
0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3
Si la 2a y la 3a duplicación, están comprometidas, pero la 0a y la 1a se dejan como identidad, llegamos a la siguiente entrada en las unidades operativas
0, 1,2, 3, 0, 1,2, 3, 0, 1,2, 3, 0, 1,2, 3
B. Red de multidifusión totalmente reprogramable
Una red multidifusión 204 completamente reprogramable consiste en una red Benes de difusión (también conocida como red sin bloqueo reorganizable) con soporte para nodos de conmutación 2x2 generales que son capaces de difusión. Cada nodo de conmutación contiene dos bits para especificar la operación de permutación o difusión a realizar, que se pone en práctica mediante cerrojos y multiplexores de 1 bit. Lo que antecede permite especificar patrones de multidifusión arbitrarios, lo que permite relacionar cualquier entrada con cualquier conjunto de salidas. Si SHIFT_WIDTH es menor que NUMJJNITS, las primeras capas log2(NJM_JNITS/SHIFT_WIDTH) de la red se truncarán, y se podrá suponer que cualquier entrada que hubiera venido de la capa anterior es nula.
La reconfiguración de la red de permutación requiere la carga de (2log(NJMjJNITS)-1)NJM_JNITS bits de datos. Estos datos pueden cargarse mediante memoria DRAM o SRAM. Esta carga necesariamente tomará una cantidad significativa de ciclos de reloj y requerirá soporte para direccionar los cerrojos dentro de la red de permutación. Sin embargo, en los casos en que el número de ciclos en los que se utiliza una permutación dada es lo suficientemente grande, la generalidad del soporte de permutación (incluyendo el soporte para anchos de tensor que no son potencias de dos) puede hacer que este método sea conveniente. Concretamente, este método permite poner en práctica el conjunto completo de índices polinómicos arbitrarios en un ciclo para mosaicos de entrada que se ajustan a SHIFTj WIDTH y mosaicos de salida que se ajustan a NJM_JNITS. Además, es posible proporcionar resiliencia a defectos de fabricación o daños que causen unidades operativas defectuosas al permitir que las unidades operativas de repuesto se conecten como sustituciones.
C. Red multidifusión Benes de paridad
La red de multidifusión Benes de paridad es una opción más general que la red de multidifusión de operación binaria, pero menos intensiva para las operaciones de recarga que la red de multidifusión totalmente reprogramable.
Esta red tiene la misma estructura básica de la red Benes de difusión general anterior, sin embargo, en lugar de configurar cada nodo de conmutación de forma independiente, cada nodo de conmutación, para una capa determinada de la red, se configura para que sea la paridad de su índice AND-ed con un valor configurable por capa. Es decir, para la capa 1, elemento i, la elección de qué elemento del nodo de conmutación elegir viene dada por:
c[l,i] = PARITY(AND(p[l], i))
en donde, AND representa el elemento AND del índice i de ancho de bits log2(NUM_UNITS) con el valor de configuración de ancho de bits log2(NUM_UNITS) por capa p[1]. PARITY(x) representa la función de paridad sobre el conjunto de bits restantes.
Este mecanismo requiere solamente log2(NUM_UNITS)(2log2(NUM_UNITS) - 1) bits para especificar p[l] para todas las capas, o para NUM_UNITS = 64k, 496 bits.
Sin embargo, todas las operaciones de permutaciones de tensor de mosaicos con anchos que son una potencia de dos, así como todas las multidifusiones basadas en potencia de dos son compatibles con este método, lo que lo hace más general que la red de multidifusión de operación binaria, pero menos costosa que la red de multidifusión totalmente reprogramable. Además, mientras que los valores completos de p[l] podrían especificarse por instrucción, también es posible especificar la permutación lógica y la operación de difusión a realizar y calcular los bits requeridos mediante un circuito combinatorio en el circuito integrado, lo que resulta en un ancho de instrucción reducido, o eliminando la necesidad de realizar una búsqueda de memoria SRAM adicional. Por último, las permutaciones podrían almacenarse en una pequeña memoria SRAM independiente, lo que permitiría pequeñas instrucciones que son solamente datos de índices.
Esta idea de configurar el conjunto completo de nodos de conmutación utilizando una función de un conjunto más pequeño de parámetros de configuración y el índice de nodo, puede generalizarse.
D. Red de Permutación Benes y Red de Duplicación Simple
En esta variante, la parte de permutación de la red de multidifusión de operación binaria se sustituye por una red Benes simple (sin difusión) para la que se carga la configuración; sin embargo, se mantiene el conjunto fijo de capas de duplicación. Debido a que la cantidad de bits necesarios para especificar una capa de permutación Benes arbitraria es (2log2(B)-1)B/2 bits, si SHIFT_WIDTH es <= que ELEMENT_WIDTH, dicha red se puede cargar desde la memoria SRAM en una sola lectura.
Unidades operativas
Las unidades operativas 116 consisten en un gran número (NUM_UNITS) de unidades independientes e idénticas 116, cada una de las cuales normalmente contendría tres registros, A, R y S, y varias unidades funcionales. Además, cada unidad operativa 116 recibe dos elementos por ciclo de reloj, uno de cada red de multidifusión 204. Estos valores se denominan B y C, y tienen una anchura de bits ELEM_WIDTH. Las unidades operativas 116 están todas controladas por un único decodificador de instrucciones, y todas realizan la misma operación en cada ciclo de reloj.
Durante cada ciclo de reloj, cada unidad operativa 116 realiza una operación basada en sus valores de registro anteriores, las nuevas entradas B y C de la memoria, y por elementos de control de instrucción que incluyen D, una constante de 4 bits por instrucción. Cada unidad operativa 116 actualiza entonces sus registros.
Registros de la unidad operativa
La unidad operativa 116 contará con los siguientes registros:
A - Registro acumulador, contiene bits ACCUM_WIDTH interpretados como un número entero con signo
R - Registro de estado RNG, contiene datos utilizados para generar números pseudoaleatorios
S - Registro de estado, contiene 4 booleanos S[0] a S[3]
Operaciones
Durante cada ciclo, la unidad operativa 116 realiza lógicamente operaciones que comprenden instrucciones informáticas limitadas a un conjunto de primitivos de aprendizaje máquina. Los primitivos son operaciones atómicas determinadas para realizar operaciones utilizadas en el aprendizaje máquina que normalmente requieren varias instrucciones en un procesador tradicional. Concretamente, una operación atómica es una operación que se realiza como una unidad discreta de funcionalidad y no se puede subdividir. Por lo tanto, el hardware que admite la funcionalidad que se puede realizar en una única operación que requiere múltiples operaciones en un procesador tradicional acelera el rendimiento de la funcionalidad por la cantidad de operaciones guardadas.
Los ejemplos de funcionalidad a realizar en una operación única en lugar de múltiples operaciones en un procesador tradicional incluyen contracciones de tensor, adición de ruido aleatorio y operaciones no lineales por elementos. Las instrucciones incluyen el conjunto de las siguientes operaciones de primitivos:
SET: A := B // Establecer acumulador
MAC: A = B * C // Multiplicar-Acumular
ARN: A = R // Añadir D bits de ruido aleatorio
LTR: A := (A - B) * C // Transformación lineal
SHR: A ;= A » D // Desplazar a la derecha
CMP: S[D] := (B <= A <= C) // Comparar A con el rango, actualizar S[D]
OUT: // Datos de salida de unidades operativas a SRAM, véase operaciones globales
SRD: R = A // Valores RNG iniciales (semilla)
RET: // Retorno, realizado con este cálculo
Además, durante cada ciclo, a menos que la instrucción sea SRD, los registros R se actualizan para obtener un nuevo valor pseudoaleatorio. Lo que antecede se puede realizar mediante un registro de desplazamiento de retroalimentación lineal ("LFSR"), vinculando R registros desde múltiples unidades operativas para aumentar la mezcla.
Este conjunto de instrucciones podría ampliarse según sea necesario. Por ejemplo, para operaciones de agrupación máxima, la siguiente instrucción adicional puede ser de utilidad:
MMA: A := max(A, B * C) // Multiplicar, Acumulación Máxima
Valores de control por instrucción para las unidades operativas
Los valores de control por instrucción para las unidades operativas 116 son los siguientes:
Operación: Qué operación realizar de entre las enumeradas en el apartado anterior.
Condición: Para cada S[i], qué valor debe tener S[i] para realizar esta operación. Puede ser 0, 1 o "no importa" para cada uno. La salida de cada prueba se combina con AND para decidir si se debe realizar la operación. Puesto que cada entrada normalmente se representaría como 2 bits, este componente de la instrucción ocupa 8 bits.
D: Valor utilizado para CMP y SHR.
De nuevo, existen muchas variaciones. Por ejemplo, la ejecución condicional podría definirse como un número de 16 bits, que representa bajo cuál de cada una de las 16 condiciones posibles basadas en S se debe realizar la operación. Registros de Índice y Unidad de Direcciones
Los registros de índice 206 son globales para las unidades operativas 116 y el decodificador de instrucciones 208, y rastrean diversas variables de índice para controlar el direccionamiento y permitir que se realicen bucles y otras operaciones con facilidad. Cada registro de índice 206 almacena un valor entero, INDEX_WIDTH de bits de anchura, y existen NUM_INDEXES registros.
Cada instrucción contiene cierto número de referencias de dirección, que permiten el cálculo de una dirección SRAM o DRAM mediante los registros de índice.
Cada referencia de dirección contiene una compensación de memoria base, así como un amplio multiplicador INDEX_WIDTH para cada registro de índice, para un total de NUM_INDEXES 1 valores por referencia de dirección. Para calcular la dirección de memoria, se calcula la suma siguiente:
A = B Sum over i=[0, NUM_INDEXES) of M[i] * R[i]
en donde B es la dirección base, M[i] es el multiplicador de cada registro de índice y R[i] representa el valor actual de cada registro de índice.
Las instrucciones también contienen una actualización de registro de índice, que nuevamente consta de NUM_INDEXES números de tamaño INDEX_WIDTH, U[i], así como un conjunto de valores booleanos B[i] y realiza la siguiente actualización:
R[i] :=B[i]? (R[i] U[i]):U[i]
en donde U[i] es la lista de actualizaciones de registros de índice y ? es el operador trinario if-then-else.
Por lo tanto, para cada instrucción, las referencias de memoria se pueden calcular a partir de registros de índice, y los registros de índice se pueden actualizar.
Por último, cada instrucción especifica una prueba de registro de índice, que consiste en una elección del registro de índice, i, para probar, y un valor máximo, M. La prueba se considera verdadera si:
R[i] < M
A continuación, cada instrucción especifica un número de instrucción siguiente tanto para el caso en donde la prueba es verdadera como para el caso en donde la prueba es falsa. Lo que antecede permite la creación de construcciones en bucle.
Unidad de transferencia DRAM
La unidad de transferencia de DRAM 118 se solicita en una sección separada de cada instrucción, independientemente de la operación de las unidades operativas. Especifica una memoria SRAM y una ubicación de memoria DRAM (posiblemente con algunos requisitos de alineación), así como una operación (lectura o escritura). La operación también puede ser del tipo no-op. Lo que antecede inicia una lectura/escritura hacia/desde DRAM desde/hacia SRAM. Esta operación no se completará al inicio de la siguiente instrucción, debido a la profundidad de la canalización de instrucciones en relación con la latencia de la memoria DRAM, por lo que el software debe tener conocimiento de dicha latencia. El ancho de la transferencia de datos suele ser tan grande como sea posible dado el ancho de banda de la memoria DRAM.
De manera alternativa, la unidad de transferencia de DRAM 118 puede estar restringida para realizar solamente lecturas en SRAM, y las escrituras pueden provenir de las unidades operativas. En este caso, es posible realizar una búsqueda previa desde la DRAM mediante el uso de un segundo decodificador de instrucciones que opera una cierta cantidad de ciclos por delante del decodificador de instrucciones principal y coloca los resultados en una memoria caché asociativa. A continuación, cuando la instrucción se planifica en el decodificador de instrucciones principal, el valor se extrae desde la memoria caché y es objeto de escritura en SRAM, lo que hace que el acceso a DRAM parezca determinista. Para las operaciones de escritura, se puede utilizar una memoria caché de escritura para evitar la necesidad de un desplazamiento completo de ida y vuelta de la memoria DRAM.
Decodificador de instrucciones SRAM
El decodificador de instrucciones 208 normalmente contendrá su propia memoria SRAM, cuyo ancho está optimizado para la instrucción más grande posible, aunque también puede reutilizar la memoria SRAM del sistema, incluyendo posiblemente un mecanismo de almacenamiento en memoria caché para reducir los conflictos de lectura del banco de memoria. En cada ciclo, el decodificador de instrucciones realiza la lectura de una nueva instrucción y organiza la actividad de las diversas unidades tal como se describe en la sección de operación.
Diseño alternativo de SRAM
De manera alternativa, los bancos de memoria SRAM 114 pueden existir como 2 bancos, cada uno de los cuales tiene una anchura de elementos SHIFT_WIDTH. Cada banco normalmente alimentaría uno de los dos registros de desplazamiento y normalmente tiene muy pocas direcciones (tan solo 4 por banco). Lo que antecede simplifica ese direccionamiento, lo que hace que se cargue exactamente una dirección en el cargador de desplazamiento, que luego simplemente realiza una rotación de los datos desde la dirección de anchura única. Las salidas pueden ser objeto de escritura en cualquier banco, y las secciones de cada banco se pueden planificar para ser objeto de escritura o de lectura desde la memoria DrAm , posiblemente incluyendo una asignación no trivial de múltiples zonas de memoria DRAM a una sola dirección. Por ejemplo, suponiendo que se pueda realizar la escritura de 128 elementos en memoria DRAM para cada ciclo de reloj, un método sería admitir una escritura de cualquier compensación de 128 elementos alineados dentro de una dirección de cualquier banco para programar la lectura o escritura durante cada ciclo de reloj.
Operación del sistema global
En cada ciclo, el decodificador de instrucciones 208 realiza la lectura de una única nueva instrucción. Debido a que las instrucciones están muy canalizadas, se están produciendo operaciones para múltiples instrucciones anteriores mientras el decodificador 208 recupera la nueva instrucción. La Figura 4 es un diagrama de flujo del funcionamiento del decodificador 208. Para aclarar el flujo, en este caso se describirá el orden lógico, pero se podrán programar múltiples etapas independientes en el mismo ciclo de reloj si fuere posible, y algunas etapas, tales como la propagación de los elementos a través de la red de multidifusión, podrán tomar más de un ciclo de reloj, con cerrojos de canalización interna.
En el bloque 402, recuperar y cargar la instrucción del registro del puntero de instrucción actual ("IP").
En el bloque 404, actualizar los registros de índice.
En el bloque 406, realizar la prueba de registro de índice y establecer una nueva IP para la siguiente instrucción. En el bloque 408, calcular las direcciones para la transferencia de memoria DRAM (si corresponde) y planificar la transferencia mediante la unidad de transferencia de memoria DRAM 118.
En el bloque 410, calcular las direcciones para el acceso a la memoria del elemento tensor B y del elemento tensor C, si es pertinente para el tipo de instrucción extraída.
En el bloque 412, cargar los datos de SRAM para B y C en los bancos de datos de SRAM 114, si es pertinente para el tipo de instrucción obtenida.
En el bloque 414, propagar datos cargados mediante cargadores de desplazamiento, si es pertinente para el tipo de instrucción obtenida.
En el bloque 416, propagar los datos cargados a las unidades operativas 116 mediante las redes de multidifusión 204, si es pertinente para el tipo de instrucción obtenida.
En el bloque 418, realizar la operación en la unidad operativa 116.
Conviene señalar que, si la operación a realizar es "OUT", una parte contigua de los datos de las unidades operativas se escribe en una ubicación de memoria SRAM especificada como una referencia de memoria, siendo la parte una zona alineada con el espacio de índice de la unidad operativa y definida por otra referencia de memoria. Además, se define una longitud de escritura que puede ser menor que SHIFT_WIDTH. De manera alternativa, las salidas se pueden ser objeto de escritura directamente en memoria DRAM.
Ejemplo de un caso de uso de convolución
Las técnicas de aceleración por hardware de aprendizaje máquina anteriores se pueden utilizar para poner en práctica la operación lógica de contracciones de tensor generalizadas, ruido aditivo y no linealidades por elementos. Puesto que estas operaciones por lo general se realizan en el orden anterior repetidamente para redes profundas (una vez por capa), se asume este mismo orden. Sin embargo, lo que antecede no es requerido.
Para concretar las operaciones, se examinará una operación específica, una convolución seguida de una ronda aleatoria, seguida asimismo de una no linealidad RELU con fugas, de una imagen que tiene 256 de anchura por 256 de altura por 64 canales de características de profundidad con un kernel que opera sobre una zona x,y de 3x3 y asigna 64 canales de entrada a 64 canales de salida. Se supondrá que el tensor de entrada que representa la imagen y el kernel ya existe dentro de la SRAM organizada de modo que se tenga:
K[i,j, ci, co] = K[K_o i* 16384 j*4096 64*ci co]
También se supondrá que existe una zona para la salida en:
0[co, x, y] = M [0_o co*6553ó 256*x y]
En donde M[i] representan posiciones de memoria lógica mediante el diseño de memoria no alternativo. También se supondrán valores predeterminados para todos los parámetros. Se presumirá el bit de funcionamiento de la red multidifusión.
Lógicamente, se realizará la iteración sobre cada valor de x de 0 a 256 en etapas de 6 elementos, y para cada uno, se calculará la salida para todos los valores de y y co para los valores x en cuestión como un mosaico único, realizando
una acumulación interna sobre i, j y ci. A continuación, se añadirá ruido, se reducirá la precisión y se realizará la no linealidad, y luego serán objeto de lectura los resultados.
Para realizar lo que antecede, se asignarán los diversos índices de tensores lógicos a registros de índice de la siguiente manera:
R0 = x r1 = ci r2 = i r3 = j r4 = co (para salida a memoria principal)
Se definen dos patrones de multidifusión específicos, uno para el kernel y el otro para la entrada. Para el kernel, se define un patrón que asigna elementos de entrada [0,64) a todas las unidades operativas, de modo que U[i] = I[i/2048]. Lo que antecede se puede hacer habilitando todas las capas de duplicación < que 12, deshabilitando todas las capas de duplicación >= que la capa 12 y deshabilitando todas las capas de permutación. Se denominará a este patrón PK.
Para la entrada, se define un patrón que asigna repeticiones 64 veces para todos los 2048 elementos de entrada. Lo que antecede se puede hacer habilitando todas las capas de duplicación < a 6, deshabilitando todas las capas de duplicación >= que la capa 6 y deshabilitando todas las capas de permutación, denominando a este patrón PI.
También se creará un conjunto de constantes C y se cargarán en la memoria de modo que se pueda utilizar el patrón de capa de permutación que permita que todas las capas de duplicación y las capas sin permutaciones proporcionen la constante a todas las unidades operativas.
A continuación, se indica el flujo de instrucciones lógicas que realiza la operación anterior:
00: SET // Poner a cero todos los acumuladores
B=constant 0x0000
r0 = 0, r1 = 0, r2 = 0, r3 = 0
01: MAC // Sumar cada fila de i
B=M[D_o 65536*r1 256*r0 256*r2 r3] vía PI C=M[K_o
16384*r2 4096*r3 64*r1] vía PK
r3 = 1 if (r3 < 2) goto 1, else goto 2
02: MAC // Sumar cada columna de j
B=M[D_o 65536*r1 256*r0 256*r2 r3] vía PI C=M[K_o
16384*r2 4096*r3 64*r1] vía PK
r2 = 1, r3 = 0
if (r2 < 2) goto 1, else goto 3
03: MAC // Sobre cada canal de entrada
B=M[D_o 65536*r1 256*r0 256*r2 r3] vía PI C=M[K_o
I6384*r2 4096*r3 64*r1] via PK
r1 = 1, r2 = 0, r3 = 0 if (r2 < 63) goto 1, else goto 4
04: ARN 15 bits // Agregar ruido para poner en práctica una ronda aleatoria
05: SHR 16 // Desplazar hacia abajo en 16 para retornar a 8.8
06: CMP -> S[0] // Ver si son mayor o igual que 0.0
B=constant 0x0000
C=constant 0x7fff
07: LTR if !S[0] //Si es menor, multiplicar por .1 * 0x1000
B=constant 0x0000
C=constant 0x199
08: LTR si S[0] // Si es mayor o igual multiplicar por 0x1000
B=constant 0x0000
C=constant 0x1000
09: ARN 11 bits // Añadir ruido para poner en práctica una ronda aleatoria
10: SHR 12 // Desplazar hacia abajo para eliminar el factor de Ox1000
r4 = 0 i f (r0 < 252) goto 11, else goto 13
11: OUT // Caso de salida normal
offset = 2048*r4
M [D_o 65536*r4 256*r0]
size = 2048
r4+= 1
i f (r4 < 64) goto 11, else goto 12
12; SET // Volver a poner a cero los acumuladores y obtener las siguientes 6 filas
B=constant 0x0000
r0 = 6 goto 0
13: OUT // Caso de salida final especial para gestionar las últimas 2 filas
offset = 2048*r4
M [D_o 65536*r4 256*r0]
size = 512
r4+= 1
i f (r4 < 64) goto 11, else goto 14
14: RET
La descripción del tema se puede resumir de la siguiente manera:
Un sistema para realizar la aceleración por hardware para el aprendizaje máquina comprende: múltiples bancos de memoria de acceso aleatorio; un lector de desplazamientos; una pluralidad de unidades operativas configuradas para acceder al menos a una parte de la memoria de acceso aleatorio al mismo tiempo; una red multidifusión acoplada de manera comunicativa a la memoria y al lector de desplazamientos; y un decodificador de instrucciones compuesto por un acumulador, uno o más registros y un generador de números aleatorios, en donde el decodificador de instrucciones está configurado para procesar instrucciones restringidas a un conjunto de instrucciones compuesto por primitivos de aprendizaje máquina, configurado para realizar transferencias de memoria y enviar instrucciones a las unidades operativas.
La memoria de acceso aleatorio puede estar compuesta por una memoria de acceso aleatorio estática y configurada para acceder a la misma con un ancho de memoria suficiente para realizar operaciones vectoriales con un acceso único.
Cada banco de memoria de acceso aleatorio puede estar acoplado con suficientes lectores de desplazamientos para realizar desplazamientos de modo que los lectores de desplazamientos no necesiten cambiar la dirección de la memoria rotando todo el banco de memoria de acceso aleatorio.
El sistema puede comprender, además, una pluralidad de registros de índice, en donde las instrucciones del conjunto de instrucciones están configuradas para calcular direcciones de memoria a partir de los registros de índice y actualizar los registros de índice dentro de la operación atómica de la instrucción.
El lector de desplazamiento puede configurarse para realizar una operación de desplazamiento entre los bancos de memoria de acceso aleatorio mediante: lectura simultánea de datos de una pluralidad de bancos de memoria en función de una compensación lógica; concatenar los datos objeto de lectura en una única lista lógica; rotar los datos objeto de lectura en la lista lógica única basándose en la compensación lógica y el ancho de la memoria que puede ser objeto de lectura en una única operación; y cambiar los datos de lectura en base a la compensación lógica y al ancho de la memoria que puede ser objeto de lectura en una única operación.
La red de multidifusión puede configurarse para permutar datos y copiar datos desde el lector de desplazamientos y la memoria mediante la operación de las unidades operativas. De manera opcional, la red de multidifusión puede estar compuesta por una pluralidad de capas de permutación y una pluralidad de capas de duplicación, estando configuradas las capas de permutación para realizar operaciones de transposición atómica de mosaicos de tensor. De otro modo, la red de multidifusión también puede ser: una red sin bloqueo reorganizable de difusión con unidades de conmutación 2x2, conservando cada unidad el estado en cuanto a una función de permutación o de difusión a realizar, de modo que la red pueda configurarse de manera dinámica para un algoritmo de multidifusión arbitrario; una red sin bloqueo reorganizable por paridad tal que un conjunto completo de nodos de conmutación se configure en base al menos a un conjunto de parámetros menor que el número de nodos de conmutación y un índice de nodo; o una red sin bloqueo reorganizable que no sea de difusión tal que la duplicación se realice mediante una duplicación simple.
El sistema puede comprender, además, una unidad de transferencia configurada para realizar amplias operaciones de copia masiva entre la memoria no local y la memoria de acceso aleatorio local.
Las unidades operativas pueden configurarse para tener un acumulador con un ancho de memoria suficiente para realizar operaciones vectoriales con un acceso único.
Las unidades operativas pueden configurarse con un generador de números pseudoaleatorios y un registro de números pseudoaleatorios.
Las unidades operativas pueden configurarse para procesar una operación atómica de multiplicación y de acumulación máxima (MMA).
Las unidades operativas pueden configurarse para realizar operaciones de coma flotante con una precisión de mantisa de menos de 24 bits.
Conclusión
Aunque el objeto se ha descrito en un lenguaje específico de características estructurales y/o actos metodológicos, debe entenderse que el objeto definido en las reivindicaciones adjuntas no se limita necesariamente a las características o actos específicos descritos con anterioridad. Más bien, las características y acciones específicas descritas con anterioridad se describen como ejemplos de formas de poner en práctica las reivindicaciones.
Claims (14)
1. Un procesador que comprende:
una pluralidad de unidades operativas para ejecutar instrucciones asociadas con operaciones de aprendizaje máquina; una memoria local que comprende una pluralidad de bancos de memoria de acceso aleatorio estática, SRAM, de doble puerto para almacenar datos asociados con una o más de las instrucciones;
un decodificador para decodificar una instrucción de multiplicación matricial;
un circuito para permutar una primera pluralidad de elementos de datos origen asociados con una primera matriz multidimensional de conformidad con un patrón de permutación incluido con la instrucción de multiplicación matricial y enrutar la primera pluralidad de elementos de datos origen a la pluralidad de unidades operativas;
la pluralidad de unidades operativas para realizar una pluralidad de operaciones paralelas de multiplicación y acumulación, MAC, de conformidad con la instrucción de multiplicación matricial, comprendiendo cada unidad operativa:
un multiplicador para multiplicar un primer elemento de datos origen de la primera pluralidad de elementos de datos origen proporcionados por el circuito para permutar y un segundo elemento de datos origen de una segunda pluralidad de elementos de datos origen asociados con una segunda matriz multidimensional para generar un producto, y un acumulador para sumar el producto a un valor de acumulación para generar un valor de resultado, teniendo cada uno de entre el primer elemento de datos origen y el segundo elemento de datos origen un primer ancho de bits y el valor de acumulación que tiene un segundo ancho de bits que es al menos dos veces el primer ancho de bits.
2. El procesador según la reivindicación 1, en donde el circuito para permutar comprende una pluralidad de conmutadores configurables.
3. El procesador según la reivindicación 1, en donde el circuito de permutación está destinado para realizar una operación de difusión para enrutar un único elemento de datos origen a cada una de entre la pluralidad de unidades operativas.
4. El procesador según la reivindicación 1, en donde los valores de índices están destinados a ser generados modificando los valores de índices iniciales en función de la permutación.
5. El procesador según la reivindicación 1, en donde el circuito de multiplicación-acumulación comprende un registro de acumulación para almacenar el valor de acumulación que tiene el segundo ancho de bits.
6. El procesador según la reivindicación 1, en donde el primer ancho de bits es de 16 bits y el según ancho de bits es de 32 bits.
7. El procesador según la reivindicación 6, en donde la primera y la segunda pluralidad de elementos de datos origen comprenden elementos de datos de coma flotante de 16 bits y los valores de acumulación y resultado comprenden elementos de datos de coma flotante de 32 bits.
8. El procesador según la reivindicación 1, que comprende, además:
una memoria caché compartida por al menos algunas de entre la pluralidad de unidades operativas.
9. El procesador según la reivindicación 8, en donde la memoria caché comprende una memoria caché de escritura inmediata.
10. El procesador según la reivindicación 1, que comprende, además:
un decodificador para decodificar una instrucción de multiplicación-acumulación para hacer que las unidades operativas realicen, cada una, la operación de multiplicación-acumulación en un ciclo de reloj en curso.
11. El procesador según la reivindicación 1, en donde el circuito de permutación está destinado a realizar la operación de permutación basándose, al menos en parte, en la información incluida en al menos una de las instrucciones.
12. El procesador según la reivindicación 11, en donde el circuito de permutación está destinado a realizar la operación de permutación basándose, al menos en parte, en la información incluida en al menos un registro.
13. El procesador según la reivindicación 1, en donde los valores de índices se van a establecer basándose en al menos una de las operaciones de aprendizaje máquina.
14. El procesador según la reivindicación 1, en donde cada valor de índice debe multiplicarse por un valor especificado para generar un valor de índice resultado, estando el circuito de permutación destinado para usar el valor de índice resultado para realizar la operación de permutación.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662276169P | 2016-01-07 | 2016-01-07 | |
US15/399,714 US11170294B2 (en) | 2016-01-07 | 2017-01-05 | Hardware accelerated machine learning |
Publications (1)
Publication Number | Publication Date |
---|---|
ES2934979T3 true ES2934979T3 (es) | 2023-02-28 |
Family
ID=59274447
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES21208402T Active ES2954562T3 (es) | 2016-01-07 | 2017-01-06 | Aprendizaje máquina acelerado por hardware |
ES21158563T Active ES2934979T3 (es) | 2016-01-07 | 2017-01-06 | Aprendizaje máquina acelerado por hardware |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES21208402T Active ES2954562T3 (es) | 2016-01-07 | 2017-01-06 | Aprendizaje máquina acelerado por hardware |
Country Status (5)
Country | Link |
---|---|
US (3) | US11170294B2 (es) |
EP (4) | EP3893123B1 (es) |
ES (2) | ES2954562T3 (es) |
PL (2) | PL3974959T3 (es) |
WO (1) | WO2017120517A1 (es) |
Families Citing this family (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9875104B2 (en) | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
CN109328361B (zh) * | 2016-06-14 | 2020-03-27 | 多伦多大学管理委员会 | 用于深度神经网络的加速器 |
US10896367B2 (en) * | 2017-03-07 | 2021-01-19 | Google Llc | Depth concatenation using a matrix computation unit |
US10474575B2 (en) | 2017-04-10 | 2019-11-12 | Arm Limited | Cache-based communication between execution threads of a data processing system |
US11164071B2 (en) * | 2017-04-18 | 2021-11-02 | Samsung Electronics Co., Ltd. | Method and apparatus for reducing computational complexity of convolutional neural networks |
US10684955B2 (en) | 2017-04-21 | 2020-06-16 | Micron Technology, Inc. | Memory devices and methods which may facilitate tensor memory access with memory maps based on memory operations |
US10817293B2 (en) * | 2017-04-28 | 2020-10-27 | Tenstorrent Inc. | Processing core with metadata actuated conditional graph execution |
US11501139B2 (en) * | 2017-05-03 | 2022-11-15 | Intel Corporation | Scaling half-precision floating point tensors for training deep neural networks |
US10643297B2 (en) * | 2017-05-05 | 2020-05-05 | Intel Corporation | Dynamic precision management for integer deep learning primitives |
DE102018110687A1 (de) | 2017-05-05 | 2018-11-08 | Intel Corporation | Dynamisches Genauigkeitsmanagement für Deep-Learning-Ganzzahlprimitive |
US10809978B2 (en) * | 2017-06-02 | 2020-10-20 | Texas Instruments Incorporated | Merge sort accelerator |
KR20200047551A (ko) | 2017-07-30 | 2020-05-07 | 뉴로블레이드, 리미티드. | 메모리 기반 분산 프로세서 아키텍처 |
US10108538B1 (en) * | 2017-07-31 | 2018-10-23 | Google Llc | Accessing prologue and epilogue data |
GB2567038B (en) * | 2017-07-31 | 2019-09-25 | Google Llc | Accessing prologue and epilogue data |
GB2568776B (en) * | 2017-08-11 | 2020-10-28 | Google Llc | Neural network accelerator with parameters resident on chip |
US11847246B1 (en) * | 2017-09-14 | 2023-12-19 | United Services Automobile Association (Usaa) | Token based communications for machine learning systems |
US10679129B2 (en) * | 2017-09-28 | 2020-06-09 | D5Ai Llc | Stochastic categorical autoencoder network |
US10902318B2 (en) | 2017-11-06 | 2021-01-26 | Neuralmagic Inc. | Methods and systems for improved transforms in convolutional neural networks |
KR20190051697A (ko) | 2017-11-07 | 2019-05-15 | 삼성전자주식회사 | 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법 |
US20190156214A1 (en) | 2017-11-18 | 2019-05-23 | Neuralmagic Inc. | Systems and methods for exchange of data in distributed training of machine learning algorithms |
WO2019147708A1 (en) * | 2018-01-24 | 2019-08-01 | Alibaba Group Holding Limited | A deep learning accelerator system and methods thereof |
US10620954B2 (en) * | 2018-03-29 | 2020-04-14 | Arm Limited | Dynamic acceleration of data processor operations using data-flow analysis |
US11144316B1 (en) | 2018-04-17 | 2021-10-12 | Ali Tasdighi Far | Current-mode mixed-signal SRAM based compute-in-memory for low power machine learning |
US10592208B2 (en) | 2018-05-07 | 2020-03-17 | International Business Machines Corporation | Very low precision floating point representation for deep learning acceleration |
US11216732B2 (en) | 2018-05-31 | 2022-01-04 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
US10832133B2 (en) | 2018-05-31 | 2020-11-10 | Neuralmagic Inc. | System and method of executing neural networks |
US11449363B2 (en) | 2018-05-31 | 2022-09-20 | Neuralmagic Inc. | Systems and methods for improved neural network execution |
US10963787B2 (en) | 2018-05-31 | 2021-03-30 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
WO2021061172A1 (en) * | 2019-09-27 | 2021-04-01 | Neuralmagic Inc. | System and method of executing neural networks |
KR102607864B1 (ko) * | 2018-07-06 | 2023-11-29 | 삼성전자주식회사 | 뉴로모픽 시스템 및 그것의 동작 방법 |
US10956315B2 (en) * | 2018-07-24 | 2021-03-23 | Micron Technology, Inc. | Memory devices and methods which may facilitate tensor memory access |
CN109543830B (zh) * | 2018-09-20 | 2023-02-03 | 中国科学院计算技术研究所 | 一种用于卷积神经网络加速器的拆分累加器 |
WO2020072274A1 (en) | 2018-10-01 | 2020-04-09 | Neuralmagic Inc. | Systems and methods for neural network pruning with accuracy preservation |
US11379712B2 (en) | 2018-10-09 | 2022-07-05 | Hewlett Packard Enterprise Development Lp | Avoiding cycles in neural networks |
US11544559B2 (en) | 2019-01-08 | 2023-01-03 | Neuralmagic Inc. | System and method for executing convolution in a neural network |
US11748599B2 (en) * | 2019-02-21 | 2023-09-05 | Texas Instruments Incorporated | Super-tiling in neural network processing to enable analytics at lower memory speed |
US10884707B1 (en) | 2019-06-27 | 2021-01-05 | Amazon Technologies, Inc. | Transpose operations using processing element array |
US11195095B2 (en) | 2019-08-08 | 2021-12-07 | Neuralmagic Inc. | System and method of accelerating execution of a neural network |
CN111104459A (zh) * | 2019-08-22 | 2020-05-05 | 华为技术有限公司 | 存储设备、分布式存储系统以及数据处理方法 |
US20210064987A1 (en) * | 2019-09-03 | 2021-03-04 | Nvidia Corporation | Processor and system to convert tensor operations in machine learning |
US10915298B1 (en) | 2019-10-08 | 2021-02-09 | Ali Tasdighi Far | Current mode multiply-accumulate for compute in memory binarized neural networks |
US11610104B1 (en) | 2019-12-30 | 2023-03-21 | Ali Tasdighi Far | Asynchronous analog accelerator for fully connected artificial neural networks |
US11615256B1 (en) | 2019-12-30 | 2023-03-28 | Ali Tasdighi Far | Hybrid accumulation method in multiply-accumulate for machine learning |
US11593628B2 (en) | 2020-03-05 | 2023-02-28 | Apple Inc. | Dynamic variable bit width neural processor |
US11347486B2 (en) * | 2020-03-27 | 2022-05-31 | Advanced Micro Devices, Inc. | Compiler-initiated tile replacement to enable hardware acceleration resources |
US11556757B1 (en) | 2020-12-10 | 2023-01-17 | Neuralmagic Ltd. | System and method of executing deep tensor columns in neural networks |
US11478927B1 (en) * | 2021-04-01 | 2022-10-25 | Giant.Ai, Inc. | Hybrid computing architectures with specialized processors to encode/decode latent representations for controlling dynamic mechanical systems |
US11494321B1 (en) * | 2021-09-30 | 2022-11-08 | Amazon Technologies, Inc. | State buffer memloc reshaping |
US11960982B1 (en) | 2021-10-21 | 2024-04-16 | Neuralmagic, Inc. | System and method of determining and executing deep tensor columns in neural networks |
CN115759294B (zh) * | 2022-11-25 | 2023-10-24 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN117170588B (zh) * | 2023-11-01 | 2024-01-26 | 北京壁仞科技开发有限公司 | 用于对张量数据的布局进行转换的方法、设备和介质 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5138695A (en) | 1989-10-10 | 1992-08-11 | Hnc, Inc. | Systolic array image processing system |
DE69132495T2 (de) | 1990-03-16 | 2001-06-13 | Texas Instruments Inc., Dallas | Verteilter Verarbeitungsspeicher |
US5625825A (en) | 1993-10-21 | 1997-04-29 | Lsi Logic Corporation | Random number generating apparatus for an interface unit of a carrier sense with multiple access and collision detect (CSMA/CD) ethernet data network |
US5892697A (en) | 1995-12-19 | 1999-04-06 | Brakefield; James Charles | Method and apparatus for handling overflow and underflow in processing floating-point numbers |
US6216167B1 (en) | 1997-10-31 | 2001-04-10 | Nortel Networks Limited | Efficient path based forwarding and multicast forwarding |
US6571268B1 (en) | 1998-10-06 | 2003-05-27 | Texas Instruments Incorporated | Multiplier accumulator circuits |
US6768992B1 (en) | 1999-05-17 | 2004-07-27 | Lynne G. Jolitz | Term addressable memory of an accelerator system and method |
TW484016B (en) | 1999-07-28 | 2002-04-21 | Hitachi Ltd | Semiconductor integrated circuit and recording medium |
US6285779B1 (en) | 1999-08-02 | 2001-09-04 | Trident Microsystems | Floating-point complementary depth buffer |
CA2422221A1 (en) | 2000-09-12 | 2002-03-21 | International Business Machines Corporation | System and method for controlling the multicast traffic of a data packet switch |
US6891828B2 (en) * | 2001-03-12 | 2005-05-10 | Network Excellence For Enterprises Corp. | Dual-loop bus-based network switch using distance-value or bit-mask |
US7082449B2 (en) | 2002-05-03 | 2006-07-25 | Sun Microsystems, Inc. | Method and apparatus for generating pseudo-random numbers |
US8259121B2 (en) | 2002-10-22 | 2012-09-04 | Broadcom Corporation | System and method for processing data using a network |
US7548892B2 (en) * | 2004-04-30 | 2009-06-16 | Microsoft Corporation | Processing machine learning techniques using a graphics processing unit |
KR101271245B1 (ko) | 2005-04-21 | 2013-06-07 | 바이올린 메모리 인코포레이티드 | 상호접속 시스템 |
DE102005021749A1 (de) | 2005-05-11 | 2006-11-16 | Fachhochschule Dortmund | Verfahren und Vorrichtung zur programmgesteuerten Informationsverarbeitung |
US20070005322A1 (en) * | 2005-06-30 | 2007-01-04 | Patzer Aaron T | System and method for complex programmable breakpoints using a switching network |
GB2456775B (en) * | 2008-01-22 | 2012-10-31 | Advanced Risc Mach Ltd | Apparatus and method for performing permutation operations on data |
GB0811057D0 (en) | 2008-06-17 | 2008-07-23 | Univ Ulster | Artificial neural network architecture |
US8090896B2 (en) * | 2008-07-03 | 2012-01-03 | Nokia Corporation | Address generation for multiple access of memory |
US8131659B2 (en) * | 2008-09-25 | 2012-03-06 | Microsoft Corporation | Field-programmable gate array based accelerator system |
WO2010106587A1 (ja) | 2009-03-18 | 2010-09-23 | パナソニック株式会社 | ニューラルネットワークシステム |
US7957400B2 (en) | 2009-03-26 | 2011-06-07 | Terascale Supercomputing Inc. | Hierarchical network topology |
US8442927B2 (en) | 2009-07-30 | 2013-05-14 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
JP5692780B2 (ja) | 2010-10-05 | 2015-04-01 | 日本電気株式会社 | マルチコア型誤り訂正処理システムおよび誤り訂正処理装置 |
US9141131B2 (en) | 2011-08-26 | 2015-09-22 | Cognitive Electronics, Inc. | Methods and systems for performing exponentiation in a parallel processing environment |
US9153230B2 (en) | 2012-10-23 | 2015-10-06 | Google Inc. | Mobile speech recognition hardware accelerator |
US9323499B2 (en) * | 2012-11-15 | 2016-04-26 | Elwha Llc | Random number generator functions in memory |
US9104474B2 (en) | 2012-12-28 | 2015-08-11 | Intel Corporation | Variable precision floating point multiply-add circuit |
US9691034B2 (en) | 2013-05-14 | 2017-06-27 | The Trustees Of Princeton University | Machine-learning accelerator (MLA) integrated circuit for extracting features from signals and performing inference computations |
US9747547B2 (en) * | 2013-10-22 | 2017-08-29 | In2H2 | Hardware enhancements to radial basis function with restricted coulomb energy learning and/or k-Nearest Neighbor based neural network classifiers |
US10331997B2 (en) | 2014-05-07 | 2019-06-25 | Seagate Technology Llc | Adaptive configuration of a neural network device |
US10116557B2 (en) * | 2015-05-22 | 2018-10-30 | Gray Research LLC | Directional two-dimensional router and interconnection network for field programmable gate arrays, and other circuits and applications of the router and network |
US10452995B2 (en) * | 2015-06-29 | 2019-10-22 | Microsoft Technology Licensing, Llc | Machine learning classification on hardware accelerators with stacked memory |
-
2017
- 2017-01-05 US US15/399,714 patent/US11170294B2/en active Active
- 2017-01-06 EP EP21158563.3A patent/EP3893123B1/en active Active
- 2017-01-06 WO PCT/US2017/012600 patent/WO2017120517A1/en active Application Filing
- 2017-01-06 ES ES21208402T patent/ES2954562T3/es active Active
- 2017-01-06 ES ES21158563T patent/ES2934979T3/es active Active
- 2017-01-06 PL PL21208402.4T patent/PL3974959T3/pl unknown
- 2017-01-06 PL PL21158563.3T patent/PL3893123T3/pl unknown
- 2017-01-06 EP EP21208402.4A patent/EP3974959B1/en active Active
- 2017-01-06 EP EP23163158.1A patent/EP4220380B1/en active Active
- 2017-01-06 EP EP17736464.3A patent/EP3387549B1/en active Active
-
2021
- 2021-10-14 US US17/501,314 patent/US11816572B2/en active Active
-
2023
- 2023-10-16 US US18/380,620 patent/US20240046088A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20170200094A1 (en) | 2017-07-13 |
PL3974959T3 (pl) | 2023-08-07 |
EP4220380B1 (en) | 2024-08-14 |
US20220067522A1 (en) | 2022-03-03 |
EP3387549A4 (en) | 2019-07-24 |
EP4220380A1 (en) | 2023-08-02 |
EP3387549B1 (en) | 2021-02-24 |
ES2954562T3 (es) | 2023-11-23 |
EP3893123B1 (en) | 2022-11-16 |
US11816572B2 (en) | 2023-11-14 |
US11170294B2 (en) | 2021-11-09 |
WO2017120517A1 (en) | 2017-07-13 |
EP3974959B1 (en) | 2023-06-07 |
EP3974959A1 (en) | 2022-03-30 |
EP4220380C0 (en) | 2024-08-14 |
EP3893123A1 (en) | 2021-10-13 |
EP3387549A1 (en) | 2018-10-17 |
US20240046088A1 (en) | 2024-02-08 |
PL3893123T3 (pl) | 2023-03-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2934979T3 (es) | Aprendizaje máquina acelerado por hardware | |
US11704548B2 (en) | Multicast network and memory transfer optimizations for neural network hardware acceleration | |
US7979672B2 (en) | Multi-core processors for 3D array transposition by logically retrieving in-place physically transposed sub-array data | |
Nakano | Simple memory machine models for GPUs | |
Harper III | Block, multistride vector, and FFT accesses in parallel memory systems | |
US20160259724A1 (en) | Systems and Methods for Implementing Low-Latency Lookup Circuits Using Sparse Hash Functions | |
JP2008513903A (ja) | シャッフル演算のためのマイクロプロセッサデバイス及び方法 | |
CN109937450A (zh) | 用于存储器对准的设备及方法 | |
FR3091389A1 (fr) | Bancs de registres dans un processeur à fils d’exécution multiples | |
JP2019521445A (ja) | Simdアーキテクチャにおけるレーンのシャッフルのためのシャッフラー回路 | |
US11705207B2 (en) | Processor in non-volatile storage memory | |
US20160216727A1 (en) | Variable clocked serial array processor | |
Bhattacharjee et al. | Crossbar-constrained technology mapping for ReRAM based in-memory computing | |
Pavel et al. | Integer sorting and routing in arrays with reconfigurable optical buses | |
CN116171431A (zh) | 用于加速器中多个并行数据路径通道的存储体式存储器架构 | |
US20220100941A1 (en) | Memory device with programmable circuitry | |
Vitkovski et al. | Memory organization with multi-pattern parallel accesses | |
Brooks III | The indirect k-ary n-cube for a vector processing environment | |
D'Alberto et al. | Entropy Maximization in Sparse Matrix by Vector Multiplication ($\max_E SpMV $) | |
US20240045922A1 (en) | Zero padding for convolutional neural networks | |
JP3839002B2 (ja) | 半導体演算装置 | |
KR20240147410A (ko) | 디지털 컴퓨팅 인 메모리(dcim)에서의 유연한 뱅크 어드레싱을 위한 시스템들 및 방법들 | |
Jorda et al. | Isomorphic Recursive Splitting: Conflict-Free Memory Accesses for Structured Memory | |
Chlebus et al. | Algorithms for the parallel alternating direction access machine | |
ES2569129A1 (es) | Reconocedor reconfigurable de patrones de bits basado en jerarquía de memoria |