ES2871554T3 - Bloque de punto flotante para implementación de red neural - Google Patents

Bloque de punto flotante para implementación de red neural Download PDF

Info

Publication number
ES2871554T3
ES2871554T3 ES17822831T ES17822831T ES2871554T3 ES 2871554 T3 ES2871554 T3 ES 2871554T3 ES 17822831 T ES17822831 T ES 17822831T ES 17822831 T ES17822831 T ES 17822831T ES 2871554 T3 ES2871554 T3 ES 2871554T3
Authority
ES
Spain
Prior art keywords
vector
matrix
examples
exponent
matrices
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
Application number
ES17822831T
Other languages
English (en)
Inventor
Ray Bittner
Alessandro Forin
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Application granted granted Critical
Publication of ES2871554T3 publication Critical patent/ES2871554T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • 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
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks

Landscapes

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

Abstract

Un método que comprende: configurar un circuito que comprende un dispositivo lógico reconfigurable, un componente de procesador de señal digital o un componente de red neuronal para realizar operaciones de bloque de punto flotante, comprendiendo las operaciones: producir (1110) una representación de bloque de punto flotante, BFP, de una pluralidad de matrices o vectores, en la que al menos dos elementos, pero no todos los elementos de las respectivas matrices o vectores comparten un exponente común en la representación de BFP; realizar (1120) una operación matemática en la representación BFP de dos o más de la pluralidad de matrices o vectores que produce una matriz o vector de salida; y basado en la matriz de salida o vector: seleccionar (1130) un exponente común actualizado para al menos dos o más pero no todos los elementos de la matriz o vector de salida; y producir (1140) una representación BFP de una matriz o vector actualizado, al menos dos elementos, pero no todos los elementos de la matriz o vector actualizado que comparten el exponente común actualizado seleccionado.

Description

DESCRIPCIÓN
Bloque de punto flotante para implementación de red neural
Sumario
Se describen métodos, aparatos y dispositivos de almacenamiento legibles por ordenador para implementaciones de bloque de punto flotante (BFP), incluido el uso de tales implementaciones de BFP en redes neuronales artificiales (NN). Las matrices y los vectores que almacenan matrices de valores de mantisa pueden compartir exponentes comunes para dos o más elementos. Por ejemplo, todos los elementos de una fila, una columna o una disposición completa pueden tener diferentes mantisas y compartir un exponente común. En algunos ejemplos, las combinaciones y subcombinaciones designadas de dos o más elementos de una matriz o vector pueden compartir un exponente común. En algunos ejemplos, una combinación arbitraria de dos o más elementos de una matriz o vector puede compartir un exponente común. En algunos ejemplos, el uso de un exponente común permite un uso reducido de memoria, implementación de hardware simplificada de multiplicadores y otros circuitos de procesamiento de matriz de punto flotante, reducción de energía y/o rendimiento informático mejorado con poca o ninguna pérdida de precisión. Las matrices de salida y los vectores producidos mediante la realización de operaciones matemáticas con representaciones de BFP pueden usar exponentes comunes actualizados y cambiar sus mantisas en consecuencia. Se describen ejemplos de métodos y aparatos adecuados para seleccionar exponentes comunes actualizados.
En algunos ejemplos de la tecnología divulgada, una red neuronal incluye una pluralidad de nodos que tienen valores asociados y están adaptados para actualizar al menos una porción de los valores de los nodos asociados usando operaciones con representaciones BFP que tienen mantisas individuales y uno o más exponentes comunes compartidos. Ejemplos de aplicaciones adecuadas para tales implementaciones de redes neuronales BFP incluyen, pero no se limitan a: realizar reconocimiento de imágenes, realizar reconocimiento de voz, clasificar imágenes, traducir voz a texto y/o a otros idiomas, reconocimiento facial o biométrico de otro tipo, procesamiento de lenguaje natural, traducción automática de idiomas, procesamiento de consultas en motores de búsqueda, selección automática de contenido, análisis de correo electrónico y otros documentos electrónicos, gestión de relaciones, informática biomédica, identificación de biomoléculas candidatas, recomendaciones u otras tareas de clasificación. En algunos ejemplos de la tecnología divulgada, un sistema incluye hardware para implementar redes neuronales BFP. El hardware puede incluir, entre otros, procesadores de uso general (incluidos los procesadores que implementan conjuntos de instrucciones vectoriales), circuitos integrados personalizados, circuitos integrados de aplicaciones específicas (ASIC), dispositivos lógicos programables que incluyen disposiciones de puertas programables en campo (FPGA), gráficos unidades de procesamiento (GPU), procesadores de redes neuronales y/o componentes de procesamiento de señales digitales.
Este sumario se proporciona para presentar una selección de conceptos en una forma simplificada que se describen con más detalle a continuación en la descripción detallada. Este sumario no pretende identificar características clave o características esenciales del tema reivindicado, ni pretende ser utilizado para limitar el ámbito del tema reivindicado. Además, cualquier marca comercial utilizada en el presente documento sigue siendo propiedad de sus respectivos dueños. Los objetos, características y ventajas anteriores y otros de las realizaciones divulgadas resultarán más evidentes a partir de la siguiente descripción detallada, que procede con referencia a las figuras adjuntas.
La Solicitud de patente de Estados Unidos US20090292750A1 divulga un método que realiza una operación en un conjunto de al menos un operandos de BFP para generar un resultado de BFP. El método está diseñado para reducir los riesgos de desbordamiento y pérdida de precisión atribuibles a la operación. El método realiza un análisis para determinar los valores de desplazamiento respectivos para cada uno de los operandos y el resultado. El método calcula las mantisas de resultado desplazando los patrones de bits almacenados que representan los valores de mantisa de operando correspondientes por sus respectivos valores de desplazamiento asociados determinados en la etapa de análisis, realizando la operación en mantisas de operando desplazadas para generar la mantisa de resultado preliminar y cambiando las mantisas de resultado preliminar por un número de bits determinado en la etapa de análisis.
Syed Zohaib Gilani et al: "Energy-efficient floating-point arithmetic for digital signal processors", SIGNALS, SYSTEMS AND COMPUTERS (ASILOMAR), 2011 CONFERENCE RECORD OF THE FORTY FIFTH ASILOMAR CONFERENCE ON, IEEE, 6 de noviembre de 2011 (2011-11-06), páginas 1823- 1827, XP032172394, DOI: 10.1109/ACSSC.2011.6190337 divulga aplicaciones emergentes de procesamiento de imágenes y señales que involucran varios algoritmos basados en matrices que son extremadamente sensibles al error de redondeo en los cálculos y que la implementación de estas aplicaciones en procesadores de punto fijo (FxP) puede aumentar significativamente su tiempo de diseño y también puede resultar en relaciones reducidas de señal a ruido (SNR). Debido al área alta y la sobrecarga de energía del hardware de punto flotante (FP), los DSP de baja potencia generalmente no brindan soporte de hardware para la aritmética de punto flotante (FP). Además, la larga latencia de las operaciones de FP también puede reducir el rendimiento de la ejecución de aplicaciones de procesamiento de señales. En este artículo, proponemos una unidad fusionada de adición múltiple basada en bloques de punto flotante (BFP-FMA) con área reducida y sobrecarga de energía que se adapta a las necesidades de las aplicaciones de procesamiento de señales. Dado que las instrucciones de producto punto se emplean comúnmente en núcleos basados en matrices, proponen una unidad BFPFMA que reduce la latencia de las operaciones de producto punto en un factor de dos. La unidad FMA puede mejorar el rendimiento de la ejecución de núcleos DSP clave hasta en un 40 %, al tiempo que reduce el consumo de energía en un 28 %. La explotación de la aritmética BFP permite reducir el área y la potencia de las unidades FMA en un 33 % y un 41 %, respectivamente.
Murtagh P J Et Al: "A Reconfigurable Bit-Serial VLSI Systolic Array Neuro-Chip", Journal of Parallel and Distributed Computing, Elsevier, Amsterdam, NL, vol. 44, n.° 1, 10 de julio de 1997 (1997-07-10), páginas 53-70, XP000698193, ISSN: 0743-7315, DOI: 10.1006/JPDC.1997.1343 revelan una disposición sistólica de bits en serie reconfigurable dinámicamente implementada en CMOS de pocillo P de doble metal de 1,2 pm. Esta disposición de procesadores se propone como la unidad de cálculo central en el neuroordenador de Disposición Sistólica Reconfigurable (RSA). Las estimaciones de rendimiento sugieren que un sistema de 64 circuitos integrados (que contiene un total de 1024 procesadores utilizables) puede alcanzar una tasa de aprendizaje de 1134 MCUPS en el problema NETtalk. La arquitectura emplea técnicas de reconfiguración tanto para la tolerancia a fallos como para la funcionalidad, y permite admitir varios modelos de redes neuronales (en las fases de recuperación y aprendizaje) de redes de memoria asociativa, redes supervisadas y redes no supervisadas.
En las reivindicaciones adjuntas se exponen varios aspectos inventivos y realizaciones preferidas de la tecnología aquí descrita.
Breve descripción de los dibujos
La figura 1 es un diagrama de bloques que describe un flujo de datos de ejemplo para una implementación de bloque de punto flotante de una multiplicación de Matriz * Vector, como se puede realizar en ciertos ejemplos de la tecnología divulgada.
La figura 2 es un diagrama de bloques que describe un ejemplo de multiprocesador que incluye una pluralidad de núcleos de redes neuronales, como se puede implementar en ciertos ejemplos de la tecnología divulgada.
Las figuras 3A y 3B son un diagrama que describe las operaciones realizadas durante una operación de multiplicación de matriz de disposición sistólica, como se puede realizar en ciertos ejemplos de la tecnología divulgada.
La figura 4 es un diagrama de bloques que representa un hardware para realizar la multiplicación de matrices de acuerdo con ciertos ejemplos de la tecnología divulgada.
La figura 5 es un diagrama de bloques que describe un bloque de procesamiento de señales digitales de ejemplo, que puede usarse en ciertos ejemplos de la tecnología divulgada.
La figura 6 es un diagrama de bloques que describe una implementación de ejemplo de una red neuronal profunda para el procesamiento de imágenes, como se puede usar en ciertos ejemplos de la tecnología divulgada.
La figura 7 es un diagrama de bloques que describe una FPGA de ejemplo, que puede usarse en ciertos ejemplos de la tecnología divulgada.
La figura 8 es un diagrama que detalla más los componentes lógicos dentro de una FPGA, como se puede usar en ciertos ejemplos de la tecnología divulgada.
La figura 9 es un esquema que ilustra una implementación de un procesador de señales implementado con una FPGA Altera, como se puede implementar en ciertos ejemplos de la tecnología divulgada.
La figura 10 es un esquema que ilustra una implementación de ejemplo de un procesador de señales implementado con una FPGA Altera, como se puede implementar en ciertos ejemplos de la tecnología divulgada. La figura 11 es un diagrama de flujo que describe un método de ejemplo para realizar operaciones matemáticas usando uno o más exponentes comunes compartidos, como se puede realizar en ciertos ejemplos de la tecnología divulgada.
La figura 12 es un diagrama de flujo que describe un ejemplo de configuración de un dispositivo lógico reconfigurable para realizar operaciones matemáticas con una red neuronal, como se puede realizar en ciertos ejemplos de la tecnología divulgada.
La figura 13 es un diagrama que ilustra un entorno informático de ejemplo en el que se pueden implementar determinadas implementaciones de las tecnologías divulgadas.
Descripción detallada
I. Consideraciones Generales
Esta descripción se expone en el contexto de realizaciones representativas que no pretenden ser limitantes de ninguna manera.
Como se usa en esta solicitud, las formas singulares "un", "una" y "el/la" incluyen las formas plurales a menos que el contexto indique claramente lo contrario. Además, el término "incluye" significa "comprende". Además, el término "acoplado" abarca formas mecánicas, eléctricas, magnéticas, ópticas, así como otras formas prácticas de acoplar o unir elementos entre sí, y no excluye la presencia de elementos intermedios entre los elementos acoplados.
Además, como se usa en el presente documento, el término "y/o" significa cualquier elemento o combinación de elementos en la frase.
Los sistemas, métodos y aparatos descritos en el presente documento no deben interpretarse como limitantes de ninguna manera. En cambio, esta divulgación está dirigida a todas las características y aspectos novedosos y no obvios de las diversas realizaciones divulgadas, solas y en varias combinaciones y subcombinaciones entre sí. Los sistemas, métodos y aparatos descritos no se limitan a ningún aspecto o característica específica o combinaciones de los mismos, ni las cosas y métodos descritos requieren que estén presentes una o más ventajas específicas o que se resuelvan problemas. Además, cualquier característica o aspecto de las realizaciones descritas se puede utilizar en varias combinaciones y subcombinaciones entre sí.
Aunque las operaciones de algunos de los métodos descritos se describen en un orden secuencial particular para una presentación conveniente, debe entenderse que esta forma de descripción abarca la reordenación, a menos que se requiera un orden particular por el lenguaje específico establecido a continuación. Por ejemplo, las operaciones descritas secuencialmente pueden, en algunos casos, reorganizarse o realizarse al mismo tiempo. Además, en aras de la simplicidad, las figuras adjuntas pueden no mostrar las diversas formas en las que los elementos y métodos descritos pueden usarse junto con otros elementos y métodos. Además, la descripción a veces usa términos como "producir", "generar", "realizar", "seleccionar", "recibir", "emitir", "verificar", "ejecutar" e "iniciar" para describir los métodos divulgados. Estos términos son descripciones de alto nivel de las operaciones reales que se realizan. Las operaciones reales que corresponden a estos términos variarán dependiendo de la implementación particular y son fácilmente discernibles por un experto en la técnica que tenga el beneficio de la presente divulgación.
Las teorías de funcionamiento, principios científicos u otras descripciones teóricas presentadas en el presente documento en referencia al aparato o métodos de esta descripción se han proporcionado con el propósito de una mejor comprensión y no pretenden ser limitantes en su ámbito. El aparato y los métodos de las reivindicaciones adjuntas no se limitan a los aparatos y métodos que funcionan de la manera descrita por tales teorías de funcionamiento.
Cualquiera de los métodos divulgados se puede implementar como instrucciones ejecutables por ordenador almacenadas en uno o más medios legibles por ordenador (por ejemplo, medios legibles por ordenador, como uno o más discos de medios ópticos, componentes de memoria volátiles (como DRAM o SRAM) o componentes de memoria no volátil (como discos duros)) y ejecutados en un ordenador (por ejemplo, cualquier ordenador disponible comercialmente, incluidos teléfonos inteligentes u otros dispositivos móviles que incluyan hardware informático). Cualquiera de las instrucciones ejecutables por ordenador para implementar las técnicas divulgadas, así como cualquier dato creado y utilizado durante la implementación de las realizaciones divulgadas, puede almacenarse en uno o más medios legibles por ordenador (por ejemplo, medio de almacenamiento legible por ordenador). Las instrucciones ejecutables por ordenador pueden ser parte de, por ejemplo, una aplicación de software dedicada o una aplicación de software a la que se accede o se descarga a través de un navegador web u otra aplicación de software (como una aplicación informática remota). Dicho software se puede ejecutar, por ejemplo, en un único ordenador local (por ejemplo, con procesadores de propósito general y/o especializados que se ejecutan en cualquier ordenador adecuado disponible comercialmente) o en un entorno de red (por ejemplo, a través de Internet, una red de área amplia, una red de área local, una red cliente-servidor (como una red de computación en la nube) u otra red similar) utilizando uno o más ordenadores de la red.
Para mayor claridad, solo se describen ciertos aspectos seleccionados de las implementaciones basadas en software. Se omiten otros detalles que son bien conocidos en la técnica. Por ejemplo, debe entenderse que la tecnología divulgada no se limita a ningún lenguaje o programa informático específico. Por ejemplo, la tecnología divulgada puede implementarse mediante software escrito en C, C++, Java o cualquier otro lenguaje de programación adecuado. Asimismo, la tecnología divulgada no se limita a ningún ordenador o tipo de hardware en particular. Ciertos detalles de ordenadores y hardware adecuados son bien conocidos y no es necesario que se expongan en detalle en esta divulgación.
Además, cualquiera de las realizaciones basadas en software (que comprenden, por ejemplo, instrucciones ejecutables por ordenador para hacer que un ordenador realice cualquiera de los métodos descritos) se puede cargar, descargar o acceder de forma remota a través de un medio de comunicación adecuado. Dichos medios de comunicación adecuados incluyen, por ejemplo, Internet, la World Wide Web, una intranet, aplicaciones de software, cable (incluido el cable de fibra óptica), comunicaciones magnéticas, comunicaciones electromagnéticas (incluidas comunicaciones de RF, microondas e infrarrojos), comunicaciones electrónicas, u otros medios de comunicación similares.
II. Introducción a las tecnologías divulgadas
Las redes neuronales (NN) se aplican a una serie de aplicaciones en inteligencia artificial, incluido el reconocimiento de imágenes, el reconocimiento de voz, los motores de búsqueda y otras aplicaciones adecuadas. El procesamiento de estas aplicaciones puede tener lugar en dispositivos individuales como ordenadores personales o teléfonos celulares, pero también puede realizarse en grandes centros de datos. Al mismo tiempo, las disposiciones de puertas programables en campo (FPGA) se están implementando en centros de datos debido a su naturaleza flexible y bajo consumo de energía por unidad de cálculo.
Una de las características de la computación en un dispositivo FPGA es que normalmente carece de soporte de hardware de punto flotante. Las operaciones de punto flotante se pueden realizar con una penalización utilizando la lógica flexible, pero a menudo la cantidad de lógica necesaria para admitir el punto flotante es prohibitiva en las implementaciones de FPGA. Se han desarrollado algunas FPGA más nuevas que admiten la computación de punto flotante, pero incluso en estos, el mismo dispositivo puede producir el doble de salidas informáticas por unidad de tiempo si se usa en un modo entero. Por lo general, las NN se crean teniendo en cuenta el cálculo de punto flotante, pero cuando se apunta a una FPGA para el procesamiento de NN, sería beneficioso si la red neuronal pudiera expresarse utilizando aritmética de números enteros. Los ejemplos de la tecnología divulgada incluyen implementaciones de hardware de Punto de Bloque Flotante (BFP), incluido el uso de BFP en NN, FPGA y otros entornos de hardware.
Una representación típica de punto flotante en un sistema informático consta de tres partes: signo (s), exponente (e) y mantisa (m). El signo indica si el número es positivo o negativo. El exponente y la mantisa se utilizan como en notación científica:
Valor = s x m x 2e (Ec. 1)
Se puede representar cualquier número, dentro de los límites de precisión de la mantisa. Dado que el exponente escala la mantisa en potencias de 2, al igual que el exponente lo hace en potencias de 10 en notación científica, se pueden representar las magnitudes de números muy grandes. La precisión de la representación está determinada por la precisión de la mantisa. Las representaciones típicas de punto flotante utilizan una mantisa de 24 o 53 bits de ancho. Un número entero con una magnitud mayor que 253 se puede aproximar en formato de punto flotante, pero no se representará exactamente porque no hay suficientes bits en la mantisa. Un efecto similar puede ocurrir para fracciones arbitrarias donde la fracción está representada por bits de la mantisa que toman el valor de potencias negativas de 2. Hay muchas fracciones que no se pueden representar con exactitud porque son irracionales en un sistema numérico binario. Son posibles representaciones más exactas en ambas situaciones, pero pueden requerir que la mantisa contenga más bits. En última instancia, se requiere un número infinito de bits de mantisa para \ = 0 ,3; H - 3 142857
representar algunos números con exactitud (por ejemplo, 3 7 ' ). Los límites de mantisa de 24 bits (flotante de precisión simple) y 53 bits (flotante de precisión doble) son compromisos comunes de los requisitos de almacenamiento de mantisa frente a la precisión de representación en ordenadores de uso general. Para los propósitos de la presente divulgación, el término "Bloque de punto flotante" significa un sistema numérico en el que un solo exponente se comparte entre dos o más valores, cada uno de los cuales está representado por un signo y un par de mantisa (si hay un signo explícito bit, o la mantisa misma está firmada). En algunos ejemplos, todos los valores de una o más filas o columnas de una matriz o vector, o todos los valores de una matriz o vector, pueden compartir un exponente común. En otros ejemplos, la representación BFP puede no estar firmada. En algunos ejemplos, algunos, pero no todos los elementos de una representación de BFP de matriz o vector pueden incluir números representados como enteros, números de punto flotante, números de punto fijo, símbolos u otros formatos de datos mezclados con números representados con un signo, mantisa y exponente. En algunos ejemplos, algunos o todos los elementos de una matriz o representación vectorial BFP pueden incluir elementos complejos que tienen dos o más partes, por ejemplo: números complejos con un componente imaginario (a bi, dónde i = V—T ); fracciones que incluyen un numerador y denominador, en coordenadas polares (r, 0), u otro elemento multicomponente.
El bloque de punto flotante (BFP) se puede utilizar para compensar la precisión y los requisitos de almacenamiento, de una manera que es similar en algunos aspectos al punto flotante normal. Primero, en lugar de almacenar un exponente con cada número de punto flotante, un grupo de números puede compartir el mismo exponente. Para compartir exponentes manteniendo un alto nivel de precisión, los números deben tener casi la misma magnitud, ya que las diferencias de magnitud se expresan en la mantisa. Si las diferencias de magnitud son demasiado grandes, la mantisa se desbordará para los valores grandes, o puede ser cero ("subdesbordamiento") para los valores más pequeños. Dependiendo de una aplicación en particular, puede ser aceptable cierta cantidad de desbordamiento o subdesbordamiento.
El tamaño de la mantisa se puede ajustar para adaptarse a una aplicación en particular. Esto puede afectar la precisión del número que se está representando, pero las ganancias potenciales provendrán de un tamaño de representación reducido. Por ejemplo, un flotador de precisión simple normal tiene un tamaño de 4 bytes, pero para ciertas implementaciones de la tecnología divulgada, solo se utilizan 2 bytes para representar el signo y la mantisa de cada valor.
En ciertos ejemplos de la tecnología divulgada, la representación expresada en la Ecuación (1) se usa para derivar el número original de la representación, pero solo se almacena un único exponente para un grupo de números, cada uno de los cuales está representado por una mantisa firmada. Cada mantisa firmada se puede representar con 2 bytes o menos, por lo que, en comparación con el punto flotante de cuatro bytes, el ahorro de almacenamiento de memoria es aproximadamente 2x. Además, los requisitos de ancho de banda de memoria para cargar y almacenar estos valores también son aproximadamente la mitad de los de un punto flotante normal.
En algunos ejemplos de la tecnología divulgada, una implementación de hardware de punto flotante utiliza un multiplicador ancho (24 bits x 24 bits), un sumador ancho (48 bits 48 bits), unidades de convertidor y hardware de manejo de exponentes. Con BFP, se emplean multiplicadores más estrechos (16 bits x 16 bits) y sumadores (16 bits 16 bits) por instancia paralela, todos los cuales pueden compartir hardware de manejo de exponente común. Este tipo de topología se puede asignar fácilmente a los recursos de hardware de FPGA, así como a conjuntos de instrucciones vectoriales, como las instrucciones del procesador Intel SSE y AVX. En algunos ejemplos, incluso puede ser posible utilizar operandos de 8 bits o representaciones de mantisa con signos más pequeños para mejorar aún más.
Las operaciones de redes neuronales se utilizan en muchas operaciones de inteligencia artificial. A menudo, la mayor parte de las operaciones de procesamiento realizadas al implementar una red neuronal se realiza al realizar multiplicaciones Matriz x Matriz o Matriz x Vector. Tales operaciones requieren un uso intensivo del ancho de banda de memoria y computación, donde el tamaño de una matriz puede ser, por ejemplo, 1000 x 1000 elementos (por ejemplo, 1000 x 1000 números, cada uno con un signo, mantisa y exponente) o mayor y hay muchas matrices utilizadas. Como se describe en el presente documento, las técnicas BFP se pueden aplicar a tales operaciones para reducir las demandas de cálculo, así como el ancho de banda de memoria en un sistema dado, ya sea una FPGA, CPU u otra plataforma de hardware. Como se usa en el presente documento, el uso del término "elemento" en el presente documento se refiere a un miembro de dicha matriz o vector.
En ciertos ejemplos de la tecnología divulgada, todos los valores de una matriz de ponderación para una red neuronal se codifican como números BFP que comparten un exponente común. Usando ese exponente común, cada valor de la matriz de ponderación se representa mediante una mantisa con signo que ocupa 2 bytes de memoria. Asimismo, todos los valores de un vector pueden compartir un exponente común con mantisas con signo de 2 bytes. Este también es un tamaño conveniente para ciertas implementaciones de CPU y FPGA, porque las CPU comúnmente admiten instrucciones vectoriales (por ejemplo, Instrucciones AVX proporcionadas por los procesadores Intel y AMD), que funcionará en números enteros de 2 bytes. Estas instrucciones vectoriales se pueden usar para realizar la función de multiplicar acumular que se usa para calcular el producto escalar requerido para cada elemento de salida de una multiplicación Matriz x Vector. Por ejemplo, utilizando instrucciones AVX-256, se pueden realizar dieciséis multiplicaciones de 16 bits por instrucción y, a medida que se desarrollan instrucciones AVX-512, y se desarrollan instrucciones de ancho de bit aún mayor, se pueden realizar incluso más multiplicaciones paralelas. En el caso de una FPGA, es común que los Procesadores de señales digitales (DSP) dentro de la FPGA admitan la multiplicación de enteros de 16 x 16 bits o 18 x 18 bits en hardware junto con un registro de acumulador amplio. Estos multiplicadores aceptan fácilmente el formato de mantisa con signo de 2 bytes. Al calcular el vector de salida para una multiplicación Matriz x Vector, el exponente del vector de salida es la suma del exponente de la Matriz y el exponente del vector de entrada. Dado que los exponentes son nominalmente de 16 bits o menos, este cálculo es una operación de bajo coste en la mayoría de las plataformas de hardware.
III. Ejemplo de implementación de BFP de multiplicación de matriz x vector
La figura 1 es un diagrama de bloques 10 que ilustra el flujo de datos dentro de una implementación 100 de BFP de ejemplo de la multiplicación de Matriz x Vector. Tenga en cuenta que la entrada de Vector también podría reemplazarse por una entrada de Matriz para realizar la multiplicación Matriz x Matriz:
M x V = R
donde matriz M está representada por un i x j matriz de mantisas enteras con signo (mii...m¡j) que tiene un solo exponente ei, vector V es un j vector de longitud de mantisas enteras con signo (vi... vj) que tiene un solo exponente e2 , y R es un i vector de resultado de longitud de mantisas enteras con signo (ri...rí) y un solo exponente e3.
Figure imgf000006_0001
En algunos ejemplos, las mantisas pueden estar sin firmar y el componente de signo se tiene en cuenta fuera de la implementación de BFP.
Como se muestra en la figura 1, la entrada de matriz 110 incluye un conjunto de mantisas de matriz M y un exponente de matriz simple ei. Una entrada vectorial 120 incluye un conjunto de mantisas vectoriales V y un único exponente vectorial e 2 . Las mantisas de la matriz M y las mantisas vectoriales V se envían a una unidad multiplicadora de mantisa 140. En algunos ejemplos de la tecnología divulgada, la entrada de matriz 110 y/o la entrada de vector 120 pueden almacenarse (temporalmente) en unidades RAM de una FPGA. Por ejemplo, la RAM de bloque (Xilinx) o los bloques de memoria (Altera) se pueden usar para almacenar o poner en cola matrices y vectores de acuerdo con los ejemplos descritos, incluida la entrada de matriz 110 y/o la entrada de vector 120. En algunos ejemplos, los elementos de matrices y vectores se almacenan o se ponen en cola en la RAM en una disposición para permitir un fácil acceso a los elementos sucesivos que se utilizan para un cálculo, por ejemplo, generando la dirección con un contador. En algunos ejemplos, se utilizan otras unidades de memoria FPGA, o memoria externa, para almacenar datos para matrices y vectores.
La unidad multiplicadora de mantisa 130 multiplica las mantisas de las dos matrices de entrada y produce una matriz de mantisas de resultado R. En algunos ejemplos de FPGA, la unidad multiplicadora de mantisa 130 se implementa con lógica en tablas de búsqueda programables (LUT) de una FPGA. En algunos ejemplos, una FPGA incluye un multiplicador dedicado o lógica de unidad aritmética y lógica (ALU) que se puede realizar para realizar la multiplicación. En algunos ejemplos, las funciones del procesador de señal digital (DSP) se proporcionan en una FPGA que se puede configurar para proporcionar operaciones de multiplicación. En algunos ejemplos, la unidad multiplicadora de mantisa 130 incluye lógica para seleccionar varios valores de entrada de una memoria para una serie de operaciones de multiplicación. Los exponentes únicos ei y e 2 se envían a un sumador de exponentes 140 que suma los dos exponentes y produce un exponente de resultado e3. En algunos ejemplos de FPGA, el sumador de exponentes 140 se implementa con lógica en tablas de búsqueda programables (LUT) de una FPGA. En algunos ejemplos, una FPGA incluye un sumador dedicado o una lógica de unidad lógica y aritmética (ALU) que realiza la suma para el sumador de exponentes 140. El resultado exponente resultado exponente e3 se envía a un selector de exponente de salida 145, produciendo el exponente de resultado seleccionado e4, que es entrada a un convertidor de mantisa de salida 150. El convertidor de mantisa de salida 150 acepta el resultado del multiplicador de mantisa R, que puede tener funciones adicionales realizadas en él (como se explica más adelante). La matriz de resultado R y el exponente de resultado seleccionado e4 forman un resultado vectorial 155 que puede ser emitido por la unidad BFP 100. La matriz de resultado R se puede almacenar de manera similar a las matrices o vectores de entrada. Por lo tanto, en algunos ejemplos de FPGA, el resultado vectorial 155 se almacena en la RAM dentro de la FPGA proporcionando la implementación 10 de BFP, mientras que, en otros ejemplos, el resultado vectorial se almacena en una RAM externa acoplada a una salida de la FPGA.
En otros ejemplos, las implementaciones de BFP usan un procesador de propósito general, un procesador de señal digital (DSP), una unidad de procesamiento de gráficos (GPU), un procesador de red neuronal (NNP) u otro procesador adecuado. Por ejemplo, pueden proporcionarse instrucciones ejecutables por ordenador para cualquiera de estos procesadores adecuados para implementar representaciones BPU para operaciones de punto flotante. En algunos ejemplos, las instrucciones de propósito especial, por ejemplo, instrucción única de datos múltiples (SIMD) u otras instrucciones vectoriales como las proporcionadas por las instrucciones extensiones de Vector Avanzado Intel (AVX), pueden proporcionarse de manera ventajosa para mejorar el rendimiento de las implementaciones de BFP para procesadores adecuados. En algunos ejemplos, se fabrica un circuito integrado específico de la aplicación (ASIC) para implementar las operaciones BFP descritas.
En algunos ejemplos, y en particular algunos ejemplos basados en NN, es típico que un vector de polarización B puede añadirse al resultado del vector mediante una unidad de sumador de polarización 160, produciendo R B. Los componentes adecuados para realizar una operación de adición de vector de polarización opcional de este tipo se representan con líneas discontinuas en la figura 1: 160, 170, 180, 185 y/o 190, para realizar operaciones adicionales con el resultado R y el exponente e3. Por ejemplo, para realizar la adición de polarización, se utilizan componentes opcionales 160, 170, 180 y 185. Para calcular una función adicional, se utiliza el componente 190 opcional. Para realizar la adición de polarización con una función adicional, se utilizan los componentes 160, 170, 180, 185 y 190. Como entenderá fácilmente un experto en la técnica que tenga el beneficio de la presente divulgación, el funcionamiento de otros componentes, como el sumador de exponente 140, el convertidor de mantisa de salida 145 y/o el convertidor de mantisa de salida 150 puede modificarse dependiendo de las operaciones particulares que se estén realizando.
En un ejemplo, las mantisas del vector de polarización de entrada B 170 se desplazan para coincidir con las mantisas del vector de resultado intermedio R por un convertidor de mantisa polarizada 180. El exponente e3 producido por el sumador de exponente 140 se puede restar del exponente de polarización e5 por sustractor de exponente 185 al exponente producido ee. El exponente e6 es utilizado por el convertidor de mantisa de polarización 180 para alinear las mantisas B de polarización con las mantisas R del vector de resultado intermedio. La unidad de sumador de polarización 160 añade la entrada B del vector de polarización desplazada con la salida del multiplicador de mantisa 130. En este caso, el R B la salida de la unidad de sumador de polarización 160 se envía al convertidor de mantisa de salida 150 con el fin de generar el resultado vectorial 155 en lugar de solo el vector de resultado R, como se usa en los ejemplos sin una adición de polarización.
En algunos ejemplos, una función adicional, como una función lineal, una función no lineal, una función de activación, una función de transferencia u otra función seleccionada para una aplicación particular, se aplica al resultado vectorial 155 mediante una unidad de función 190 adicional. Por ejemplo, una función sigmoidea, hiperbólica tangente (tanh) u otra función similar se aplica con frecuencia al resultado vectorial 155 en ciertas configuraciones de procesamiento NN. La unidad de función adicional acepta además el exponente e3 como exponente del resultado parcial, R B usa tanto e3 y los elementos de R B para producir salida F(R B) respectivamente. (En ejemplos sin una adición de vector de polarización, la salida f(R) es producida). En los ejemplos de procesamiento de redes neuronales, la función adicional puede ser una función de activación para un nodo de la red neuronal. El exponente del resultado parcial e3 y opcionalmente los elementos de resultado f(R B) ingresan el selector de exponente de salida 145 para determinar el exponente de salida final e4. El exponente de salida e4 puede ser un valor fijo o una función de los elementos de f(R B). El convertidor de mantisa de salida 150 alinea los elementos del vector de resultado parcial f(R B) al exponente de salida e4 y produce el vector de resultado final. En algunos ejemplos, tanto el vector de polarización B y se aplican la función adicional. El vector de polarización B se puede aplicar antes o después de la aplicación de la función adicional. En otros ejemplos, solo uno de los vectores de polarización B o se aplican funciones adicionales. En otros ejemplos, ni un vector de polarización B ni se aplica una función adicional. En algunos ejemplos, las operaciones internas pueden realizarse con mayor precisión que la precisión de salida, para evitar introducir pérdida de precisión al realizar múltiples operaciones utilizando mantisas y/o exponentes de bits más bajos.
Los valores de las mantisas que se envían a la unidad multiplicadora 130 y se emiten como un resultado vectorial no se producen necesariamente de forma simultánea y en paralelo, sino que pueden producirse en serie. Por ejemplo, la unidad multiplicadora 130 puede incluir lógica de control usada para secuenciar la selección de elementos de matrices y vectores de entrada. El resultado del vector es muestreado por la unidad selectora de exponente 190 que produce señales de ajuste de exponente que se utilizan para ajustar el exponente único utilizado para la salida del vector. En algunos ejemplos, el selector de exponente 190 selecciona el máximo absoluto de los valores de resultado del vector como el máximo absoluto de la Ecuación 2, a continuación, para calcular el exponente o exponentes compartidos. En algunos ejemplos, el selector de exponentes muestrea continuamente la media y la información de desviación estándar del resultado del vector para generar la señal de ajuste del exponente. Por ejemplo, los últimos n valores de entrada y/o salida se pueden muestrear para proporcionar datos de desviación estándar y media, donde n puede ser cualquier valor adecuado, que incluye, entre otros: valores 512, 1.024 u 8.192. En algunos ejemplos, se pueden usar búsquedas en tablas u otras técnicas descritas en el presente documento para generar la señal de ajuste del exponente.
Como entenderá fácilmente un experto en la técnica relevante que tenga el beneficio de la presente divulgación, las operaciones de multiplicación de matrices discutidas anteriormente para la figura 1 son un ejemplo de operación que se puede realizar con la unidad BFP y que se puede modificar fácilmente para realizar otras operaciones. Por ejemplo, la división, adición o sustracción matricial se puede realizar modificando las operaciones descritas en consecuencia, por ejemplo, realizando una resta de exponentes al dividir, o alineación de exponentes al realizar operaciones de suma o resta. Además, se pueden realizar operaciones matriciales adicionales utilizando las representaciones y el hardware de BFP descritos. Por ejemplo, la inversión de matrices, la transposición de matrices, el cálculo de determinantes y otras operaciones de matrices y vectores se pueden realizar usando métodos adaptados para usar representaciones y hardware de BFP descritos. Las modificaciones a las funciones realizadas por los componentes en la unidad BFP de acuerdo con varias operaciones ejemplares (multiplicación de matrices M x V, división de matrices M V, suma de matrices M V y sustracción de matrices M - V, se resumen a continuación en la Tabla 1.
Figure imgf000008_0001
TABLA 1
La Tabla 1 muestra las operaciones de mantisa y exponente realizadas como parte de un cálculo matricial general. Por ejemplo, al realizar la multiplicación de matrices, los elementos de mantisa de las matrices/vectores de entrada en las representaciones BFP reveladas se multiplican y los exponentes comunes asociados de la entrada se ajustan (por ejemplo, sumando los dos exponentes comunes). Estas operaciones se representan en la figura 1 como realizado por el multiplicador de mantisa 130 y el sumador de exponente 140, respectivamente. Para la suma de matrices, las mantisas de una matriz/vector de entrada se desplazan de acuerdo con la diferencia de exponentes entre las dos matrices que se suman. El exponente de salida se incrementa en consecuencia. De manera similar, para la resta de matrices, las mantisas se desplazan y restan y el exponente de salida se ajusta en consecuencia. En algunos ejemplos, y como se detalla más adelante, el exponente de salida puede seleccionarse de una manera más compleja, para aumentar la precisión general de la representación BFP resultante.
Como entenderá fácilmente un experto en la técnica relevante que tenga el beneficio de la presente divulgación, la implementación de BFP de la figura 1, que muestra un ejemplo de multiplicación de matrices con el uso opcional de una entrada de vector de polarización y una función adicional opcional, se puede adaptar para realizar otras operaciones de matriz, incluidas las descritas en la Tabla 1. Por ejemplo,
cabe señalar que algunas operaciones pueden no realizarse, dependiendo de los valores en las matrices o vectores. Por ejemplo, cuando los valores intermedios se pueden representar sin desplazamiento de mantisa o desplazamiento o adición de vector, esos valores no se desplazan para una operación en particular. En algunos ejemplos, las operaciones seleccionadas para ser realizadas y la operación de los componentes asociados se seleccionan estáticamente. En otros ejemplos, las operaciones se pueden seleccionar dinámicamente entre operaciones individuales o un conjunto de operaciones.
Los valores de las matrices y los exponentes compartidos se pueden almacenar en cualquier dispositivo de almacenamiento de memoria adecuado. Por ejemplo, las matrices y los exponentes compartidos se pueden almacenar en una memoria direccionable (por ejemplo, memoria dinámica de acceso aleatorio (DRAM, incluyendo DDR, DDR2, etc., DRAM), DRAM integrada (eDRAM) o memoria de acceso aleatorio estático (SRAM), una matriz de pestillos, una matriz de flip-flops, un archivo de registro, una memoria de acceso aleatorio en bloque (RAM de bloque) (a veces denominada "bloques de memoria" ), una memoria intermedia primero en entrar, primero en salir (FIFO) o un registro de desplazamiento. En algunos ejemplos, los valores de las matrices se almacenan en una memoria direccionable o un archivo de registro y los valores de los exponentes compartidos se almacenan en varios flip-flops o pestillos. Por lo tanto, se puede evitar la asignación de una memoria completa para almacenar datos para los exponentes compartidos. En algunos ejemplos, el almacenamiento, como flip-flops o registros, se asigna para almacenar valores de exponentes compartidos de forma estática (por ejemplo, un registro almacena todos los valores de exponentes en una etapa particular del procesamiento de BFP, o se asigna un registro por columna/fila de la matriz). En algunos ejemplos, el almacenamiento se asigna para almacenar los exponentes de forma dinámica. En algunos ejemplos, se puede acceder a los valores de exponentes realizando una búsqueda en la tabla (por ejemplo, utilizando un par de filas y columnas de una matriz como índice para identificar una ubicación de almacenamiento de exponente compartido).
Un problema que se aborda con las implementaciones ilustradas de BFP es el rango dinámico de los valores que comparten un exponente común. Si todos los valores agrupados bajo un exponente común están dentro de un rango dinámico relativamente estrecho, la representación BFP funciona bien, con poca o ninguna pérdida de precisión en comparación con la precisión ideal e infinita. Si los valores tienen un rango dinámico relativamente más amplio, puede producirse una pérdida de precisión. Los valores representados en una red neuronal suelen tener una magnitud cercana. Por ejemplo, la función de activación sigmoidea de uso frecuente varía de [-1, 1] y en las capas donde se usa sigmoide, la representación final de cada salida de esa capa caerá dentro de ese rango. Un ejemplo de una función de activación sigmoidea adecuada es:
Figure imgf000009_0001
Sin embargo, como comprenderá fácilmente un experto en la técnica que tenga el beneficio de la presente divulgación, se pueden usar otras funciones de activación adecuadas. También es común que las entradas iniciales a una red neuronal se normalicen a un rango dinámico pequeño o que provengan de un conjunto de números con un rango dinámico pequeño, como valores RGB de píxeles [0, 255]. Hay algunos casos en los que una suposición de rango dinámico estrecho no es válida para redes neuronales y se producirá alguna pérdida de precisión. La saturación se puede utilizar para mitigar este efecto.
IV. Ejemplos de selección de exponente común
La elección de exponentes a utilizar para un grupo de números en la representación BFP puede afectar la precisión de los cálculos que utilizan el grupo de números. Si el exponente es demasiado grande, muchos de los valores de mantisa se subdesbordarán y solo algunos de los bits de orden inferior serán distintos de cero. Por ejemplo, considere un ejemplo de BFP donde se representan los siguientes valores en la Tabla 2:
TABLA 2
Figure imgf000009_0002
Mantisa de 16 bits (Exp -3) 0x0000
Figure imgf000010_0001
En este ejemplo, el rango dinámico de los valores es relativamente amplio en comparación con el rango dinámico de la mantisa. La representación familiar de cada valor se muestra en la fila denominada "Valor decimal", y la representación hexadecimal exacta del mismo número se muestra en la fila debajo ("Valor hexadecimal ideal"). Se dan dos ejemplos de representaciones BFP de 16 bits para los números de la Tabla 2. En las siguientes dos líneas se muestran dos opciones de exponente, 3 y -3, junto con sus equivalentes de mantisa. Cuando el exponente es 3, los dos valores más grandes se pueden representar explícitamente con total precisión, pero los tres números más pequeños se desbordan y se representan simplemente como 0 (tres mantisas subrayadas 0x0000 en la tercera fila). Cuando el exponente es -3, el valor más grande se desborda y se representa como 0 (mantisa subrayada 0x0000 en la cuarta fila) mientras que todos los números más pequeños se representan fielmente.
Por lo tanto, en este ejemplo, el rango dinámico es simplemente demasiado grande para que una mantisa de 16 bits capture todos los valores con precisión. En muchos casos, se prefiere subdesbordar en lugar de desbordar, ya que los valores de subdesbordamiento son pequeños y tienden a tener menos influencia en los resultados, especialmente en ciertas aplicaciones como las redes neuronales. Como se dijo anteriormente, en las redes neuronales los valores que son convenientes para agrupar bajo un solo exponente tienden a tener un rango dinámico bastante estrecho. Hay casos en los que se produce un rango dinámico amplio y, en esos casos, la selección de exponentes puede tener en cuenta el desbordamiento y el subdesbordamiento.
Hay varias formas diferentes de calcular el mejor(es) exponente para una representación BFP. Cuando se da un conjunto de valores, como para las entradas primarias a una red neuronal, generalmente se conocen los valores máximos y mínimos posibles. Por ejemplo, es común que estos valores sean flotantes con un rango de [0, 1] o enteros con un rango de [0, 255]. Si se usa una mantisa de 16 bits, entonces los valores simplemente se pueden alinear a la izquierda dentro de la mantisa calculando primero la posición de bit del 1 inicial en el valor máximo:
Máx Absoluto = max(|x/|) (Ec. 2)
i
Donde los x valores x, e {x7, x2, ..., xn} y los corchetes interiores son el valor absoluto. Luego, la posición inicial de uno se calcula de la siguiente manera,
Posición Uno Delantera = |log2(Máx Absoluto)l (Ec. 3)
donde los corchetes exteriores indican la función de piso entero. A continuación, el exponente se calcula en función de la posición inicial de uno y el ancho de la mantisa:
Exponente = Posición Uno Delantera -(Ancho Mantisa - 2) (Ec. 4) El uso del máximo absoluto para el exponente conserva la mayor cantidad de bits posibles para la representación numérica sin desbordar y dejando espacio para el bit de signo. Por ejemplo, asumiendo el Ancho de Mantisa = 16, el resultado de aplicar las Ecuaciones 2-4 a un valor individual xi se muestra a continuación en la Tabla 3:
TABLA 3
Figure imgf000010_0002
Para explicar con más detalle la Tabla 3: la columna 1 es el máximo absoluto del valor (el valor sin signo en sí) de acuerdo con la Ecuación 2, la columna 2 es la posición del bit del uno inicial en relación con el punto binario (el "punto decimal" de base 2 ) según la Ecuación 3, y la columna 3 es el valor del exponente según la Ecuación 4. Por ejemplo, para x¡ = 255, la posición inicial de uno de la representación binaria está a 8 bits a la izquierda del punto binario (bit 7), el exponente es -7 y la mantisa de 16 bits con signo resultante es 0x7F80. La columna 4 contiene el valor hexadecimal de la mantisa con signo después de convertir el número exacto que se muestra en la columna 1 según el exponente correspondiente. La columna 5 contiene el valor real representado por la mantisa con signo en la columna 4 y el exponente de la columna 3.
Cabe señalar que los exponentes negativos corresponden al desplazamiento de la mantisa a la derecha y los exponentes positivos corresponden al desplazamiento de la mantisa a la izquierda. Al elegir un exponente que conserva el valor máximo, se pierde algo de precisión, como se muestra en la columna valor representado para los dos últimos casos, pero el valor real representado está cerca del valor de inicio.
Por lo tanto, se describen métodos para calcular el exponente dado el máximo absoluto de los valores que se esperan. Este método funciona bien para entradas de redes neuronales y salidas de capa que tienen rangos de salida conocidos como sigmoide (), tangente hiperbólica tanh (), etc. Sin embargo, hay casos en los que el rango de salida de una función puede tener un rango dinámico amplio, lo que conduce a los errores de precisión discutidos anteriormente. Por ejemplo, esto puede suceder si la salida de una capa de red neuronal es puramente lineal sin una función de activación aplicada. En una capa de red de este tipo, la salida es un producto puro de Matriz x Vector. Una forma de abordar este problema es asumir los valores del vector de entrada del caso más desfavorable dada la matriz conocida y calcular los extremos de los posibles valores del vector de salida. En la práctica, esto da malos resultados porque el rango dinámico del vector de salida sigue siendo bastante amplio. La representación de bloque de punto flotante se puede mejorar basándose en parte en la comprensión de un problema particular que se está modelando. Por ejemplo, las redes neuronales operan en parte sobre la base de resultados estadísticos. Por lo tanto, puede ser aceptable generar errores, si solo ocurren en raras ocasiones. Por lo tanto, un método modificado implica la determinación de un exponente para un vector de salida dado que captura el resultado correcto la mayor parte del tiempo.
Esto se puede lograr calculando el producto Matrix x Vector usando vectores de entrada reales y registrando estadísticas sobre las posibles salidas. Al calcular la media y la varianza del valor absoluto de las salidas en muchos vectores de entrada reales, se puede construir un intervalo de confianza estadístico para los valores mínimos y máximos absolutos reales del vector de salida con la confianza deseada. Los intervalos de confianza generalmente se expresan en términos de número de desviaciones estándar de la media. Por ejemplo, si asumimos que el vector de salida tiene una media p = 10 y una desviación estándar o = 0,5:
TABLA 4
Figure imgf000011_0001
La Tabla 4 ilustra que, para una distribución gaussiana, dependiendo del número de desviaciones estándar compensadas de la media, se puede establecer con una confianza estadística conocida cuántos valores caerán dentro de ese rango. Por ejemplo, en 3o, sabemos que el valor absoluto del 99,73 % de los valores estará dentro del rango de 8,5 y 11,5.
Por lo tanto, el seguimiento de la desviación estándar y media del valor absoluto de los valores del vector de salida permite el control seleccionando la amplitud del rango dinámico frente al impacto de los errores introducidos. Los valores de confianza más grandes (menos errores) corresponden a un rango dinámico más amplio en los valores, y los valores de confianza más bajos (más errores) corresponden a un rango dinámico más estrecho. Los valores exactos de p y o en un caso dado establecerán opciones en el ancho del rango dinámico frente a la confianza. Una vez que se ha elegido una confianza dada, el valor de rango alto (p más un múltiplo seleccionado de o) se puede usar como el máximo absoluto en la ecuación (3) para calcular el exponente.
Por ejemplo, si el intervalo de confianza del 99,73 % (3o) se elige de la Tabla 4 anterior con la misma media (10) y desviación estándar (0,5) y un ancho de mantisa de 16 bits, el exponente se calcularía de la siguiente manera:
Máx Absoluto = p 3o = 10 1,5 = 11,5
Posición Uno Delantera = |log2(11,5)| = 3
Exponente = 3 -(16 - 2) = -11
Dado que hay potencialmente una gran cantidad de vectores de salida para rastrear, la media y la desviación estándar se pueden rastrear en forma de transmisión. Esto se logra fácilmente para la media manteniendo una suma acumulada en un conjunto de valores estadísticamente relevantes que deben compartir un exponente común y dividir por el número de valores. En algunos ejemplos, puede ser conveniente si el número de valores es una potencia de 2, ya que la división puede realizarse mediante una operación de cambio. La desviación estándar se puede calcular de forma continua haciendo uso de la siguiente igualdad:
Figure imgf000012_0001
(Ec. 5)
El valor esperado de X, denotado E(X) es la media, p. E(X2) es el valor esperado (o media) de X2, que se puede calcular usando el mismo procedimiento que se usó para la media, pero usando valores X2 al cuadrado. En algunos ejemplos de la tecnología divulgada, dos sumas acumuladas de valores (por ejemplo, se mantienen los 512, 1.024, 8.192 u otro número de valores más recientes), uno en todo el X valores y el otro a través de los valores de X al cuadrado. Por ejemplo, los dos valores de suma en ejecución se pueden mantener en registros implementados con pestillos encadenados, flip-flops o memoria. Al final de una carrera, el X La suma se divide por el número de valores (usando un divisor o un convertidor), lo que da la media E (X). La suma de la X2 Los valores se dividen de manera similar, lo que da E(X2). El valor o(X) se puede calcular usando E(X), E(X2) y Ecuación 5.
Como comprenderá fácilmente un experto en la técnica que tenga el beneficio de la presente divulgación, se puede aplicar un método similar de selección de exponentes al caso Matriz x Matriz. Además, se puede ajustar la selección del número de valores que se agruparán bajo un único exponente. Por lo tanto, aunque los ejemplos anteriores se enmarcan en términos de un vector de salida completo que comparte el mismo exponente, existen numerosas consideraciones para diferentes aplicaciones que pueden hacer que diferentes agrupaciones sean más ventajosas. Por ejemplo, las filas individuales de una o más matrices se pueden asociar con un solo exponente. En otros ejemplos, se pueden asociar porciones bidimensionales de una matriz con un solo exponente, se pueden implementar diagonales de matriz u otras demarcaciones adecuadas para asociar porciones de una matriz o matrices con un exponente.
V. Ejemplo de multiprocesador de red neurona!
La figura 2 es un diagrama de bloques de un multiprocesador de red neuronal 200, como se puede implementar en algunos ejemplos de la tecnología divulgada. El multiprocesador 200 incluye una pluralidad 210 de uno o más núcleos de procesamiento neuronal, que incluyen núcleos de procesador NN individuales que incluyen una o más unidades BFP (por ejemplo, Unidad BFP 100). El multiprocesador 200 se puede implementar como un circuito integrado personalizado o específico de la aplicación (por ejemplo, incluido un circuito integrado de sistema en chip (SoC), como una matriz de puertas programables en campo (FPGA) u otra lógica reconfigurable, o como una máquina virtual de procesador suave alojada por un procesador físico de uso general. Por ejemplo, un procesador de propósito general que admita instrucciones vectoriales, como los procesadores x86_64 que admitan conjuntos de instrucciones SSE, SSE2 o AVX, se puede utilizar para implementar unidades BFP.
Como se muestra en la figura 2, la pluralidad 210 de núcleos de procesador neuronal están conectados entre sí mediante la interconexión 220. La interconexión 220 transporta datos y señales de control entre los núcleos individuales, una interfaz de memoria 240 y una interfaz de entrada/salida (E/S) 250. La interconexión 220 puede transmitir y recibir señales utilizando tecnología de comunicación eléctrica, óptica, magnética u otra adecuada y puede proporcionar conexiones de comunicación dispuestas de acuerdo con varias topologías diferentes, dependiendo de una configuración deseada particular. Por ejemplo, la interconexión 220 puede tener una barra transversal, un bus, un bus de punto a punto u otra topología adecuada. En algunos ejemplos, cualquiera de la pluralidad 210 de núcleos puede conectarse a cualquiera de los otros núcleos, mientras que, en otros ejemplos, algunos núcleos solo están conectados a un subconjunto de los otros núcleos. Por ejemplo, cada núcleo solo puede conectarse a los 4, 8 o 20 núcleos vecinos más cercanos. La interconexión 220 se puede utilizar para transmitir datos de entrada/salida hacia y desde los núcleos, así como para transmitir señales de control y otras señales de información hacia y desde los núcleos. Por ejemplo, cada uno de los núcleos puede recibir y transmitir semáforos que indican el estado de ejecución de las operaciones que actualmente realiza cada uno de los respectivos núcleos. Además, los valores matriciales y vectoriales se pueden compartir entre núcleos a través de la interconexión. En algunos ejemplos, la interconexión 220 se implementa como cables que conectan los núcleos y el sistema de memoria, mientras que, en otros ejemplos, la interconexión del núcleo puede incluir circuitos para multiplexar señales de datos en los cables de interconexión, conmutadores y/o componentes de enrutamiento, incluidos los controladores activos de señal y repetidores, u otros circuitos adecuados. En algunos ejemplos de la tecnología divulgada, las señales transmitidas dentro y hacia/desde el multiprocesador 200 no se limitan a señales digitales eléctricas de giro completo, pero el procesador puede configurarse para incluir señales diferenciales, señales pulsadas u otras señales adecuadas para transmitir datos y señales de control.
En el ejemplo de la figura 2, la interfaz de memoria 240 del multiprocesador incluye lógica de interfaz que se utiliza para conectarse a la memoria 245, por ejemplo, la memoria ubicada en otro circuito integrado además del multiprocesador 200 (por ejemplo, la memoria puede ser RAM estática (SRAM) o RAM dinámica (DRAM)), o memoria incrustada en el mismo circuito integrado que el procesador (por ejemplo, SRAM incorporado o DRAM (eDRAM)). La interfaz de memoria 240 y/o la memoria principal pueden incluir cachés (por ejemplo, cachés de nvías o asociativas) para mejorar el rendimiento del acceso a la memoria. En algunos ejemplos, la caché se implementa usando RAM estática (SRAM) y la memoria principal 245 se implementa usando RAM dinámica (DRAM). En algunos ejemplos, la interfaz de memoria 240 se incluye en el mismo circuito integrado que los otros componentes del multiprocesador 200. En algunos ejemplos, la interfaz de memoria 240 incluye un controlador de acceso directo a memoria (DMA) que permite la transferencia de bloques de datos en la memoria. En algunos ejemplos, la interfaz de memoria 240 gestiona la asignación de memoria virtual, expandiendo la memoria principal disponible 245. En algunos ejemplos, una información de programación (por ejemplo, un flujo de bits de configuración) puede almacenarse en la memoria 245 y luego aplicarse para configurar recursos lógicos reconfigurables de la pluralidad 210 de núcleos de procesamiento neuronal.
La interfaz E/S 250 incluye circuitos para recibir y enviar señales de entrada y salida a otros componentes 255, tales como interrupciones de hardware, señales de control del sistema, interfaces periféricas, control del coprocesador y/o señales de datos (por ejemplo, señales para una unidad de procesamiento de gráficos, coprocesador de punto flotante, unidad de procesamiento de física, procesador de señales digitales u otros componentes de coprocesamiento), señales de reloj, semáforos u otras señales de E/S adecuadas. Las señales de E/S pueden ser síncronas o asíncronas. En algunos ejemplos, toda o una porción de la interfaz de E/S se implementa utilizando técnicas de E/S mapeadas en memoria junto con la interfaz de memoria 240. En algunos ejemplos, la implementación de la señal de E/S no se limita a señales digitales eléctricas de giro completo, sino que la interfaz de E/S 250 puede configurarse para proporcionar señales diferenciales, señales pulsadas u otras señales adecuadas para transmitir datos y señales de control.
El multiprocesador 200 también puede incluir una unidad de control 260. La unidad de control 260 supervisa el funcionamiento del multiprocesador 200. Las operaciones que puede realizar la unidad de control 260 pueden incluir la asignación y desasignación de núcleos de procesamiento neuronal para realizar operaciones, incluida la multiplicación de matrices y vectores, el control de datos de entrada y datos de salida entre cualquiera de los núcleos, la interfaz de memoria 240 y/o la interfaz E/S 250, modificación del flujo de ejecución otros cambios en el flujo de control. La unidad de control 260 puede incluir una unidad central de procesamiento 265 (por ejemplo, un procesador ARM, MIPS o x86-64) para implementar algunas o todas las funciones de control de la unidad de control 260. Por ejemplo, la CPU 265 puede ejecutar instrucciones almacenadas en la memoria para asignar, desasignar y enviar datos a uno o más de la pluralidad 210 de núcleos de procesamiento neuronal.
En algunos ejemplos, la unidad de control 260 se implementa al menos en parte usando uno o más de: máquinas de estados finitos cableadas, microcódigo programable, matrices de puertas programables u otros circuitos de control adecuados.
VI. Ejemplo de operaciones de matriz de disposición sistólica
La figura 3A es un diagrama 300 que ilustra un ejemplo de multiplicación de matrices con adición de vector de polarización, como se puede realizar en ciertos ejemplos de la tecnología divulgada. Para una matriz de entrada dada I 310, un conjunto de ponderaciones en una matriz W 320 se multiplican por la matriz de entrada y se agrega un vector de polarización B 330, produciendo así una matriz de resultados C 340.
La figura 3B es un diagrama 350 que representa seis valores de la matriz (C00... C12360), se obtienen multiplicando seis valores de la matriz de ponderación W 370 por nueve valores de la matriz de entrada I 380 y sumando seis valores del vector de polarización B 390. En la práctica, hay una unidad de acumulación multiplicada en cada una de las ubicaciones de la matriz de salida C00, C01... , C12. El acumulador de cada uno se inicializa a 0. En cada etapa de tiempo, las filas de I avanzan hacia abajo y las columnas de W avanzan hacia la derecha. A medida que cada par de elementos W e I chocan en la matriz multiplicadora C, se multiplican y acumulan en ese lugar. Por ejemplo, el primer par de elementos en colisionar será Woo y loo en el momento 1 en la ubicación Coo. En el momento 2, los elementos Woi e Iio chocarán en Coo y su producto se agregará al acumulador. En el momento 3 ocurrirá lo mismo con W02 e I20. Para el tiempo 4, se habrán producido todas las multiplicaciones de pares de elementos necesarias para calcular Coo, y el acumulador mantendrá el producto escalar de la primera fila de W y la primera columna de I. Del mismo modo, los otros 5 elementos de C que se muestran se calcularán a medida que sus respectivos elementos colisionen y se multipliquen. Después de multiplicar el último par de elementos (W12 e I22), la multiplicación de la matriz de ponderación W vector de columna de tiempos I está completo y los acumuladores contienen la matriz de salida. El último paso es agregar el vector de polarización B a cada columna de la matriz para producir el valor final de C.
Es posible que la multiplicación se realice para subregiones de la matriz de salida C por el multiplicador de disposición sistólica en diferentes pases. Los recursos de la FPGA limitan el número de multiplicaciones que pueden ocurrir por ciclo de reloj, lo que nos obliga a hacer esta concesión. En nuestro caso, cada columna (como se muestra en la figura 4 como 420 y 422) corresponde a una columna de la matriz de salida C. Cada una de estas columnas (420, 422 y así sucesivamente) realiza 32 multiplicaciones en paralelo, dos para cada una de las 16 filas de la matriz de salida. Entonces, en efecto, cada pasada a través de cada columna (420, 422) de la implementación descrita ejemplar está calculando una porción de 16 filas por 1 columna de la matriz de salida. C.
Como entenderá fácilmente un experto en la técnica relevante que tenga el beneficio de la presente divulgación, las operaciones de multiplicación de matrices discutidas anteriormente para las figuras 3A y 3B son una aplicación de ejemplo y se pueden modificar fácilmente para realizar otras operaciones. Por ejemplo, la división, adición o sustracción matricial se puede realizar modificando las operaciones descritas en consecuencia, por ejemplo, realizando una resta de exponentes al dividir, o alineación de exponentes al realizar operaciones de suma o resta. Además, se pueden realizar operaciones matriciales adicionales utilizando las representaciones y el hardware de BFP descritos. Por ejemplo, la inversión de matrices, la transposición de matrices, el cálculo de determinantes y otras operaciones de matrices y vectores se pueden realizar usando métodos adaptados para usar representaciones y hardware de BFP descritos.
VII. Ejemplo de hardware para multiplicador de matriz de disposición sistólica
La figura 4 es un diagrama de bloques 400 que ilustra una vista arquitectónica de un multiplicador de matriz de disposición sistólica que puede usarse en ciertos ejemplos de la tecnología divulgada. Como se muestra, se usa un secuenciador 410 para proporcionar ponderaciones y entradas a una primera columna multiplicadora 420. La primera columna del multiplicador 420 calcula parte o la totalidad de una columna de la matriz de salida C del ejemplo anterior. Las columnas del multiplicador también se pueden duplicar para calcular parte o todas las columnas adicionales de la matriz de salida C en paralelo. Por ejemplo, la primera columna del multiplicador 420 recibe elementos de la matriz W del secuenciador 410 y puede pasarlos a la segunda columna del multiplicador 422. En algunos ejemplos, solo se proporciona una única columna de multiplicación 420. La columna de multiplicación incluye una memoria intermedia de entrada de 16 bits de dos entradas 430, que contiene una sola columna de la I matriz, una columna de 16 unidades DSP (M * V) que forman la columna de la disposición sistólica, dos entradas de 32 bits, unidad multiplicadora de 16 bits 432, una unidad de sumador de polarización 434, que añade el vector de polarización a los resultados del multiplicador, y una función de activación de 32 bits 436. La función de activación 436 se aplica al resultado de M * V B. La función de activación 436 se envía a un relé 440, que puede enviar valores de salida a la unidad de relé de la siguiente columna. El relé también puede enviar un par de salidas de 16 bits al memoria intermedia de salida 450, que luego se puede volver a ingresar al memoria intermedia de entrada 430. Como se muestra, la matriz de ponderación ingresa desde la izquierda desde el secuenciador 410 en una ruta dedicada de 512 bits sin control de flujo. Cada vector de columna de entrada de I para la disposición sistólica, la función de multiplicación de la matriz ingresa en la parte superior de cada columna y las salidas que se producen pueden circular hacia la parte superior para calcular la siguiente capa en la red neuronal, si hay más capas para procesar. Si se ha calculado la última capa de la red neuronal, las salidas pueden enviarse en su lugar al relé 440 de la siguiente columna 422, que luego las reenvía a columnas sucesivas hasta que llegan al secuenciador 410. La única ruta de relé de 32 bits se puede utilizar para mover la entrada, la salida, la polarización y otros valores asociados dentro y fuera de las columnas de multiplicación.
En algunos ejemplos de la tecnología divulgada, un M * V la columna de multiplicador de disposición sistólica 432 se implementa configurando una primitiva DSP de FPGA Altera mostrada en la figura 5. Las unidades DSP están dispuestas lógicamente como una columna vertical para que los datos de ponderación W puede pasar horizontalmente a través de la columna a medida que los datos de entrada se pasan verticalmente por la columna. Cada unidad DSP multiplica dos pares de mantisas de 16 bits en cada ciclo de reloj y simultáneamente suma los resultados del par de multiplicaciones del ciclo de reloj anterior a un acumulador 530 de 64 bits. Por lo tanto, cada DSP consume dos elementos de fila de la matriz de ponderación W y dos elementos de columna del vector de columna I en cada ciclo de reloj, y el acumulador 530 de 64 bits contendrá un elemento de la matriz de salida al final de la operación. Dado que hay 16 DSP apilados verticalmente, hay 16 * 2 = 32 elementos del W matriz consumida por ciclo de reloj, para un total de 32 * 16 bits = 512 bits de W datos de matriz consumidos por ciclo de reloj. En FPGA seleccionados, esto coincide con el ancho de banda de la memoria DDR externa nativa del FPGA de destino.
La memoria intermedia de entrada 430 y la memoria intermedia de salida 450 están ambos construidos a partir de bloques de memoria Altera. Algunas implementaciones aprovechan los bloques de memoria de Altera de doble puerto, lo que permite lecturas y escrituras simultáneas en la memoria desde dos fuentes. Como resultado, es posible utilizar una única estructura de bloque de memoria más grande para alojar tanto la memoria intermedia de entrada 430 como la memoria intermedia de salida 450. El uso de un solo bloque de memoria más grande puede proporcionar más flexibilidad en el uso de la memoria, ya que el programador puede entonces hacer un uso más eficiente de la memoria en el caso de que los datos de entrada o de salida sean más pequeños. El resultado es que se necesitan menos recursos de bloques de memoria FPGA en total para implementar la misma función.
El relé 440 es un ejemplo de una red de anillo en un chip. Hay muchas formas de mover datos entre el secuenciador 410 y las columnas 420 y 422, pero tener una red de anillo único utiliza menos recursos que algunas otras implementaciones. En algunos ejemplos, el ancho de banda de comunicación de la red de anillo puede ser menor que en otras implementaciones de retransmisión, pero en ciertas aplicaciones, el tiempo de cálculo es relativamente largo en comparación con el tiempo que se tarda en transferir datos hacia/desde las columnas 420 y 422 a través de la red de anillo. Además, es posible transmitir datos de salida desde las columnas 420 y 422 a medida que se produce cada conjunto de salidas a partir de la columna, en lugar de esperar hasta que se complete todo el cálculo. Esto permite la canalización de la transmisión de datos de salida con la computación y mitiga de manera efectiva el tiempo de transmisión de datos más largo. En algunos ejemplos en los que se deben enviar los mismos datos a todas las columnas, como para los datos de polarización, la red de retransmisión se puede configurar para admitir la transmisión de modo que se puedan enviar los mismos datos a todas las columnas con una única transmisión desde el secuenciador, lo que además reduce los retrasos en la comunicación.
VIII. Ejemplo de mosaico de procesamiento de señales digitales para realizar operaciones matriciales
La figura 5 es un diagrama de bloques 500 que describe un ejemplo de mosaico de procesamiento de señales digitales (DSP) que puede usarse para realizar operaciones de multiplicación de matrices de acuerdo con las tecnologías descritas. Como se muestra, una primera entrada de 16 bits I 510 se multiplica por una primera entrada de ponderación de 16 bits w 515. Una segunda entrada de 16 bits I 520 se multiplica por la segunda ponderación de 16 bits w 525. El resultado de las dos multiplicaciones se agrega y, opcionalmente, se puede agregar a una cantidad de polarización adicional y se almacena en un acumulador de 64 bits Acc 530. Después de que se realizan varias iteraciones de multiplicación con el mosaico DSP, la salida se proporciona a un transportador de salida 540 que puede enviar la salida a otras columnas de la matriz o enviar el resultado como resultado de la multiplicación de la matriz. Todas las funciones mostradas en la figura 5 puede ser proporcionado por un solo mosaico DSP en una FPGA o un ASIC, incluido el transportador de salida 540. En otros ejemplos, el transportador de salida 540 se proporciona como lógica adicional conectada a la salida del mosaico dSp . Cabe señalar que ninguna de las líneas de cruce representadas en la figura 5 representan conexiones.
Los bloques Altera DSP están estructurados de tal manera que tanto las multiplicaciones como su suma se realizan en un solo ciclo de reloj, y la operación de acumulación requiere un segundo ciclo de reloj. Como resultado, la operación de acumulación múltiple de DSP tiene una latencia de dos ciclos de reloj. Sin embargo, la operación de suma múltiple se puede canalizar con la operación de acumulación de modo que se puedan aceptar dos pares de entrada-ponderación en cada ciclo de reloj para un cálculo máximo.
El transportador de salida 540 no se muestra en la figura 4, pero está contenido en el M * V bloque 432 y es el medio por el cual los conjuntos de 16 resultados de salida acumulados se pasan a la función 434 de adición de polarización.
IX. Ejemplo de implementación de una red neuronal
Las implementaciones de BFP discutidas anteriormente con respecto a las figuras 1-5 se pueden adaptar para realizar operaciones con redes neuronales. Por ejemplo, la figura 6 ilustra una topología simplificada de la red neuronal profunda (DNN) 600 que puede usarse para realizar un procesamiento de imágenes mejorado usando implementaciones de BFP descritas. Se pueden implementar una o más capas de procesamiento usando técnicas descritas para operaciones de matriz/vector BFP, incluyendo el uso de uno o más de la pluralidad 210 de núcleos de red neuronal en el multiprocesador 200 descrito anteriormente. Cabe señalar que las aplicaciones de las implementaciones de BFP descritas en el presente documento no se limitan a las DNN, sino que también se pueden usar con otros tipos de redes neuronales, como las redes neuronales convolucionales (CNN), incluidas las implementaciones que tienen memoria a largo plazo (LSTM) o unidades recurrentes con puertas (GRU), u otras redes neuronales artificiales adecuadas que se pueden adaptar para usar los métodos y aparatos de BFP descritos en el presente documento.
Como se muestra en la figura 6, un primer conjunto 610 de nodos (incluidos los nodos 615 y 616) forman una capa de entrada. Cada nodo del conjunto 610 está conectado a cada nodo en una primera capa oculta formada a partir de un segundo conjunto 620 de nodos (incluidos los nodos 625 y 626). Una segunda capa oculta se forma a partir de un tercer conjunto 630 de nodos, incluido el nodo 635. Una capa de salida se forma a partir de un cuarto conjunto 640 de nodos (incluido el nodo 645). Cada uno de los nodos produce una salida aplicando una ponderación a cada entrada generada desde el nodo anterior y recogiendo las ponderaciones para producir un valor de salida. En algunos ejemplos, cada nodo individual puede tener una función de activación y/o aplicar una polarización. Cada uno de los nodos puede implementarse usando una instancia de la implementación 100 de BFP, por ejemplo, como se muestra para el nodo oculto 635. Por ejemplo, cualquier procesador o FPGA apropiadamente programado puede configurarse para implementar los nodos en la red neuronal 600 representada.
Ejemplos de aplicaciones adecuadas para tales implementaciones de redes neuronales BFP incluyen, pero no se limitan a: realizar reconocimiento de imágenes, realizar reconocimiento de voz, clasificar imágenes, traducir voz a texto y/o a otros idiomas, reconocimiento facial o biométrico de otro tipo, procesamiento de lenguaje natural, traducción automática de idiomas, procesamiento de consultas en motores de búsqueda, selección automática de contenido, análisis de correo electrónico y otros documentos electrónicos, gestión de relaciones, informática biomédica, identificación de biomoléculas candidatas, recomendaciones u otras tareas de clasificación.
Como será fácilmente evidente para un experto en la técnica relevante que tenga el beneficio de la presente divulgación, la tecnología de multiplicación de matrices BFP descrita en el presente documento, incluida la selección de exponentes comunes y una o más etapas de salida intermedias y finales, se puede utilizar para implementar algunas o todas las capas de la red neuronal ilustrada.
En algunos ejemplos, se puede utilizar un conjunto de unidades de acumulación múltiple (MAC) en paralelo en cada capa convolucional para acelerar el cálculo. Además, las unidades multiplicadoras paralelas se pueden utilizar en las etapas de multiplicación de matriz densa y completamente conectadas. También se puede utilizar un conjunto paralelo de clasificadores. Estos métodos de paralelización tienen el potencial de acelerar el cálculo aún más a costa de una mayor complejidad de control. Como será fácilmente evidente para un experto en la técnica relevante que tenga el beneficio de la presente divulgación, la tecnología de multiplicación de matrices BFP descrita en el presente documento, incluida la selección de exponentes comunes y una o más etapas de salida intermedias y finales, se puede utilizar para implementar algunas o todas las capas de la red neuronal ilustrada.
Como comprenderá fácilmente un experto en la técnica que tenga el beneficio de la presente divulgación, la aplicación de implementaciones de BFP puede usarse para diferentes aspectos del uso de redes neuronales, ya sea solas o en combinación o subcombinación entre sí. Por ejemplo, las implementaciones de BFP descritas se pueden usar para implementar el entrenamiento de redes neuronales mediante operaciones de descenso de gradiente y/o retropropagación para una red neuronal. Además, las implementaciones de BFP descritas se pueden usar para la evaluación de redes neuronales.
X. Ejemplo de arquitectura de matriz de puerta programable en campo
La figura 7 es un diagrama de bloques 700 que representa un ejemplo de arquitectura de disposición de puertas programables en campo (FPGA) que está configurada para implementar ciertos ejemplos de la tecnología divulgada. Por ejemplo, el multiprocesador 200 discutido anteriormente con respecto a la figura 2, se puede asignar a la arquitectura FPGA de la figura 7.
La FPGA incluye una disposición de bloques lógicos reconfigurables dispuestos en una disposición. Por ejemplo, la FPGA incluye una primera fila de bloques lógicos, incluidos los bloques lógicos 710, 711 y 719, y una segunda fila de bloques lógicos que incluyen los bloques lógicos 720, 721 y 729. Cada uno de los bloques lógicos incluye lógica que se puede reconfigurar para implementar funciones lógicas arbitrarias y también puede incluir elementos lógicos secuenciales como pestillos, flip-flops y memorias. Los bloques lógicos están interconectados entre sí mediante una estructura de enrutamiento que incluye varios conmutadores de interconexión que también pueden ser programables. Por ejemplo, hay una primera fila de bloques de interruptores 730, 731, 732, etc., colocado entre la primera fila de bloques lógicos reconfigurables y la segunda fila de bloques lógicos reconfigurables. Los interruptores se pueden configurar para cambiar las conexiones de cables que transportan señales entre los bloques lógicos reconfigurables.
La FPGA también incluye una serie de componentes más complejos. Por ejemplo, el bloque lógico incluye varias RAM de bloque, por ejemplo, RAM de bloque 740 y RAM de bloque 749. Las RAM de bloque normalmente contienen una mayor cantidad de bits de memoria, por ejemplo, algunos miles de bits de memoria a los que se accede aplicando una dirección a la memoria y leyendo desde uno o más puertos de lectura. En algunos ejemplos, las RAM de bloque pueden incluir dos o más puertos de escritura y dos o más puertos de lectura. En otros ejemplos, las RAM de bloque solo pueden tener un solo puerto de lectura y/o escritura. Aunque normalmente se accede a las RAM de bloque aplicando una dirección y leyendo los datos correspondientes, en algunos ejemplos, las RAM de bloque se pueden configurar con circuitos adicionales que permiten la implementación de funciones más complejas, incluidos los registros de desplazamiento y memorias intermedias primero en entrar, primero en salir (FIFO).
El FPGA ilustrado también incluye una serie de macrobloques duros, incluido el macrobloque duro 750 y el macrobloque duro 759. Estos macrobloques pueden incluir funciones más complejas, como funciones de procesador, funciones de procesamiento de señales digitales, aceleradores u otras funciones que se consideren deseables. Por ejemplo, bloques de procesamiento de señales digitales como los descritos anteriormente con respecto a la figura 5 se puede implementar como uno o más macrobloques duros de la FPGA. La FPGA ilustrada incluye además un puerto de configuración 760 que se puede usar para reprogramar dispositivos lógicos en la FPGA. En algunos ejemplos, las memorias de configuración que almacenan información de configuración para los dispositivos lógicos se pueden direccionar y leer/escribir directamente. En otros ejemplos, se utiliza una arquitectura de cadena de exploración para almacenar información de configuración en serie.
La FPGA está rodeada además por un anillo de E/S 770 que se puede acoplar a los bloques lógicos, los arietes de bloque y/o los macrobloques duros para recibir y enviar señales a componentes alejados de la FPGA. En algunos ejemplos, las señales de E/S son señales de tensión de carril completo, mientras que en otros ejemplos se utilizan señales diferenciales. En algunos ejemplos, los puertos de E/S se pueden multiplexar (por ejemplo, multiplexado en el tiempo) para admitir la entrada y salida de más señales que la cantidad de pines disponibles en la FPGA.
Si bien muchos ejemplos de FPGA se pueden reconfigurar típicamente un número arbitrario de veces mediante el uso de memorias borrables eléctricamente, en otros ejemplos, se pueden usar elementos lógicos programables de una sola vez. Por ejemplo, los bloques lógicos y los interruptores se pueden programar con el uso de fusibles, anti­ fusibles o con una máscara ROM para programar una función lógica una vez que no sea fácilmente reversible. En el caso reconfigurable, la FPGA normalmente tiene un puerto de configuración que recibe datos según un archivo denominado corriente de bits o corriente de bits de configuración. Los datos del flujo de bits se leen en el dispositivo y se utilizan para programar y configurar los bloques lógicos, los interruptores, los arietes de los bloques y/o las macros rígidas. Cuando se desea un nuevo diseño, la configuración se puede borrar y se puede configurar un nuevo diseño en el dispositivo. En algunos ejemplos, la FPGA se puede reconfigurar parcialmente para ahorrar tiempo de programación. Por ejemplo, un subconjunto de los bloques lógicos, los interruptores o los arietes de los bloques se pueden reconfigurar dinámicamente en el campo sin reprogramar todo el dispositivo.
Usando las tecnologías descritas, se pueden implementar un mayor rendimiento y/o estructuras más eficientes. Además, debe entenderse fácilmente que, si bien algunos ejemplos de FPGa son un circuito integrado independiente, en otros ejemplos, la FPGA se puede empaquetar de manera diferente, por ejemplo, en un módulo de múltiples chips (MCM), o en el mismo circuito muere como un sistema en chip (SoC) personalizado o básico. La figura 8 es un diagrama de bloques 800 que ilustra cuatro bloques lógicos reconfigurables 810, 811, 812 y 813 que pueden configurarse para formar parte de la estructura lógica de un ejemplo de circuito integrado FPGA. Los componentes dentro de los bloques lógicos reconfigurables mostrados son idénticos u homogéneos, pero debe entenderse fácilmente, en otros ejemplos, más de un tipo de bloque lógico reconfigurable puede estar presente en una sola FPGA.
Un primer bloque lógico reconfigurable 810 incluye una tabla de búsqueda (LUT) 820 de seis entradas que está acoplada para transportar la lógica 830, varios multiplexores 840 y 845, y un elemento de almacenamiento (aquí, un flip-flop D) 850. El LUT 820 se puede implementar utilizando una memoria pequeña (por ejemplo, una memoria que tiene seis bits de dirección y dos bits de salida, como se muestra). Por lo tanto, cualquier función booleana de seis entradas se puede implementar utilizando una sola LUT. En algunos ejemplos, las salidas de LUT se pueden combinar, o un bloque lógico reconfigurable puede tener múltiples LUT que se pueden conectar entre sí para realizar funciones lógicas más complejas. En algunos ejemplos, se pueden proporcionar funciones lógicas comunes además de la LUT. Por ejemplo, la lógica de acarreo 830 puede configurarse para realizar la lógica de propagación de acarreo para un sumador. Los multiplexores se utilizan para seleccionar varias salidas de otros componentes. Por ejemplo, el multiplexor 840 puede usarse para seleccionar la salida del LUT 820 o la lógica de acarreo 830, mientras que el multiplexor 845 puede usarse para seleccionar otra salida del LUT 820 o del multiplexor 840. En algunos ejemplos, el multiplexor se utiliza para seleccionar una salida secuencial de un elemento de estado (por ejemplo, flipflop 850), o una salida combinatoria de una tabla de consulta. Debería entenderse fácilmente para un experto en la técnica que tenga el beneficio de la presente descripción que se pueden emplear diferentes funciones lógicas, tamaños de LUT y elementos secuenciales en un elemento lógico reconfigurable. Por lo tanto, las técnicas para mapear redes neuronales con dicha lógica reconfigurable pueden variar dependiendo de la arquitectura de FPGA objetivo específica. La configuración de la lógica dentro del bloque lógico reconfigurable se puede programar usando el puerto de configuración de la FPGA. En algunos ejemplos, las LUT no se programan una vez, pero se pueden configurar para actuar como pequeñas memorias que almacenan ciertos datos utilizados en la red neuronal.
En algunos ejemplos de la tecnología divulgada, se utiliza una herramienta de síntesis lógica (compilador lógico) para transformar una especificación de funciones BFP en un flujo de bits de configuración que se puede aplicar a un puerto de configuración de una FPGA para configurar la lógica para implementar el multiprocesador 200 o porciones de una red neuronal. En algunos ejemplos, el diseñador puede usar una metodología RPM (macro colocada relacionalmente) para mejorar las demoras de interconexión y área y lograr un diseño repetible para un enrutamiento fácil y cierre de tiempo bajo la composición del módulo y la replicación masiva. Por ejemplo, al incluir módulos de instanciación de RTL estructurales y agruparlos en un programador, la lógica del programador de instrucciones se puede bloquear en un conjunto de LUT individuales, lo que permite una agrupación compacta y la ubicación de la lógica dentro de la FPGA.
XI. Ejemplos de asignaciones a FPGA comerciales
La figura 9 es un esquema de bloque 900 de la hoja de datos de Altera Corporation para la FPGA Stratix V que ilustra un bloque DSP y sus rutas de datos de la figura 5. Los registros de entrada (510, 515, 520 y 525) se muestran en el lado izquierdo, los multiplicadores y la operación de suma están en el centro y el registro acumulador 530 se muestra a la derecha.
La figura 10 es un ejemplo de esquema de bloques 1000 que detalla adicionalmente la utilización de recursos del mismo DSP que se implementa en un ejemplo de FPGA fabricado por Altera Corporation. Los registros de entrada (510, 515, 520 y 525) se muestran a la izquierda, pero las rutas de datos que pasarían las ponderaciones de izquierda a derecha y las entradas de arriba a abajo no se muestran. Debido a los detalles de implementación de la FPGA Altera Stratix V, no es posible incluir estas regiones en el DSP y se han implementado utilizando lógica fuera del DSP.
XII. Ejemplo de método de operaciones con matrices que comparten un exponente común
La figura 11 es un diagrama de flujo 1100 que describe un método de ejemplo para realizar operaciones matemáticas con matrices y/o vectores cuyos elementos comparten un exponente común entre dos o más valores de su respectiva matriz o vector. Los valores de mantisa se almacenan en cada una de las matrices o vectores. En el bloque de proceso 1110, se produce una representación de bloque de punto flotante (BFP) de matrices o vectores, donde al menos dos elementos de la respectiva matriz o vector comparten un exponente común. Por ejemplo, una o más de las matrices o matrices pueden incluir valores de mantisa de 16 bits y hacer referencia a un exponente común. La producción de la representación BFP puede incluir el desplazamiento de las mantisas para cumplir con un exponente común seleccionado. En algunos ejemplos, cada una de la pluralidad de matrices o vectores incluye una disposición de mantisas con o sin signo. En algunos ejemplos, el exponente común compartido se almacena en una única ubicación en la memoria. En algunos ejemplos, el exponente común se aplica a todos los valores almacenados en una matriz o vector respectivo. En otros ejemplos, se puede aplicar un exponente común para un conjunto de varias filas de una matriz o vector respectivo. Por ejemplo, cada fila puede tener su propio exponente común asociado. En algunos ejemplos, una porción de una matriz está asociada con el exponente común. Por ejemplo, una matriz podría dividirse en cuartos y cada porción de la matriz, por ejemplo, superior izquierda, superior derecha, inferior izquierda, inferior derecha, se puede asociar con un exponente común diferente. Como entenderá fácilmente un experto en la técnica que tenga el beneficio de la presente divulgación, en algunos ejemplos, algunos elementos de una matriz de vector comparten un exponente común, mientras que otros elementos de una matriz o vector pueden compartir un exponente común diferente, y aunque aún otros elementos pueden estar asociados con un exponente único. En algunos ejemplos, algunos elementos de la matriz o del vector pueden expresarse en una forma diferente de representación, por ejemplo, como un número de punto fijo, un número entero, un símbolo u otra forma.
En el bloque de proceso 1120, se realiza una operación matemática sobre las matrices y/o vectores para producir una matriz de salida o un vector. Por ejemplo, una matriz se puede multiplicar por una matriz, una matriz se puede multiplicar por un vector, un vector se puede multiplicar por un vector o un vector se puede multiplicar por una matriz. Otras operaciones adecuadas, que incluyen funciones sigmoides, tangentes hiperbólicas, inversión de matriz, división, suma, resta u otra operación de matriz adecuada, se pueden realizar como al menos una porción de la operación matemática. En algunos ejemplos, realizar la operación matemática incluye multiplicar mantisas almacenadas en una primera matriz o vector de la pluralidad de matrices o vectores por mantisas almacenadas en una segunda matriz o vector de una pluralidad de matrices o vectores. Algunos ejemplos de realización de la operación matemática incluyen añadir un primer exponente común para una primera matriz o vector de la pluralidad de matrices o vectores a un segundo exponente común para una segunda matriz o vector de la pluralidad de matrices o vectores. En algunos ejemplos, realizar la operación matemática incluye realizar una multiplicación de matriz de disposición sistólica para mantisas en una primera matriz o vector por mantisas almacenadas en una segunda matriz o vector.
En el bloque de proceso 1130, se seleccionan uno o más exponentes actualizados para toda o una porción de la matriz de salida o vector producido en el bloque de proceso 1120. En algunos ejemplos, uno o más exponentes se seleccionan en función del valor absoluto máximo en cada subconjunto de elementos en la matriz o vector de salida. En algunos ejemplos, los exponentes comunes actualizados se seleccionan determinando una media y una desviación estándar para los valores absolutos de la matriz o vector de salida. En algunos ejemplos, al menos uno de los exponentes se selecciona basándose en un intervalo de confianza para los valores en cada subconjunto respectivo de la matriz o vector. En algunos ejemplos, la selección se basa en una amplitud de rango dinámico y/o un valor de error evaluado introducido por un exponente común actualizado seleccionado prospectivo para una porción respectiva de la matriz o vector de salida. Por ejemplo, se puede hacer una compensación entre la amplitud del rango dinámico de valores representativos y la matriz de salida versus el error introducido para el exponente común actualizado seleccionado para la matriz de salida. En algunos ejemplos, el exponente(s) común se seleccionan verificando las condiciones de desbordamiento y ajustando el exponente(s) común actualizado para evitar o minimizar tales condiciones de desbordamiento o subdesbordamiento. En algunos ejemplos, el exponente(s) común actualizado se determinan mediante el uso de un número predefinido de valores de elementos anteriores de la matriz o vector de salida. Por lo tanto, el exponente(s) común puede basarse en un conjunto continuo de valores a medida que se realizan los cálculos para generar la matriz o el vector de salida. En algunos ejemplos, la selección del exponente(s) común incluye calcular una media, una desviación estándar y/o una varianza para una porción de los valores de los elementos calculados para la matriz o vector de salida. Por ejemplo, se puede utilizar un número variable de valores de salida para calcular una media móvil, una desviación estándar o una varianza.
En el bloque de proceso 1140, se produce una representación BFP para una matriz o vector actualizado donde al menos dos elementos de la matriz o vector actualizado comparten un exponente común. En algunos ejemplos, después de producir la matriz o el vector actualizado, se pueden realizar operaciones matemáticas adicionales y/o se pueden actualizar exponentes comunes para cada iteración sucesiva de la operación matemática. Como entenderá fácilmente un experto en la técnica que tenga el beneficio de la presente divulgación, en algunos ejemplos, algunos elementos de una matriz de vector comparten un exponente común, mientras que otros elementos de una matriz o vector pueden compartir un exponente común diferente, y aunque aún otros elementos pueden estar asociados con un exponente único. En algunos ejemplos, algunos elementos de la matriz o del vector pueden expresarse en una forma diferente de representación, por ejemplo, como un número de punto fijo, un número entero, un símbolo u otra forma.
En algunos ejemplos, el método esbozado en la figura 11 se puede utilizar para actualizar los valores asociados para los nodos dentro de una red neuronal. Dado que los valores o ponderaciones de los nodos en la red neuronal no necesariamente tienen que ser 100 por ciento precisos, el redondeo u otros errores causados por el uso de un exponente común compartido pueden ser aceptables para aplicaciones de redes neuronales particulares. Por ejemplo, el método esbozado en la figura 11 se puede utilizar para actualizar una capa de valores de nodo dentro de una red neuronal, incluidas las redes neuronales convolucionales. Para operaciones posteriores, una implementación puede repetir las operaciones descritas anteriormente en los bloques de proceso 1120, 1130 y/o 1140 para realizar operaciones adicionales utilizando la representación BFP. Por ejemplo, la memoria que almacena la representación BFP se puede reutilizar para operaciones posteriores. El producto de representación BFP en el bloque de proceso 1140 se puede convertir en otra representación para su uso por otras aplicaciones. Por ejemplo, la representación de BFP producida se puede convertir en matrices/vectores expresados en formatos de punto flotante o de punto fijo. Además, en algunos ejemplos, las matrices/vectores resultantes y otros pueden permanecer en una representación BFP para usarse como entradas para las etapas posteriores en la evaluación de la red neuronal, sin conversión a otra representación.
XIII. Ejemplo de método para configurar dispositivos lógicos con bloques de funciones personalizados
La figura 12 es un diagrama de flujo 1200 que describe un método de ejemplo para configurar un dispositivo lógico reconfigurable, como se puede realizar en ciertos ejemplos de la tecnología divulgada. Por ejemplo, la FPGA discutida anteriormente con respecto a las figuras 8 y 9 pueden configurarse para implementar todo o una porción del multiprocesador 200 de la figura 2, incluidos algunos o todos los núcleos de la red neuronal.
En el bloque de proceso 1210, se asigna una descripción de los componentes del multiprocesador para reconfigurar los componentes del dispositivo lógico de la FPGA. Por ejemplo, un diseñador de procesos puede especificar una descripción del multiprocesador en el lenguaje de descripción de hardware, como SystemVerilog, SystemC, VHDL, Verilog o cualquier otra combinación adecuada de lenguajes de descripción de hardware. En algunos ejemplos, se utiliza una descripción escrita en un lenguaje de programación tradicional como C, C++ u OpenCL para describir al menos una porción del multiprocesador. La descripción del multiprocesador puede incluir cualquiera de los componentes discutidos anteriormente. En algunos ejemplos, el diseñador puede especificar celdas FPGA específicas que serán el objetivo de los elementos del hardware de la red neuronal. Por ejemplo, el diseñador puede especificar que las operaciones de la matriz sistólica se asignen a los recursos DSP de la FPGA. En algunos ejemplos, el programador puede usar macros disponibles proporcionadas por el proveedor de FPGA para implementar unidades de función personalizadas, memorias intermedias FIFO, registros de desplazamiento y otros componentes usando asignaciones económicas para ese FPGA. En algunos ejemplos, los anchos de mantisas o exponentes se seleccionan en función de los anchos de las estructuras FPGA correspondientes. Esto puede mejorar la eficiencia de ciertas implementaciones de FPGA (por ejemplo, seleccionando formatos de 16 o 32 bits de ancho correspondientes a estructuras de 16 o 32 bits de ancho de la FPGA.
En el bloque de proceso 1220, se produce un flujo de bits de configuración para implementar un circuito para el multiprocesador 200 que incluye nodos y capas de la red neuronal. Por ejemplo, se puede compilar una descripción de un multiprocesador expresada en un lenguaje de descripción de hardware para generar una lista de conexiones y, a su vez, la lista de redes se puede usar para generar un archivo de flujo de bits. Las señales indicadas en el archivo de flujo de bits se pueden aplicar a la interfaz de configuración de una FPGA con el fin de configurar la FPGA para que realice funciones para implementar un multiprocesador de acuerdo con las técnicas descritas.
En el bloque de proceso 1230, el dispositivo lógico reconfigurable se configura utilizando el flujo de bits generado en el bloque de proceso 1220. Por ejemplo, algunas FPGA tienen un puerto de configuración que se utiliza para transmitir datos a la memoria de configuración de la FPGA, configurando así la FPGA. En algunos ejemplos, la memoria de configuración de la FPGA se direcciona a través de un puerto paralelo u otro puerto direccionable. En algunos ejemplos, un dispositivo lógico configurable que tiene una estructura similar a una FPGA puede configurarse una vez, pero no reconfigurarse. En otros ejemplos, la FPGA se puede borrar y reescribir eléctricamente para proporcionar una nueva configuración. En algunos ejemplos, la FPGA se reconfigura cada vez que se vuelve a encender el circuito integrado, mientras que, en otros ejemplos, la configuración de FGPA mantiene el estado a través de ciclos de energía repetidos.
XIV. Ejemplo de entorno informático
La figura 13 ilustra un ejemplo generalizado de un entorno informático adecuado 1300 en el que se pueden implementar las realizaciones, técnicas y tecnologías descritas, incluida la configuración de un multiprocesador. Por ejemplo, el entorno informático 1300 puede implementar técnicas reveladas para configurar un procesador para implementar arquitecturas multiprocesador y redes neuronales reveladas, y/o compilar código en instrucciones ejecutables por ordenador y/o flujos de bits de configuración para realizar tales operaciones, incluidas las redes neuronales, como se describe en el presente documento.
El entorno informático 1300 no pretende sugerir ninguna limitación en cuanto al ámbito del uso o la funcionalidad de la tecnología, ya que la tecnología puede implementarse en diversos entornos informáticos de propósito general o de propósito especial. Por ejemplo, la tecnología divulgada puede implementarse con otras configuraciones de sistemas informáticos, incluidos dispositivos portátiles, sistemas multiprocesador, electrónica de consumo programable, PC de red, miniordenadores, ordenadores centrales y similares. La tecnología divulgada también se puede practicar en entornos informáticos distribuidos donde las tareas se realizan mediante dispositivos de procesamiento remoto que están conectados a través de una red de comunicaciones. En un entorno informático distribuido, los módulos de programa pueden estar ubicados en dispositivos de almacenamiento de memoria tanto locales como remotos.
Con referencia a la figura 13, el entorno informático 1300 incluye al menos una unidad de procesamiento 1310 y una memoria 1320. En la figura 13, esta configuración 1330 más básica se incluye dentro de una línea discontinua. La unidad de procesamiento 1310 ejecuta instrucciones ejecutables por ordenador y puede ser un procesador real o virtual. En un sistema de multiprocesamiento, varias unidades de procesamiento ejecutan instrucciones ejecutables por ordenador para aumentar la potencia de procesamiento y, como tal, se pueden ejecutar múltiples procesadores simultáneamente. La memoria 1320 puede ser memoria volátil (por ejemplo, registros, caché, RAM), memoria no volátil (por ejemplo, ROM, EEPROM, memoria flash, etc.), o alguna combinación de los dos. La memoria 1320 almacena software 1380, imágenes y vídeo que pueden, por ejemplo, implementar las tecnologías descritas en el presente documento. Un entorno informático puede tener características adicionales. Por ejemplo, el entorno informático 1300 incluye almacenamiento 1340, uno o más dispositivos de entrada 1350, uno o más dispositivos de salida 1360 y una o más conexiones de comunicación 1370. Un mecanismo de interconexión (no mostrado), como un bus, un controlador o una red, interconecta los componentes del entorno informático 1300. Normalmente, el software del sistema operativo (no mostrado) proporciona un entorno operativo para otro software que se ejecuta en el entorno informático 1300 y coordina las actividades de los componentes del entorno informático 1300.
El almacenamiento 1340 puede ser extraíble o no extraíble, e incluye discos magnéticos, cintas o casetes magnéticos, CD-ROM, CD-RW, DVD o cualquier otro medio que pueda usarse para almacenar información y al que se pueda acceder dentro del entorno informático 1300. El almacenamiento 1340 almacena instrucciones para el software 1380, que se pueden utilizar para implementar tecnologías descritas en el presente documento.
El dispositivo(s) de entrada 1350 puede ser un dispositivo de entrada táctil, como un teclado, teclado numérico, ratón, pantalla táctil, lápiz o bola de seguimiento, un dispositivo de entrada de voz, un dispositivo de escaneo u otro dispositivo, que proporciona entrada al entorno informático 1300. Para audio, el dispositivo(s) de entrada 1350 pueden ser una tarjeta de sonido o un dispositivo similar que acepta entrada de audio en forma analógica o digital, o un lector de CD-ROM que proporciona muestras de audio al entorno informático 1300. El dispositivo(s) de salida 1360 pueden ser una pantalla, una impresora, un altavoz, una grabadora de CD u otro dispositivo que proporcione salida desde el entorno informático 1300.
Las conexiones de comunicación 1370 permiten la comunicación a través de un medio de comunicación (por ejemplo, una red de conexión) a otra entidad informática. El medio de comunicación transmite información tal como instrucciones ejecutables por ordenador, información de gráficos comprimidos, video u otros datos en una señal de datos modulada. Las conexiones de comunicación 1370 no se limitan a conexiones por cable (por ejemplo, Ethernet megabit o gigabit, Infiniband, Fibre Channel sobre conexiones eléctricas o de fibra óptica), sino que también incluyen tecnologías inalámbricas (por ejemplo, Conexiones RF a través de Bluetooth, WiFi (IEEE 802.11a/b/n), WiMax, celular, satélite, láser, infrarrojos) y otras conexiones de comunicación adecuadas para proporcionar una conexión de red para los métodos descritos. En un entorno de host virtual, las conexiones de comunicación pueden ser una conexión de red virtualizada proporcionada por el host virtual.
Algunas realizaciones de los métodos divulgados se pueden realizar usando instrucciones ejecutables por ordenador que implementan toda o una porción de la tecnología divulgada en una nube informática 1390. Por ejemplo, los compiladores, procesadores y/o redes neuronales revelados se implementan con servidores ubicados en el entorno informático, o los compiladores, procesadores y/o redes neuronales revelados se pueden implementar en servidores ubicados en la nube informática 1390. En algunos ejemplos, los compiladores divulgados se ejecutan en unidades centrales de procesamiento tradicionales (por ejemplo, procesadores RISC o CISC), unidades centrales de procesamiento extendidas para incluir instrucciones de procesamiento de vectores o procesadores de vectores. Los medios legibles por ordenador son todos los medios disponibles a los que se puede acceder dentro de un entorno informático 1300. A modo de ejemplo, y no de limitación, con el entorno informático 1300, los medios legibles por ordenador incluyen la memoria 1320 y/o el almacenamiento 1340. Como debe entenderse fácilmente, el término medio de almacenamiento legible por ordenador incluye los medios para el almacenamiento de datos como la memoria 1320 y el almacenamiento 1340, y no los medios de transmisión como las señales de datos moduladas. XV. Ejemplos adicionales de la tecnología divulgada
Como resultará fácilmente evidente para un experto en la técnica que tenga el beneficio de la presente divulgación, los métodos, aparatos y medios de almacenamiento legibles por ordenador descritos se pueden combinar en varias combinaciones y subcombinaciones entre sí, dependiendo de la aplicación o función a realizar deseada. Por ejemplo, en algunos ejemplos de la tecnología divulgada, un método incluye producir una representación de bloque de punto flotante (BFP) de una pluralidad de matrices o vectores donde al menos dos elementos de las respectivas matrices o vectores comparten un exponente común, realizando una operación matemática en dos o más de la pluralidad de matrices o vectores, produciendo una matriz o vector de salida, basado en la matriz o vector de salida, seleccionando un exponente común actualizado para al menos dos o más elementos de la matriz o vector de salida, y produciendo una representación BFP de una matriz o vector actualizado, al menos dos elementos de la matriz o vector actualizado que comparten un exponente común. En algunos ejemplos del método, la operación matemática se realiza en dos matrices. En algunos ejemplos, la operación matemática se realiza en una matriz y un vector. En algunos ejemplos, la operación matemática se realiza en dos vectores. En algunos ejemplos, la operación matemática es una de multiplicación, división, suma o resta de matrices. En algunos ejemplos, la operación matemática incluye la suma o resta de un vector escalar (por ejemplo, un vector de polarización). En algunos ejemplos, la operación matemática incluye otras operaciones matriciales, como inversión, descomposición, transposición o cálculo de un determinante.
En algunos ejemplos de la tecnología divulgada, las operaciones matriciales o vectoriales realizadas con una implementación de BFP incluyen realizar la multiplicación de matrices multiplicando elementos de mantisa para dos matrices (o matriz y vector, o vector y vector) y ajustando los exponentes comunes de salida para las dos matrices a producir una matriz de salida multiplicada (o vector). Por ejemplo, se pueden sumar los dos exponentes comunes. En otros ejemplos, se emplea una manera diferente de seleccionar el exponente común (por ejemplo, seleccionando un exponente para reducir el error en la representación BFP de salida). Algunos ejemplos incluyen realizar la división matricial dividiendo cada uno de un número de elementos de mantisa para dos matrices y ajustando los respectivos exponentes comunes, produciendo una matriz dividida de salida. Por ejemplo, un exponente común se puede restar de otro. En otros ejemplos, se emplea una manera diferente de seleccionar el exponente de salida común (por ejemplo, seleccionando un exponente para reducir el error en la representación BFP de salida). Algunos ejemplos incluyen el cambio de mantisas de una matriz y la adición de mantisas desplazados a los elementos de mantisa de una segunda matriz. Se selecciona un exponente común actualizado para representar la matriz de salida resultante (por ejemplo, aumentando el exponente en consecuencia). En algunos ejemplos, una matriz se resta de una segunda matriz cambiando las mantisas de una de las matrices y restando los elementos de la mantisa, luego seleccionando un exponente común actualizado para representar la matriz de salida resultante (por ejemplo, disminuyendo el exponente en consecuencia). En algunos ejemplos, se puede seleccionar un exponente común diferente en el resultado para mejorar la precisión de la matriz de resultados.
En algunos ejemplos de la tecnología divulgada, la pluralidad de matrices o vectores comprende una disposición de mantisas firmadas o no firmadas. En algunos ejemplos, el exponente común compartido se almacena en una única ubicación en la memoria. En algunos ejemplos, el exponente común se aplica a todos los valores almacenados en una matriz o vector respectivo. En otros ejemplos, se puede aplicar un exponente común para un conjunto de varias filas de una matriz o vector respectivo. Por ejemplo, cada fila puede tener su propio exponente común asociado. En algunos ejemplos, una porción de una matriz está asociada con el exponente común. Por ejemplo, una matriz podría dividirse en cuartos y cada porción de la matriz, por ejemplo, superior izquierda, superior derecha, inferior izquierda, inferior derecha, se puede asociar con un exponente común diferente. Los valores de las matrices y los exponentes compartidos se pueden almacenar en cualquier dispositivo de almacenamiento de memoria adecuado. Por ejemplo, para las matrices y los exponentes compartidos se pueden almacenar en una memoria direccionable (por ejemplo, memoria dinámica de acceso aleatorio (DRAM, incluyendo DDR, DDR2, etc., DRAM), DRAM integrada (eDRAM) o memoria de acceso aleatorio estático (SRAM), una disposición de pestillos, una disposición de flip-flops, un archivo de registro, una memoria de acceso aleatorio en bloque (RAM de bloque) (a veces denominada "bloques de memoria"), una memoria intermedia primero en entrar, primero en salir (FIFO) o un registro de desplazamiento. En algunos ejemplos, los valores de las matrices se almacenan en una memoria direccionable o un archivo de registro y los valores de los exponentes compartidos se almacenan en varios flip-flops o pestillos. En algunos ejemplos, el almacenamiento, como flip-flops o registros, se asigna para almacenar valores de exponentes compartidos de forma estática (por ejemplo, un registro almacena todos los valores de exponentes en una etapa particular del procesamiento de BFP, o se asigna un registro por columna/fila de la matriz). En algunos ejemplos, el almacenamiento se asigna para almacenar los exponentes de forma dinámica. En algunos ejemplos, se puede acceder a los valores de exponente realizando una búsqueda en la tabla (por ejemplo, utilizando un par de filas y columnas de una matriz como índice para identificar una ubicación de almacenamiento de exponente compartido).
En algunos ejemplos de la tecnología divulgada, un método para realizar la operación matemática incluye además agregar un primer exponente común para una primera matriz o vector de la pluralidad de matrices o vectores a un segundo exponente común para una segunda matriz o vector de la pluralidad de matrices o vectores. En algunos ejemplos, la realización de la operación matemática incluye además realizar una multiplicación de matriz de disposición sistólica para mantisas almacenadas en una primera matriz o vector de la pluralidad de matrices o vectores por mantisas almacenadas en una segunda matriz o vector de la pluralidad de matrices o vectores. En algunos ejemplos, la realización de la operación matemática incluye además sumar o restar un vector de polarización a un producto de la pluralidad de matrices o vectores. En algunos ejemplos, la realización de la operación matemática incluye además la realización de una función adicional a un producto de la pluralidad de matrices o vectores. La función adicional puede ser una función lineal, una función no lineal, una función de activación, una función de transferencia u otra función seleccionada para una aplicación particular. En ejemplos del método para el procesamiento de redes neuronales, con frecuencia se aplica una función sigmoidea, tangente hiperbólica (tanh) u otra función similar al resultado del vector.
En algunos ejemplos de la tecnología divulgada, la selección de un exponente común actualizado incluye calcular una media, una desviación estándar y/o una varianza para una porción, pero no todos los valores de los elementos de salida calculados para la matriz o vector de salida. En los ejemplos, la selección de un exponente común actualizado incluye evaluar el error introducido por el exponente común actualizado seleccionado para el vector de matriz de salida. En algunos ejemplos de la tecnología divulgada, se selecciona un único exponente común para todos los valores en una matriz o vector en una representación BFP. En algunos ejemplos, se usa un exponente común para algunos, pero no todos los valores en una matriz o vector respectivo de la pluralidad de matrices o vectores. En algunos ejemplos, todos los elementos de una fila, una columna o una disposición completa pueden tener diferentes mantisas y compartir un exponente común. En algunos ejemplos, las combinaciones y subcombinaciones designadas de dos o más elementos de una matriz o vector pueden compartir un exponente común. En algunos ejemplos, una combinación arbitraria de dos o más elementos de una matriz o vector puede compartir un exponente común. En algunos ejemplos, el almacenamiento, como flip-flops o registros, se asigna para almacenar valores de exponentes compartidos de forma estática (por ejemplo, un registro almacena todos los valores de exponentes en una etapa particular del procesamiento de BFP, o se asigna un registro por columna/fila del matriz). En algunos ejemplos, el almacenamiento se asigna para almacenar los exponentes de forma dinámica. En algunos ejemplos, se puede acceder a los valores de exponente realizando una búsqueda en la tabla (por ejemplo, mediante el uso de un par de filas y columnas de una matriz como índice para identificar una ubicación de almacenamiento de exponente compartido).
En algunos ejemplos, la operación matemática realizada incluye realizar la multiplicación de matrices y agregar un primer exponente común para una primera matriz o vector de la pluralidad de matrices o vectores a un segundo exponente común para una segunda matriz o vector de la pluralidad de matrices o vectores. En algunos ejemplos, la operación matemática incluye realizar la división de matrices y restar un primer exponente común para una primera matriz o vector de la pluralidad de matrices o vectores de un segundo exponente común para una segunda matriz o vector de la pluralidad de matrices o vectores. En algunos ejemplos, la operación matemática incluye realizar la suma o resta de matrices y desplazar una mantisa de al menos una matriz o vector de la pluralidad de matrices o vectores. En algunos ejemplos, se agrega un vector de polarización al resultado de la operación matemática. En algunos ejemplos, se aplica una función de activación al resultado de la operación matemática. En algunos ejemplos, se agrega un vector de polarización al resultado y se aplica una función de activación al resultado con el vector de polarización agregado.
En algunos ejemplos de la tecnología divulgada, el método incluye además actualizar los valores de los nodos para una red neuronal con los valores de los elementos producidos al realizar la operación matemática. En algunos ejemplos, la red neuronal es un DNN, CNN, LSTM o GRU. En algunos ejemplos, la red neuronal se implementa utilizando un procesador de propósito general, incluido un procesador de propósito general adaptado para usar instrucciones vectoriales o SIMD, como instrucciones SSE, SSE2 o AVX x86_64. El hardware de red neuronal utilizado para los métodos divulgados también puede incluir procesadores vectoriales, circuitos integrados personalizados, circuitos integrados específicos de la aplicación (ASIC), matrices de puertas programables en campo (FPGA), unidades de procesamiento de gráficos (GPU), procesadores de redes neuronales y/o componentes de procesamiento de señales digitales.
En algunos ejemplos, el método incluye además repetir los actos de realizar la operación matemática, seleccionar el exponente común actualizado y producir la representación BFP de la matriz o vector actualizado con el exponente común actualizado.
En algunos ejemplos del método, la operación matemática se realiza utilizando medios para la multiplicación de matrices. En algunos ejemplos, la operación matemática se realiza seleccionando el exponente común actualizado que se realiza utilizando medios para la actualización del exponente común. En algunos ejemplos, la operación matemática se realiza produciendo la representación BFP de la matriz o vector actualizado que se realiza utilizando medios para producir una representación BFP de una matriz o vector. En algunos ejemplos, se emplean dos o las tres técnicas antes mencionadas para realizar la operación matemática.
En algunos ejemplos, el método incluye programar un dispositivo lógico reconfigurable y/o un componente de procesamiento de señales digitales para realizar una o más de las acciones del método enumeradas. Por ejemplo, la memoria de configuración se puede utilizar para programar una FPGA antes de iniciar la ejecución de los actos del método enumerados.
En algunos ejemplos de la tecnología divulgada, un método incluye realizar una operación matemática en dos o más de una pluralidad de matrices o vectores, produciendo una matriz o vector de salida de representación de bloque flotante (BFP), al menos dos mantisas de las respectivas matrices o vectores que comparten un exponente común, y seleccionando un exponente común actualizado para dos o más valores de la matriz o vector de salida. En algunos ejemplos del método, la operación matemática se realiza en dos matrices. En algunos ejemplos, la operación matemática se realiza en una matriz y un vector. En algunos ejemplos, la operación matemática se realiza en dos vectores. En algunos ejemplos, la operación matemática es una de multiplicación, división, suma o resta de matrices. En algunos ejemplos, la operación matemática incluye la suma o resta de un vector escalar (por ejemplo, un vector de polarización). En algunos ejemplos, la operación matemática incluye otras operaciones matriciales, como inversión, descomposición, transposición o cálculo de un determinante.
En algunos ejemplos del método, la pluralidad de matrices o vectores comprende una disposición de mantisas con o sin signo. En algunos ejemplos, el exponente común compartido se almacena en una única ubicación en la memoria. En algunos ejemplos, el exponente común se aplica a todos los valores almacenados en una matriz o vector respectivo. En otros ejemplos, se puede aplicar un exponente común para un conjunto de varias filas de una matriz o vector respectivo. Por ejemplo, cada fila puede tener su propio exponente común asociado. En algunos ejemplos, una porción de una matriz está asociada con el exponente común.
En algunos ejemplos del método, la selección del exponente común actualizado comprende determinar una media, una desviación estándar o una media y una desviación estándar para los valores absolutos de la matriz o vector de salida. En algunos ejemplos, el método incluye seleccionar el exponente en función de un intervalo de confianza para los valores de la matriz o vector de salida. En algunos ejemplos, la selección del exponente común actualizado se basa en un número predefinido de valores de elementos de salida previos calculados para la matriz o vector de salida. Por ejemplo, el número predefinido puede ser cualquier número adecuado de valores, que incluyen: 1, 2, 4, 8, 16, 32, 48, 64, 128, 256, 512, 1024 o 8192. En algunos ejemplos, los valores de los elementos de salida anteriores no se calculan dinámicamente, sino que se asignan estáticamente antes de realizar una operación en una representación BFP. En algunos ejemplos del método, se aplica un exponente común para algunos, pero no todos los valores en una matriz o vector respectivo de la pluralidad de matrices o vectores. En algunos ejemplos, se usa un solo exponente común. En algunos ejemplos, se asigna un exponente común para cada fila o columna de una matriz. En algunos ejemplos, seleccionar el exponente común actualizado incluye evaluar el error introducido por el exponente común actualizado seleccionado para el vector de matriz de salida. Por ejemplo, se puede calcular una magnitud de error y comparar con un valor predeterminado para determinar si se debe ajustar el exponente común seleccionado.
En algunos ejemplos de la tecnología divulgada, un sistema para realizar operaciones matriciales y/o vectoriales usando una representación BFP incluye una unidad de procesamiento de propósito general y una memoria configurada para controlar el funcionamiento de una red neuronal; y
En algunos ejemplos de la tecnología divulgada, el sistema está configurado para actualizar los valores de los nodos para una red neuronal con los valores de los elementos producidos al realizar la operación matemática. En algunos ejemplos, la red neuronal es un DNN, CNN, LSTM o GRU. En algunos ejemplos, la red neuronal se implementa utilizando un procesador de propósito general, incluido un procesador de propósito general adaptado para usar instrucciones vectoriales o s Im D, como instrucciones SSE, SSE2 o AVX x86_64. El hardware de red neuronal utilizado para los métodos divulgados también puede incluir procesadores vectoriales, circuitos integrados personalizados, circuitos integrados específicos de la aplicación (ASIC), matrices de puertas programables en campo (FPGA), unidades de procesamiento de gráficos (GPU), procesadores de redes neuronales y/o componentes de procesamiento de señales digitales. En ejemplos de otras aplicaciones que no usan redes neuronales, se puede emplear hardware similar para operar en representaciones BFP, incluidos los procesadores de propósito general o especializados, ASIC, SoC, FPGA, GPU y/o DSP mencionados anteriormente.
En algunos ejemplos del sistema, los valores de las matrices y los exponentes compartidos se pueden almacenar en cualquier dispositivo de almacenamiento de memoria adecuado. Por ejemplo, para las matrices y los exponentes compartidos se pueden almacenar en una memoria direccionable (por ejemplo, memoria dinámica de acceso aleatorio (DRAM, incluyendo DDR, DDR2, etc., DRAM), DRAM integrada (eDRAM) o memoria de acceso aleatorio estático (SRAM), una disposición de pestillos, una disposición de flip-flops, un archivo de registro, una memoria de acceso aleatorio en bloque (RAM de bloque) (a veces denominada "bloques de memoria"), una memoria intermedia primero en entrar, primero en salir (FIFO) o un registro de desplazamiento. En algunos ejemplos, los valores de las matrices se almacenan en una memoria direccionable o un archivo de registro y los valores de los exponentes compartidos se almacenan en varios flip-flops o pestillos. En algunos ejemplos, el almacenamiento, como flip-flops o registros, se asigna para almacenar valores de exponentes compartidos de forma estática (por ejemplo, un registro almacena todos los valores de exponentes en una etapa particular del procesamiento de BFP, o se asigna un registro por columna/fila de la matriz). En algunos ejemplos, el almacenamiento se asigna para almacenar los exponentes de forma dinámica. En algunos ejemplos, se puede acceder a los valores de exponente realizando una búsqueda en la tabla (por ejemplo, utilizando un par de filas y columnas de una matriz como índice para identificar una ubicación de almacenamiento de exponente compartido).
En algunos ejemplos, el sistema está configurado además para realizar operaciones, incluida la realización de una operación matemática en dos o más de una pluralidad de matrices o vectores, producir una matriz o vector de salida, basado en la matriz o vector de salida, seleccionar un exponente común actualizado y producir una representación BFP de una matriz o vector actualizado, al menos dos elementos de la matriz o vector actualizado que comparten un exponente común. En algunos ejemplos, el sistema está configurado para asignar uno de una pluralidad de exponentes comunes a una mantisa respectiva para cada elemento en una matriz o vector.
En algunos ejemplos, las operaciones se realizan con dispositivos lógicos reconfigurables (que incluyen, por ejemplo, FPGA). Las operaciones realizadas con los dispositivos lógicos reconfigurables pueden incluir almacenar mantisas y/o exponentes para una serie de la matriz o vector de salida en una memoria, donde la selección de los exponentes comunes actualizados se basa en las mantisas y/o exponentes almacenados en la memoria. La memoria utilizada para almacenar matrices y/o vectores puede incluir uno o más de los siguientes: una memoria direccionable, un archivo de registro, una memoria de bloque de acceso aleatorio (RAM), una memoria intermedia FIFO o un registro de desplazamiento. En algunos ejemplos, el sistema realiza además la adición de un primer exponente común para una primera matriz o vector de la pluralidad de matrices o vectores a un segundo exponente común para una segunda matriz o vector de la pluralidad de matrices o vectores.
En algunos ejemplos, la operación matemática es una de multiplicación, división, suma o resta de matrices. En algunos ejemplos, la operación matemática incluye la suma o resta de un vector escalar (por ejemplo, un vector de polarización). En algunos ejemplos, la operación matemática incluye otras operaciones matriciales, como inversión, descomposición, transposición o cálculo de un determinante. En algunos ejemplos, la operación incluye múltiples operaciones.
En algunos ejemplos de la tecnología divulgada, el sistema incluye un multiprocesador con varios núcleos de procesamiento neuronal. En algunos ejemplos, el sistema incluye un secuenciador. En algunos ejemplos, el sistema incluye un secuenciador acoplado a una sola columna funcional (por ejemplo, una columna multiplicadora). En otros ejemplos, dos o más columnas funcionales (por ejemplo, dos o más columnas multiplicadoras) se acoplan al secuenciador y se utilizan para realizar operaciones de representación BFP, incluida la multiplicación de disposición sistólica. En algunos ejemplos, la columna funcional incluye memorias intermedias de entrada configurados para recibir operandos de una matriz o vector almacenado en la memoria. En algunos ejemplos, la columna del multiplicador incluye un multiplicador y un sumador. En otros ejemplos, se proporcionan otras unidades funcionales en lugar de o además de un multiplicador y sumador, incluidos sustractores, divisores, sumadores o cambiadores. En algún ejemplo, la columna del multiplicador incluye una o más unidades lógicas y aritméticas (ALU) configuradas para realizar una operación seleccionada en los elementos de entrada. En algunos ejemplos, se proporciona una unidad funcional para aplicar una activación, transferencia u otra función a la salida de la unidad funcional anterior en la columna. En los ejemplos en los que se utilizan dos o más columnas funcionales, se puede utilizar un relé para enviar operandos desde una primera columna a una segunda columna, o para enviar operandos a y desde columnas acopladas. En algunos ejemplos, la columna funcional incluye una memoria intermedia de salida para enviar operandos de la columna, por ejemplo, al secuenciador.
En algunos ejemplos de la tecnología divulgada, uno o más dispositivos de almacenamiento legibles por ordenador o memoria que almacenan instrucciones legibles por ordenador que, cuando se ejecutan por un ordenador, hacen que el ordenador realice al menos cualquiera de los métodos descritos. En algunos ejemplos, un sistema está configurado para realizar al menos cualquiera de los métodos descritos. En algunos ejemplos, un sistema está acoplado a dispositivos de almacenamiento legibles por ordenador o memoria que almacena instrucciones legibles por ordenador que, cuando se ejecutan, hacen que el sistema ejecute al menos cualquiera de los métodos descritos.
En vista de las muchas realizaciones posibles a las que se pueden aplicar los principios de la materia objeto descrita, debe reconocerse que las realizaciones ilustradas son solo ejemplos preferidos y no deben tomarse como limitantes del ámbito de las reivindicaciones a esos ejemplos preferidos. Más bien, el ámbito del objeto reivindicado se define mediante las siguientes reivindicaciones. Por lo tanto, reivindicamos como nuestra invención todo lo que entra dentro del ámbito de estas reivindicaciones.

Claims (15)

REIVINDICACIONES
1. Un método que comprende:
configurar un circuito que comprende un dispositivo lógico reconfigurable, un componente de procesador de señal digital o un componente de red neuronal para realizar operaciones de bloque de punto flotante, comprendiendo las operaciones:
producir (1110) una representación de bloque de punto flotante, BFP, de una pluralidad de matrices o vectores, en la que al menos dos elementos, pero no todos los elementos de las respectivas matrices o vectores comparten un exponente común en la representación de BFP;
realizar (1120) una operación matemática en la representación BFP de dos o más de la pluralidad de matrices o vectores que produce una matriz o vector de salida; y
basado en la matriz de salida o vector:
seleccionar (1130) un exponente común actualizado para al menos dos o más pero no todos los elementos de la matriz o vector de salida; y
producir (1140) una representación BFP de una matriz o vector actualizado, al menos dos elementos, pero no todos los elementos de la matriz o vector actualizado que comparten el exponente común actualizado seleccionado.
2. El método de la reivindicación 1, en el que la realización de la operación matemática comprende:
realizar operaciones en una o más mantisas y/o exponentes para una primera matriz o vector de la pluralidad de matrices o vectores en combinación con realizar operaciones en una o más mantisas y/o exponentes para una segunda matriz o vector de la pluralidad de matrices o vectores.
3. El método de la reivindicación 1 o la reivindicación 2, en el que la realización de la operación matemática comprende: realizar una multiplicación de matriz de disposición sistólica para mantisas almacenadas en una primera matriz o vector de la pluralidad de matrices o vectores por mantisas almacenadas en una segunda matriz o vector de la pluralidad de matrices o vectores.
4. El método de una cualquiera de las reivindicaciones 1-3, en el que la realización de la operación matemática comprende: añadir un vector de polarización a un producto de la pluralidad de matrices o vectores.
5. El método de una cualquiera de las reivindicaciones 1-4, en el que realizar la operación matemática comprende: realizar una función adicional a un producto de la pluralidad de matrices o vectores.
6. El método de una cualquiera de las reivindicaciones 1-5, en el que la realización de la operación matemática en dos o más de la pluralidad de matrices o vectores comprende:
realizar la multiplicación de matrices y añadir un primer exponente común para una primera matriz o vector de la pluralidad de matrices o vectores a un segundo exponente común para una segunda matriz o vector de la pluralidad de matrices o vectores;
realizar la división matricial y restar un primer exponente común para una primera matriz o vector de la pluralidad de matrices o vectores de un segundo exponente común para una segunda matriz o vector de la pluralidad de matrices o vectores; o
realizar la suma o resta de matrices y desplazar una mantisa de al menos una matriz o vector de la pluralidad de matrices o vectores.
7. El método de cualquiera de las reivindicaciones 1-6, en el que la selección del exponente común actualizado comprende calcular una media, desviación estándar y/o varianza para una porción, pero no todos los valores de los elementos de salida calculados para la matriz o vector de salida.
8. El método de una cualquiera de las reivindicaciones 1-7, en el que la selección del exponente común actualizado se selecciona basándose en un intervalo de confianza para los valores de la matriz o vector de salida.
9. El método de una cualquiera de las reivindicaciones 1-8, en el que la selección del exponente común actualizado se selecciona basándose en un número predefinido de valores de elementos de salida previos calculados para la matriz o vector de salida.
10. El método de una cualquiera de las reivindicaciones 1-9, en el que la selección del exponente común actualizado comprende evaluar el error introducido por el exponente común actualizado seleccionado para el vector de matriz de salida.
11. El método de una cualquiera de las reivindicaciones 1-10, que comprende además actualizar los valores de los nodos para una red neuronal con los valores de los elementos producidos al realizar la operación matemática.
12. El método de una cualquiera de las reivindicaciones 1-11, en el que el método comprende, además: realizar una operación en la matriz o vector de salida realizando una búsqueda en la tabla para acceder al exponente común actualizado.
13. Uno o más dispositivos de almacenamiento legibles por ordenador o memoria que almacena instrucciones legibles por ordenador que, cuando son ejecutadas por un ordenador, hacen que el ordenador realice el método de cualquiera de las reivindicaciones 1-12.
14. Un sistema que comprende:
una unidad de procesamiento de uso general (100, 200) y una memoria (245) configuradas para controlar el funcionamiento de una red neuronal; y
uno o más dispositivos lógicos programables (700, 900, 1000) que comprenden la red neuronal (600), implementándose una pluralidad de nodos de la red neuronal con los dispositivos lógicos programables mediante la realización de operaciones que comprenden:
producir (1110) una representación de bloque de punto flotante, BFP, de una pluralidad de matrices o vectores, en la que al menos dos elementos, pero no todos los elementos de las respectivas matrices o vectores comparten un exponente común en su representación BFP;
realizar (1120) una operación matemática en la representación BFP de dos o más de la pluralidad de matrices o vectores que produce una matriz o vector de salida; y
basado en la matriz de salida o vector:
seleccionar (1130) un exponente común actualizado compartido por al menos dos, pero no todos los elementos de la matriz o vector de salida;
almacenar el exponente común actualizado en una única ubicación de memoria accesible a los dispositivos lógicos programables; y
producir (1140) una representación BFP de una matriz o vector actualizado, al menos dos elementos, pero no todos los elementos de la matriz o vector actualizado que comparten el exponente común actualizado seleccionado.
15. El sistema de la reivindicación 14, en el que las operaciones realizadas por los dispositivos lógicos programables comprenden, además:
almacenar las mantisas y/o exponentes de una serie de la matriz o vector de salida en una memoria;
en el que la selección de los exponentes comunes actualizados se basa en las mantisas y/o exponentes almacenados en la memoria; y
en el que la memoria es una de las siguientes: una memoria direccionable, un archivo de registro, una memoria de bloque de acceso aleatorio, RAM, una memoria intermedia FIFO o un registro de desplazamiento.
ES17822831T 2016-12-07 2017-12-01 Bloque de punto flotante para implementación de red neural Active ES2871554T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201662431364P 2016-12-07 2016-12-07
US15/592,021 US10528321B2 (en) 2016-12-07 2017-05-10 Block floating point for neural network implementations
PCT/US2017/064150 WO2018106526A1 (en) 2016-12-07 2017-12-01 Block floating point for neural network implementations

Publications (1)

Publication Number Publication Date
ES2871554T3 true ES2871554T3 (es) 2021-10-29

Family

ID=62243083

Family Applications (1)

Application Number Title Priority Date Filing Date
ES17822831T Active ES2871554T3 (es) 2016-12-07 2017-12-01 Bloque de punto flotante para implementación de red neural

Country Status (5)

Country Link
US (2) US10528321B2 (es)
EP (2) EP3779669B1 (es)
CN (2) CN110050256B (es)
ES (1) ES2871554T3 (es)
WO (1) WO2018106526A1 (es)

Families Citing this family (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2549933B (en) * 2016-04-27 2018-08-01 Imagination Tech Ltd Verification of hardware designs to implement floating point power functions
US10528321B2 (en) 2016-12-07 2020-01-07 Microsoft Technology Licensing, Llc Block floating point for neural network implementations
US10699189B2 (en) 2017-02-23 2020-06-30 Cerebras Systems Inc. Accelerated deep learning
US11037330B2 (en) 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
JP7173709B2 (ja) * 2017-04-14 2022-11-16 株式会社半導体エネルギー研究所 ニューラルネットワーク回路
US11488004B2 (en) 2017-04-17 2022-11-01 Cerebras Systems Inc. Neuron smearing for accelerated deep learning
WO2018193379A1 (en) 2017-04-17 2018-10-25 Cerebras Systems Inc. Backpressure for accelerated deep learning
US10515303B2 (en) 2017-04-17 2019-12-24 Cerebras Systems Inc. Wavelet representation for accelerated deep learning
US11775313B2 (en) * 2017-05-26 2023-10-03 Purdue Research Foundation Hardware accelerator for convolutional neural networks and method of operation thereof
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers
US10790828B1 (en) * 2017-07-21 2020-09-29 X Development Llc Application specific integrated circuit accelerators
US10879904B1 (en) 2017-07-21 2020-12-29 X Development Llc Application specific integrated circuit accelerators
US10167800B1 (en) * 2017-08-18 2019-01-01 Microsoft Technology Licensing, Llc Hardware node having a matrix vector unit with block-floating point processing
GB2568230B (en) * 2017-10-20 2020-06-03 Graphcore Ltd Processing in neural networks
GB2568084B (en) 2017-11-03 2022-01-12 Imagination Tech Ltd Error allocation format selection for hardware implementation of deep neural network
US11216250B2 (en) * 2017-12-06 2022-01-04 Advanced Micro Devices, Inc. Dynamic, variable bit-width numerical precision on field-programmable gate arrays for machine learning tasks
WO2019114842A1 (zh) * 2017-12-14 2019-06-20 北京中科寒武纪科技有限公司 一种集成电路芯片装置
US11636327B2 (en) * 2017-12-29 2023-04-25 Intel Corporation Machine learning sparse computation mechanism for arbitrary neural networks, arithmetic compute microarchitecture, and sparsity for training mechanism
US11164072B2 (en) 2018-02-08 2021-11-02 Western Digital Technologies, Inc. Convolution engines for systolic neural network processor
US10796198B2 (en) 2018-02-08 2020-10-06 Western Digital Technologies, Inc. Adjusting enhancement coefficients for neural network engine
JP7056225B2 (ja) * 2018-02-26 2022-04-19 富士通株式会社 演算処理装置、情報処理装置、情報処理方法、およびプログラム
CN116866565A (zh) * 2018-03-21 2023-10-10 Lx 半导体科技有限公司 图像编码/解码方法、存储介质以及图像数据的传输方法
US10621489B2 (en) 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
US10691413B2 (en) * 2018-05-04 2020-06-23 Microsoft Technology Licensing, Llc Block floating point computations using reduced bit-width vectors
US10579334B2 (en) * 2018-05-08 2020-03-03 Microsoft Technology Licensing, Llc Block floating point computations using shared exponents
US20190042944A1 (en) * 2018-06-08 2019-02-07 Intel Corporation Artificial neural network training using flexible floating point tensors
US11062202B2 (en) 2018-07-25 2021-07-13 Cerebras Systems Inc. Numerical representation for neural networks
CN110794254B (zh) * 2018-08-01 2022-04-15 北京映翰通网络技术股份有限公司 一种基于强化学习的配电网故障预测方法及系统
US10956814B2 (en) * 2018-08-27 2021-03-23 Silicon Storage Technology, Inc. Configurable analog neural memory system for deep learning neural network
US11328207B2 (en) 2018-08-28 2022-05-10 Cerebras Systems Inc. Scaled compute fabric for accelerated deep learning
WO2020044238A1 (en) 2018-08-29 2020-03-05 Cerebras Systems Inc. Processor element redundancy for accelerated deep learning
WO2020044208A1 (en) 2018-08-29 2020-03-05 Cerebras Systems Inc. Isa enhancements for accelerated deep learning
US10705967B2 (en) * 2018-10-15 2020-07-07 Intel Corporation Programmable interface to in-memory cache processor
KR20200061164A (ko) * 2018-11-23 2020-06-02 삼성전자주식회사 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
CN109558838B (zh) * 2018-11-29 2021-02-02 北京经纬恒润科技股份有限公司 一种物体识别方法及系统
CN111258935B (zh) * 2018-11-30 2022-01-25 上海寒武纪信息科技有限公司 数据传输装置和方法
US11615307B2 (en) 2018-12-06 2023-03-28 MIPS Tech, LLC Neural network data computation using mixed-precision
US11893470B2 (en) 2018-12-06 2024-02-06 MIPS Tech, LLC Neural network processing using specialized data representation
US11640522B2 (en) 2018-12-13 2023-05-02 Tybalt, Llc Computational efficiency improvements for artificial neural networks
US11586883B2 (en) * 2018-12-14 2023-02-21 Microsoft Technology Licensing, Llc Residual quantization for neural networks
US11676003B2 (en) 2018-12-18 2023-06-13 Microsoft Technology Licensing, Llc Training neural network accelerators using mixed precision data formats
US11138504B2 (en) * 2018-12-28 2021-10-05 Datalogic Ip Tech S.R.L. Deployment of deep neural networks (DNN) in embedded devices by means of peer-to-peer routing between computational points
US11562247B2 (en) * 2019-01-24 2023-01-24 Microsoft Technology Licensing, Llc Neural network activation compression with non-uniform mantissas
US11526737B2 (en) * 2019-02-01 2022-12-13 Lightelligence, Inc. Processing matrix operations for rate limited systems
US10963219B2 (en) 2019-02-06 2021-03-30 International Business Machines Corporation Hybrid floating point representation for deep learning acceleration
US11475102B2 (en) 2019-02-21 2022-10-18 Samsung Electronics Co., Ltd. Adaptive matrix multiplication accelerator for machine learning and deep learning applications
US20200302284A1 (en) * 2019-03-18 2020-09-24 Nvidia Corporation Data compression for a neural network
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
DE102019107817A1 (de) * 2019-03-27 2020-10-01 Dspace Digital Signal Processing And Control Engineering Gmbh Verfahren zur Simulation eines dynamischen Systems
US11238557B2 (en) * 2019-03-29 2022-02-01 Intel Corporation Workload-based maximum current
US11556615B2 (en) * 2019-05-03 2023-01-17 Tesla, Inc. Data path for scalable matrix node engine with mixed data formats
US11907828B2 (en) * 2019-09-03 2024-02-20 International Business Machines Corporation Deep neural network on field-programmable gate array
US11327923B2 (en) 2019-09-04 2022-05-10 SambaNova Systems, Inc. Sigmoid function in hardware and a reconfigurable data processor including same
US11327713B2 (en) * 2019-10-01 2022-05-10 SambaNova Systems, Inc. Computation units for functions based on lookup tables
KR20210052702A (ko) * 2019-10-30 2021-05-11 삼성전자주식회사 뉴럴 프로세싱 유닛 및 이를 포함하는 전자장치
US12015428B2 (en) * 2019-11-05 2024-06-18 Flex Logix Technologies, Inc. MAC processing pipeline using filter weights having enhanced dynamic range, and methods of operating same
US11836490B2 (en) * 2019-11-14 2023-12-05 Nvidia Corporation Kernel coefficient quantization
US11615295B2 (en) 2019-11-15 2023-03-28 Baidu Usa Llc Distributed AI training topology based on flexible cable connection
US11328038B2 (en) 2019-11-25 2022-05-10 SambaNova Systems, Inc. Computational units for batch normalization
US11907719B2 (en) * 2019-12-13 2024-02-20 Intel Corporation FPGA specialist processing block for machine learning
US11586889B1 (en) * 2019-12-13 2023-02-21 Amazon Technologies, Inc. Sensory perception accelerator
CN112988110A (zh) * 2019-12-17 2021-06-18 深圳市中兴微电子技术有限公司 一种浮点处理装置和数据处理方法
CN111178087B (zh) * 2019-12-20 2023-05-09 沈阳雅译网络技术有限公司 一种基于离散型注意力机制的神经机器翻译解码加速方法
US11625605B2 (en) * 2019-12-20 2023-04-11 Nvidia Corporation Selecting computational kernel variants using neural networks
US11829439B2 (en) * 2019-12-30 2023-11-28 Qualcomm Incorporated Methods and apparatus to perform matrix multiplication in a streaming processor
US11687778B2 (en) 2020-01-06 2023-06-27 The Research Foundation For The State University Of New York Fakecatcher: detection of synthetic portrait videos using biological signals
US11836629B2 (en) 2020-01-15 2023-12-05 SambaNova Systems, Inc. Computationally efficient softmax loss gradient backpropagation
US11249723B2 (en) * 2020-04-02 2022-02-15 Micron Technology, Inc. Posit tensor processing
JP6896306B1 (ja) * 2020-04-13 2021-06-30 LeapMind株式会社 ニューラルネットワーク回路、エッジデバイスおよびニューラルネットワーク演算方法
US11599334B2 (en) * 2020-06-09 2023-03-07 VeriSilicon Microelectronics Enhanced multiply accumulate device for neural networks
KR20210154502A (ko) * 2020-06-12 2021-12-21 삼성전자주식회사 부동 소수점 연산을 수행하는 뉴럴 네트워크 장치 및 그의 동작 방법
CN111753253B (zh) * 2020-06-28 2024-05-28 地平线(上海)人工智能技术有限公司 数据处理方法和装置
CN111766505B (zh) * 2020-06-30 2023-04-25 山东云海国创云计算装备产业创新中心有限公司 一种集成电路的扫描测试装置
US11809908B2 (en) 2020-07-07 2023-11-07 SambaNova Systems, Inc. Runtime virtualization of reconfigurable data flow resources
US11782729B2 (en) 2020-08-18 2023-10-10 SambaNova Systems, Inc. Runtime patching of configuration files
US11915126B2 (en) 2020-09-04 2024-02-27 Recogni Inc. Low power hardware architecture for a convolutional neural network
CN112557907A (zh) * 2020-12-17 2021-03-26 杭州六纪科技有限公司 一种基于gru-rnn的电动汽车锂离子电池的soc估计方法
EP4338083A1 (en) 2021-05-09 2024-03-20 Technische Universität Darmstadt Mitigating fpga related risks
WO2022271163A1 (en) * 2021-06-23 2022-12-29 Pqsecure Technologies, Llc Computer processing architecture and method for supporting multiple public-key cryptosystems based on exponentiation
US20210326111A1 (en) * 2021-06-25 2021-10-21 Intel Corporation FPGA Processing Block for Machine Learning or Digital Signal Processing Operations
CN114265575A (zh) * 2021-12-31 2022-04-01 上海阵量智能科技有限公司 浮点数处理方法、装置、电子设备及存储介质
US11829321B2 (en) * 2022-03-24 2023-11-28 Google Llc General-purpose systolic array
CN117632081B (zh) * 2024-01-24 2024-04-19 沐曦集成电路(上海)有限公司 一种用于gpu的矩阵数据处理系统

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6144977A (en) 1995-07-10 2000-11-07 Motorola, Inc. Circuit and method of converting a floating point number to a programmable fixed point number
US6675187B1 (en) * 1999-06-10 2004-01-06 Agere Systems Inc. Pipelined linear array of processor elements for performing matrix computations
EP1429244A4 (en) * 2001-09-18 2006-10-04 Asahi Chemical Ind COMPILER
US20040122887A1 (en) * 2002-12-20 2004-06-24 Macy William W. Efficient multiplication of small matrices using SIMD registers
EP2541431A1 (en) * 2005-10-07 2013-01-02 Altera Corporation Data input for systolic array processors
DE212007000102U1 (de) * 2007-09-11 2010-03-18 Core Logic, Inc. Rekonfigurierbarer Array-Prozessor für Gleitkomma-Operationen
US8280939B2 (en) 2008-05-22 2012-10-02 Videoiq, Inc. Methods and apparatus for automatic accuracy-sustaining scaling of block-floating-point operands
US8326904B2 (en) * 2009-01-27 2012-12-04 International Business Machines Corporation Trigonometric summation vector execution unit
US8301803B2 (en) * 2009-10-23 2012-10-30 Samplify Systems, Inc. Block floating point compression of signal data
EP2431865B1 (en) * 2010-06-22 2018-05-23 Nec Corporation Semiconductor integrated circuit and index calculation method
US20140289445A1 (en) 2013-03-22 2014-09-25 Antony Savich Hardware accelerator system and method
US9979413B2 (en) * 2014-09-25 2018-05-22 Nokia Solutions And Networks Oy Improving communication efficiency
US10373050B2 (en) 2015-05-08 2019-08-06 Qualcomm Incorporated Fixed point neural network based on floating point neural network quantization
US10528321B2 (en) 2016-12-07 2020-01-07 Microsoft Technology Licensing, Llc Block floating point for neural network implementations

Also Published As

Publication number Publication date
US10528321B2 (en) 2020-01-07
US11822899B2 (en) 2023-11-21
US20200159493A1 (en) 2020-05-21
CN110050256A (zh) 2019-07-23
CN110050256B (zh) 2023-07-25
EP3552090A1 (en) 2019-10-16
WO2018106526A1 (en) 2018-06-14
EP3779669B1 (en) 2024-04-24
CN116894145A (zh) 2023-10-17
EP3779669A1 (en) 2021-02-17
US20180157465A1 (en) 2018-06-07
EP3552090B1 (en) 2021-04-28

Similar Documents

Publication Publication Date Title
ES2871554T3 (es) Bloque de punto flotante para implementación de red neural
Simon et al. BLADE: An in-cache computing architecture for edge devices
Ma et al. Scalable and modularized RTL compilation of convolutional neural networks onto FPGA
JP5089776B2 (ja) 浮動小数点演算のための再構成アレイプロセッサ
US9489343B2 (en) System and method for sparse matrix vector multiplication processing
Nagasu et al. FPGA-based tsunami simulation: Performance comparison with GPUs, and roofline model for scalability analysis
CN111506520B (zh) 一种地址生成的方法、相关装置以及存储介质
Waidyasooriya et al. Highly-parallel FPGA accelerator for simulated quantum annealing
Nguyen et al. ShortcutFusion: From tensorflow to FPGA-based accelerator with a reuse-aware memory allocation for shortcut data
Zhou et al. Addressing sparsity in deep neural networks
Noh et al. FlexBlock: A flexible DNN training accelerator with multi-mode block floating point support
Kim FPGA based neural network accelerators
Gan et al. Data flow computing in geoscience applications
Lou et al. RV-CNN: Flexible and efficient instruction set for CNNs based on RISC-V processors
Verdoscia et al. A Data‐Flow Soft‐Core Processor for Accelerating Scientific Calculation on FPGAs
Chang et al. A reconfigurable neural network processor with tile-grained multicore pipeline for object detection on FPGA
Zhang et al. Graphagile: An fpga-based overlay accelerator for low-latency gnn inference
Shivapakash et al. A power efficiency enhancements of a multi-bit accelerator for memory prohibitive deep neural networks
Yanamala et al. An Efficient Configurable Hardware Accelerator Design for CNN on Low Memory 32-Bit Edge Device
US20230162012A1 (en) Basic wavelet filtering for accelerated deep learning
Gan et al. Solving mesoscale atmospheric dynamics using a reconfigurable dataflow architecture
Tufa et al. Acceleration of Deep neural network training using field programmable gate arrays
Zhao Matrix inversion on a many-core platform
Sano et al. Performance evaluation of FPGA-based custom accelerators for iterative linear-equation solvers
Patan et al. Design and implementation of optimized register file for streaming applications