ES3048775T3 - Computer processor for higher precision computations using a mixed-precision decomposition of operations - Google Patents

Computer processor for higher precision computations using a mixed-precision decomposition of operations

Info

Publication number
ES3048775T3
ES3048775T3 ES22167262T ES22167262T ES3048775T3 ES 3048775 T3 ES3048775 T3 ES 3048775T3 ES 22167262 T ES22167262 T ES 22167262T ES 22167262 T ES22167262 T ES 22167262T ES 3048775 T3 ES3048775 T3 ES 3048775T3
Authority
ES
Spain
Prior art keywords
values
floating
value
point
bits
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
ES22167262T
Other languages
English (en)
Inventor
Gregory Henry
Alexander Heinecke
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of ES3048775T3 publication Critical patent/ES3048775T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/16Constructional details or arrangements
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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
    • G06F7/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Nonlinear Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Human Computer Interaction (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

Las realizaciones aquí detalladas se refieren a operaciones aritméticas con valores de coma flotante. Un procesador de ejemplo incluye circuitos de decodificación para decodificar una instrucción que especifica las ubicaciones de varios operandos, cuyos valores están en formato de coma flotante. El procesador de ejemplo incluye además circuitos de ejecución para ejecutar la instrucción decodificada. Esta ejecución incluye: convertir los valores de cada operando en varios valores de menor precisión, donde se almacena un exponente para cada operando; realizar operaciones aritméticas entre valores de menor precisión convertidos a partir de los valores de la pluralidad de operandos; y generar un valor de coma flotante mediante la conversión del valor resultante de las operaciones aritméticas al formato de coma flotante y almacenarlo. (Traducción automática con Google Translate, sin valor legal)

Description

[0001] DESCRIPCIÓN
[0002] Procesador de computadora para cálculos de mayor precisión utilizando una descomposición de operaciones de precisión mixta
[0003] CAMPO TÉCNICO
[0004] Las realizaciones de la invención se relacionan con el campo de la arquitectura de procesadores de computadora; y más específicamente, con la conversión de precisión de valores para operaciones aritméticas dentro de una arquitectura de procesador de computadora.
[0005] TÉCNICA ANTERIOR
[0006] Las matrices, vectores y otros conjuntos de datos multidimensionales son cada vez más importantes en muchas tareas informáticas, tales como el aprendizaje automático y otros procesamientos de datos masivos. Realizar operaciones aritméticas en elementos de datos de punto flotante en estos conjuntos de datos multidimensionales puede consumir muchos recursos y/o mucho tiempo en términos de computación.
[0007] El documento US 8655937 B1 se refiere a la realización de una división de enteros utilizando unidades de punto flotante. En particular, la división de enteros se realiza utilizando una unidad de hardware de punto flotante que admite variables de punto flotante de un determinado tamaño de bits. El numerador y el denominador son enteros que tienen un tamaño de bits mayor que el tamaño de bits de las variables de punto flotante soportadas por la unidad de hardware de punto flotante. El documento US 9 128697 B1 se refiere al almacenamiento y manipulación de números dentro de procesadores. Por ejemplo, una unidad de procesamiento de datos está configurada para representar números de punto flotante utilizando una primera precisión con un primer número de bits y una segunda precisión con un segundo número de bits, donde el segundo número de bits es mayor que el primer número de bits. Se puede establecer un valor de tipo de punto flotante en un almacén de memoria para indicar si una primera representación de un número de punto flotante utiliza el primer o el segundo número de bits. Se puede almacenar en consecuencia una segunda representación del número de punto flotante y el valor de tipo de punto flotante. La segunda representación puede corresponder a la primera representación con uno o más bits desplazados.
[0008] El documento US 2017/293470 A1 se refiere a circuitos de punto flotante para realizar operaciones de punto flotante con conversión descendente. Por ejemplo, una unidad de punto flotante está configurada para realizar operaciones de sumamultiplicación fusionadas basadas en un primer y un segundo tipo de instrucción diferentes. El primer tipo de instrucción especifica el resultado en el primer formato de punto flotante y el segundo tipo de instrucción especifica la suma multiplicativa fusionada de operandos de entrada en el primer formato de punto flotante para generar un resultado en un segundo formato de punto flotante de menor precisión. El primer formato puede ser de 32 bits y el segundo formato puede ser de 16 bits. La unidad de punto flotante incluye circuitos de redondeo, circuitos de exponente y/o circuitos de incremento configurados para generar señales para el segundo tipo de instrucción en la misma etapa de canalización que para el primer tipo de instrucción.
[0009] RESUMEN
[0010] La presente invención se define en las reivindicaciones independientes. Las reivindicaciones dependientes definen realizaciones de las mismas.
[0011] BREVE DESCRIPCIÓN DE LOS DIBUJOS.
[0012] La invención se puede entender mejor haciendo referencia a la siguiente descripción y los dibujos adjuntos que se utilizan para mostrar realizaciones de la invención. En los dibujos:
[0013] La Figura 1 muestra operaciones de conversión de valores en punto flotante, cada uno a múltiples enteros para operaciones aritméticas, y la reconstrucción de los valores resultantes de las operaciones aritméticas nuevamente al punto flotante según una realización de la invención.
[0014] La Figura 2A muestra el pseudocódigo para convertir un valor FP32 en tres enteros de 8 bits sin signo según una realización de la invención.
[0015] La Figura 2B muestra el pseudocódigo para convertir un valor FP32 en dos enteros de 16 bits sin signo según una realización de la invención.
[0016] La Figura 2C muestra el pseudocódigo para convertir un valor FP32 en tres enteros de 8 bits con signo según una realización de la invención.
[0017] La Figura 2D muestra el pseudocódigo para convertir un valor FP32 en cuatro enteros de 8 bits sin signo según una realización de la invención.
[0018] La Figura 2E muestra el pseudocódigo para reconstruir un valor FP32 a partir de cuatro enteros de 8 bits con signo según una realización de la invención.
[0019] La Figura 3 muestra la precisión de datos de una realización de la invención que utiliza un enfoque de punto flotante en múltiples enteros en comparación con enfoques anteriores.
[0020] La Figura 4 muestra operaciones de conversión de valores en punto flotante, cada uno a múltiples puntos flotantes de menor precisión para operaciones aritméticas, y la reconstrucción de los valores resultantes de las operaciones aritméticas nuevamente al punto flotante según una realización de la invención.
[0021] La Figura 5A muestra el pseudocódigo para convertir un valor FP32 en dos valores bfloat16 según una realización de la invención.
[0022] La Figura 5B muestra el pseudocódigo para construir un valor FP32 a partir de dos valores bfloat16 según una realización de la invención.
[0023] La Figura 6 muestra la precisión de datos de una realización de la invención que utiliza un enfoque de punto flotante en múltiples puntos flotantes de menor precisión en comparación con enfoques anteriores.
[0024] La Figura 7A es un diagrama de flujo que muestra operaciones aritméticas que incluyen la conversión de valores en un punto flotante en múltiples valores de menor precisión y la reconstrucción de los valores resultantes nuevamente al punto flotante según una realización de la invención.
[0025] La Figura 7B es un diagrama de flujo que muestra la conversión de valores en punto flotante a múltiples valores de menor precisión según una realización de la invención.
[0026] La Figura 8A es un diagrama de bloques que muestra tanto una canalización en orden ejemplar como una canalización de ejecución/emisión fuera de orden, de cambio de nombre de registro ejemplar de acuerdo con una realizaciones de la invención.
[0027] La Figura 8B es un diagrama de bloques que muestra una realización ejemplar de un núcleo de arquitectura en orden y un núcleo de arquitectura de ejecución/emisión fuera de orden, de cambio de nombre de registro ejemplar que se incluirá en un procesador de acuerdo con realizaciones de la invención.
[0028] La Figura 9 es un diagrama de bloques de un procesador de un solo núcleo y un procesador multinúcleo con controlador de memoria integrado y gráficos de acuerdo con realizaciones de la invención.
[0029] La Figura 10 muestra un diagrama de bloques de un sistema de acuerdo con una realización de la presente invención. La Figura 11 muestra un diagrama de bloques de un segundo sistema de acuerdo con una realización de la presente invención.
[0030] La Figura 12 muestra un diagrama de bloques de un tercer sistema de acuerdo con una realización de la presente invención.
[0031] La Figura 13 muestra un diagrama de bloques de un sistema en un chip (SoC) de acuerdo con una realización de la presente invención.
[0032] La Figura 14 muestra un diagrama de bloques que contrasta el uso de un convertidor de instrucciones de software para convertir instrucciones binarias en un conjunto de instrucciones de origen a instrucciones binarias en un conjunto de instrucciones de destino de acuerdo con realizaciones de la invención.
[0033] Las Figuras 15A y 15B son diagramas de bloques que muestran un formato de instrucción amigable con vectores genéricos y plantillas de instrucciones del mismo de acuerdo con realizaciones de la invención.
[0034] Las Figuras 16A-D son diagramas de bloques que muestran un formato de instrucción específico amigable con vectores de ejemplo según realizaciones de la invención.
[0035] La Figura 17 es un diagrama de bloques de una arquitectura de registro de acuerdo con una realización de la invención. La Figura 18A es un diagrama de bloques de un solo núcleo de procesador, junto con su conexión a la red de interconexión en chip y con su subconjunto local de la caché de nivel 2 (L2), de acuerdo con realizaciones de la invención; y la Figura 18B es una vista ampliada de parte del núcleo del procesador de la Figura 18A de acuerdo con realizaciones de la invención.
[0036] La Figura 19 ilustra una realización de mosaicos configurados.
[0037] La Figura 20 ilustra varios ejemplos de almacenamiento matricial.
[0038] La Figura 21 ilustra una realización de un sistema que utiliza un acelerador de operaciones matriciales (mosaico).
[0039] Las Figuras 22 y 23 muestran diferentes realizaciones de cómo se comparte la memoria utilizando un acelerador de operaciones matriciales.
[0040] La Figura 24 ilustra una realización de la operación de multiplicación y acumulación de matrices utilizando mosaicos ("TMMA").
[0041] La Figura 25 ilustra una realización de un subconjunto de la ejecución de una iteración de una instrucción de acumulación y multiplicación fusionada encadenada.
[0042] La Figura 26 muestra implementaciones de SIMD de tamaño potencia de dos en las que los acumuladores utilizan tamaños que son más grandes que las entradas a los multiplicadores de acuerdo con una realización.
[0044] DESCRIPCIÓN DETALLADA
[0046] En la siguiente descripción se exponen numerosos detalles específicos. Sin embargo, se entiende que se pueden practicar realizaciones de la invención sin estos detalles específicos. En otros casos no se han mostrado en detalle circuitos, estructuras y técnicas bien conocidos para no dificultar la comprensión de esta descripción.
[0048] Se pueden usar texto entre corchetes y bloques con bordes discontinuos (tales como guiones grandes, guiones pequeños, puntos y guiones, y puntos) para ilustrar operaciones opcionales que agregan características adicionales a las realizaciones de la invención. Sin embargo, dicha notación no debe interpretarse como que éstas son las únicas opciones u operaciones opcionales y/o que los bloques con bordes sólidos no son opcionales en algunas realizaciones de la invención.
[0050] Las referencias en la especificación a "una sola realización", "una realización", "una realización de ejemplo", etc., indican que la realización descrita puede incluir una característica, estructura o característica particular, pero no cada realización puede incluir necesariamente la característica, estructura o característica particular. Además, tales frases no necesariamente se refieren a la misma realización. Además, cuando se describe una característica, estructura o característica particular en relación con una realización, se asume que está dentro del conocimiento de un experto en la materia afectar dicha característica, estructura o característica en relación con otras realizaciones, ya sea que se describan explícitamente o no.
[0052] La siguiente descripción y reivindicaciones pueden utilizar los términos "acoplado" y "conectado", junto con sus derivados. Estos términos no pretenden ser sinónimos entre sí. "Acoplado" se utiliza para indicar que dos o más elementos, que pueden o no estar en contacto físico o eléctrico directo entre sí, cooperan o interactúan entre sí. "Conectado" se utiliza para indicar el establecimiento de comunicación entre dos o más elementos que están acoplados entre sí. Un "conjunto", tal como se utiliza en este documento, se refiere a cualquier número entero positivo de elementos, incluido un elemento.
[0053] Precisión de valores
[0055] En informática, los valores a menudo se representan en un formato de entero o en un formato de punto flotante. Un valor ocupa una cantidad de bits en la memoria de la computadora. Dependiendo de los rangos de valores utilizados en el cálculo, se pueden asignar diferentes cantidades de bits. Por ejemplo, un entero puede tomar 8 bits, que tiene un rango de -128 a 127 si es un entero con signo (-27 a 27-1), y un rango de 0 a 255 si es un entero sin signo (0 a 28-1). El formato de entero de 8 bits a menudo se abrevia como int8, por ejemplo, int8 para los enteros con signo y unit8 para los enteros sin signo. A excepción de los ejemplos que específicamente indican sin signo o con signo, cada vez que escribimos "int" se puede reemplazar por "uint". En informática se utilizan varios formatos de entero y la Tabla 1 muestra una lista de formatos de entero a modo de ejemplo.
[0057] T l 1. F rm n r m l
[0059]
[0062] El rango de un formato de entero es -2(n-1) a 2(n-1)-1 para enteros con signo, y 0 a 2n-1 para enteros sin signo. Un formato de entero puede representar un entero con precisión exacta, pero para números reales distintos de enteros, es decir, números irracionales o números racionales excluyendo enteros, los valores almacenados en un formato de entero son una aproximación de los valores. La aproximación de los números reales al formato de entero a menudo no es tan precisa como la de un formato de punto flotante para representar valores en el mismo rango utilizando el mismo número de bits.
[0063] Un formato de punto flotante (FP) utiliza una representación formulaica de números reales como una aproximación para soportar un equilibrio entre rango y precisión. Un valor puede representarse aproximadamente con un número fijo de dígitos significativos (el significando, que también puede denominarse "mantisa", y los dos términos se usan indistintamente) y escalarse utilizando un exponente en alguna base fija (señalar que el exponente también puede denominarse escala o escala exponencial, y estos términos se usan indistintamente); la base para la escala puede ser dos, diez o dieciséis (u otro entero). El valor se puede representar de la siguiente forma: significando x baseexponente, donde el significando puede ser un entero o un valor de punto flotante, base es un entero mayor o igual a dos y exponente es un entero. Con un número fijo de dígitos, se puede utilizar un sistema de punto flotante para representar valores de diferentes órdenes de magnitud en informática. En informática se utilizan varios formatos de punto flotante y la Tabla 2 muestra una lista de formatos de punto flotante a modo de ejemplo.
[0065] T l 2. F rm n fl n m l
[0067]
[0068]
[0071] En la Tabla 2, la precisión de los formatos de punto flotante aumenta desde el formato de punto flotante bfloatl 6 al formato de punto flotante de precisión óctuple porque se utilizan más bits para la precisión del significando (de 8 bits en bfloat16 a 237 bits en la precisión óctuple).
[0073] Dentro de los formatos de punto flotante ejemplares en la Tabla 2, bfloat16 es un formato de punto flotante relativamente nuevo que parece estar ganando terreno debido a su capacidad para funcionar bien en algoritmos de aprendizaje automático (ML) e inteligencia artificial (IA). Sin embargo, bfloat16 puede tener menos precisión que el formato de punto flotante de precisión simple (FP32), porque como se muestra en la Tabla 2, los valores FP32 tienen 8 bits de exponente y 24 bits de significando (uno implícito), mientras que los valores bfloat16 tienen 8 bits de exponente y 8 bits de significando. El tamaño reducido del significando significa que muchos valores (pero no todos) no pueden representarse con tanta precisión en el formato bfloat16 como en el formato FP32.
[0075] Dado que los circuitos/lógica dedicados se construyen utilizando el formato bfloat16 (por ejemplo, en aprendizaje automático), es deseable utilizar el formato bfloat16 para representar un valor de mayor precisión (por ejemplo, los almacenados en formato FP32, FP64, FP128 o FP256) en el cálculo y luego ejecutar operaciones aritméticas utilizando bfloat16, particularmente en el cálculo de vectores/matrices (por ejemplo, la multiplicación general de matrices, GEMM). Algunas realizaciones de la invención combinan múltiples (K) valores bfloat16 juntos para representar valores de punto flotante de mayor precisión. Dado que los valores múltiples de bfloat16 tienen bits de precisión de significando de 8xK, pueden representar un solo valor dentro de un formato de valor de precisión arbitrariamente mayor al aumentar el múltiploK.Por lo tanto, las realizaciones de la invención pueden aprovechar las unidades de hardware bfloat16 existentes (por ejemplo, circuitos) que están especializadas para operaciones aritméticas de bfloat16 y que pueden ejecutar uno o más órdenes de magnitud más rápido que una unidad/circuito de hardware de punto flotante clásico que utiliza el formato FP32, FP64, FP128 o FP256. La ejecución de las operaciones aritméticas bfloat16 utilizando las unidades/circuitos de hardware bfloat16 puede aproximarse y/o superar la precisión de FP32/64/128/256 mediante la combinación de los múltiples valores bfloat16 y, además, puede lograr una tasa de ejecución más rápida que las unidades/circuitos de hardware de punto flotante clásicos que utilizan el formato FP32, FP64, FP128 o FP256.
[0077] Además de bfloat16, el aprendizaje automático (ML) y la inteligencia artificial (IA) también utilizan ampliamente formatos de entero como int4, int8, int16, int32, int64 e inte128. En ML y/o IA, un valor de punto flotante (por ejemplo, uno almacenado en formato FP32, FP64, FP128 o FP256) se puede cuantizar para almacenarlo en un formato de entero, y el valor cuantizado en un formato de entero se utiliza luego para una aplicación de ML y/o IA (por ejemplo, en una red neuronal). La cuantización es útil en la aplicación porque el hardware basado en ML/AI a menudo incluye unidades de hardware (por ejemplo, circuitos) que están especializadas para operaciones aritméticas de enteros y que pueden ejecutar uno o más órdenes de magnitud más rápido que una unidad/circuito de hardware de punto flotante clásico que utiliza formato FP32, FP64, FP128 o FP256. La ejecución de operaciones aritméticas de enteros utilizando unidades/circuitos de hardware de enteros puede aproximarse y/o superar la precisión de FP32/64/128/256 mediante la combinación de múltiples valores enteros y, además, puede lograr una tasa de ejecución más rápida que las unidades/circuitos de hardware de punto flotante clásicos que utilizan el formato FP32, FP64, FP128 o FP256.
[0079] La conversión de un único valor de punto flotante de formato FP32, FP64, FP128 o FP256 a múltiples valores en formato bfloat16 o formatos de entero como int8 e int16 a menudo da como resultado que los valores múltiples tengan una menor precisión en cada uno de los valores múltiples que el valor de punto flotante original, porque se utilizan menos bits para representar cada uno de los valores múltiples (por lo tanto, se denominan valores de menor precisión). Sin embargo, en algunas arquitecturas informáticas existen unidades/circuitos de hardware más rápidos para los formatos bfloat16 y entero (por ejemplo, uno o más órdenes de magnitud más rápidos que una unidad/circuito de hardware de punto flotante clásico que utiliza el formato FP32, FP64, FP128 o FP256), y los valores convertidos pueden usarse en múltiples operaciones aritméticas (por ejemplo, en operaciones aritméticas vectoriales o matriciales, los valores convertidos a menudo se usan varias veces) de modo que el costo adicional (por ejemplo, tiempo de computación y recursos de hardware/software) de conversión y reconstrucción se distribuye entre las múltiples operaciones aritméticas, las realizaciones de la invención pueden dar como resultado un tiempo de operación aritmética general más rápido (lo que produce un mayor rendimiento) así como aproximadamente la misma o incluso mejor precisión que las operaciones aritméticas sin la conversión.
[0080] Los ejemplos proporcionados en esta divulgación a continuación utilizan conversiones de FP32 a bfloat16 y de FP32 a int8. Obviamente, las realizaciones de la invención no están tan limitadas, y cada uno de los valores en un formato de punto flotante (por ejemplo, un formato en la Tabla 2) puede convertirse (1) en múltiples valores en un formato de punto flotante de menor precisión (por ejemplo, otro formato que tiene menos bits de significando en la Tabla 2) o (2) en múltiples valores enteros en un formato de entero (que son de menor precisión y que pueden ser un formato en la Tabla 1 con una longitud de bits menor) utilizando la realización de la invención. Tal conversión puede lograr un tiempo de operación aritmética general más rápido (lo que genera un mayor rendimiento), así como una precisión aproximadamente igual o incluso mejor que las operaciones aritméticas sin la conversión.
[0082] Las realizaciones de la invención pueden implementar nuevas instrucciones para dicha conversión, y las instrucciones pueden usarse no solo en aprendizaje automático (ML) e inteligencia artificial (IA), sino también en aplicaciones de computación de alto rendimiento (HPC) y otras aplicaciones. Las realizaciones de la invención pueden aprovechar circuitos de hardware (por ejemplo, circuitos multiplicadores-acumuladores (MAC), circuitos de multiplicación-adición fusionada (FMA)) que están dedicados a operaciones aritméticas (por ejemplo, multiplicación general de matrices (GEMM)) en formatos de datos particulares (por ejemplo, bfloat16 o varios formatos de entero). Además de y/o como alternativa al tiempo de operación aritmética general más rápido como se mencionó, las realizaciones de la invención pueden ajustar la precisión de la operación aritmética como se explica con más detalles a continuación. Señalar que, si bien los ejemplos se dan para la multiplicación de matrices, las realizaciones de la invención pueden aplicarse a otras operaciones aritméticas (una o más de suma, resta, multiplicación y división) entre matrices 1D, 2D, 3D u otras matrices multidimensionales, tales como matriz y matriz, matriz y vector, o vector y vector.
[0084] Conversión de puntos flotantes, cada uno a varios enteros
[0086] Un valor de punto flotante de entrada se puede convertir en múltiples enteros a través de cuantización. La cuantización del valor de punto flotante de entrada agrega necesidades adicionales de soporte de cuantización. Sin embargo, la cuantización permite que los valores múltiples enteros resultantes utilicen unidades enteras, que pueden ejecutarse uno o más órdenes de magnitud más rápido que las unidades/circuitos de hardware de punto flotante clásicos que utilizan el formato FP32, FP64, FP128 o FP256 en un procesador de computadora.
[0088] En una realización, un procesador de computadora puede tomar una instrucción, que especifica al menos dos operandos, cada uno incluye parámetros que están en un formato de punto flotante. Los parámetros pueden corresponder a una entrada de una matriz en una dimensión (1D), dos dimensiones (2D), tres dimensiones (3D) o cualquier otra dimensión. La matriz 1D puede denominarse un vector deNelementos de datos, y la matriz 2D puede denominarse una matriz o un mosaico de M*N elementos de datos (tenga en cuenta que los términos "matriz" y "mosaico" se utilizan indistintamente en esta divulgación). Los elementos de datos normalmente están en el mismo formato de punto flotante (por ejemplo, FP32, FP64, FP128 o FP256). La instrucción sirve para realizar una o más operaciones aritméticas entre los dos operandos, y las operaciones aritméticas pueden ser una o más de suma, resta, multiplicación y división. Cada uno de los valores de punto flotante identificados por los operandos se puede cuantizar en múltiples enteros y un exponente compartido de los múltiples enteros se puede almacenar dentro de la memoria o un registro (por ejemplo, uno dentro del archivo de registro físico (PRF) de un procesador). El procesador puede ejecutar una serie de operaciones aritméticas de enteros e identificar el exponente final, finalmente, el resultado de la ejecución se convierte nuevamente a punto flotante antes de almacenarlo en la matriz 1D o 2D resultante.
[0090] La cuantización a enteros y la conversión de nuevo a valores de punto flotante no cumplen con los estándares actuales del Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) para la representación de valores, tales como los estándares IEEE 754. Sin embargo, la serie de operaciones aritméticas de enteros puede aprovechar unidades/circuitos de hardware de aritmética de enteros, tales como los circuitos multiplicadores-acumuladores (MAC) (también conocidos como circuitos de multiplicación y suma o MADD), que deben realizar operaciones de multiplicación y acumulación de enteros. En una realización, un circuito MAC incluye un circuito de multiplicación-adición fusionada (FMA). Los circuitos MAC pueden ejecutarse uno o más órdenes de magnitud más rápido en sus operaciones aritméticas de enteros que las unidades/circuitos de hardware de punto flotante clásicos que utilizan el formato FP32, FP64, FP128 o FP256. El cálculo no conforme con IEEE proporciona operaciones aritméticas comparables o más precisas que las de punto flotante sin la cuantización y conversión en algunas realizaciones.
[0092] La Figura 1 muestra operaciones de conversión de valores en punto flotante, cada uno a múltiples enteros para operaciones aritméticas, y reconstrucción de los valores resultantes de las operaciones aritméticas nuevamente al punto flotante según una realización de la invención. En la referencia 102, se decodifica una instrucción. La instrucción especifica al menos dos operandos, cada uno de los cuales identifica una ubicación (por ejemplo, memoria, caché o registro) para una matriz, la matriz A{m,k} de FP32 y la matriz B{k,n} de FP32, respectivamente. Las matrices A y B pueden almacenarse en registros, caché o memoria en realizaciones de la invención.
[0094] Los valores de las matrices A y B se cuantifican luego en las referencias 104 y 106. La cuantización da como resultado las matrices A' y B', que contienen valores cuantificados de 16 bits para el valor correspondiente en las matrices A y B. Cada valor cuantizado se divide luego en dos partes: En las referencias 112 y 116, se obtienen los valores de 8 bits superiores para formar las matrices A1 y B1; y en las referencias 114 y 118, se obtienen los valores de 8 bits inferiores para formar las matrices A2 y B2. Luego se realizan operaciones aritméticas con enteros en las referencias 122 a 128. En este ejemplo, las operaciones aritméticas de enteros son el producto entre las matrices. También se pueden realizar otras operaciones aritméticas (por ejemplo, una o más de suma, resta, multiplicación y división) en las referencias 122 a 128. Las operaciones del producto se realizan cuatro veces: A1 * B1, A1 * B2, A2 * B1 y A2 * B2. Las operaciones del producto pueden realizarse en serie o en paralelo dependiendo de la implementación. Luego, los enteros resultantes de las referencias 122 a 128 se reconstruyen y se convierten nuevamente en FP32 mediante la descuantización en la referencia 132.
[0096] Señalar que las operaciones del producto como se muestran en las referencias 122 a 128 pueden acumularse hasta una longitud de bits varias veces mayor que los valores de entrada, de modo que se mantenga la precisión de los resultados. En este ejemplo, los dos valores de entrada int8 (8 bits cada uno) se pueden acumular en un mínimo de 16 bits (preferiblemente 24 o más) como resultado de la operación aritmética, por lo tanto, los acumuladores que almacenan los resultados de las operaciones del producto tienen un ancho de bits de al menos 2*8 = 16 bits para cada resultado del producto. La idea es que los acumuladores para almacenar los resultados de las operaciones aritméticas entre los valores de menor precisión convertidos sean lo suficientemente grandes para que la precisión de las operaciones aritméticas no se pierda en las realizaciones de la invención. Los circuitos de hardware de operaciones aritméticas de enteros (por ejemplo, circuitos MAC y/o FMA) que implementan la acumulación/acumuladores no cumplen con los estándares IEEE actuales, pero la descomposición de precisión mixta de las operaciones permite que las realizaciones de la invención realicen operaciones aritméticas con una mayor precisión.
[0098] Una medida del esfuerzo computacional es la complejidad computacional, que puede denotarse en notación O grande, O(x), donde x es el orden de magnitud más alto del trabajo. En este ejemplo, el procesador realiza las operaciones aritméticas cuatro veces, cada cálculo deenterotiene una complejidad computacional de O(mnk). Es decir, el orden de magnitud más alto del cálculo es una o más veces m*n*k (k productos param*nelementos de datos). Luego, el procesador realiza la conversión nuevamente a FP32, que tiene una complejidad computacional de O(mn) para el cálculo de punto flotante. Si el producto se realizara entre las matrices A y B sin los procesos de cuantización y reconstrucción de la referencia 104-132, el cálculo depunto flotanteentre las matrices A y B tiene una complejidad computacional de O(mnk). Sin embargo, el cálculo entero de O(mnk) puede ser diez veces o más (es decir, uno o más órdenes de magnitud) más rápido que el cálculo de punto flotante de O(mnk). Por lo tanto, las operaciones mostradas en la Figura 1, aunque ejecutan los productos internosenteroscuatro veces más, pueden ser más eficientes que el producto depunto flotantesin los procesos de cuantización y reconstrucción.
[0100] Señalar que los valores de las matrices en la Figura 1 se cuantifican y luego se dividen en dos partes en este ejemplo. Las realizaciones de la invención incluyen dividir un valor cuantizado en más de dos partes como lo muestra el siguiente ejemplo. En algunas realizaciones, cada valor FP32 (24 bits de precisión de significando) se divide en tres int8; es preferible (3*8 bits = 24 bits). En general, el número de partes divididas puede depender de la precisión deseada de la aproximación utilizando la cuantización de los valores de punto flotante.
[0102] Un valor de punto flotante se puede cuantizar utilizando tantos bits como sean necesarios para obtener la precisión deseada. Por ejemplo, un valor de 17,1 en FP32 se puede cuantizar a un valor entero 17 usando int16 o incluso int8. Para lograr una mayor precisión, las realizaciones de la invención pueden cuantizar el valor utilizando dos valores int16 o cuatro valores int8, ambos de los cuales utilizan 32 bits. La cuantización puede cuantizar el valor en un entero más grande utilizando un exponente más pequeño. Los siguientes ejemplos ilustran la cuantización y división de un valor FP32 original en múltiples valores enteros.
[0104] Ejemplo 1: Conversión de un valor FP32 en tres enteros sin signo, uint8
[0106] Para la conversión, suponga que el rango de los valores está dentro de [Minval, Maxval]. Por ejemplo, el rango de valores de una matriz de datos puede ser [-19, 19] y se debe cuantizar el valor de 17,1 en FP32. LaFigura 2Amuestra el pseudocódigo para convertir un valor FP32 en tres enteros de 8 bits sin signo según una realización de la invención. En la referencia 202, se determina la escala, y se basa en el formato de entero (uint8) y la cantidad de enteros a utilizar (tres). Por lo tanto, la escala es (Maxval - Minval)/(2A(longitud del entero*número de enteros)-1), que es 38/(2A(8*3)-1) = 38/16.777.215 = 2,2649766 * (10A(-6)) en decimal. La escala puede almacenarse en un registro, en una caché o en una memoria.
[0108] Luego se establecen tres números como máscaras para obtener las tres partes de valores de menor precisión a partir del valor FP32 cuantizado en la referencia 204. Los primeros_8_bits seleccionarán solo los primeros 8 bits ya que 255 tiene todos unos en binario (bits 0-7); los segundos_8_bits seleccionarán los 8 bits del medio ya que 65280 tiene todos unos en los bits 8-15 y ceros en los bits 8-7; y los terceros_8_bits seleccionarán solo los terceros 8 bits ya que 16,711,680 tiene todos unos en los bits 16-23 y ceros en los bits 0-15.
[0110] En la referencia 206, se obtiene un valor intermedio, v = 17,1 - (-19) = 36,1. En la referencia 208, se cuantiza el valor intermedio, donde el valor cuantizadonum= uint32_t 36,1/escala = 15938354. El valor cuantizado es un binario con 24 bits: [11110011] [00110011] [00110010], donde se añaden corchetes para mostrar la división en tres partes. En la referencia 210, el valor intermedio cuantizado se separa en tres partes utilizando las máscaras definidas en la referencia 204. Para la segunda y tercera parte, los valores resultantes se desplazan 8 y 16 bits hacia la derecha, de modo que son valores de 8 bits tales que q1 = [00110010]; q2 = [00110011]; q3 = [11110011]. Los tres enteros sin signo pueden luego usarse para realizar operaciones aritméticas con otros enteros sin signo resultantes de la cuantización de otro valor FP32.
[0111] Las operaciones aritméticas pueden utilizar circuitos de operaciones aritméticas de enteros, tales como circuitos multiplicadores-acumuladores (MAC), donde cada valor de 8 bits se asigna al circuito MAC respectivo en función de su posición de parte, y los resultados del cálculo se reconstruyen como se explicó anteriormente en este documento. Si bien en este ejemplo se utilizan máscaras para obtener las tres partes de los valores de menor precisión, también se pueden utilizar otras formas de obtener los valores de menor precisión. Por ejemplo, también se puede utilizar el desplazamiento y/o truncamiento de bits para obtener valores de menor precisión. Las realizaciones de la invención cubren varias formas en que se obtienen/identifican los valores de menor precisión.
[0113] Señalar que la precisión de la cuantización se basa en el valor de la escala, y cuanto menor sea la escala, mejor aproximación resultará de la cuantización. El valor de la escala se basa en varios factores: el rango de valores y la cantidad de bits disponibles. Cuanto menor sea el rango y/o más bits estén disponibles para la cuantización, menor será la escala y mejor la aproximación.
[0115] El valor de la escala puede ser proporcionado mediante una instrucción para solicitar las operaciones aritméticas. Por ejemplo, la instrucción puede incluir, además de los dos o más operandos, cada uno de los cuales contiene una matriz unidimensional, bidimensional, tridimensional u otra matriz dimensional de elementos de datos, uno o más operandos que especifican los rangos de las matrices. Como alternativa o adicionalmente, el procesador puede escanear los elementos de datos de las matrices al recibir la instrucción y determinar los rangos.
[0117] Ejemplos 2-4: Convertir un valor FP32 en diferentes enteros
[0119] Los ejemplos 2-4 proporcionan más ejemplos de la cuantización de un valor FP32. LaFigura 2Bmuestra el pseudocódigo para convertir un valor FP32 en dos enteros de 16 bits sin signo según una realización de la invención. El pseudocódigo es similar al de la Figura 2A, pero la escala es menor y los dos valores de 16 bits q1 y q2 usan más bits que los tres valores de 8 bits q1, q2 y q3; la cuantización probablemente da como resultado una mejor aproximación del de la Figura 2A.
[0120] LaFigura 2Cmuestra el pseudocódigo para convertir un valor FP32 en tres enteros de 8 bits con signo según una realización de la invención. La Figura 2C es similar a la Figura 2A, y una diferencia es la generación de los tres valores de 8 bits en la referencia 230, donde los valores de q1, q2 y q3 se restan de 128 (27) en base al rango del entero con signo de 8 bits (desde el rango de enteros sin signo de [0, 28-1] hasta el rango de enteros con signo de [-27, 27-1]).
[0122] LaFigura 2Dmuestra el pseudocódigo para convertir un valor FP32 en cuatro enteros de 8 bits sin signo según una realización de la invención. La Figura 2D es similar a la Figura 2A, y una diferencia es que con 32 bits (8 bits por entero * 4 enteros = 32) para la cuantización, la escala es más pequeña, por lo que la cuantización probablemente resulte en una mejor aproximación de la de la Figura 2A.
[0124] Si bien se utiliza FP32 en los ejemplos de las Figuras 2A-2D, los valores en otros formatos de punto flotante como FP64, FP128 o FP256 se pueden cuantizar utilizando el pseudocódigo similar. Por ejemplo, FP64 tiene 53 bits para su significando, al usar siete enteros sin signo de 8 bits (uint8), podemos cubrir por completo la precisión del significando de FP64. La escala es un valor aún más pequeño: escala = (maxval - minval) / (2A(8*7)-1. En general, la cantidad de bits disponibles para la cuantización es igual o superior a la longitud de bits del significado del formato de punto flotante respectivo. En algunas realizaciones, puede ser deseable utilizar intencionalmente una longitud de bits menor que la del significando del formato de punto flotante respectivo (por ejemplo, para lograr un compromiso de calidad de servicio: menor precisión que el formato de punto flotante original, pero mucho más rápido).
[0126] Señalar que cuando la rutina de software está disponible y es rápida, la cuantización utilizando realizaciones de la invención puede no ser necesaria. Por ejemplo, uno puede cuantizar un valor FP128 en una cadena de 8 uint16 de longitud, pero la precisión doble-doble o cuádruple del software puede operar más rápido que las operaciones aritméticas que utilizan la cadena de 8 uint16 de longitud. La determinación de si se debe cuantizar y cuántos bits se deben cuantizar puede depender de la disponibilidad de circuitos de hardware que realicen operaciones aritméticas de enteros rápidos y de cuánto más rápido sea el circuito de hardware. La magnitud del aumento de la velocidad de cómputo debería compensar el trabajo adicional requerido para realizar la cuantización y reconstrucción como se analiza en este documento.
[0128] Ejemplo 5: Reconstrucción de un valor FP32 a partir de cuatro enteros con signo
[0130] Una vez que los valores múltiples enteros de la cuantización y división realizan operaciones aritméticas, se reconstruyen para devolver un resultado final en el formato de punto flotante en el que estaba el valor inicial. LaFigura 2Emuestra el pseudocódigo para reconstruir un valor FP32 a partir de cuatro enteros de 8 bits con signo por una realización de la invención. La escala sigue siendo la misma que en otro ejemplo de conversión a cuatro enteros sin signo en la Figura 2D, ya que se utiliza el mismo número de bits (32 bits) para la cuantización y la reconstrucción, aunque aquí se utilizan los enteros con signo en la Figura 2E. El valor intermedio reconstruido es num, que se obtiene en la referencia 240 mediante el ajuste del rango en función del rango de un entero con signo de 8 bits (int8) y luego el desplazamiento de bits, ya que los cuatro enteros con signo de las operaciones aritméticas corresponden a diferentes posiciones de bits de los resultados finales. El valor intermedio, que es un entero representado por los 32 bits completos del resultado de las cuatro acumulaciones de 8 bits con signo, que pueden ser ya de 32 bits, se convierte luego nuevamente al valor FP32 utilizando el valor mínimo y la escala en la referencia 242.
[0131] Señalar que en algunas realizaciones, cada una de las operaciones aritméticas en los valores int8 de menor precisión pueden ya estar acumuladas en un tipo int más grande, tal como un valor int32. Luego, los valores int32 se combinan para formar el resultado de las operaciones aritméticas. Entonces, la reconstrucción a FP32 puede ser simplemente convertir los valores int32 en un valor FP32 correspondiente (sin el desplazamiento de bits ilustrado en la Figura 2E).
[0133] Ajuste de la carga de trabajo y precisión: Punto flotante a enteros
[0135] En los ejemplos relacionados con la Figura 1, dos matrices se dividen en dos pares de términos y al realizar una multiplicación matricial con ellos se obtiene cuatro veces la cantidad de trabajo sobre las operaciones con enteros que se muestran en una de las referencias 122 a 128. Sin embargo, debido a que las operaciones aritméticas en enteros pueden ejecutarse significativamente más rápido que las mismas operaciones aritméticas en punto flotante en algunas arquitecturas de computadora, realizar la conversión y reconstrucción adicionales puede ser más eficiente que realizar las operaciones aritméticas sobre los valores de punto flotante originales. Además, se pueden omitir algunas de las operaciones con enteros para que las realizaciones de la invención sean más eficientes.
[0137] Al utilizar diferentes enteros para convertir un punto flotante, resultan diferentes números de términos de las operaciones matriciales entre dos matrices. Por ejemplo, si se utilizan dos enteros para dividir cada elemento de datos de una matriz, se realizan cuatro multiplicaciones para multiplicar la matriz (como se muestra en las referencias 122-128). Si se utilizan tres enteros, se realizan nueve multiplicaciones, y si se utilizan cuatro enteros, 16 veces. Debido a que los circuitos de hardware aritméticos de enteros (por ejemplo, los circuitos MAC) se pueden realizar con precisión (sin pérdida de precisión alguna en las operaciones aritméticas), el cálculo con la carga de trabajo completa puede ser muy preciso (solo se pierde precisión en el paso de cuantización). Sin embargo, si sacrificamos algo de precisión en las operaciones aritméticas, podemos omitir algunas de las múltiples veces la carga de trabajo.
[0139] Por ejemplo, en la Figura 1, la cuantización de A da como resultado la matriz A1 formada utilizando los 8 bits superiores y la matriz A2 utilizando los 8 bits inferiores, y la cuantización de B da como resultado la matriz B1 formada utilizando los 8 bits superiores y la matriz B2 utilizando los 8 bits inferiores. La carga de trabajo se puede expresar como int8x2_4p, donde "int8x" denota operaciones int8, "2" denota que cada valor FP32 se divide en dos valores int8 y "4p" denota que se incluyen cuatro términos en el cálculo. En lugar de las cuatro veces la carga de trabajo con A1*B1, A1 *B2, A2*B1 y A2*B2, podemos omitir la multiplicación de la parte menos significativa, la multiplicación entre los 8 bits inferiores, A2*B2. La carga de trabajo se puede mostrar como int8x2_3p (un término menos que int8x2_4p, que incluye A2*B2). De este modo, en lugar de cuatro veces la carga de trabajo, podemos ahorrar alrededor de un 25% de carga de trabajo al realizar la multiplicación de las tres porciones más significativas (a costa de cierta pérdida de precisión).
[0141] Por poner otro ejemplo, la cuantización de A puede dar como resultado tres matrices, A1 a A3, cada una formada utilizando 8 bits desde los bits más significativos hasta los menos significativos (es decir, A1: bits 23-16; A2: bits 15-8; y A3: bits 7-0), y la cuantización de B también puede dar como resultado tres matrices, B1 a B3, cada una formada utilizando 8 bits desde los bits más significativos hasta los menos significativos (es decir, B1: bits 23-16; B2: bits 15-8; y B3: bits 7-0). La carga de trabajo es nueve veces la multiplicación de una matriz: int8x3_9p, que es A1*B1+A1*B2+A1*B3+A2*B1+A2*B2+A2*B3+A3*B1+A3*B2+A3*B3. De manera similar, podemos omitir la multiplicación de la porción menos significativa, la multiplicación entre los 8 bits más bajos, A3*B3, y obtener int8x3_8p
[0143] Además, si deseamos eliminar aún más la carga de trabajo, podemos eliminar una o más porciones significativas menores, reduciendo así la precisión mientras aumentamos la velocidad de cómputo o reducimos el uso de recursos de cómputo. Por ejemplo, podemos eliminar los términos con coeficientes que suman 5 o más, por lo que también podemos descartar A2*b2 y A3*B2. Para aumentar aún más la velocidad de cómputo o reducir el uso de recursos de cómputo, podemos descartar aún más los términos con coeficientes que suman 4 o más: A1*B3, A2*B2, A3*B1. Cuantos más términos se descartan, menos precisos son los valores de punto flotante reconstruidos resultantes al aproximarse a los valores de punto flotante sin la cuantización y la reconstrucción, pero se realiza menos carga de trabajo. Las realizaciones de la invención proporcionan formas de ajustar la carga de trabajo y la precisión.
[0145] Una aplicación que utiliza las realizaciones de la invención puede determinar uno o más requisitos de calidad de servicio (QoS) en cuanto a la precisión de las operaciones aritméticas, limitación de la carga de trabajo, requisito de velocidad de cómputo, y un procesador que implementa las realizaciones de la invención puede determinar cómo cumplir con los requisitos de QoS. Por ejemplo, el procesador puede determinar (1) cuántos enteros, (2) la longitud en bits de cada uno de los enteros, (3) si los enteros tienen signo o no, y/o (4) cuántos términos ejecutar en las operaciones aritméticas. La determinación podrá basarse en la instrucción recibida. La instrucción puede especificar, además de los dos o más operandos que contienen cada uno una matriz de elementos de datos, uno o más operandos que especifican uno o más de (1) a (4). Señalar que la determinación de (1) a (2) también contribuye al cálculo de la escala analizada anteriormente en relación con el Ejemplo 1.
[0147] La determinación por parte del procesador también puede determinarse internamente sin la especificación mediante la instrucción en algunas realizaciones. El procesador puede determinar (1) a (4) en función de los recursos de cómputo disponibles (por ejemplo, circuitos disponibles, ancho de banda requerido y/o espacio de almacenamiento en el registro/caché/memoria para las operaciones aritméticas requeridas). Señalar que las operaciones aritméticas internas, incluida la conversión y la reconstrucción, son invisibles para una aplicación que utiliza algunas realizaciones de la invención.
[0149] A través del ajuste opcional en algunas realizaciones de la invención, una aplicación puede tener más de las opciones discutidas anteriormente: usar puntos flotantes en las operaciones aritméticas (que pueden ser precisas pero lentas), usar cuantización para cuantizar cada valor de punto flotante en un solo entero (que puede ser impreciso pero rápido), o usar cuantización para cuantizar cada valor de punto flotante en múltiples enteros, ejecutar operaciones aritméticas de enteros y reconstruir nuevamente en puntos flotantes (que pueden ser rápidos y comparativamente precisos o incluso más precisos que los puntos flotantes originales). Las realizaciones de la invención proporcionan otro parámetro de ajuste para ajustar la carga de trabajo para adaptarse a los requisitos de QoS de una aplicación y/o hacer un mejor uso de los recursos de cómputo disponibles de un procesador.
[0151] Señalar que los resultados cuantizados en realizaciones de la invención pueden almacenarse para la ejecución fuera de orden de instrucciones. Por ejemplo, si los valores de una matriz A se cuantizan en una primera instrucción, los resultados cuantizados pueden almacenarse en un registro en la PRF. Cuando una segunda instrucción posterior también utiliza la matriz A, los resultados cuantizados almacenados de la matriz A se pueden obtener del registro y no es necesaria una cuantización repetida.
[0153] Precisión del enfoque de punto flotante a enteros en comparación con enfoques anteriores
[0155] Como se discutió anteriormente en este documento, sin realizaciones de la invención, uno puede ejecutar operaciones aritméticas en punto flotante, que pueden ser precisas pero lentas. También se pueden ejecutar las operaciones aritméticas en enteros, donde cada valor de punto flotante se cuantiza en un solo entero (a diferencia de la cuantización que utiliza múltiples enteros en las realizaciones de la invención), lo que es menos preciso pero rápido. Por otra parte, el uso de realizaciones de la invención puede proporcionar tanto precisión como velocidad o bien ofrecer el compromiso deseado entre precisión y velocidad. Las pruebas realizadas con valores pseudoaleatorios confirman las características de las realizaciones de la invención.
[0157] La Figura 3 muestra la precisión de los datos de una realización de la invención que utiliza un enfoque de punto flotante a múltiples enteros en comparación con enfoques anteriores. Los datos de entrada son valores pseudoaleatorios de precisión simple entre [0, 1]. El eje x es el número de productos escalares consecutivos realizados (puede denominarse el tamaño del problema) y el eje y es la precisión de los datos resultantes. Como era de esperar, cuanto más productos escalares se realicen en secuencia, menos precisos serán los datos resultantes, ya que cada producto escalar de punto flotante puede mantener solo un número limitado de bits. Por ejemplo, FP32 tiene 24 bits para la precisión del significando, por lo tanto, los resultados del producto escalar de más de 24 bits se truncan, lo que da como resultado una menor precisión. Cuanto más resultados se acumulan en el eje de izquierda a derecha, menos precisos son los datos resultantes.
[0159] La línea base de precisión de los productos escalares se muestra en la referencia 302. Los datos no están cuantizados y los productos escalares se realizan utilizando los datos de entrada en FP32. La precisión de los productos escalares es mejor que la que se muestra en la referencia 304, donde cada dato se cuantiza en un único entero int16. Esto no es sorprendente, dada la precisión que se pierde debido a la cuantización.
[0161] La referencia 306 muestra la precisión de los productos escalares utilizando una realización de la invención, donde cada valor se cuantiza en dos enteros int16. La precisión de la realización de la invención es mejor no solo en comparación con la cuantización de valores individuales, sino también en comparación con sin cuantización. La mejora de la realización de la invención con respecto al enfoque sin cuantización se puede atribuir a los errores intermedios en la ejecución de productos escalares FP32 en este último. En este ejemplo, el resultado intermedio del primer producto escalar es una entrada para el segundo producto escalar, y el resultado intermedio del segundo producto escalar es una entrada para el tercer producto escalar. Cada uno de los resultados intermedios del producto escalar puede truncar una serie de bits y, por tanto, perder cierta precisión. Por el contrario, en el primero, debido a que los enteros int16 se acumulan en un campo de acumulación más amplio (por ejemplo, 64 bits, un producto escalar en este ejemplo), los productos se realizan sin pérdida de precisión.
[0163] Es decir, algunas realizaciones de la invención pierden precisión en la cuantización inicial, pero después los productos escalares se realizan como productos escalares enteros, y los resultados intermedios son enteros y los enteros se almacenan en los acumuladores con un ancho de bit lo suficientemente largo, por lo que no se produce una pérdida acumulativa de precisión. En general, cuando las operaciones aritméticas incluyen una serie de operaciones, los resultados intermedios se almacenan con un ancho de bits lo suficientemente largo como para no perder precisión en algunas realizaciones de la invención. Por ejemplo, el primer resultado intermedio de un primer producto escalar de dos int16 se almacenará en un campo de acumulación de 32 bits (o más), y el siguiente resultado intermedio del producto escalar entre (1) el primer resultado intermedio y (2) un tercer valor int16 se almacenará en un campo de acumulación de 48 bits (o más). Dado que las operaciones aritméticas en cadena no pierden precisión en estas realizaciones de la invención, la ventaja de estas realizaciones de la invención es más evidente cuando se realizan un gran número de operaciones aritméticas en secuencia.
[0165] Conversión de puntos flotantes, cada uno a múltiples puntos flotantes de menor precisión
[0166] De manera similar a la conversión de puntos flotantes a enteros, las realizaciones de la invención incluyen la conversión de valores de punto flotante, cada uno de los cuales se convierte a múltiples valores de punto flotante de menor precisión, tales como bfloat16.
[0168] La Figura 4 muestra operaciones de conversión de valores en punto flotante, cada uno a múltiples puntos flotantes de menor precisión para operaciones aritméticas, y la reconstrucción de los valores resultantes de las operaciones aritméticas nuevamente al punto flotante según una realización de la invención. El ejemplo convierte valores en FP32 a bfloat16, pero, por supuesto, otras conversiones de puntos flotantes de mayor precisión a puntos flotantes de menor precisión también pueden utilizar realizaciones de la invención.
[0170] Las operaciones comienzan en la referencia 402, y son similares a las de la referencia 102 de la Figura 1 y por lo tanto la discusión relacionada no se repite aquí. Luego, cada uno de los valores se convierte en dos valores en formato bfloat16. En las referencias 404 y 406, los valores en A y B en FP32 se aproximan con valores en formato bfloat16. Los valores de A1 y B1 (en formato bfloat16) son aproximaciones de los de A y B (en formato FP32) y tienen menor precisión que los de A y B porque bfloat16 tiene menos bits de mantisa que FP32 (8 bits frente a 24 bits). A1 y B1 tienen valores representados por la mantisa de 8 bits más significativa de las de A y B, como se muestra en las referencias 412 y 416. En las referencias 414 y 416, los restos de A y B después de restar A1 y B1 se aproximan en formato bfloat16 como A2 y B2, respectivamente. En las referencias 422-428, se realizan los productos de punto flotante bfloat16 de los dos pares de matrices: A1*B1, A1*B2, A2*B1 y A2*B2. Las operaciones del producto pueden realizarse en serie o en paralelo dependiendo de la implementación. Los valores resultantes de las referencias 422 a 428 se reconstruyen luego y se convierten nuevamente en FP32 en la referencia 432.
[0172] Señalar que las operaciones de producto como se muestran en las referencias 422 a 428 pueden acumularse hasta una longitud de bits varias veces mayor que los valores de entrada, de manera similar al enfoque de punto flotante a enteros analizado anteriormente en este documento. El ancho de bits de acumulación es mayor que el de los valores de entrada, lo que hace que la acumulación sea más precisa que en el caso en que el ancho de bits de acumulación es igual al de los valores de entrada. En este ejemplo, los dos valores de entrada bfloat16 (cada uno con precisión de significando de 8 bits) pueden acumularse en FP32 (que incluye precisión de significando de 16 bits) o más como resultado de la operación aritmética. Por ejemplo, un acumulador puede almacenar el resultado de la operación aritmética del producto como un valor FP32 (con precisión de significando de 24 bits). De esta forma, los resultados de las referencias 422 a 428 pueden estar ya en formato FP32 y la reconstrucción puede ser una simple suma de los resultados de las referencias 422 a 428 sin la conversión inversa. Los circuitos de hardware de operaciones aritméticas de punto flotante (por ejemplo, circuitos MAC y/o FMA) que implementan dichas acumulaciones/acumuladores no cumplen con los estándares IEEE actuales, pero la descomposición de precisión mixta de las operaciones permite que las realizaciones de la invención realicen operaciones aritméticas con una mayor precisión.
[0174] De manera similar a las operaciones aritméticas en la Figura 1, el procesador realiza las operaciones aritméticas cuatro veces, cada cálculo bfloat16 tiene la complejidad computacional de O(mnk) (kproductos param x nelementos de datos), luego el procesador realiza la conversión nuevamente a FP32, que tiene la complejidad computacional de O(mnk) para el cálculo de punto flotante FP32. La complejidad computacional de utilizar operaciones aritméticas de bfloat16, que tienen cuatro veces O(mnk), parece ser peor que la complejidad computacional de utilizar operaciones aritméticas de FP32, que es O(mnk). Sin embargo, las operaciones aritméticas matriciales en las referencias 422 a 428 se pueden realizar utilizando circuitos aritméticos especializados para operaciones aritméticas bfloat16, y estos circuitos aritméticos float16 se pueden ejecutar uno o más órdenes de magnitud más rápido que una unidad/circuito de hardware de punto flotante clásico que utiliza FP32. Por lo tanto, puede ser más eficiente realizar las operaciones de la Figura 4 (incluida la conversión de los valores FP32, cada uno en múltiples valores bfloat16, luego usar bfloat16 para ejecutar operaciones aritméticas y luego volver a convertir a valores FP32) que realizar operaciones aritméticas en los valores FP32.
[0176] Señalar que la conversión a valores de menor precisión, el rendimiento de las operaciones aritméticas y la reconstrucción pueden no cumplir con los estándares del Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) para la representación de valores, tales como los estándares IEEE 754. Sin embargo, la serie de operaciones aritméticas en valores de menor precisión puede aprovechar la unidad de hardware aritmética.
[0178] Ejemplos 6 y 7: Convertir un valor FP32 en múltiples valores bfloat16 y reconstruir un valor FP32 a partir de múltiples valores bfloat16
[0180] En la Figura 4, cada valor FP32 dentro de las matrices A y B se convierte en dos valores bfloat16. La Figura 5A muestra el pseudocódigo para convertir un valor FP32 en dos valores bfloat16 según una realización de la invención. En la referencia 502, el valor FP32 x se aproxima utilizando un valor bfloat16 b1. En la referencia 504, el recordatorio del valor x restado por b1 se establece en un valor FP32tmp.Luego, en la referencia 506, el valor FP32tmpse aproxima utilizando un valor bfloat16 b2. Luego, los dos valores bfloat16, b1 y b2, se utilizan para las operaciones aritméticas entre matrices (1D o 2D) como se analiza en relación con la Figura 4.
[0182] Una vez completadas las operaciones aritméticas, se pueden devolver los valores bfloat16. Por ejemplo, las operaciones en las referencias 422 a 428 pueden dar como resultado valores bfloat16 (en algunas realizaciones, los resultados pueden estar ya en FP32, y la reconstrucción no requiere la conversión de vuelta como se discutió aquí arriba), y estos valores bfloatl 6 pueden convertirse de vuelta al formato FP32. LaFigura 5Bmuestra el pseudocódigo para construir un valor FP32 a partir de dos valores bfloat16 según una realización de la invención. La construcción del valor FP32 x es simplemente sumar los dos valores bfloat16 almacenados en formato FP32 como se muestra en la referencia 510.
[0183] Ajuste de la carga de trabajo y precisión: Punto flotante a puntos flotantes de menor precisión
[0185] Si bien las Figuras 4-5 muestran la conversión de un valor FP32 en dos valores bfloat16, obviamente uno puede convertir el valor FP32 en más de dos valores bfloat16. La diferencia de utilizar diferentes cantidades de valores bfloat16 por valor FP32 es la complejidad computacional. De manera similar al enfoque de punto flotante en múltiples enteros analizado en este documento, mientras que dividir cada valor FP32 en dos valores bfloat16 da como resultado cuatro veces multiplicaciones como se muestra en la Figura 4, dividir cada valor FP32 en tres valores bfloat16 da como resultado nueve veces multiplicaciones, y dividir cada valor FP32 en cuatro valores bfloat16 da como resultado 16 veces multiplicaciones. Sin embargo, si sacrificamos cierta precisión en las operaciones aritméticas, podemos saltarnos algunos de los múltiples momentos de la carga de trabajo.
[0187] Por ejemplo, podemos referirnos a los cuatro productos internos de las multiplicaciones de bfloatl 6 como los siguientes:
[0188] bx2_4p:dado por A1*B1 A1*B2 A2*B1 A2*B2
[0189] donde "bx" denota las operaciones bfloatl 6, "2" denota que cada valor FP32 se divide en dos valores bfloatl 6 y "4p" denota que se incluyen cuatro términos en el cálculo.
[0191] Para reducir la carga de trabajo, podemos omitir el término de orden inferior, A2*B2, de modo que la carga de trabajo se convierta en la siguiente:
[0192] bx2_3p:dado por A1*B1 A1*B2 A2*B1
[0194] De manera similar, la carga de trabajo para dividir cada valor FP32 en tres valores bfloat16 se puede mostrar de la siguiente manera:
[0195] bx3_9p: dado por A1*B1 A1*B2 A1*B3 A2*B1 A2*B2 A2*B3 A3*B1 A3*B2 A3*B3
[0197] Se puede reducir la carga de trabajo omitiendo el término de orden más bajo, A3*B3, es decir, descartar el/los términos con coeficientes que suman 6:
[0198] bx3_8p: dado por A1*B1 A1*B2 A1*B3 A2*B1 A2*B2 A2*B3 A3*B1 A3*B2
[0200] La carga de trabajo se puede reducir aún más descartando los términos adicionales con coeficientes que suman 5, A3*B2 y A2*B3 y que dan como resultado bx3_6p. El proceso puede continuar. Al descartar más términos, se reduce la carga de trabajo, lo que puede aumentar la velocidad de cómputo y/o reducir el uso de recursos de cómputo a expensas de reducir la precisión de cómputo. La Tabla 3 muestra una lista de selecciones de términos ejemplares cuando los valores se convierten de FP32 a bfloat16 o int8.
[0202] T l .l i n rmin m l r l nv r i n FP 2 fl 1 in
[0204]
[0207] Una aplicación que utiliza las realizaciones de la invención puede determinar uno o más requisitos de calidad de servicio (QoS) en cuanto a la precisión de las operaciones aritméticas, limitación de la carga de trabajo, requisito de velocidad de cómputo, y un procesador que implementa las realizaciones de la invención puede determinar cómo cumplir con los requisitos de QoS. Por ejemplo, el procesador puede determinar (1) qué formato de punto flotante de menor precisión utilizar (por ejemplo, bfloat16 u otro formato de menor precisión en relación con el formato de punto flotante original), (2) cuántos valores de punto flotante de menor precisión utilizar para convertir el formato de punto flotante original y/o (3) con cuántos términos ejecutar operaciones aritméticas. La determinación podrá basarse en la instrucción recibida. La instrucción puede especificar, además de los dos o más operandos que contienen cada uno una matriz de elementos de datos, uno o más operandos que especifican uno o más de (1) a (3).
[0209] La determinación por parte del procesador también puede determinarse internamente sin la especificación mediante la instrucción en algunas realizaciones. El procesador puede determinar (1) a (3) en función de los recursos informáticos disponibles (por ejemplo, circuitos disponibles, ancho de banda requerido y/o espacio de almacenamiento en el registro/caché/memoria para las operaciones aritméticas requeridas). Señalar que las operaciones aritméticas internas, incluida la conversión y la reconstrucción, son invisibles para una aplicación que utiliza estas realizaciones de la invención.
[0210] A través del ajuste opcional en algunas realizaciones de la invención, una aplicación puede tener más de las dos opciones discutidas anteriormente: usar los puntos flotantes originales en las operaciones aritméticas (que pueden ser precisas pero lentas) o convertir cada valor de punto flotante original en múltiples valores de punto flotante de menor precisión, ejecutar operaciones aritméticas de enteros y reconstruir nuevamente en puntos flotantes en el formato de punto flotante original (que puede ser rápido y comparativamente preciso o incluso más preciso). Las realizaciones de la invención proporcionan otro parámetro de ajuste para ajustar la carga de trabajo para adaptarse a los requisitos de QoS de una aplicación y/o hacer un mejor uso de los recursos informáticos disponibles de un procesador.
[0212] Señalar que los resultados intermedios en realizaciones de la invención pueden almacenarse para la ejecución fuera de orden de instrucciones. Por ejemplo, si los valores de una matriz A se dividen en dos valores de punto flotante de menor precisión (por ejemplo, A1 y A2 en la Figura 4) en una primera instrucción, los valores de punto flotante de menor precisión se pueden almacenar en un registro en la PRF (o en una caché o memoria). Cuando una segunda instrucción posterior también utiliza la matriz A, los valores de punto flotante de menor precisión almacenados de la matriz A se pueden obtener del registro y no es necesaria una cuantización repetida.
[0214] Precisión del punto flotante en múltiples enfoques de punto flotante de menor precisión en comparación con los enfoques anteriores
[0216] Como se discutió anteriormente en este documento, sin realizaciones de la invención, uno puede ejecutar operaciones aritméticas en el formato de punto flotante original, lo cual puede ser preciso pero lento. También se pueden ejecutar las operaciones aritméticas en un formato de punto flotante de menor precisión, donde cada valor de punto flotante original se aproxima utilizando un valor de punto flotante de menor precisión (en contraste con el uso de múltiples valores de punto flotante de menor precisión para el único valor de punto flotante original en las realizaciones de la invención), lo que es menos preciso pero rápido. Por otra parte, el uso de realizaciones de la invención puede proporcionar tanto precisión como velocidad o bien ofrecer el compromiso deseado entre precisión y velocidad. Las pruebas realizadas con valores pseudoaleatorios confirman las características de las realizaciones de la invención.
[0218] La Figura 6 muestra la precisión de datos de una realización de la invención que utiliza un enfoque de punto flotante en múltiples puntos flotantes de menor precisión en comparación con enfoques anteriores. El diseño de la Figura 6 es similar al de la Figura 3 y los datos originales son valores pseudoaleatorios en FP64 en el rango de [-1.0, 1.0] como se explica en la referencia 650.
[0220] La línea base de precisión del producto escalar del FP32 original (medido en la precisión del FP64) se muestra en la referencia 602. De manera similar a la Figura 3, cuantos más productos escalares consecutivos se realizan, menos preciso es el resultado y la curva se mueve hacia una menor precisión a medida que aumenta el tamaño del problema (de arriba a izquierda a derecha en la figura). En comparación, cada valor FP32 original se puede convertir en un único valor bfloat16 y, debido a la menor precisión del bfloat16, la curva de precisión en la referencia 604 es notablemente peor que la de FP32, como se explica en la referencia 652.
[0222] Se puede dividir cada valor FP32 en dos valores bfloat16 y utilizar los cuatro términos de los productos escalares (similares a los cuatro términos analizados anteriormente: A1 *B1, A1 *B2, A2*B1 y A2*B2). La curva de precisión en la referencia 612, indicada como punto bx2_4p, es el resultado. Los productos escalares pueden omitir el término de orden más bajo (por ejemplo, A2*B2), lo que da como resultado la curva de precisión en la referencia 614 (indicada como bx2_3p). Es comprensible que la precisión del punto bx2_4p sea mejor que la precisión de bx2_3p, y ambas no sean tan precisas como la línea base FP32. La peor precisión de bx2 en comparación con la línea base también es lógica, ya que cada bfloat16 tiene una precisión de significando de 8 bits y dos bfloat16 tienen una precisión de significando de 16 bits en total. En comparación, cada FP32 tiene una precisión de significando de 24 bits, por lo que usar dos valores bfloat16 para representar un valor FP32 puede causar una pérdida de precisión significativa. La pérdida de precisión en la conversión inicial hace que la precisión general de la conversión y la reconstrucción sea inferior a la línea base.
[0224] También se puede dividir cada valor FP32 en tres bfloat16 y utilizar los nueve términos de los productos escalares (similares a los cuatro términos analizados anteriormente: A1*B1, A1*B2, A1*B3, A2*B 1, A2*B2, A2*B3, A3*B1, A3*B2 y A3*B3). La curva de precisión en la referencia 622, indicada como punto bx3_9p, es el resultado. Los productos escalares pueden omitir los términos de orden más bajo cuyos coeficientes suman 5 o más para obtener seis términos (es decir, descartando A3*B2, B2*A3 y A3*B3), lo que da como resultado la curva de precisión en la referencia 624 (indicada como bx3_6p). Es comprensible que la precisión del punto bx3_9p sea mejor que la precisión de bx3_6p.
[0225] Sin embargo, puede parecer contraintuitivo que la precisión tanto de bx3_9p como de bx3_6p se muestre como mejor que la precisión de línea base de FP32. Si lo analizamos más detenidamente, la mejora en la precisión también resulta lógica. En total, tres bfloat16 tienen una precisión de significando de 24 bits, por lo que la conversión de un valor FP32 (que también tiene una precisión de significando de 24 bits) a tres valores bloat16 no pierde precisión. Durante los productos escalares consecutivos que utilizan los valores FP32 originales, los errores intermedios se acumulan como se analiza más arriba en relación con la Figura 3. Por el contrario, la conversión de un valor FP32 a tres valores bfloat16 se puede realizar sin perder precisión, y los productos escalares que utilizan bfloat16 pueden mantener una mejor precisión durante las operaciones aritméticas intermedias, ya que los acumuladores para los resultados de las operaciones aritméticas intermedias tienen un ancho de bits que es varias veces el de los valores de entrada (por ejemplo, 8 bits de precisión de significando de los valores bfloat16 de entrada frente a 24 bits de precisión de significando del acumulador FP32 para almacenar los resultados de las operaciones aritméticas intermedias). Por lo tanto, la precisión de bx3_9p y bx3_6p es mejor que la del FP32 original. En ese caso, las realizaciones de la invención pueden lograr tanto una mejor precisión como una velocidad de ejecución rápida (asumiendo que el bfloat16 dedicado se ejecuta uno o más órdenes de magnitud más rápido que FP32).
[0227] Algunas realizaciones de la invención
[0229] La Figura 7A es un diagrama de flujo que muestra operaciones aritméticas que incluyen la conversión de valores en un punto flotante en múltiples valores de menor precisión y la reconstrucción de los valores resultantes de las operaciones aritméticas nuevamente al punto flotante según una realización de la invención. El método 700 se puede realizar en un procesador, que contiene circuitos de decodificación y circuitos de ejecución. En la referencia 702, el circuito de decodificación decodifica una instrucción, donde la instrucción especifica ubicaciones de una pluralidad de operandos, cuyos valores están en un formato de punto flotante. La instrucción puede especificar al menos dos operandos, cada uno de los cuales incluye uno o más parámetros para que los elementos de datos realicen operaciones aritméticas. El código de operación (opcode) de la instrucción puede indicar las operaciones aritméticas que se deben realizar. Además, el opcode y/o el operando pueden indicar los valores de la pluralidad de operandos que están en formato de punto flotante.
[0230] Por ejemplo, cada uno de los operandos puede indicar un vector (matriz 1D), una matriz (matriz 2D) que está en formato de punto flotante. Cada operando también puede indicar un tensor multidimensional (objetos geométricos que describen relaciones lineales entre vectores geométricos, escalares y otros tensores) o un escalar en formato de punto flotante. El formato de punto flotante puede ser uno de los siguientes: FP16, FP32, FP64, FP128 o FP256 estándar, o un formato de punto flotante propietario que tenga su propia definición de ancho de exponente, precisión de significando y/o bit de signo. Cada vector o matriz puede contener múltiples elementos de datos, cada uno de los cuales puede almacenarse en una o más unidades de almacenamiento, como registros, cachés o memoria de computadora. El operando puede apuntar a las ubicaciones de las unidades de almacenamiento (por ejemplo, memoria, caché o registro) para que el circuito de decodificación pueda obtener los elementos de datos del vector o la matriz. Las operaciones aritméticas pueden ser una o más de suma, resta, multiplicación y división de los elementos de datos.
[0232] En una realización, uno o más operandos adicionales pueden especificar uno o más requisitos de calidad de servicio (QoS) para las operaciones aritméticas. El requisito de QoS puede ser uno o más de los siguientes: precisión de las operaciones aritméticas (el nivel de precisión que se espera mantener después de las operaciones aritméticas requeridas por la instrucción), limitación de la carga de trabajo (los recursos de cómputo que se espera consumir durante las operaciones aritméticas) o requisito de velocidad de cómputo (el tiempo de ejecución que se espera para completar las operaciones aritméticas). El requisito de QoS determina cómo el circuito de ejecución ejecuta la instrucción decodificada en una realización. Adicional o alternativamente, el opcode puede especificar uno o más requisitos de calidad de servicio (QoS) para las operaciones aritméticas en una realización. Además, el opcode y uno o más operandos adicionales pueden especificar la longitud de bits acumulada para almacenar los resultados de la operación aritmética (por ejemplo, la longitud de bits que es múltiplo de los valores de entrada como se discutió en el presente documento anteriormente).
[0234] En la referencia 704, el circuito de ejecución ejecuta la instrucción decodificada. La ejecución incluye la conversión de valores para cada operando, convirtiéndose cada valor en una pluralidad de valores de menor precisión en la referencia 712, donde se almacenará un exponente para cada operando. El exponente de cada operando puede almacenarse en un registro, en una caché o en la memoria. En una realización, los valores de menor precisión están en un formato de entero como int4, int8, int16, int32, int64, int128 u otro entero de n bits. El formato de entero tiene menos bits que los bits de precisión del significado del formato de punto flotante utilizado por el vector o la matriz. En otra realización, los valores de menor precisión están en otro formato de punto flotante que tiene menos bits que los bits de precisión de significando del formato de punto flotante utilizado por el vector o la matriz. Cuando los valores de menor precisión están en el otro formato de punto flotante de menor precisión, el exponente almacenado es el de los valores de menor precisión para el operando.
[0235] La cantidad de valores de menor precisión convertidos por valor puede depender del operando adicional para el requisito de QoS en una realización. Por ejemplo, cuando se espera que la precisión de las operaciones aritméticas sea alta, cada valor puede convertirse en valores de menor precisión (por ejemplo, cada A puede convertirse en A1, A2 y A3, en lugar de A1 y A2 en los ejemplos de las Figuras 1 y 4). Además, cuando hay más recursos de cómputo disponibles para la ejecución, cada valor también puede convertirse a valores de menor precisión. Además, cuando se espera que el tiempo de ejecución sea corto (por ejemplo, inferior a un umbral especificado o una indicación genérica de una ejecución rápida), cada valor puede convertirse en valores de precisión menos bajos.
[0236] La ejecución incluye además realizar operaciones aritméticas entre valores de menor precisión convertidos a partir de valores para la pluralidad de operandos en la referencia 714. Las operaciones aritméticas incluyen las que se muestran en las Figuras 1 y 4 y se analizan en los párrafos relacionados más arriba. Las operaciones aritméticas pueden realizarse en circuitos dedicados a operaciones aritméticas específicas. Por ejemplo, cuando el circuito de ejecución comprende uno o más circuitos multiplicadores-acumuladores (MAC) dedicados, y los uno o más circuitos MAC dedicados deben realizar operaciones de multiplicación y acumulación de enteros. En una realización, cada circuito MAC es un circuito de multiplicación-adición fusionada (FMA). En una realización, los circuitos pueden estar dedicados a valores de punto flotante de baja precisión en formato bfloat16. Por ejemplo, se han construido circuitos dedicados para operaciones aritméticas bfloat16 en aplicaciones de aprendizaje automático (ML) e inteligencia artificial (IA).
[0238] La cantidad de operaciones aritméticas puede depender del operando adicional para el requisito de QoS en una realización. Por ejemplo, cuando se espera que la precisión de las operaciones aritméticas sea alta, se realizan más operaciones aritméticas; y cuando se espera que la precisión de las operaciones aritméticas sea menor, se omiten algunas operaciones (por ejemplo, en lugar de realizar los cuatro términos de los productos internos para obtener una alta precisión en la Figura 1, se puede omitir el orden más bajo, lo que da como resultado una menor precisión). Además, cuando se espera que el consumo de recursos de cómputo sea alto, se realizan más operaciones aritméticas. Además, cuando se espera que el tiempo de ejecución sea corto (inferior a un umbral especificado o una indicación genérica de una ejecución rápida), se omiten algunas operaciones (por ejemplo, realizar bx3_8p en lugar de bx3_9p para omitir las operaciones aritméticas para el término de orden más bajo como se muestra en la Figura 6).
[0240] La ejecución incluye además generar un valor de punto flotante convirtiendo un valor resultante de las operaciones aritméticas al formato de punto flotante y almacenando el valor de punto flotante en la referencia 716. La generación del valor de punto flotante incluye las reconstrucciones que se muestran en las Figuras 1 y 4 y se analizan en los párrafos relacionados en este documento más arriba. El valor de punto flotante se puede almacenar en una ubicación especificada por la instrucción (por ejemplo, memoria, caché o registro). En una realización, el valor de punto flotante se almacena en una ubicación que ha almacenado los operandos de entrada.
[0242] La Figura 7B es un diagrama de flujo que muestra la conversión de valores en un punto flotante a múltiples valores de menor precisión según una realización de la invención. Las operaciones pueden ser una realización de las operaciones de la referencia 712 de la Figura 7A.
[0244] Cuando la conversión de valor consiste en convertir cada valor a enteros, cada valor en formato de punto flotante se cuantiza en la referencia 722. La cuantización incluye la determinación del exponente del operando basándose en un rango de valores de los valores y la pluralidad de valores enteros en la referencia 732.
[0246] En una realización, la cuantización incluye determinar el exponente para el operando basándose en el rango de los valores y la pluralidad de valores de menor precisión en la referencia 732, siendo cada uno un valor entero. Luego, en la referencia 734, cada valor se cuantiza en un valor entero basado en el rango de valores (por ejemplo, el valornumen los Ejemplos 1 a 4). La cuantización se analiza con más detalle en relación con los Ejemplos 1 a 4 mencionados anteriormente.
[0248] En una realización, la instrucción puede tener uno o más operandos que indican el rango de valores para cada operando que indica los valores que están en el formato de punto flotante. De esta forma, la cuantización puede utilizar el rango de valores de la instrucción en la realización. En otra realización, el rango de los valores no lo proporciona la instrucción, y el rango se determina basándose en el examen de todos los valores de los operandos. Por ejemplo, el procesador puede escanear todos los elementos de datos identificados por un operando y determinar el rango para el operando.
[0250] En la referencia 723, cada valor (los valores originales o los resultantes de la cuantización de los valores originales) se representa utilizando una pluralidad de bits que incluyen al menos un primer y un segundo número de bits. En la referencia 724, se identifica el primer número de bits dentro de la pluralidad de bits para un primer valor de menor precisión para aproximar cada valor; y en la referencia 724, se identifica el segundo número de bits que no se superponen con el primer número de bits para un segundo valor de menor precisión para representar un resto de la aproximación del primer valor de menor precisión, donde el primer y el segundo valor de menor precisión se utilizan para realizar las operaciones aritméticas con valores de menor precisión de uno o más otros operandos. Las Figuras 1 -2 proporcionan ejemplos de la identificación del primer y segundo número de bits para el enfoque de conversión a enteros, y las Figuras 4 y 5 proporcionan ejemplos similares para la conversión al enfoque de punto flotante de menor precisión.
[0252] Utilizando realizaciones de la invención, la multiplicación general de matrices (GEMM) y otras operaciones aritméticas de vector/matriz se pueden ejecutar de manera más eficiente y con opciones de precisión ajustables. Los enfoques de conversión y reconstrucción en las realizaciones de la invención se pueden aplicar al aprendizaje automático (ML) y la inteligencia artificial (IA), aplicaciones de computación de alto rendimiento (HPC) y otras aplicaciones. Por ejemplo, los valores originales en vectores y matrices pueden convertirse a valores de menor precisión, y los valores de menor precisión se utilizan para realizar operaciones aritméticas. Las operaciones aritméticas pueden ejecutarse uno o más órdenes de magnitud más rápido que los valores originales cuando se implementan circuitos de hardware dedicados para estas operaciones aritméticas. Los valores de menor precisión pueden utilizar los circuitos de hardware para generar peso para una red neuronal; y también pueden utilizar los mismos circuitos de hardware o circuitos de hardware diferentes para generar valores de entrada para una función de activación. Una vez que las operaciones aritméticas aprovechan los circuitos de hardware, los valores resultantes pueden convertirse nuevamente al formato de punto flotante original.
[0253] Además, el uso de circuitos de hardware para realizar operaciones aritméticas en formatos de punto flotante de mayor precisión (por ejemplo, FP128, FP256, etc.) puede resultar costoso y poco práctico en algunas arquitecturas de computadora. Las realizaciones de la invención pueden convertir valores en un formato de punto flotante de mayor precisión, cada uno a una gran cantidad de valores en un formato de menor precisión (por ejemplo, int4, int8, bfloat16), y realizar las operaciones aritméticas en el formato de menor precisión. Los resultados en el formato de menor precisión pueden luego reconstruirse en el formato de punto flotante de mayor precisión, como se analiza en las Figuras 1-7. De este modo, las realizaciones de la invención pueden aliviar la necesidad de construir circuitos de hardware para realizar operaciones aritméticas en formatos de punto flotante de mayor precisión.
[0255] Arquitecturas de procesadores y tipos de datos ejemplares
[0257] La Figura 8A es un diagrama de bloques que muestra tanto una canalización en orden ejemplar como una canalización de emisión/ejecución fuera de orden de cambio de nombre de registro ejemplar de acuerdo con realizaciones de la invención. La Figura 8B es un diagrama de bloques que muestra una realización ejemplar de un núcleo de arquitectura en orden y un núcleo de arquitectura de ejecución/emisión fuera de orden, de cambio de nombre de registro ejemplar que se incluirá en un procesador de acuerdo con realizaciones de la invención. Los cuadros con líneas continuas en las Figuras 8A-B muestran la secuencia en orden y el núcleo en orden, mientras que la adición opcional de cuadros con líneas discontinuas muestra el núcleo y la secuencia de cambios de nombre de registros y la emisión/ejecución fuera de orden. Dado que el aspecto en orden es un subconjunto del aspecto fuera de orden, se describirá el aspecto fuera de orden.
[0258] En la Figura 8A, una canalización de procesador 800 incluye una etapa de búsqueda 802, una etapa de decodificación de longitud 804, una etapa de decodificación 806, una etapa de asignación 808, una etapa de cambio de nombre 810, una etapa de planificación (también conocida como despacho o emisión) 812, una etapa de lectura de registro/lectura de memoria 814, una etapa de ejecución 816, una etapa de reescritura/escritura de memoria 818, una etapa de manejo de excepciones 822 y una etapa de confirmación 824. Cada etapa puede incluir circuitos para realizar las operaciones en la etapa, y los circuitos pueden denominarse circuitos de búsqueda, circuitos de decodificación, circuitos de planificación, circuitos de ejecución, etc. para indicar que se utilizan circuitos de hardware para implementar estas etapas.
[0260] La Figura 8B muestra el núcleo de procesador 890 que incluye una unidad frontal 830 acoplada a una unidad de motor de ejecución 850, y ambas están acopladas a una unidad de memoria 870. El núcleo 890 puede ser un núcleo de computación de conjunto de instrucciones reducido (RISC), un núcleo de computación de conjunto de instrucciones complejo (CISC), un núcleo de palabra de instrucción muy larga (VLIW) o un tipo de núcleo híbrido o alternativo. Como otra opción más, el núcleo 890 puede ser un núcleo de propósito especial, tal como, por ejemplo, un núcleo de red o comunicación, un motor de compresión, un núcleo de coprocesador, un núcleo de unidad de procesamiento de gráficos de computación de propósito general (GPGPU), un núcleo de gráficos o similar.
[0262] La unidad frontal 830 incluye una unidad de predicción de rama 832 acoplada a una unidad de caché de instrucciones 834, que está acoplada a un búfer de búsqueda de traducción de instrucciones (TLB) 836, que está acoplado a una unidad de búsqueda de instrucciones 838, que está acoplada a una unidad de decodificación 840. La unidad de decodificación 840 (o decodificador) puede decodificar instrucciones y generar como salida una o más microoperaciones, puntos de entrada de microcódigo, microinstrucciones, otras instrucciones u otras señales de control que se decodifican a partir de las instrucciones originales o que, de otro modo, reflejan o se derivan de ellas. La unidad de decodificación 840 puede implementarse utilizando varios mecanismos diferentes. Los ejemplos de mecanismos adecuados incluyen, pero no se limitan a, tablas de búsqueda, implementaciones de hardware, matrices lógicas programables (PLA), memorias de solo lectura (ROM) de microcódigo, etc. En una realización, el núcleo 890 incluye una ROM de microcódigo u otro medio que almacena microcódigo para ciertas macroinstrucciones (por ejemplo, en la unidad de decodificación 840 o de otro modo dentro de la unidad frontal 830). La unidad de decodificación 840 está acoplada a una unidad de cambio de nombre/asignación 852 en la unidad de motor de ejecución 850.
[0264] La unidad de motor de ejecución 850 incluye la unidad de cambio de nombre/asignación 852 acoplada a una unidad de retiro 854 y un conjunto de una o más unidades de planificación 856. La o las unidades de planificación 856 representan cualquier número de planificadores diferentes, incluidas estaciones de reserva, ventana de instrucciones central, etc. La o las unidades de planificación 856 están acopladas a la o las unidades de archivos de registro físico 858. Cada una de las unidades de archivo de registro físico 858 representa uno o más archivos de registro físico, de los cuales cada uno almacena uno o más tipos de datos diferentes, tales como entero escalar, punto flotante escalar, entero empaquetado, punto flotante empaquetado, entero vectorial, punto flotante vectorial, estado (por ejemplo, un puntero de instrucción que es la dirección de la siguiente instrucción que se ejecutará), etc. En una realización, la unidad de archivo de registro físico 858 comprende una unidad de registros vectoriales, una unidad de registros de máscara de escritura y una unidad de registros escalares. Estas unidades de registro pueden proporcionar registros vectoriales arquitectónicos, registros de máscara vectorial y registros de propósito general. La unidad 854 de retiro superpone la o las unidades de archivo de registro físico 858 para mostrar varias formas en las que se puede implementar el cambio de nombre de registro y la ejecución fuera de orden (por ejemplo, utilizando un búfer de reordenamiento y un archivo de registro de retiro; utilizando un archivo futuro, un búfer de historial y un archivo de registro de retiro; utilizando mapas de registro y un grupo de registros; etc.). La unidad de retiro 854 y la o las unidades de archivo de registro físico 858 están acopladas a los clústeres de ejecución 860. El o los grupos de ejecución 860 incluyen un conjunto de una o más unidades de ejecución 862 y un conjunto de una o más unidades de acceso a memoria 864. Las unidades de ejecución 862 pueden realizar varias operaciones (por ejemplo, desplazamientos, suma, resta, multiplicación) y sobre varios tipos de datos (por ejemplo, punto flotante escalar, entero empaquetado, punto flotante empaquetado, entero vectorial, punto flotante vectorial). Si bien algunas realizaciones pueden incluir varias unidades de ejecución dedicadas a funciones específicas o conjuntos de funciones, otras realizaciones pueden incluir solo una unidad de ejecución o múltiples unidades de ejecución que realizan todas las funciones. La o las unidades de planificación 856, la o las unidades de archivo de registro físico 858 y el o los clústeres de ejecución 860 se muestran como posiblemente plurales porque ciertas realizaciones crean canalizaciones separadas para ciertos tipos de datos/operaciones (por ejemplo, una canalización de entero escalar, una canalización de punto flotante escalar/entero empaquetado/punto flotante empaquetado/entero vectorial/punto flotante vectorial y/o una canalización de acceso a memoria que tienen cada una su propia unidad de planificación, unidades de archivo de registro físico y/o clúster de ejecución - y en el caso de una canalización de acceso a memoria separada, se implementan ciertas realizaciones en las que solo el clúster de ejecución de esta canalización tiene la o las unidades de acceso a memoria 864). También debe entenderse que cuando se utilizan canalizaciones separadas, una o más de estas canalizaciones pueden estar fuera de orden de emisión/ejecución y el resto en orden.
[0266] El conjunto de unidades de acceso a memoria 864 está acoplado a la unidad de memoria 870, que incluye una unidad TLB de datos 872 acoplada a una unidad de caché de datos 874 acoplada a una unidad de caché de nivel 2 (L2) 876. En una realización ejemplar, las unidades de acceso a memoria 864 pueden incluir una unidad de carga, una unidad de dirección de almacenamiento y una unidad de datos de almacenamiento, cada una de las cuales está acoplada a la unidad TLB de datos 872 en la unidad de memoria 870. La unidad de caché de instrucciones 834 está acoplada además a una unidad de caché de nivel 2 (L2) 876 en la unidad de memoria 870. La unidad de caché L2876 está acoplada a uno o más niveles de caché y eventualmente a una memoria principal.
[0268] A modo de ejemplo, la arquitectura de núcleo de ejecución/emisión fuera de orden y cambio de nombre de registro de ejemplo puede implementar la tubería 800 de la siguiente manera: 1) la unidad de obtención de instrucciones 838 realiza las etapas de obtención y decodificación de longitud 802 y 804; 2) la unidad de decodificación 840 realiza la etapa de decodificación 806; 3) la unidad de renombramiento/asignación 852 realiza la etapa de asignación 808 y la etapa de renombramiento 810; 4) la o las unidades de planificación 856 realizan la etapa de planificación 812; 5) la o las unidades de archivo de registro físico 858 y la unidad de memoria 870 realizan la etapa de lectura de registro/lectura de memoria 814; el clúster de ejecución 860 realiza la etapa de ejecución 816; 6) la unidad de memoria 870 y la o las unidades de archivo de registro físico 858 realizan la etapa de reescritura/escritura de memoria 818; 7) varias unidades pueden estar involucradas en la etapa de manejo de excepciones 822; y 8) la unidad de retiro 854 y la o las unidades de archivo de registro físico 858 realizan la etapa de confirmación 824.
[0270] El núcleo 890 puede soportar uno o más conjuntos de instrucciones (por ejemplo, el conjunto de instrucciones x86 (con algunas extensiones que se han agregado con versiones más nuevas); el conjunto de instrucciones MIPS de MIPS Technologies de Sunnyvale, CA; el conjunto de instrucciones ARM (con extensiones adicionales opcionales como NEON) de ARM Holdings de Sunnyvale, CA), incluidas las instrucciones descritas en este documento. En una realización, el núcleo 890 incluye lógica para soportar una extensión de conjunto de instrucciones de datos empaquetados (por ejemplo, AVX1, AVX2, extensiones de matriz avanzadas (AMX) y/o alguna forma de formato de instrucción amigable con vectores genéricos (U=0 y/o U=1), descrito más adelante), permitiendo así que las operaciones utilizadas por muchas aplicaciones multimedia se realicen utilizando datos empaquetados.
[0272] Debe entenderse que el núcleo puede soportar multihilo (ejecutar dos o más conjuntos paralelos de operaciones o subprocesos), y puede hacerlo en una variedad de formas, incluyendo multihilo con cortes de tiempo, multihilo simultáneo (donde un solo núcleo físico proporciona un núcleo lógico para cada uno de los subprocesos que ese núcleo físico está multihilo simultáneamente), o una combinación de los mismos (por ejemplo, obtención y decodificación con cortes de tiempo y multihilo simultáneo a partir de entonces, como en la tecnología Intel® Hyperthreading).
[0274] Si bien el cambio de nombre de registro se describe en el contexto de la ejecución fuera de orden, debe entenderse que el cambio de nombre de registro se puede utilizar en una arquitectura en orden. Si bien la realización ilustrada del procesador también incluye unidades de caché de instrucciones y datos independientes 834/874 y una unidad de caché L2 compartida 876, realizaciones alternativas pueden tener una única caché interna tanto para instrucciones como para datos, como, por ejemplo, una caché interna de nivel 1 (L1), o múltiples niveles de caché interna. En algunas realizaciones, el sistema puede incluir una combinación de una caché interna y una caché externa que es externa al núcleo y/o al procesador. Alternativamente, toda la caché puede ser externa al núcleo y/o al procesador.
[0276] La Figura 9 es un diagrama de bloques de un procesador 900 que puede tener más de un núcleo, puede tener un controlador de memoria integrado y puede tener gráficos integrados de acuerdo con realizaciones de la invención. Los cuadros de líneas continuas en la Figura 9 muestran un procesador 900 con un solo núcleo 902A, un agente de sistema 910, un conjunto de una o más unidades de controlador de bus 916, mientras que la adición opcional de los cuadros de líneas discontinuas muestra un procesador 900 alternativo con múltiples núcleos 902A-N, un conjunto de una o más unidades de controlador de memoria integradas 914 en la unidad de agente de sistema 910 y una lógica de propósito especial 908 (por ejemplo, lógica de gráficos integrada).
[0277] Por lo tanto, diferentes implementaciones del procesador 900 pueden incluir: 1) una CPU con la lógica de propósito especial 908 que es lógica gráfica y/o científica (rendimiento) integrada (que puede incluir uno o más núcleos), y los núcleos 902A-N son uno o más núcleos de propósito general (por ejemplo, núcleos en orden de propósito general, núcleos fuera de orden de propósito general, una combinación de los dos); 2) un coprocesador con los núcleos 902A-N siendo una gran cantidad de núcleos de propósito especial destinados principalmente a gráficos y/o científica (rendimiento); y 3) un coprocesador con los núcleos 902A-N siendo una gran cantidad de núcleos en orden de propósito general. De este modo, el procesador 900 puede ser un procesador de propósito general, un coprocesador o un procesador de propósito especial, tal como, por ejemplo, un procesador de red o de comunicación, un motor de compresión, un procesador de gráficos, una GPGPU (unidad de procesamiento de gráficos de propósito general), un coprocesador de muchos núcleos integrados (MIC) de alto rendimiento (incluidos 30 o más núcleos), un procesador integrado o similar. El procesador puede implementarse en uno o más chips. El procesador 900 puede ser parte y/o puede implementarse en uno o más sustratos utilizando cualquiera de varias tecnologías de proceso, tales como, por ejemplo, BiCMOS, CMOS o NMOS.
[0279] La jerarquía de memoria incluye uno o más niveles de caché dentro de los núcleos, un conjunto de una o más unidades de caché compartidas 906 y una memoria externa (no mostrada) acoplada al conjunto de unidades de controlador de memoria integradas 914. El conjunto de unidades de caché compartida 906 puede incluir una o más cachés de nivel medio, como el nivel 2 (L2), el nivel 3 (L3), el nivel 4 (L4) u otros niveles de caché, un caché de último nivel (LLC) y/o combinaciones de los mismos. Si bien en una realización una unidad de interconexión basada en anillo 912 interconecta la lógica de propósito especial 908, el conjunto de unidades de caché compartida 906 y la unidad de agente de sistema 910/unidades de controlador de memoria integrada 914, realizaciones alternativas pueden utilizar cualquier número de técnicas bien conocidas para interconectar dichas unidades. En una realización, se mantiene la coherencia entre una o más unidades de caché 906 y núcleos 902-AN.
[0281] En algunas realizaciones, uno o más de los núcleos 902A-N son capaces de realizar multihilo. El agente de sistema 910 incluye los componentes que coordinan y operan los núcleos 902A-N. La unidad de agente de sistema 910 puede incluir, por ejemplo, una unidad de control de potencia (PCU) y una unidad de pantalla. La PCU puede ser o incluir lógica y componentes necesarios para regular el estado de energía de los núcleos 902A-N y la lógica de propósito especial 908. La unidad de pantalla sirve para controlar una o más pantallas conectadas externamente.
[0283] Los núcleos 902A-N pueden ser homogéneos o heterogéneos en términos del conjunto de instrucciones de arquitectura; es decir, dos o más de los núcleos 902A-N pueden ser capaces de ejecutar el mismo conjunto de instrucciones, mientras que otros pueden ser capaces de ejecutar sólo un subconjunto de ese conjunto de instrucciones o un conjunto de instrucciones diferente.
[0285] Las Figuras 10-13 son diagramas de bloques de arquitecturas de computadora ejemplares. Otros diseños y configuraciones de sistemas conocidos en la materia para computadoras portátiles, de escritorio, PC portátiles, asistentes digitales personales, estaciones de trabajo de ingeniería, servidores, dispositivos de red, concentradores de red, conmutadores, procesadores integrados, procesadores de señales digitales (DSP), dispositivos gráficos, dispositivos de videojuegos, decodificadores, microcontroladores, teléfonos móviles, reproductores multimedia portátiles, dispositivos portátiles y varios otros dispositivos electrónicos, también son adecuados. En general, son generalmente adecuados una gran variedad de sistemas o dispositivos electrónicos capaces de incorporar un procesador y/u otra lógica de ejecución como se divulga en el presente documento.
[0287] Haciendo referencia ahora a la Figura 10, se muestra un diagrama de bloques de un sistema 1000 de acuerdo con una realización de la presente invención. El sistema 1000 puede incluir uno o más procesadores 1010, 1015, que están acoplados a un concentrador controlador 1020. En una realización, el concentrador controlador 1020 incluye un concentrador controlador de memoria gráfica (GMCH) 1090 y un concentrador de entrada/salida (IOH) 1050 (que pueden estar en chips separados); el GMCH 1090 incluye controladores de memoria y gráficos a los que están acoplados la memoria 1040 y un coprocesador 1045; el IOH 1050 acopla dispositivos de entrada/salida (E/<s>) 1060 al G<m>C<h>1090. Alternativamente, uno o ambos controladores de memoria y gráficos están integrados dentro del procesador (como se describe en el presente documento), la memoria 1040 y el coprocesador 1045 están acoplados directamente al procesador 1010 y el concentrador del controlador 1020 en un solo chip con el IOH 1050.
[0289] La naturaleza opcional de los procesadores 1015 adicionales se indica en la Figura 10 con líneas discontinuas. Cada procesador 1010, 1015 puede incluir uno o más de los núcleos de procesamiento descritos en el presente documento y puede ser alguna versión del procesador 900.
[0291] La memoria 1040 puede ser, por ejemplo, una memoria de acceso aleatorio dinámica (DRAM), una memoria de cambio de fase (PCM) o una combinación de las dos. Para al menos una realización, el concentrador controlador 1020 se comunica con el o los procesadores 1010, 1015 a través de un bus multipunto, tal como un bus frontal (FSB), una interfaz punto a punto como QuickPath Interconnect (QPI) o una conexión 1095 similar.
[0293] En una realización, el coprocesador 1045 es un procesador de propósito especial, tal como, por ejemplo, un procesador MIC de alto rendimiento, un procesador de red o comunicación, un motor de compresión, un procesador de gráficos, GPGPU, procesador integrado o similar. En una realización, el concentrador controlador 1020 puede incluir un acelerador de gráficos integrado.
[0295] Puede haber una variedad de diferencias entre los procesadores 1010 y 1015 en términos de un espectro de métricas de mérito que incluyen características arquitectónicas, microarquitectónicas, térmicas, de consumo de energía y similares.
[0296] En una realización, el procesador 1010 ejecuta instrucciones que controlan operaciones de procesamiento de datos de un tipo general. Dentro de las instrucciones pueden estar incorporadas instrucciones de coprocesador. El procesador 1010 reconoce estas instrucciones de coprocesador como de un tipo que debe ser ejecutado por el coprocesador 1045 adjunto. En consecuencia, el procesador 1010 emite estas instrucciones de coprocesador (o señales de control que representan instrucciones de coprocesador) en un bus de coprocesador u otra interconexión, al coprocesador 1045. El o los coprocesadores 1045 aceptan y ejecutan las instrucciones de coprocesador recibidas.
[0298] Haciendo referencia ahora a la Figura 11, se muestra un diagrama de bloques de un primer sistema 1100 ejemplar más específico de acuerdo con una realización de la presente invención. Como se muestra en la Figura 11, el sistema multiprocesador 1100 es un sistema de interconexión punto a punto e incluye un primer procesador 1170 y un segundo procesador 1180 acoplados a través de una interconexión punto a punto 1150. Cada uno de los procesadores 1170 y 1180 puede ser alguna versión del procesador 900. En una realización de la invención, los procesadores 1170 y 1180 son respectivamente los procesadores 1010 y 1015, mientras que el coprocesador 1138 es el coprocesador 1045. En otra realización, los procesadores 1170 y 1180 son respectivamente el procesador 1010 y el coprocesador 1045.
[0300] Se muestran los procesadores 1170 y 1180 que incluyen unidades de controlador de memoria integrada (IMC) 1172 y 1182, respectivamente. El procesador 1170 también incluye como parte de sus unidades controladoras de bus las interfaces punto a punto (P-P) 1176 y 1178; de manera similar, el segundo procesador 1180 incluye las interfaces P-P 1186 y 1188. Los procesadores 1170, 1180 pueden intercambiar información a través de una interfaz punto a punto (P-P) 1150 utilizando circuitos de interfaz P-P 1178, 1188. Como se muestra en la Figura 11, los IMC 1172 y 1182 acoplan los procesadores a memorias respectivas, es decir, una memoria 1132 y una memoria 1134, que pueden ser porciones de memoria principal conectadas localmente a los respectivos procesadores.
[0302] Los procesadores 1170, 1180 pueden intercambiar cada uno información con un conjunto de chips 1190 a través de interfaces P-P 1152, 1154 individuales utilizando circuitos de interfaz punto a punto 1176, 1194, 1186, 1198. El conjunto de chips 1190 puede intercambiar opcionalmente información con el coprocesador 1138 a través de una interfaz de alto rendimiento 1139. En una realización, el coprocesador 1138 es un procesador de propósito especial, tal como, por ejemplo, un procesador MIC de alto rendimiento, un procesador de red o comunicación, un motor de compresión, un procesador de gráficos, GPGPU, procesador integrado o similar.
[0304] Se puede incluir una caché compartida (no mostrada) en cualquiera de los procesadores o fuera de ambos procesadores, pero conectada con los procesadores a través de una interconexión P-P, de modo que la información de caché local de cualquiera de los procesadores o de ambos se puede almacenar en la caché compartida si un procesador se coloca en un modo de bajo consumo.
[0306] El conjunto de chips 1190 puede estar acoplado a un primer bus 1116 a través de una interfaz 1196. En una realización, el primer bus 1116 puede ser un bus de interconexión de componentes periféricos (PCI), o un bus tal como un bus PCI Express u otro bus de interconexión de E/S de tercera generación, aunque el alcance de la presente invención no está limitado de esa manera.
[0308] Como se muestra en la Figura 11, varios dispositivos de E/S 1114 pueden estar acoplados al primer bus 1116, junto con un puente de bus 1118 que acopla el primer bus 1116 a un segundo bus 1120. En una realización, uno o más procesadores 1115 adicionales, tales como coprocesadores, procesadores MIC de alto rendimiento, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señal digital (DSP)), matrices de puertas programables en campo o cualquier otro procesador, están acoplados al primer bus 1116. En una realización, el segundo bus 1120 puede ser un bus de bajo número de pines (LPC). Diversos dispositivos pueden estar acoplados a un segundo bus 1120, incluyendo, por ejemplo, un teclado y/o ratón 1122, dispositivos de comunicación 1127 y una unidad de almacenamiento 1128, tal como una unidad de disco u otro dispositivo de almacenamiento masivo que puede incluir instrucciones/código y datos 1130, en una realización. Además, una E/S de audio 1124 puede estar acoplada al segundo bus 1120. Señalar que son posibles otras arquitecturas. Por ejemplo, en lugar de la arquitectura punto a punto de la Figura 11, un sistema puede implementar un bus multipunto u otra arquitectura similar.
[0310] Haciendo referencia ahora a la Figura 12, se muestra un diagrama de bloques de un segundo sistema 1200 ejemplar más específico de acuerdo con una realización de la presente invención. Los elementos similares en las Figuras 11 y 12 llevan números de referencia similares, y ciertos aspectos de la Figura 11 se han omitido de la Figura 12 para evitar oscurecer otros aspectos de la Figura 12.
[0312] La Figura 12 muestra que los procesadores 1270, 1280 pueden incluir memoria integrada y lógica de control de E/S ("CL") 1272 y 1282, respectivamente. De esta forma, los CL 1272, 1282 incluyen unidades controladoras de memoria integradas e incluyen lógica de control de E/S. La Figura 12 muestra que no sólo las memorias 1232, 1234 están acopladas a los CL 1272, 1282, sino también que los dispositivos de E/S 1214 también están acoplados a la lógica de control 1272, 1282. Los dispositivos de E/S heredados 1215 están acoplados al conjunto de chips 1290.
[0314] Haciendo referencia ahora a la Figura 13, se muestra un diagrama de bloques de un SoC 1300 de acuerdo con una realización de la presente invención. Los elementos similares en la Figura 9 tienen números de referencia iguales. Además, los cuadros con líneas discontinuas son características opcionales en los SoC más avanzados. En la Figura 13, una o más unidades de interconexión 1302 están acopladas a: un procesador de aplicación 1310 que incluye un conjunto de uno o más núcleos 902A-N y una o más unidades de caché compartida 906; una unidad de agente de sistema 910; una o más unidades de controlador de bus 916; una o más unidades de controlador de memoria integrada 914; un conjunto de uno o más coprocesadores 1320 que pueden incluir lógica de gráficos integrada, un procesador de imágenes, un procesador de audio y un procesador de vídeo; una unidad de memoria de acceso aleatorio estático (SRAM) 1330; una unidad de acceso directo a memoria (DMA) 1332; y una unidad de pantalla 1340 para acoplarse a una o más pantallas externas. En una realización, el o los coprocesadores 1320 incluyen un procesador de propósito especial, tal como, por ejemplo, un procesador de red o comunicación, un motor de compresión, GPGPU, un procesador MIC de alto rendimiento, un procesador integrado o similar.
[0316] Las realizaciones de los mecanismos divulgados en este documento pueden implementarse en hardware, software, firmware o una combinación de dichos enfoques de implementación. Las realizaciones de la invención pueden implementarse como programas informáticos o código de programa que se ejecuta en sistemas programables que comprenden al menos un procesador, un sistema de almacenamiento (incluyendo memoria volátil y no volátil y/o elementos de almacenamiento), al menos un dispositivo de entrada y al menos un dispositivo de salida.
[0318] El código de programa, tal como el código 1130 que se muestra en la Figura 11, se puede aplicar a las instrucciones de entrada para realizar las funciones descritas en este documento y generar información de salida. La información de salida se puede aplicar a uno o más dispositivos de salida, de manera conocida. Para los fines de esta solicitud, un sistema de procesamiento incluye cualquier sistema que tenga un procesador, tal como, por ejemplo; un procesador de señal digital (DSP), un microcontrolador, un circuito integrado de aplicación específica (ASIC) o un microprocesador.
[0320] El código del programa puede implementarse en un lenguaje de programación orientado a objetos o procedimental de alto nivel para comunicarse con un sistema de procesamiento. El código del programa también puede implementarse en lenguaje ensamblador o lenguaje máquina, si se desea. De hecho, los mecanismos descritos en este documento no están limitados en su alcance a un lenguaje de programación en particular. En cualquier caso, el lenguaje puede ser un lenguaje compilado o interpretado.
[0322] Uno o más aspectos de al menos una realización pueden implementarse mediante instrucciones representativas almacenadas en un medio legible por máquina que representa varias lógicas dentro del procesador, que cuando son leídas por una máquina hacen que la máquina fabrique lógica para realizar las técnicas descritas en este documento. Estas representaciones, conocidas como "núcleos IP", pueden almacenarse en un medio tangible y legible por máquina y suministrarse a diversos clientes o instalaciones de fabricación para cargarlas en las máquinas de fabricación que realmente producen la lógica o el procesador.
[0324] Dichos medios de almacenamiento legibles por máquina pueden incluir, sin limitación, disposiciones tangibles no transitorias de artículos fabricados o formados por una máquina o dispositivo, incluidos medios de almacenamiento tales como discos duros, cualquier otro tipo de disco, incluidos disquetes, discos ópticos, memorias de solo lectura de disco compacto (CD-ROM), discos compactos regrabables (CD-RW), discos versátiles/de vídeo digital (DVD), Blu-ray (BD) y discos magnetoópticos, dispositivos semiconductores tales como memorias de solo lectura (ROM), memorias de acceso aleatorio (RAM) tales como memorias de acceso aleatorio dinámicas (DRAM), memorias de acceso aleatorio estáticas (SRAM), memorias de solo lectura programables y borrables (EPROM), memorias flash, memorias de solo lectura programables y borrables eléctricamente (EEPROM), memoria de cambio de fase (PCM), tarjetas magnéticas u ópticas, o cualquier otro tipo de medio adecuado para almacenar instrucciones electrónicas.
[0326] Por consiguiente, las realizaciones de la invención también incluyen medios tangibles legibles por máquina, no transitorios, que contienen instrucciones o que contienen datos de diseño, tales como el lenguaje de descripción de hardware (HDL), que define estructuras, circuitos, aparatos, procesadores y/o características del sistema descritos en este documento. Estas realizaciones también pueden denominarse productos de programa.
[0328] En algunos casos, se puede utilizar un convertidor de instrucciones para convertir una instrucción de un conjunto de instrucciones de origen a un conjunto de instrucciones de destino. Por ejemplo, el convertidor de instrucciones puede traducir (por ejemplo, utilizando traducción binaria estática, traducción binaria dinámica incluyendo compilación dinámica), transformar, emular o convertir de otro modo una instrucción en una o más instrucciones para que sean procesadas por el núcleo. El convertidor de instrucciones puede implementarse en software, hardware, firmware o una combinación de los mismos. El convertidor de instrucciones puede estar en el procesador, fuera del procesador o parcialmente dentro y parcialmente fuera del procesador.
[0330] La Figura 14 es un diagrama de bloques que contrasta el uso de un convertidor de instrucciones de software para convertir instrucciones binarias en un conjunto de instrucciones de origen a instrucciones binarias en un conjunto de instrucciones de destino de acuerdo con realizaciones de la invención. En la realización ilustrada, el convertidor de instrucciones es un convertidor de instrucciones de software, aunque alternativamente el convertidor de instrucciones puede implementarse en software, firmware, hardware o varias combinaciones de los mismos. La Figura 14 muestra un programa en un lenguaje de alto nivel 1402 que puede compilarse utilizando un compilador x86 1404 para generar código binario x86 1406 que puede ser ejecutado de forma nativa por un procesador con al menos un núcleo de conjunto de instrucciones x861416. El procesador con al menos un núcleo de conjunto de instrucciones x86 1416 representa cualquier procesador que puede realizar sustancialmente las mismas funciones que un procesador Intel con al menos un núcleo de conjunto de instrucciones x86 al ejecutar de manera compatible o procesar de otro modo (1) una parte sustancial del conjunto de instrucciones del núcleo de conjunto de instrucciones x86 de Intel o (2) versiones de código objeto de aplicaciones u otro software destinado a ejecutarse en un procesador Intel con al menos un núcleo de conjunto de instrucciones x86, con el fin de lograr sustancialmente el mismo resultado que un procesador Intel con al menos un núcleo de conjunto de instrucciones x86. El compilador x86 1404 representa un compilador que puede generar código binario x86 1406 (por ejemplo, código objeto) que puede, con o sin procesamiento de enlace adicional, ejecutarse en el procesador con al menos un núcleo de conjunto de instrucciones x861416. De manera similar, la Figura 14 muestra que el programa en el lenguaje de alto nivel 1402 puede compilarse usando un compilador de conjunto de instrucciones 1408 alternativo para generar código binario de conjunto de instrucciones 1410 alternativo que puede ejecutarse de forma nativa por un procesador sin al menos un núcleo de conjunto de instrucciones x86 1414 (por ejemplo, un procesador con núcleos que ejecutan el conjunto de instrucciones MIPS de MIPS Technologies de Sunnyvale, CA y/o que ejecutan el conjunto de instrucciones ARM de ARM Holdings de Sunnyvale, CA). El convertidor de instrucciones 1412 se utiliza para convertir el código binario x86 1406 en código que puede ser ejecutado de forma nativa por el procesador sin un núcleo de conjunto de instrucciones x86 1414. Es poco probable que este código convertido sea el mismo que el código binario del conjunto de instrucciones 1410 alternativo porque es difícil crear un convertidor de instrucciones capaz de hacerlo; sin embargo, el código convertido realizará la operación general y estará compuesto por instrucciones del conjunto de instrucciones alternativo. De esta manera, el convertidor de instrucciones 1412 representa un software, firmware, hardware o una combinación de los mismos que, mediante emulación, simulación o cualquier otro proceso, permite a un procesador u otro dispositivo electrónico que no disponga de un procesador o núcleo de conjunto de instrucciones x86 ejecutar el código binario x861406.
[0332] Formatos de instrucción ejemplares
[0334] Las realizaciones de la o las instrucciones descritas en este documento pueden realizarse en diferentes formatos. Además, a continuación se detallan sistemas, arquitecturas y canalizaciones ejemplares. Las realizaciones de la o las instrucciones pueden ejecutarse en dichos sistemas, arquitecturas y canales, pero no se limitan a los detallados.
[0336] Un formato de instrucción amigable con vectores es un formato de instrucción que es adecuado para instrucciones vectoriales (por ejemplo, hay ciertos campos específicos para operaciones vectoriales). Si bien se describen realizaciones en las que se soportan operaciones vectoriales y escalares a través del formato de instrucciones compatible con vectores, realizaciones alternativas utilizan solo operaciones vectoriales en el formato de instrucciones compatible con vectores.
[0337] Las Figuras 15A-15B son diagramas de bloques que muestran un formato de instrucción amigable con vectores genéricos y plantillas de instrucciones del mismo de acuerdo con realizaciones de la invención. La Figura 15A es un diagrama de bloques que muestra un formato de instrucción amigable con vectores genéricos y plantillas de instrucciones de clase A del mismo de acuerdo con realizaciones de la invención; mientras que la Figura 15B es un diagrama de bloques que muestra el formato de instrucción amigable con vectores genéricos y plantillas de instrucciones de clase B del mismo de acuerdo con realizaciones de la invención. Específicamente, un formato de instrucción amigable con vectores genéricos 1500 para el cual se definen plantillas de instrucción de clase A y clase B, las cuales incluyen plantillas de instrucción sin acceso a memoria 1505 y plantillas de instrucción de acceso a memoria 1520. El término genérico en el contexto del formato de instrucción amigable con vectores se refiere a que el formato de instrucción no está vinculado a un conjunto de instrucciones específico.
[0339] Si bien se describirán realizaciones de la invención en las que el formato de instrucción amigable con vectores soporta lo siguiente: una longitud (o tamaño) de operando de vector de 64 bytes con anchos (o tamaños) de elementos de datos de 32 bits (4 bytes) o 64 bits (8 bytes) (y por lo tanto, un vector de 64 bytes consta de 16 elementos de tamaño de palabra doble o, alternativamente, 8 elementos de tamaño de palabra cuádruple); una longitud (o tamaño) de operando de vector de 64 bytes con anchos (o tamaños) de elementos de datos de 16 bits (2 bytes) u 8 bits (1 byte); una longitud (o tamaño) de operando de vector de 32 bytes con anchos (o tamaños) de elementos de datos de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) u 8 bits (1 byte); y una longitud (o tamaño) de operando vectorial de 16 bytes con anchos (o tamaños) de elementos de datos de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) u 8 bits (1 byte); realizaciones alternativas pueden soportar más, menos y/o diferentes tamaños de operandos vectoriales (por ejemplo, operandos vectoriales de 256 bytes) con más, menos o diferentes anchos de elementos de datos (por ejemplo, anchos de elementos de datos de 128 bits (16 bytes)).
[0341] Las plantillas de instrucciones de clase A en la Figura 15A incluyen: 1) dentro de las plantillas de instrucción sin acceso a memoria 1505 se muestra una plantilla de instrucción de operación de tipo de control de redondeo completa, sin acceso a memoria 1510 y una plantilla de instrucción de operación de tipo de transformación de datos, sin acceso a memoria 1515; y 2) dentro de las plantillas de instrucción de acceso a memoria 1520 se muestra una plantilla de instrucción de acceso a memoria, temporal 1525 y una plantilla de instrucción de acceso a memoria, no temporal 1530. Las plantillas de instrucciones de clase B en la Figura 15B incluyen: 1) dentro de las plantillas de instrucciones sin acceso a memoria 1505 se muestra una plantilla de instrucción de operación de tipo control de redondeo parcial, control de máscara de escritura, acceso sin memoria 1512 y una plantilla de instrucción de operación de tipo vsize, control de máscara de escritura, acceso sin memoria 1517; y 2) dentro de las plantillas de instrucciones de acceso a memoria 1520 se muestra una plantilla de instrucción de acceso a memoria, control de máscara de escritura 1527.
[0343] El formato de instrucción amigable con vectores genéricos 1500 incluye los siguientes campos enumerados a continuación en el orden mostrado en las Figuras 15A-15B.
[0345] Campo de formato 1540 - un valor específico (un valor de identificador de formato de instrucción) en este campo identifica de manera única el formato de instrucción amigable con vectores y, por lo tanto, las ocurrencias de instrucciones en el formato de instrucción amigable con vectores en flujos de instrucciones. Como tal, este campo es opcional en el sentido de que no es necesario para un conjunto de instrucciones que solo tiene el formato de instrucción amigable con vectores genéricos.
[0347] Campo de operación base 1542 - su contenido distingue diferentes operaciones base.
[0349] Campo de índice de registro 1544 - su contenido, directamente o a través de la generación de direcciones, especifica las ubicaciones de los operandos de origen y destino, ya sea en registros o en memoria. Estos incluyen una cantidad suficiente de bits para seleccionar N registros de un archivo de registros PxQ (por ejemplo, 32x512, 16x128, 32x1024, 64x1024). Si bien en una realización N pueden ser hasta tres fuentes y un registro de destino, realizaciones alternativas pueden soportar más o menos fuentes y registros de destino (por ejemplo, pueden soportar hasta dos fuentes donde una de estas fuentes también actúa como destino, pueden soportar hasta tres fuentes donde una de estas fuentes también actúa como destino, pueden soportar hasta dos fuentes y un destino).
[0351] Campo modificador 1546 - su contenido distingue las ocurrencias de instrucciones en el formato de instrucción vectorial genérico que especifican acceso a memoria de aquellas que no lo hacen; es decir, entre plantillas de instrucción sin acceso a memoria 1505 y plantillas de instrucción de acceso a memoria 1520. Las operaciones de acceso a memoria leen y/o escriben en la jerarquía de memoria (en algunos casos, especificando las direcciones de origen y/o destino utilizando valores en registros), mientras que las operaciones sin acceso a memoria no lo hacen (por ejemplo, el origen y los destinos son registros). Si bien en una realización este campo también selecciona entre tres formas diferentes de realizar cálculos de direcciones de memoria, realizaciones alternativas pueden soportar más, menos o diferentes formas de realizar cálculos de direcciones de memoria.
[0353] Campo de operación de aumento 1550 - su contenido distingue cuál de una variedad de operaciones diferentes se realizará además de la operación base. Este campo es específico del contexto. En una realización de la invención, este campo se divide en un campo de clase 1568, un campo alfa 1552 y un campo beta 1554. El campo de operación de aumento 1550 permite realizar grupos comunes de operaciones en una sola instrucción en lugar de 2, 3 o 4 instrucciones.
[0355] Campo de escala 1560 - su contenido permite escalar el contenido del campo de índice para la generación de direcciones de memoria (por ejemplo, para la generación de direcciones que utiliza 2escala * índice base).
[0357] Campo de desplazamiento 1562A - su contenido se utiliza como parte de la generación de direcciones de memoria (por ejemplo, para la generación de direcciones que utiliza 2escala * índice base desplazamiento).
[0359] Campo de factor de desplazamiento 1562B (señalar que la yuxtaposición del campo de desplazamiento 1562A directamente sobre el campo de factor de desplazamiento 1562B indica que se utiliza uno u otro) - su contenido se utiliza como parte de la generación de direcciones; especifica un factor de desplazamiento que se escalará por el tamaño de un acceso de memoria (N) - donde N es el número de bytes en el acceso a memoria (por ejemplo, para la generación de direcciones que utiliza 2escala * índice base desplazamiento escalado). Los bits redundantes de orden bajo se ignoran y, por lo tanto, el contenido del campo del factor de desplazamiento se multiplica por el tamaño total de los operandos de memoria (N) para generar el desplazamiento final que se utilizará para calcular una dirección efectiva. El valor de N lo determina el hardware del procesador en tiempo de ejecución en función del campo de opcode completo 1574 (descrito en el presente documento) y el campo de manipulación de datos 1554C. El campo de desplazamiento 1562A y el campo de factor de desplazamiento 1562B son opcionales en el sentido de que no se utilizan para las plantillas de instrucción sin acceso a memoria 1505 y/o diferentes realizaciones pueden implementar solo uno o ninguno de los dos.
[0361] Campo de ancho de elemento de datos 1564 - su contenido distingue cuál de varios anchos de elementos de datos se va a utilizar (en algunas realizaciones para todas las instrucciones; en otras realizaciones solo para algunas de las instrucciones). Este campo es opcional en el sentido de que no es necesario si solo se soporta un ancho de elemento de datos y/o se soportan anchos de elementos de datos utilizando algún aspecto de los opcodes.
[0363] Campo de máscara de escritura 1570 - su contenido controla, sobre una base de posición de cada elemento de datos, si esa posición del elemento de datos en el operando del vector de destino refleja el resultado de la operación base y la operación de aumento. Las plantillas de instrucciones de clase A soportan la fusión y el enmascaramiento de escritura, mientras que las plantillas de instrucciones de clase B soportan tanto la fusión como la puesta a cero y el enmascaramiento de escritura. Al fusionar, las máscaras vectoriales permiten proteger cualquier conjunto de elementos en el destino de actualizaciones durante la ejecución de cualquier operación (especificada por la operación base y la operación de aumento); en otra realización, preservar el valor antiguo de cada elemento del destino donde el bit de máscara correspondiente tiene un 0. Por el contrario, cuando se ponen a cero las máscaras vectoriales se permite poner a cero cualquier conjunto de elementos en el destino durante la ejecución de cualquier operación (especificada por la operación base y la operación de aumento); en una realización, un elemento del destino se establece en 0 cuando el bit de máscara correspondiente tiene un valor 0. Un subconjunto de esta funcionalidad es la capacidad de controlar la longitud de vector de la operación que se está realizando (es decir, el lapso de elementos que se están modificando, desde el primero hasta el último); sin embargo, no es necesario que los elementos que se modifican sean consecutivos. Por lo tanto, el campo de máscara de escritura 1570 permite operaciones vectoriales parciales, como cargas, almacenamientos, operaciones aritméticas, lógicas, etc. Si bien se describen realizaciones de la invención en las que el contenido del campo de máscara de escritura 1570 selecciona uno de varios registros de máscara de escritura que contienen la máscara de escritura que se utilizará (y, por lo tanto, el contenido del campo de máscara de escritura 1570 identifica indirectamente el enmascaramiento que se realizará), realizaciones alternativas permiten, en cambio, que el contenido del campo de máscara de escritura 1570 especifique directamente el enmascaramiento que se realizará.
[0365] Campo inmediato 1572 - su contenido permite la especificación de un inmediato. Este campo es opcional en el sentido de que no está presente en una implementación del formato genérico amigable con vectores que no soporta inmediato y no está presente en instrucciones que no usan un inmediato.
[0367] Campo de clase 1568 - su contenido distingue entre diferentes clases de instrucciones. Con referencia a las Figuras 15A-B, el contenido de este campo selecciona entre instrucciones de clase A y clase B. En las Figuras 15A-B, se utilizan cuadrados con esquinas redondeadas para indicar que hay un valor específico presente en un campo (por ejemplo, clase A 1568A y clase B 1568B para el campo de clase 1568 respectivamente en las Figuras 15A-B).
[0369] Plantillas de instrucciones de la clase A
[0371] En el caso de las plantillas de instrucción sin acceso a memoria 1505 de clase A, el campo alfa 1552 se interpreta como un campo RS 1552A, cuyo contenido distingue cuál de los diferentes tipos de operaciones de aumento se deben realizar (por ejemplo, el redondeo 1552A.1 y la transformación de datos 1552A.2 se especifican respectivamente para las plantillas de instrucción de operación de tipo de redondeo sin acceso a memoria 1510 y de operación de tipo transformación de datos sin acceso a memoria 1515), mientras que el campo beta 1554 distingue cuál de las operaciones del tipo especificado se debe realizar. En las plantillas de instrucciones sin acceso a memoria 1505, el campo de escala 1560, el campo de desplazamiento 1562A y el campo de escala de desplazamiento 1562B no están presentes.
[0373] Plantillas de instrucciones sin acceso a memoria - operación de control de redondeo completa
[0375] En la plantilla de instrucción de operación de control de redondeo completa de tipo sin acceso a memoria 1510, el campo beta 1554 se interpreta como un campo de control de redondeo 1554A, cuyo o cuyos contenidos proporcionan redondeo estático. Si bien en las realizaciones descritas de la invención el campo de control de redondeo 1554A incluye un campo de supresión de todas las excepciones de punto flotante (SAE) 1556 y un campo de control de operación de redondeo 1558, realizaciones alternativas pueden soportar la codificación de ambos conceptos en el mismo campo o solo tener uno u otro de estos conceptos/campos (por ejemplo, pueden tener solo el campo de control de operación de redondeo 1558).
[0376] Campo SAE 1556 - su contenido distingue si se debe deshabilitar o no el informe de eventos de excepción; cuando el contenido del campo SAE 1556 indica que la supresión está habilitada, una instrucción dada no informa un tipo de indicador de excepción de punto flotante y no genera un manejador de excepción de punto flotante.
[0378] Campo de control de operación de redondeo 1558 - su contenido distingue cuál de un grupo de operaciones de redondeo realizar (por ejemplo, redondeo hacia arriba, redondeo hacia abajo, redondeo hacia cero y redondeo al más cercano). De este modo, el campo de control de operación de redondeo 1558 permite cambiar el modo de redondeo según cada instrucción. En una realización de la invención donde un procesador incluye un registro de control para especificar modos de redondeo, el contenido del campo de control de operación de redondeo 1558 anula ese valor de registro.
[0380] Plantillas de instrucciones sin acceso a memoria - operación de tipo transformación de datos
[0382] En la plantilla de instrucción de operación de transformación de datos de tipo sin acceso a memoria 1515, el campo beta 1554 se interpreta como un campo de transformación de datos 1554B, cuyo contenido distingue cuál de una serie de transformaciones de datos se debe realizar (por ejemplo, sin transformación de datos, permutación, difusión).
[0384] En el caso de una plantilla de instrucción de acceso a memoria 1520 de clase A, el campo alfa 1552 se interpreta como un campo de sugerencia de expulsión 1552B, cuyo contenido distingue cuál de las sugerencias de desalojo se va a utilizar (en la Figura 15A, temporal 1552B.1 y no temporal 1552B.2 se especifican respectivamente para la plantilla de instrucción de acceso a memoria temporal 1525 y la plantilla de instrucción de acceso a memoria no temporal 1530), mientras que el campo beta 1554 se interpreta como un campo de manipulación de datos 1554C, cuyo contenido distingue cuál de una serie de operaciones de manipulación de datos (también conocidas como primitivas) se va a realizar (por ejemplo, sin manipulación; difusión; conversión ascendente de un origen; y conversión descendente de un destino). Las plantillas de instrucciones de acceso a memoria 1520 incluyen el campo de escala 1560 y, opcionalmente, el campo de desplazamiento 1562A o el campo de factor de desplazamiento 1562B (a veces denominado campo de escala de desplazamiento).
[0385] Las instrucciones de memoria vectorial realizan cargas de vectores desde y almacenamientos de vectores en la memoria, con soporte de conversión. Al igual que las instrucciones vectoriales normales, las instrucciones de memoria vectorial transfieren datos desde/hacia la memoria en forma de elemento de datos, y los elementos que realmente se transfieren están determinados por el contenido de la máscara vectorial que se selecciona como máscara de escritura.
[0387] Plantillas de instrucciones de acceso a memoria - Temporal
[0389] Los datos temporales son datos que probablemente se reutilizarán lo suficientemente pronto como para beneficiarse del almacenamiento en caché. Sin embargo, esto es un indicio, y diferentes procesadores pueden implementarla de diferentes maneras, incluso ignorando el indicio por completo.
[0391] Plantillas de instrucciones de acceso a memoria - No temporal
[0393] Los datos no temporales son datos que es poco probable que se reutilicen lo suficientemente pronto como para beneficiarse de almacenarse en caché de primer nivel y se les debe dar prioridad para su expulsión. Sin embargo, esto es un indicio, y diferentes procesadores pueden implementarla de diferentes maneras, incluso ignorando el indicio por completo.
[0395] Plantillas de instrucciones de la clase B
[0397] En el caso de las plantillas de instrucciones de clase B, el campo alfa 1552 se interpreta como un campo de control de máscara de escritura (Z) 1552C, cuyo contenido distingue si el enmascaramiento de escritura controlado por el campo de máscara de escritura 1570 debe ser una fusión o una puesta a cero.
[0399] En el caso de las plantillas de instrucción sin acceso a memoria 1505 de clase B, parte del campo beta 1554 se interpreta como un campo RL 1557A, cuyo contenido distingue cuál de los diferentes tipos de operaciones de aumento se deben realizar (por ejemplo, redondeo 1557A.1 y longitud de vector (VSIZE) 1557A.2 se especifican respectivamente para la plantilla de instrucción de operación de tipo de control de redondeo parcial control de máscara de escritura sin acceso a memoria 1512 y la plantilla de instrucción de operación de tipo de control de máscara de escritura sin acceso a memoria, VSIZE 1517), mientras que el resto del campo beta 1554 distingue cuál de las operaciones del tipo especificado se debe realizar. En las plantillas de instrucciones sin acceso a memoria 1505, el campo de escala 1560, el campo de desplazamiento 1562A y el campo de escala de desplazamiento 1562B no están presentes.
[0401] En la plantilla de instrucción de operación de tipo control de redondeo parcial, control de máscara de escritura, sin acceso a memoria 1510, el resto del campo beta 1554 se interpreta como un campo de operación de redondeo 1559A y el informe de eventos de excepción está deshabilitado (una instrucción dada no informa un tipo de indicador de excepción de punto flotante y no genera un manejador de excepción de punto flotante).
[0403] Campo de control de operación de redondeo 1559A - al igual que el campo de control de operación de redondeo 1558, su contenido distingue cuál de un grupo de operaciones de redondeo realizar (por ejemplo, redondeo hacia arriba, redondeo hacia abajo, redondeo hacia cero y redondeo al más cercano). De este modo, el campo de control de operación de redondeo 1559A permite cambiar el modo de redondeo según cada instrucción. En una realización de la invención donde un procesador incluye un registro de control para especificar modos de redondeo, el contenido del campo de control de operación de redondeo 1559 anula ese valor de registro.
[0405] En la plantilla de instrucción de operación de tipo VSIZE, control de máscara de escritura, sin acceso a memoria 1517, el resto del campo beta 1554 se interpreta como un campo de longitud de vector 1559B, cuyo contenido distingue en cuál de varias longitudes de vector de datos se debe realizar (por ejemplo, 128, 256 o 512 bytes).
[0407] En el caso de una plantilla de instrucción de acceso a memoria 1520 de clase B, parte del campo beta 1554 se interpreta como un campo de difusión 1557B, cuyo contenido distingue si se debe realizar o no la operación de manipulación de datos de tipo difusión, mientras que el resto del campo beta 1554 se interpreta como el campo de longitud de vector 1559B. Las plantillas de instrucciones de acceso a memoria 1520 incluyen el campo de escala 1560 y, opcionalmente, el campo de desplazamiento 1562A o el campo de factor de desplazamiento 1562B.
[0409] Con respecto al formato de instrucción amigable con vectores genéricos 1500, se muestra un campo de opcode completo 1574 que incluye el campo de formato 1540, el campo de operación base 1542 y el campo de ancho del elemento de datos 1564. Si bien se muestra una realización donde el campo de opcode completo 1574 incluye todos estos campos, el campo de opcode completo 1574 incluye menos que todos estos campos en realizaciones que no los soporten todos. El campo de opcode completo 1574 proporciona el código de operación (opcode).
[0410] El campo de operación de aumento 1550, el campo de ancho de elemento de datos 1564 y el campo de máscara de escritura 1570 permiten que estas características se especifiquen en cada instrucción en el formato de instrucción amigable con vectores genéricos.
[0412] La combinación del campo de máscara de escritura y el campo de ancho de elemento de datos crea instrucciones tipificadas ya que permiten que la máscara se aplique en función de diferentes anchos de elementos de datos.
[0414] Las diversas plantillas de instrucciones que se encuentran dentro de la clase A y la clase B son beneficiosas en diferentes situaciones. En algunas realizaciones de la invención, diferentes procesadores o diferentes núcleos dentro de un procesador pueden soportar solo la clase A, solo la clase B o ambas clases. Por ejemplo, un núcleo fuera de orden de propósito general de alto rendimiento destinado a computación de propósito general puede soportar solo la clase B, un núcleo destinado principalmente a computación gráfica y/o científica (de rendimiento) puede soportar solo la clase A, y un núcleo destinado a ambos puede soportar ambas (por supuesto, un núcleo que tiene alguna mezcla de plantillas e instrucciones de ambas clases pero no todas las plantillas e instrucciones de ambas clases está dentro del alcance de la invención). Además, un solo procesador puede incluir varios núcleos, todos ellos compatibles con la misma clase o en los que distintos núcleos admiten clases diferentes. Por ejemplo, en un procesador con núcleos gráficos y de propósito general separados, uno de los núcleos gráficos, diseñado principalmente para gráficos o computación científica, puede soportar solo la clase A, mientras que uno o más de los núcleos de propósito general pueden ser núcleos de propósito general de alto rendimiento con ejecución fuera de orden y renombramiento de registros, diseñados para computación de propósito general y que solo admiten la clase B. Otro procesador que no tenga un núcleo gráfico separado puede incluir uno o más núcleos de propósito general, en orden o fuera de orden, que soporten tanto la clase A como la clase B. Por supuesto, las características de una clase también pueden implementarse en la otra en diferentes realizaciones de la invención. Los programas escritos en un lenguaje de alto nivel se colocarían (por ejemplo, compilados justo a tiempo o compilados estáticamente) en una variedad de formas ejecutables diferentes, incluidas: 1) una forma que tenga solo instrucciones de la o las clases soportadas por el procesador de destino para su ejecución; o 2) una forma que tenga rutinas alternativas escritas usando diferentes combinaciones de instrucciones de todas las clases y que tenga un código de flujo de control que selecciona las rutinas a ejecutar en función de las instrucciones soportadas por el procesador que actualmente está ejecutando el código.
[0416] Las Figuras 16A-D son diagramas de bloques que muestran un formato de instrucción amigable con vectores específico ejemplar de acuerdo con realizaciones de la invención. La Figura 16 muestra un formato de instrucción amigable con vectores específico 1600 que es específico en el sentido de que especifica la ubicación, el tamaño, la interpretación y el orden de los campos, así como los valores para algunos de esos campos. El formato de instrucción amigable con vectores específico 1600 se puede utilizar para ampliar el conjunto de instrucciones x86 y, por lo tanto, algunos de los campos son similares o iguales a los utilizados en el conjunto de instrucciones x86 existente y su extensión (por ejemplo, AVX). Este formato sigue siendo consistente con el campo de codificación de prefijo, el campo de bytes de opcode real, el campo MOD R/M, el campo SIB, el campo de desplazamiento y los campos inmediatos del conjunto de instrucciones x86 existente con extensiones. Se muestran los campos de la Figura 15 en los que se mapean los campos de la Figura 16.
[0418] Se debe entender que, aunque las realizaciones de la invención se describen con referencia al formato de instrucción amigable con vectores específico 1600 en el contexto del formato de instrucción amigable con vectores genérico 1500 para fines ilustrativos, la invención no está limitada al formato de instrucción amigable con vectores específico 1600 excepto donde se reivindique. Por ejemplo, el formato de instrucción amigable con vectores genérico 1500 contempla una variedad de tamaños posibles para los diversos campos, mientras que el formato de instrucción amigable con vectores específico 1600 se muestra como si tuviera campos de tamaños específicos. A modo de ejemplo específico, si bien el campo de ancho de elemento de datos 1564 se muestra como un campo de un bit en el formato de instrucción amigable con vectores específico 1600, la invención no está limitada de ese modo (es decir, el formato de instrucción amigable con vectores genérico 1500 contempla otros tamaños del campo de ancho de elemento de datos 1564).
[0420] El formato de instrucción amigable con vectores genéricos 1500 incluye los siguientes campos enumerados a continuación en el orden mostrado en la Figura 16A.
[0422] El prefijo EVEX (bytes 0-3) 1602 - está codificado en formato de cuatro bytes.
[0424] El campo de formato 1540 (byte EVEX 0, bits [7:0]): el primer byte (byte EVEX 0) es el campo de formato 1540 y contiene 0x62 (el valor único utilizado para distinguir el formato de instrucción compatible con vectores en una realización de la invención).
[0426] Los bytes segundo a cuarto (bytes EVEX 1-3) incluyen una serie de campos de bits que proporcionan una capacidad específica.
[0428] El campo REX 1605 (byte EVEX 1, bits [7-5]) - consta de un campo de bits EVEX.R (byte EVEX 1, bit [7] - R), un campo de bits EVEX.X (byte EVEX 1, bit [6] - X) y un byte 1157BEX 1, bit [5] - B). Los campos de bits EVEX.R, EVEX.X y EVEX.B proporcionan la misma funcionalidad que los campos de bits VEX correspondientes y se codifican utilizando el formato de complemento a 1, es decir, ZMM0 se codifica como 1111B, ZMM15 se codifica como 0000B. Otros campos de las instrucciones codifican los tres bits inferiores de los índices de registro como se conoce en la técnica (rrr, xxx y bbb), de modo que Rrrr, Xxxx y Bbbb se pueden formar sumando EVEX.R, EVEX.X y EVEX.B.
[0430] El campo REX' 1610 - esta es la primera parte del campo REX' 6510 y es el campo de bit EVEX.R' (byte EVEX 1, bit [4] -R') que se utiliza para codificar los 16 superiores o los 16 inferiores del conjunto extendido de 32 registros. En una realización de la invención, este bit, junto con otros como se indica a continuación, se almacena en formato de bits invertido para distinguirlo (en el conocido modo x86 de 32 bits) de la instrucción BOUND, cuyo byte de opcode real es 62, pero no acepta en el campo MOD R/M (descrito a continuación) el valor de 11 en el campo MOD; realizaciones alternativas de la invención no almacenan este y los otros bits indicados a continuación en el formato invertido. Se utiliza un valor de 1 para codificar los 16 registros inferiores. En otras palabras, R'Rrrr se forma combinando EVEX.R', EVEX.R y los otros RRR de otros campos.
[0432] Campo de mapa de opcode 1615 (byte EVEX 1, bits [3:0] - mmmm): su contenido codifica un byte de opcode principal implícito (0F, 0F 38 o 0F 3).
[0434] El campo de ancho de elemento de datos 1564 (byte EVEX 2, bit [7] - W) - está representado por la notación EVEX.W. EVEX.W se utiliza para definir la granularidad (tamaño) del tipo de datos (elementos de datos de 32 bits o elementos de datos de 64 bits).
[0436] EVEX.vvvv 1620 (byte EVEX 2, bits [6:3]-vvvv) - la función de EVEX.vvvv puede incluir lo siguiente: 1) EVEX.vvvv codifica el primer operando de registro de origen, especificado en forma invertida (complemento a 1) y es válido para instrucciones con 2 o más operandos de origen; 2) EVEX.vvvv codifica el operando de registro de destino, especificado en forma de complemento a 1 para ciertos desplazamientos vectoriales; o 3) EVEX.vvvv no codifica un operando, el campo está reservado y debe contener 1111b. Por lo tanto, el campo de EVEX.vvvv 1620 codifica los 4 bits de orden bajo del primer especificador de registro de origen almacenado en forma invertida (complemento a 1). Dependiendo de la instrucción, se utiliza un campo de bits EVEX adicional diferente para extender el tamaño del especificador a 32 registros.
[0438] El campo de clase EVEX.U 1568 (byte EVEX 2, bit [2]-U) - si EVEX.U = 0, indica clase A o EVEX.U0; si EVEX.U = 1, indica clase B o EVEX.U1.
[0440] El campo de codificación de prefijo 1625 (byte EVEX 2, bits [1:0]-pp): proporciona bits adicionales para el campo de operación base. Además de proporcionar soporte para las instrucciones SSE heredadas en el formato de prefijo EVEX, esto también tiene el beneficio de compactar el prefijo SIMD (en lugar de requerir un byte para expresar el prefijo SIMD, el prefijo EVEX requiere solo 2 bits). En una realización, para soportar instrucciones SSE heredadas que usan un prefijo SIMD (66H, F2H, F3H) tanto en el formato heredado como en el formato de prefijo EVEX, estos prefijos SIMD heredados se codifican en el campo de codificación de prefijo SIMD; y en el tiempo de ejecución se expanden al prefijo SIMD heredado antes de ser proporcionados al PLA del decodificador (de modo que el PLA puede ejecutar tanto el formato heredado como el EVEX de estas instrucciones heredadas sin modificaciones). Aunque las instrucciones más nuevas podrían usar el contenido del campo de codificación del prefijo EVEX directamente como una extensión del opcode, ciertas realizaciones se expanden de manera similar para mantener la coherencia, pero permiten que estos prefijos SIMD heredados especifiquen significados diferentes. Una realización alternativa puede rediseñar el PLA para soportar las codificaciones de prefijo SIMD de 2 bits y, por lo tanto, no requerir la expansión.
[0442] El campo alfa 1552 (byte EVEX 3, bit [7] - EH; también conocido como EVEX.EH, EVEX.rs, EVEX.RL, control de máscara de escritura EVEX y EVEX.N; también mostrado con a) - como se describió anteriormente, este campo es específico del contexto.
[0444] El campo beta 1554 (byte EVEX 3, bits [6:4]-SSS, también conocido como EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; también se muestra con ppp) - como se describió anteriormente, este campo es específico del contexto.
[0445] El campo REX' 1610 - este es el resto del campo REX' y es el campo de bits EVEX.V' (byte EVEX 3, bit [3] - V') que se puede usar para codificar los 16 superiores o los 16 inferiores del conjunto extendido de 32 registros. Este bit se almacena en formato de bits invertido. Se utiliza un valor de 1 para codificar los 16 registros inferiores. En otras palabras, V'VVVV se forma combinando EVEX.V', EVEX.vvvv.
[0447] El campo de máscara de escritura 1570 (byte EVEX 3, bits [2:0]-kkk): su contenido especifica el índice de un registro en los registros de máscara de escritura como se describió anteriormente. En una realización de la invención, el valor específico EVEX.kkk=000 tiene un comportamiento especial que implica que no se utiliza una máscara de escritura para la instrucción particular (esto se puede implementar de diversas maneras, incluido el uso de una máscara de escritura conectada directamente a todos o hardware que omite el hardware de enmascaramiento).
[0449] El campo de opcode real 1630 (byte 4) también se conoce como byte de opcode. En este campo se especifica parte del opcode.
[0451] El campo MOD R/M 1640 (byte 5) incluye el campo MOD 1642, el campo reg 1644 y el campo R/M 1646. Como se describió anteriormente, el contenido 1642 del campo MOD distingue entre operaciones de acceso a memoria y operaciones sin acceso a memoria. La función del campo reg 1644 se puede resumir en dos situaciones: codificar el operando del registro de destino o un operando del registro de origen, o tratarse como una extensión del opcode y no usarse para codificar un operando de instrucción. La función del campo R/M 1646 puede incluir lo siguiente: codificar el operando de instrucción que hace referencia a una dirección de memoria, o codificar el operando del registro de destino o un operando del registro de origen.
[0453] El byte de escala, índice, base (SIB) (byte 6) - como se describió anteriormente, el contenido de campo de escala 1550 se utiliza para la generación de direcciones de memoria. SIB.xxx 1654 y SIB.bbb 1656 - el contenido de estos campos se ha mencionado anteriormente con respecto a los índices de registro Xxxx y Bbbb.
[0455] El campo de desplazamiento 1562A (bytes 7-10) - cuando el campo MOD 1642 contiene 10, los bytes 7-10 son el campo de desplazamiento 1562A, y funciona de la misma manera que el desplazamiento heredado de 32 bits (disp32) y funciona con granularidad de bytes.
[0457] El campo de factor de desplazamiento 1562B (byte 7) - cuando el campo MOD 1642 contiene 01, el byte 7 es el campo de factor de desplazamiento 1562B. La ubicación de este campo es la misma que la del conjunto de instrucciones x86 heredado de desplazamiento de 8 bits (disp8), que funciona con granularidad de bytes. Como disp8 es de signo extendido, solo puede abordar desplazamientos entre -128 y 127 bytes; en términos de líneas de caché de 64 bytes, disp8 usa 8 bits que pueden configurarse solo en cuatro valores realmente útiles: -128, -64, 0 y 64; como a menudo se necesita un rango mayor, se usa disp32; sin embargo, disp32 requiere 4 bytes. A diferencia de disp8 y disp32, el campo de factor de desplazamiento 1562B es una reinterpretación de disp8; cuando se utiliza el campo de factor de desplazamiento 1562B, el desplazamiento real está determinado por el contenido del campo de factor de desplazamiento multiplicado por el tamaño del acceso a operando de memoria (N). Este tipo de desplazamiento se denomina disp8*N. Esto reduce la longitud promedio de la instrucción (se utiliza un solo byte para el desplazamiento pero con un rango mucho mayor). Este desplazamiento comprimido se basa en el supuesto de que el desplazamiento efectivo es múltiplo de la granularidad del acceso a memoria y, por lo tanto, no es necesario codificar los bits redundantes de orden bajo del desplazamiento de dirección. En otras palabras, el campo de factor de desplazamiento 1562B sustituye el desplazamiento de 8 bits del conjunto de instrucciones x86 heredado. Por lo tanto, el campo de factor de desplazamiento 1562B se codifica de la misma manera que un desplazamiento de 8 bits del conjunto de instrucciones x86 (por lo que no hay cambios en las reglas de codificación ModRM/SIB) con la única excepción de que disp8 se sobrecarga a disp8*N. En otras palabras, no hay cambios en las reglas de codificación ni en las longitudes de codificación, sino solo en la interpretación del valor de desplazamiento por parte del hardware (que necesita escalar el desplazamiento según el tamaño del operando de memoria para obtener un desplazamiento de dirección byte por byte).
[0459] El campo inmediato 1572 funciona como se describió anteriormente.
[0461] Campo de opcode completo
[0463] La Figura 16B es un diagrama de bloques que muestra los campos del formato de instrucción amigable con vectores específico 1600 que conforman el campo de opcode completo 1574 de acuerdo con una realización de la invención. Específicamente, el campo de opcode completo 1574 incluye el campo de formato 1540, el campo de operación base 1542 y el campo de ancho de elemento de datos (W) 1564. El campo de operación base 1542 incluye el campo de codificación de prefijo 1625, el campo de mapa de opcode 1615 y el campo de opcode real 1630.
[0465] Campo de índice de registro
[0467] La Figura 16C es un diagrama de bloques que muestra los campos del formato de instrucción amigable con vectores específico 1600 que conforman el campo de índice de registro 1544 de acuerdo con una realización de la invención. Específicamente, el campo de índice de registro 1544 incluye el campo REX 1605, el campo REX' 1610, el campo MODR/M.reg 1644, el campo MODR/M.r/m 1646, el campo v Vw 1620, el campo xxx 1654 y el campo bbb 1656.
[0469] Campo de operaciones de aumento
[0471] La Figura 16D es un diagrama de bloques que muestra los campos del formato de instrucción amigable con vectores específico 1600 que conforman el campo de operación de aumento 1550 de acuerdo con una realización de la invención. Cuando el campo de clase (U) 1568 contiene 0, significa EVEX.U0 (clase A 1568A); cuando contiene 1, significa EVEX.U1 (clase B 1568B). Cuando U=0 y el campo MOD 1642 contiene 11 (lo que significa que no hay operación de acceso a memoria), el campo alfa 1552 (byte EVEX 3, bit [7] - EH) se interpreta como el campo rs 1552A. Cuando el campo rs 1552A contiene un 1 (redondeo 1552A.1), el campo beta 1554 (byte EVEX 3, bits [6:4]- SSS) se interpreta como el campo de control de redondeo 1554A. El campo de control de redondeo 1554A incluye un campo SAE 1556 de un bit y un campo de operación de redondeo 1558 de dos bits. Cuando el campo rs 1552A contiene un 0 (transformación de datos 1552A.2), el campo beta 1554 (byte EVEX 3, bits [6:4]- SSS) se interpreta como un campo de transformación de datos 1554B de tres bits. Cuando U=0 y el campo MOD 1642 contiene 00, 01 o 10 (lo que significa una operación de acceso a memoria), el campo alfa 1552 (byte EVEX 3, bit [7] - EH) se interpreta como el campo de sugerencia de expulsión (EH) 1552B y el campo beta 1554 (byte EVEX 3, bits [6:4] - SSS) se interpreta como un campo de manipulación de datos 1554C de tres bits.
[0472] Cuando U=1, el campo alfa 1552 (byte EVEX 3, bit [7] - EH) se interpreta como el campo de control de máscara de escritura (Z) 1552C. Cuando U=1 y el campo MOD 1642 contiene 11 (lo que significa una operación sin acceso a memoria), parte del campo beta 1554 (byte EVEX 3, bit [4]- S0) se interpreta como el campo RL 1557A; cuando contiene un 1 (redondeo 1557A.1) el resto del campo beta 1554 (byte EVEX 3, bit [6-5]- S2-1) se interpreta como el campo de operación de redondeo 1559A, mientras que cuando el campo RL 1557A contiene un 0 (VSIZE 1557.A2) el resto del campo beta 1554 (byte EVEX 3, bit [6-5]- S2-1) se interpreta como el campo de longitud de vector 1559B (byte EVEX 3, bit [6-5 ]- L1 -0). Cuando U=1 y el campo MOD 1642 contiene 00, 01 o 10 (lo que significa una operación de acceso a memoria), el campo beta 1554 (byte EVEX 3, bits [6:4]- SSS) se interpreta como el campo de longitud de vector 1559B (byte EVEX 3, bit [6-5]- L1-0) y el campo de transmisión 1557B (byte E<v>E<x>3, bit [4]-B).
[0474] La Figura 17 es un diagrama de bloques de una arquitectura de registro 1700 de acuerdo con una realización de la invención. En la realización mostrada, hay 32 registros vectoriales 1710 que tienen 512 bits de ancho; estos registros están referenciados como zmm0 a zmm31. Los 256 bits de orden inferior de los 16 registros zmm inferiores se superponen en los registros ymm0-16. Los 128 bits de orden inferior de los 16 registros zmm inferiores (los 128 bits de orden inferior de los registros ymm) se superponen en los registros xmm0-15. El formato de instrucción amigable con vectores específico 1600 opera en estos archivos de registro superpuestos como se muestra en la siguiente tabla.
[0476]
[0479] En otras palabras, el campo de longitud de vector 1559B selecciona entre una longitud máxima y una o más longitudes más cortas, donde cada una de dichas longitudes más cortas es la mitad de la longitud anterior; y las plantillas de instrucción sin el campo de longitud de vector 1559B operan en la longitud de vector máxima. Además, en una realización, las plantillas de instrucciones de clase B del formato de instrucción amigable con vectores específico 1600 operan en datos de punto flotante de precisión simple o doble, empaquetados o escalares, y en datos enteros, empaquetados o escalares. Las operaciones escalares son operaciones realizadas en la posición del elemento de datos de orden más bajo en un registro zmm/ymm/xmm; las posiciones de los elementos de datos de orden más alto se dejan igual que antes de la instrucción o se ponen a cero según la realización.
[0481] Los registros de máscara de escritura 1715 - en la realización mostrada, hay 8 registros de máscara de escritura (k0 a k7), cada uno de 64 bits de tamaño. En una realización alternativa, los registros de máscara de escritura 1715 tienen un tamaño de 16 bits. Como se describió anteriormente, en una realización de la invención, el registro de máscara vectorial k0 no se puede utilizar como una máscara de escritura; cuando se utiliza la codificación que normalmente indicaría k0 para una máscara de escritura, selecciona una máscara de escritura cableada de 0xFFFF, deshabilitando efectivamente el enmascaramiento de escritura para esa instrucción.
[0483] Los registros de propósito general 1725 - en la realización mostrada, hay dieciséis registros de propósito general de 64 bits que se utilizan junto con los modos de direccionamiento x86 existentes para direccionar operandos de memoria. Estos registros están referenciados por los nombres RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP y R8 a R15.
[0485] El archivo de registro de pila de punto flotante escalar (pila x87) 1745, en el que se encuentra el archivo de registro plano de enteros empaquetados MMX 1750 - en la realización mostrada, la pila x87 es una pila de ocho elementos utilizada para realizar operaciones de punto flotante escalar en datos de punto flotante de 32/64/80 bits utilizando la extensión del conjunto de instrucciones x87; mientras que los registros MMX se utilizan para realizar operaciones en datos de enteros empaquetados de 64 bits, así como para contener operandos para algunas operaciones realizadas entre los registros MMX y XMM.
[0487] Las realizaciones alternativas de la invención pueden utilizar registros más anchos o más estrechos. Además, realizaciones alternativas de la invención pueden utilizar más, menos o diferentes archivos de registro y registros.
[0489] Las Figuras 18A-B muestran un diagrama de bloques de una arquitectura de núcleo en orden ejemplar más específica, cuyo núcleo sería uno de varios bloques lógicos (incluidos otros núcleos del mismo tipo y/o tipos diferentes) en un chip. Los bloques lógicos se comunican a través de una red de interconexión de gran ancho de banda (por ejemplo, una red en anillo) con cierta lógica de función fija, interfaces de E/S de memoria y otra lógica de E/S necesaria, según la aplicación.
[0490] La Figura 18A es un diagrama de bloques de un solo núcleo de procesador, junto con su conexión a la red de interconexión en chip 1802 y con su subconjunto local de la caché de nivel 2 (L2) 1804, de acuerdo con realizaciones de la invención. En una realización, un decodificador de instrucciones 1800 soporta el conjunto de instrucciones x86 con una extensión de conjunto de instrucciones de datos empaquetados. Una caché L1 1806 permite accesos de baja latencia a la memoria caché en las unidades escalares y vectoriales. Si bien en una realización (para simplificar el diseño), una unidad escalar 1808 y una unidad vectorial 1810 utilizan conjuntos de registros separados (respectivamente, registros escalares 1812 y registros vectoriales 1814) y los datos transferidos entre ellos se escriben en la memoria y luego se vuelven a leer desde una caché de nivel 1 (L1) 1806, realizaciones alternativas de la invención pueden utilizar un enfoque diferente (por ejemplo, utilizar un único conjunto de registros o incluir una ruta de comunicación que permita que los datos se transfieran entre los dos archivos de registro sin escribirse y leerse nuevamente).
[0492] El subconjunto local de la caché L2 1804 es parte de una caché L2 global que está dividida en subconjuntos locales separados, uno por núcleo de procesador. Cada núcleo del procesador tiene una ruta de acceso directo a su propio subconjunto local de la caché L21804. Los datos leídos por un núcleo de procesador se almacenan en su subconjunto de caché L21804 y se puede acceder a ellos rápidamente, en paralelo con otros núcleos de procesador que acceden a sus propios subconjuntos de caché L2 locales. Los datos escritos por un núcleo de procesador se almacenan en su propio subconjunto de caché L21804 y se eliminan de otros subconjuntos, si es necesario. La red en anillo garantiza la coherencia de los datos compartidos. La red en anillo es bidireccional para permitir que agentes tales como núcleos de procesador, cachés L2 y otros bloques lógicos se comuniquen entre sí dentro del chip. Cada ruta de datos de anillo tiene un ancho de 1012 bits por dirección.
[0494] La Figura 18B es una vista expandida de parte del núcleo del procesador en la Figura 18A de acuerdo con realizaciones de la invención. La Figura 18B incluye una parte de la caché de datos L1 1806A de la caché L1 1804, así como más detalles con respecto a la unidad vectorial 1810 y los registros vectoriales 1814. Específicamente, la unidad vectorial 1810 es una unidad de procesamiento vectorial de ancho 16 (VPU) (ver la ALU 1828 de ancho 16 ), que ejecuta una o más instrucciones de enteros, de punto flotante de precisión simple y de punto flotante de precisión doble. La VPU soporta la permutación de las entradas de registro con la unidad de permutación 1820, la conversión numérica con las unidades de conversión numérica 1822A-B y la replicación con la unidad de replicación 1824 en la entrada de memoria. Los registros de máscara de escritura 1826 permiten predecir las escrituras vectoriales resultantes.
[0496] Operaciones de mosaico/matriz y hardware ejemplares
[0498] La Figura 19 ilustra una realización de mosaicos configurados. Como se muestra, hay cuatro mosaicos 1911, 1913, 1915 y 1917 que se cargan desde la memoria de aplicación 1901. En este ejemplo, los mosaicos T01911 y T1 1913 tienen M filas y N columnas con 4 bytes de elementos (por ejemplo, datos de precisión simple). Los mosaicos T2 1915 y T31917 tienen M filas y N/2 columnas con 8 bytes de elementos (por ejemplo, datos de doble precisión). Como los operandos de precisión doble tienen el doble de ancho que los de precisión simple, esta configuración es consistente con una paleta utilizada para proporcionar opciones de mosaico, que suministra al menos 4 nombres con un almacenamiento total de 16*N*M bytes. Dependiendo del esquema de codificación de instrucciones utilizado, la cantidad de mosaicos disponibles varía.
[0500] En algunas realizaciones, los parámetros de mosaico son definibles. Por ejemplo, se utiliza una "paleta" para proporcionar opciones de mosaicos. Las opciones de ejemplo incluyen, entre otras: el número de nombres de mosaicos, el número de bytes en una fila de almacenamiento, el número de filas y columnas en un mosaico, etc. Por ejemplo, la "altura" máxima (número de filas) de un mosaico puede definirse como:
[0501] Máximo filas mosaico = Almacenamiento diseñado / (Número de nombres paletas * Número de bytes por fila)
[0502] Como tal, una aplicación puede escribirse de tal manera que un uso fijo de nombres pueda aprovechar diferentes tamaños de almacenamiento en las implementaciones.
[0504] La configuración de mosaicos se realiza mediante una instrucción de configuración de mosaicos ("TILECONFIG"), donde se define un uso particular de mosaico en una paleta seleccionada. Esta declaración incluye la cantidad de nombres de mosaicos que se utilizarán, la cantidad solicitada de filas y columnas por nombre (mosaico) y, en algunas implementaciones, el tipo de datos solicitado de cada mosaico. En algunas realizaciones, se realizan comprobaciones de consistencia durante la ejecución de una instrucción TILECONFIG para determinar que coincide con las restricciones de la entrada de la paleta.
[0506] La Figura 20 ilustra varios ejemplos de almacenamiento de matriz. En (A), se almacena un mosaico en la memoria. Como se muestra, cada "fila" consta de cuatro elementos de datos empaquetados. Para llegar a la siguiente "fila", se utiliza un valor escalonado. Señalar que las filas pueden almacenarse consecutivamente en la memoria. Los accesos a memoria escalonados permiten el acceso de una fila a la siguiente cuando el almacenamiento de mosaicos no mapea el ancho de fila de la matriz de memoria subyacente.
[0508] Las cargas de mosaicos desde la memoria y los almacenamientos en la memoria son típicamente accesos escalonados desde la memoria de la aplicación a filas empaquetadas de datos. Las instrucciones TILELOAD y TILESTORE de ejemplo, u otras referencias de instrucciones a la memoria de la aplicación como un operando TILE en instrucciones de cargaoperación, son, en algunas realizaciones, reiniciables para manejar (hasta) 2*filas de fallas de página, excepciones de punto flotante sin máscara y/o interrupciones por instrucción.
[0510] En (B), una matriz se almacena en un mosaico compuesto por una pluralidad de registros tales como registros de datos empaquetados (instrucción única, datos múltiples (SIMD) o registros vectoriales). En este ejemplo, el mosaico se superpone en tres registros físicos. Normalmente se utilizan registros consecutivos, aunque no tiene por qué ser así.
[0511] En (C), una matriz se almacena en un mosaico en un almacenamiento sin registro accesible a un circuito de acumulación múltiple fusionada (FMA) utilizado en operaciones de mosaico. Este almacenamiento puede estar dentro de una FMA o adyacente a ella. Además, en algunas realizaciones, que se analizan a continuación, el almacenamiento puede ser para un elemento de datos y no para una fila o mosaico completo.
[0513] Los parámetros soportados para la arquitectura TMMA se informan a través de CPUID. En algunas realizaciones, la lista de información incluye una altura máxima y una dimensión SIMD máxima. Para configurar la arquitectura TMMA es necesario especificar las dimensiones de cada mosaico, el tamaño del elemento de cada mosaico y el identificador de paleta. Esta configuración se realiza ejecutando la instrucción TILECONFIG.
[0515] La ejecución exitosa de una instrucción TILECONFIG habilita operadores TILE posteriores. Una instrucción TILERELEASEALL borra la configuración del mosaico y deshabilita las operaciones TILE (hasta que se ejecute la siguiente instrucción TILECONFIG). En algunas realizaciones, se utilizan XSAVE, XSTORE, etc. en el cambio de contexto mediante mosaicos. En algunas realizaciones, se utilizan 2 bits XCR0 en XSAVE, uno para metadatos TILECONFIF y un bit correspondiente a los datos de carga útil del mosaico real.
[0517] TILECONFIG no solo configura el uso de mosaicos, sino que también establece una variable de estado que indica que el programa está en una región de código con mosaicos configurados. Una implementación puede enumerar restricciones sobre otras instrucciones que se pueden usar con una región de mosaico, como por ejemplo no usar un conjunto de registros existente, etc.
[0519] La salida de una región de mosaico generalmente se realiza con la instrucción TILERELEASEALL. No toma parámetros e invalida rápidamente todos los mosaicos (lo que indica que ya no es necesario guardar ni restaurar los datos) y borra el estado interno correspondiente a estar en una región de mosaicos.
[0521] En algunas realizaciones, las operaciones de mosaico pondrán a cero cualquier fila y cualquier columna más allá de las dimensiones especificadas por la configuración de mosaico. Por ejemplo, las operaciones de mosaico pondrán a cero los datos más allá del número configurado de columnas (teniendo en cuenta el tamaño de los elementos) a medida que se escribe cada fila. Por ejemplo, con filas de 64 bytes y un mosaico configurado con 10 filas y 12 columnas, una operación que escriba elementos FP32 escribiría cada una de las primeras 10 filas con 12*4 bytes con datos de salida/resultado y pondría a cero los 4*4 bytes restantes en cada fila. Las operaciones de mosaico también ponen a cero todas las filas posteriores a las primeras 10 filas configuradas. Al utilizar un mosaico de 1K con filas de 64 bytes, habría 16 filas, por lo que en este ejemplo, las últimas 6 filas también se pondrían a cero.
[0523] En algunas realizaciones, una restauración de contexto (por ejemplo, XRSTOR), al cargar datos, exige que los datos más allá de las filas configuradas para un mosaico se mantengan como cero. Si no hay una configuración válida, todas las filas se ponen a cero. XRSTOR de datos de mosaico puede cargar basura en las columnas más allá de las configuradas. No debería ser posible que XRSTOR supere la cantidad de columnas configuradas porque no hay un ancho de elemento asociado con la configuración de mosaico.
[0525] El guardado de contexto (por ejemplo, XSAVE) expone toda el área de almacenamiento TILE al escribirlo en la memoria. Si XRSTOR cargó datos basura en la parte más a la derecha de un mosaico, esos datos se guardarán mediante XSAVE. XSAVE escribirá ceros para las filas que superen el número especificado para cada mosaico.
[0527] En algunas realizaciones, las instrucciones de mosaico se pueden reiniciar. Las operaciones que acceden a memoria permiten reiniciar después de fallas de página. Las instrucciones computacionales que tratan con operaciones de punto flotante también permiten excepciones de punto flotante sin máscara, con el enmascaramiento de las excepciones controlado por un registro de control y/o estado.
[0529] Para soportar instrucciones de reinicio después de estos eventos, las instrucciones almacenan información en los registros de inicio detallados más abajo.
[0531] La Figura 21 ilustra una realización de un sistema que utiliza un acelerador de operaciones matriciales (mosaico). En esta ilustración, un sistema de procesamiento/procesador anfitrión 2101 comunica comandos 2111 (por ejemplo, operaciones de manipulación de matrices tales como operaciones aritméticas o de manipulación de matrices, u operaciones de carga y almacenamiento) a un acelerador de operaciones matriciales 2107. Sin embargo, esto se muestra de esta manera sólo con fines de discusión. Como se detallará más adelante, este acelerador 2107 puede ser parte de un núcleo de procesamiento. Normalmente, los comandos 2111 que son instrucciones de operador de manipulación de mosaicos se referirán a los mosaicos en formato registro-registro ("reg-reg") o registro-memoria ("reg-mem"). Otros comandos como TILESTORE, TILELOAD, TILECONFIG, etc., no realizan operaciones de datos en un mosaico. Los comandos pueden ser instrucciones decodificadas (por ejemplo, microoperaciones) o macroinstrucciones para que las maneje el acelerador 2107.
[0532] En este ejemplo, una interfaz de memoria coherente 2103 está acoplada al procesador/sistema de procesamiento anfitrión 2101 y al acelerador de operaciones matriciales 2205 de manera que puedan compartir memoria. Las Figuras 22 y 23 muestran diferentes realizaciones de cómo se comparte la memoria utilizando un acelerador de operaciones matriciales. Como se muestra en la Figura 22, el procesador anfitrión 2201 y el circuito acelerador de operaciones matriciales 2205 comparten la misma memoria 2203. La Figura 23 ilustra una realización donde el procesador anfitrión 2301 y el acelerador de operaciones matriciales 2305 no comparten memoria, pero pueden acceder a la memoria del otro. Por ejemplo, el procesador 2301 puede acceder a la memoria de mosaico 2307 y utilizar su memoria de anfitrión 2303 de manera normal. De manera similar, el acelerador de operaciones matriciales 2305 puede acceder a la memoria del anfitrión 2303, pero más típicamente utiliza su propia memoria 2307. Señalar que estas memorias pueden ser de diferentes tipos.
[0534] El acelerador de operaciones matriciales 2107 incluye una pluralidad de FMA 2109 acoplados a búferes de datos 2105 (en algunas implementaciones, uno o más de estos búferes 2105 se almacenan en los FMA de la cuadrícula como se muestra). Los búferes de datos 2105 almacenan en búfer mosaicos cargados desde la memoria y/o mosaicos que se almacenarán en la memoria (por ejemplo, utilizando una instrucción tileload o tilestore). Los búferes de datos pueden ser, por ejemplo, una pluralidad de registros. Normalmente, estas FMA se organizan como una cuadrícula de FMA 2109 encadenadas que pueden leer y escribir mosaicos. En este ejemplo, el acelerador de operaciones matriciales 2107 debe realizar una operación de multiplicación de matrices utilizando los mosaicos T0, T1 y T2. Al menos uno de los mosaicos está alojado en la cuadrícula de FMA 2109. En algunas realizaciones, todos los mosaicos de una operación se almacenan en la cuadrícula de FMA 2109. En otras realizaciones, solo se almacena un subconjunto en la cuadrícula de FMA 2109. Como se muestra, T1 está alojado y T0 y T2 no. Señalar que A, B y C se refieren a las matrices de estos mosaicos, que pueden o no ocupar todo el espacio del mosaico.
[0536] Las realizaciones de la invención pueden utilizar circuitos de operaciones matriciales dedicados. La Figura 24 ilustra una realización de la operación de multiplicación y acumulación de matrices utilizando mosaicos ("TMMA"). El número de filas en la matriz (TILE A 2401) coincide con el número de FMA seriales (encadenados) que comprenden la latencia del cálculo. Una implementación es libre de recircular en una cuadrícula de menor altura, pero el cálculo sigue siendo el mismo.
[0537] El vector de origen/destino proviene de un mosaico de N filas (TILE C 2405) y la cuadrícula de FMA 2411 realiza N operaciones vector-matriz dando como resultado una instrucción completa que realiza una multiplicación matricial de mosaicos. El mosaico B 2403 es el otro origen vectorial y suministra términos de "difusión" a las FMA en cada etapa.
[0538] En funcionamiento, en algunas realizaciones, los elementos de la matriz B (almacenados en un mosaico B 2403) se distribuyen a lo largo de la cuadrícula rectangular de FMA. La matriz B (almacenada en el mosaico A 2401) tiene sus elementos de una fila transpuestos para que coincidan con la dimensión columnar de la cuadrícula rectangular de FMA. En cada FMA de la cuadrícula, un elemento de A y B se multiplica y se agrega al sumando entrante (de arriba en la Figura) y la suma saliente se pasa a la siguiente fila de FMA (o la salida final).
[0540] La Figura 25 ilustra una realización de un subconjunto de la ejecución de una iteración de una instrucción de multiplicación y acumulación fusionada encadenada. En particular, esto ilustra el circuito de ejecución de una iteración de la posición de un elemento de datos empaquetado del destino. En esta realización, la multiplicación y acumulación fusionada encadenada funciona en orígenes con signo en los que el acumulador es 2x el tamaño de los datos de entrada.
[0542] Un primer origen con signo (origen 12501) y un segundo origen con signo (origen 2 2503) tienen cada uno cuatro elementos de datos empaquetados. Cada uno de estos elementos de datos empaquetados almacena datos firmados, como datos de punto flotante. Un tercer origen con signo (origen 32509) tiene dos elementos de datos empaquetados, cada uno de los cuales almacena datos firmados. Los tamaños del primer y segundo origen con signo 2501 y 2503 son la mitad de los del tercer origen con signo (valor inicial o resultado anterior) 2509. Por ejemplo, el primer y segundo origen con signo 2501 y 2503 podrían tener elementos de datos empaquetados de 32 bits (por ejemplo, punto flotante de precisión simple) mientras que el tercer origen con signo 2509 podría tener elementos de datos empaquetados de 64 bits (por ejemplo, punto flotante de precisión doble).
[0544] En esta ilustración, solo se muestran las dos posiciones de elementos de datos empaquetados más significativos del primer y segundo origen con signo 2501 y 2503, y la posición de elemento de datos empaquetado más significativo del tercer origen con signo 2509. Por supuesto, las otras posiciones de los elementos de datos empaquetados también se procesarían.
[0546] Como se ilustra, los elementos de datos empaquetados se procesan en pares. Por ejemplo, los datos de las posiciones de los elementos de datos empaquetados más significativos del primer y segundo origen con signo 2501 y 2503 se multiplican utilizando un circuito multiplicador 2505, y los datos de las posiciones de los elementos de datos empaquetados más significativos del primer y segundo origen con signo 2501 y 2503 se multiplican utilizando un circuito multiplicador 2507. En algunas realizaciones, estos circuitos multiplicadores 2505 y 2507 se reutilizan para otras posiciones de elementos de datos empaquetados. En otras realizaciones, se utilizan circuitos multiplicadores adicionales para que los elementos de datos empaquetados se procesen en paralelo. En algunos contextos, la ejecución paralela se realiza utilizando líneas que tienen el tamaño del tercer origen con signo 2509. Los resultados de cada una de las multiplicaciones se suman utilizando el circuito de suma 2511.
[0548] El resultado de la suma de los resultados de las multiplicaciones se suma a los datos de la posición del elemento de datos empaquetado más significativo del origen con signo 32509 (usando un sumador diferente 2513 o el mismo sumador 2511).
[0549] Finalmente, el resultado de la segunda adición se almacena en el destino con signo 2515 en una posición de elemento de datos empaquetado que corresponde a la posición de elemento de datos empaquetado utilizada desde el tercer origen con signo 2509, o se pasa a la siguiente iteración, si hay una. En algunas realizaciones, se aplica una máscara de escritura a este almacenamiento de modo que, si se establece una máscara de escritura (bit) correspondiente, se produce el almacenamiento y, si no se establece, el almacenamiento no se produce.
[0551] La Figura 26 muestra implementaciones de SIMD de tamaño de potencia de dos en donde los acumuladores usan tamaños que son más grandes que las entradas a los multiplicadores de acuerdo con una realización. Señalar que los valores de origen (de los multiplicadores) y del acumulador pueden ser valores con signo o sin signo. Para un acumulador que tiene 2X tamaños de entrada (en otras palabras, el valor de entrada del acumulador se establece para que sea al menos el doble del tamaño de los elementos de datos empaquetados de los orígenes), la tabla 2601 ilustra diferentes configuraciones. Para orígenes de tamaño de byte (int8), el acumulador utiliza valores de palabra o de punto flotante de media precisión (HPFP) que tienen un tamaño de 16 bits. Para orígenes de tamaño de palabra (int16), el acumulador utiliza valores enteros de 32 bits o de punto flotante de precisión simple (SPFP) que tienen un tamaño de 32 bits. Para orígenes de tamaño entero SPFP o de 32 bits, el acumulador utiliza 64 enteros o valores de punto flotante de doble precisión (DPFP) que tienen un tamaño de 64 bits.
[0553] Para un acumulador que tiene 4X tamaños (en otras palabras, el valor de entrada del acumulador se establece para que sea al menos cuatro veces el tamaño de los tamaños de elemento de datos empaquetados de los orígenes), la tabla 2603 ilustra diferentes configuraciones. Para orígenes de tamaño de byte, el acumulador utiliza valores enteros de 32 bits o de punto flotante de precisión simple (SPFP) que tienen un tamaño de 32 bits. Para orígenes de tamaño de palabra, el acumulador utiliza valores enteros de 64 bits o de punto flotante de doble precisión (DPFP) que tienen un tamaño de 64 bits en algunas realizaciones.
[0555] Para un acumulador que tiene 8X tamaños de entrada (en otras palabras, el valor de entrada del acumulador se establece para que sea al menos ocho veces el tamaño de los tamaños de elemento de datos empaquetados de los orígenes), la tabla 2605 ilustra una configuración. Para orígenes de tamaño de byte, el acumulador utiliza un entero de 64 bits.
[0557] En la memoria descriptiva anterior, las realizaciones de la invención se han descrito con referencia a realizaciones ejemplares específicas de la misma. Sin embargo, será evidente que se pueden realizar diversas modificaciones y cambios sin alejarse del espíritu y alcance más amplios de la invención tal como se establece en las reivindicaciones adjuntas. Por consiguiente, la memoria descriptiva y los dibujos deben considerarse en sentido ilustrativo y no restrictivo.
[0559] Las realizaciones de la invención pueden incluir varios pasos, que se han descrito anteriormente. Los pasos pueden estar incorporados en instrucciones ejecutables por máquina que pueden usarse para hacer que un procesador de propósito general o de propósito especial realice los pasos. Alternativamente, estos pasos pueden ser realizados por componentes de hardware específicos que contienen lógica cableada para realizar los pasos, o por cualquier combinación de componentes de computadora programados y componentes de hardware personalizados.
[0561] Como se describe en este documento, las instrucciones pueden referirse a configuraciones específicas de hardware tales como circuitos integrados de aplicación específica (ASIC) configurados para realizar ciertas operaciones o que tienen una funcionalidad predeterminada o instrucciones de software almacenadas en la memoria incorporadas en un medio legible por computadora no transitorio. De esta forma, las técnicas mostradas en las Figuras pueden implementarse utilizando código y datos almacenados y ejecutados en uno o más dispositivos electrónicos (por ejemplo, una estación terminal, un elemento de red, etc.). Estos dispositivos electrónicos almacenan y comunican (internamente y/o con otros dispositivos electrónicos a través de una red) código y datos utilizando medios legibles por máquinas informáticas, tales como medios de almacenamiento no transitorios legibles por máquinas informáticas (por ejemplo, discos magnéticos; discos ópticos; memoria de acceso aleatorio; memoria de solo lectura; dispositivos de memoria flash; memoria de cambio de fase) y medios de comunicación transitorios legibles por máquinas informáticas (por ejemplo, señales eléctricas, ópticas, acústicas u otras formas de señales propagadas, tales como ondas portadoras, señales infrarrojas, señales digitales, etc.). Además, dichos dispositivos electrónicos suelen incluir un conjunto de uno o más procesadores acoplados a uno o más componentes adicionales, tal como uno o más dispositivos de almacenamiento (medios de almacenamiento legibles por máquina no transitorios), dispositivos de entrada/salida de usuario (por ejemplo, un teclado, una pantalla táctil y/o una pantalla) y conexiones de red. El acoplamiento del conjunto de procesadores y otros componentes se realiza normalmente a través de uno o más buses y puentes (también denominados controladores de bus). El dispositivo de almacenamiento y las señales que transportan el tráfico de red representan respectivamente uno o más medios de almacenamiento legibles por máquina y medios de comunicación legibles por máquina. Así, el dispositivo de almacenamiento de un dispositivo electrónico determinado normalmente almacena código y/o datos para su ejecución en el conjunto de uno o más procesadores de ese dispositivo electrónico. Por supuesto, una o más partes de una realización de la invención pueden implementarse utilizando diferentes combinaciones de software, firmware y/o hardware. A lo largo de esta descripción detallada, a efectos explicativos, se han expuesto numerosos detalles específicos con el fin de facilitar una comprensión completa de la presente invención. Sin embargo, será evidente para un experto en la materia que la invención puede practicarse sin algunos de estos detalles específicos. En ciertos casos, estructuras y funciones bien conocidas no se describieron con gran detalle para evitar complicar la materia de la presente invención. Por consiguiente, el alcance de la invención debe juzgarse en términos de las reivindicaciones que siguen.

Claims (15)

1. REIVINDICACIONES
1. Un procesador que comprende:
circuito de decodificación (840) adaptado para decodificar una instrucción, en donde la instrucción especifica ubicaciones de una pluralidad de operandos, cuyos valores están en un formato de punto flotante; y
circuito de ejecución (850) adaptado para ejecutar la instrucción decodificada, en donde la ejecución incluye: convertir los valores de cada operando, convirtiéndose cada valor en una pluralidad de valores de menor precisión, en donde se debe almacenar un exponente para cada operando,
realizar operaciones aritméticas entre valores de menor precisión convertidos a partir de valores para la pluralidad de operandos, y
generar un valor de punto flotante convirtiendo un valor resultante de las operaciones aritméticas al formato de punto flotante y almacenar el valor de punto flotante,
caracterizado por que,
para convertir los valores, cada uno de los valores en formato de punto flotante se cuantiza en una pluralidad de enteros y un exponente compartido de la pluralidad de enteros se almacena dentro de la memoria o un registro.
2. El procesador de la reivindicación 1, en el que la conversión de los valores para un operando es:
representar cada valor que se convierte en la pluralidad de valores de menor precisión utilizando una pluralidad de bits que incluyen al menos un primer y un segundo número de bits,
identificar el primer número de bits dentro de la pluralidad de bits para un primer valor de menor precisión para aproximar cada valor, e
identificar el segundo número de bits que no se superponen con el primer número de bits para un segundo valor de menor precisión para representar un resto de la aproximación del primer valor de menor precisión,
en el que los valores de menor precisión primero y segundo se utilizan para realizar las operaciones aritméticas con valores de menor precisión de uno o más operandos.
3. El procesador de la reivindicación 2, en el que la conversión de los valores para el operando es además:
determinar el exponente para el operando basándose en un rango de valores de los valores y la pluralidad de valores de menor precisión, siendo cada uno un valor entero, y
cuantizar cada valor en un valor entero según el rango de valores.
4. El procesador de la reivindicación 3, en el que el rango de valores se determina basándose en el examen de todos los valores para el operando.
5. El procesador de la reivindicación 2, en el que cada uno de los valores de menor precisión primero y segundo es un valor de punto flotante de menor precisión.
6. El procesador de la reivindicación 1, en el que el circuito de ejecución (850) comprende uno o más circuitos multiplicadores-acumuladores, MAC, dedicados, y los uno o más circuitos MAC dedicados son para realizar operaciones de multiplicación y acumulación de enteros.
7. El procesador de la reivindicación 6, en el que cada circuito MAC es un circuito de multiplicación-adición fusionada, FMA.
8. El procesador de la reivindicación 1, en el que cada operando especifica una matriz, un vector o un tensor o escalar multidimensional.
9. El procesador de la reivindicación 1, en el que la pluralidad de valores de menor precisión se determina en función de una calidad de servicio, QoS, especificada por la instrucción.
10. El procesador de la reivindicación 1, en el que un número de operaciones aritméticas a realizar se basa en un requisito de calidad de servicio, QoS, especificado por la instrucción.
11. Un método (700) que comprende:
decodificar una instrucción (702), en el que la instrucción especifica ubicaciones de una pluralidad de operandos, cuyos valores están en un formato de punto flotante; y
ejecutar la instrucción decodificada (704) para:
convertir los valores para cada operando (712), convirtiéndose cada valor en una pluralidad de valores de menor precisión, en donde se debe almacenar un exponente para cada operando,
realizar operaciones aritméticas entre valores de menor precisión convertidos a partir de valores para la pluralidad de operandos (714), y
generar un valor de punto flotante convirtiendo un valor resultante de las operaciones aritméticas al formato de punto flotante y almacenar el valor de punto flotante (716),
caracterizado por que,
para convertir los valores, cada uno de los valores en formato de punto flotante se cuantiza en una pluralidad de enteros y un exponente compartido de la pluralidad de enteros se almacena dentro de la memoria o un registro.
12. El método (700) de la reivindicación 11, en el que la conversión de los valores para un operando (712) es: representar cada valor que se convierte en la pluralidad de valores de menor precisión utilizando una pluralidad de bits que incluyen al menos un primer y un segundo número de bits (723),
identificar el primer número de bits dentro de la pluralidad de bits para un primer valor de menor precisión para aproximar cada valor (724), e
identificar el segundo número de bits que no se superponen con el primer número de bits para un segundo valor de menor precisión para representar un resto de la aproximación del primer valor de menor precisión (726),
en el que los valores de menor precisión primero y segundo se utilizan para realizar las operaciones aritméticas con valores de menor precisión de uno o más operandos.
13. El método (700) de la reivindicación 12, la conversión de los valores para el operando (712) es además:
determinar el exponente para el operando, basándose en un rango de valores, de los valores y la pluralidad de valores de menor precisión, siendo cada uno un valor entero (732), y
cuantizar cada valor en un valor entero en base al rango de valores (734).
14. El método (700) de la reivindicación 13, en el que el rango de valores se determina basándose en el examen de todos los valores para el operando.
15. El método (700) de la reivindicación 12, en el que cada uno de los valores de menor precisión primero y segundo es un valor de punto flotante de menor precisión.
ES22167262T 2018-09-27 2019-06-25 Computer processor for higher precision computations using a mixed-precision decomposition of operations Active ES3048775T3 (en)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US16/144,964 US10853067B2 (en) 2018-09-27 2018-09-27 Computer processor for higher precision computations using a mixed-precision decomposition of operations

Publications (1)

Publication Number Publication Date
ES3048775T3 true ES3048775T3 (en) 2025-12-11

Family

ID=65229962

Family Applications (4)

Application Number Title Priority Date Filing Date
ES22167262T Active ES3048775T3 (en) 2018-09-27 2019-06-25 Computer processor for higher precision computations using a mixed-precision decomposition of operations
ES24152035T Active ES3040290T3 (en) 2018-09-27 2019-06-25 Computer processor for higher precision computations using a mixed-precision decomposition of operations
ES19182449T Active ES2927546T3 (es) 2018-09-27 2019-06-25 Procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta
ES20215256T Active ES2914605T3 (es) 2018-09-27 2019-06-25 Un procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta

Family Applications After (3)

Application Number Title Priority Date Filing Date
ES24152035T Active ES3040290T3 (en) 2018-09-27 2019-06-25 Computer processor for higher precision computations using a mixed-precision decomposition of operations
ES19182449T Active ES2927546T3 (es) 2018-09-27 2019-06-25 Procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta
ES20215256T Active ES2914605T3 (es) 2018-09-27 2019-06-25 Un procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta

Country Status (7)

Country Link
US (5) US10853067B2 (es)
EP (4) EP3629147B1 (es)
CN (3) CN112506467B (es)
DK (1) DK4328744T3 (es)
ES (4) ES3048775T3 (es)
FI (1) FI4328744T3 (es)
PL (4) PL4044020T3 (es)

Families Citing this family (86)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11809869B2 (en) * 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11816483B2 (en) * 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11893470B2 (en) * 2018-12-06 2024-02-06 MIPS Tech, LLC Neural network processing using specialized data representation
US20200202195A1 (en) * 2018-12-06 2020-06-25 MIPS Tech, LLC Neural network processing using mixed-precision data representation
US12499353B1 (en) * 2018-12-12 2025-12-16 Amazon Technologies, Inc. Configurable function approximation based on hardware selection of mapping table content
WO2020190807A1 (en) 2019-03-15 2020-09-24 Intel Corporation Systolic disaggregation within a matrix accelerator architecture
PL3938914T3 (pl) 2019-03-15 2025-03-31 Intel Corporation Dynamiczna rekonfiguracja pamięci
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US12182035B2 (en) 2019-03-15 2024-12-31 Intel Corporation Systems and methods for cache optimization
US11194585B2 (en) 2019-03-25 2021-12-07 Flex Logix Technologies, Inc. Multiplier-accumulator circuitry having processing pipelines and methods of operating same
US20190220278A1 (en) * 2019-03-27 2019-07-18 Menachem Adelman Apparatus and method for down-converting and interleaving multiple floating point values
US11314504B2 (en) 2019-04-09 2022-04-26 Flex Logix Technologies, Inc. Multiplier-accumulator processing pipelines and processing component, and methods of operating same
US11016765B2 (en) * 2019-04-29 2021-05-25 Micron Technology, Inc. Bit string operations using a computing tile
US10990389B2 (en) * 2019-04-29 2021-04-27 Micron Technology, Inc. Bit string operations using a computing tile
CN112394990A (zh) * 2019-08-13 2021-02-23 上海寒武纪信息科技有限公司 浮点转半精度浮点指令处理装置、方法及相关产品
US11169776B2 (en) 2019-06-28 2021-11-09 Intel Corporation Decomposed floating point multiplication
CN112394997A (zh) * 2019-08-13 2021-02-23 上海寒武纪信息科技有限公司 八位整形转半精度浮点指令处理装置、方法及相关产品
US11327923B2 (en) 2019-09-04 2022-05-10 SambaNova Systems, Inc. Sigmoid function in hardware and a reconfigurable data processor including same
US11886377B2 (en) 2019-09-10 2024-01-30 Cornami, Inc. Reconfigurable arithmetic engine circuit
US11288076B2 (en) 2019-09-13 2022-03-29 Flex Logix Technologies, Inc. IC including logic tile, having reconfigurable MAC pipeline, and reconfigurable memory
US11327713B2 (en) 2019-10-01 2022-05-10 SambaNova Systems, Inc. Computation units for functions based on lookup tables
US11455368B2 (en) 2019-10-02 2022-09-27 Flex Logix Technologies, Inc. MAC processing pipeline having conversion circuitry, and methods of operating same
US11188303B2 (en) * 2019-10-02 2021-11-30 Facebook, Inc. Floating point multiply hardware using decomposed component numbers
US20240289092A1 (en) * 2019-10-14 2024-08-29 Anhui Cambricon Information Technology Co., Ltd. Multiplier, method, integrated circuit chip, and computing device for floating point operation
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
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11663746B2 (en) 2019-11-15 2023-05-30 Intel Corporation Systolic arithmetic on sparse data
US11327717B2 (en) 2019-11-19 2022-05-10 SambaNova Systems, Inc. Look-up table with input offsetting
CN111008230B (zh) * 2019-11-22 2023-08-04 远景智能国际私人投资有限公司 数据存储方法、装置、计算机设备及存储介质
US11328038B2 (en) 2019-11-25 2022-05-10 SambaNova Systems, Inc. Computational units for batch normalization
CN113126954B (zh) * 2019-12-31 2024-04-09 华为技术有限公司 浮点数乘法计算的方法、装置和算术逻辑单元
US11663000B2 (en) * 2020-01-07 2023-05-30 SK Hynix Inc. Multiplication and accumulation(MAC) operator and processing-in-memory (PIM) device including the MAC operator
US11314483B2 (en) 2020-01-08 2022-04-26 International Business Machines Corporation Bit-serial computation with dynamic frequency modulation for error resiliency in neural network
US11836629B2 (en) 2020-01-15 2023-12-05 SambaNova Systems, Inc. Computationally efficient softmax loss gradient backpropagation
US11960856B1 (en) 2020-01-15 2024-04-16 Flex Logix Technologies, Inc. Multiplier-accumulator processing pipeline using filter weights having gaussian floating point data format
CN115934030B (zh) * 2020-01-20 2024-01-16 华为技术有限公司 算数逻辑单元、浮点数乘法计算的方法及设备
US12197887B2 (en) * 2020-03-13 2025-01-14 Altera Corporation Floating-point decomposition circuitry with dynamic precision
CN113408716B (zh) 2020-03-17 2025-06-24 安徽寒武纪信息科技有限公司 计算装置、方法、板卡和计算机可读存储介质
CN113408717B (zh) * 2020-03-17 2025-09-09 安徽寒武纪信息科技有限公司 计算装置、方法、板卡和计算机可读存储介质
US12079591B2 (en) * 2020-04-07 2024-09-03 Samsung Electronics Co., Ltd. Neural network device, method of operating the neural network device, and application processor including the neural network device
US11442881B2 (en) 2020-04-18 2022-09-13 Flex Logix Technologies, Inc. MAC processing pipelines, circuitry to control and configure same, and methods of operating same
US11775298B2 (en) * 2020-04-24 2023-10-03 Intel Corporation Frequency scaling for per-core accelerator assignments
US11551148B2 (en) * 2020-04-29 2023-01-10 Marvell Asia Pte Ltd System and method for INT9 quantization
US11714998B2 (en) * 2020-05-05 2023-08-01 Intel Corporation Accelerating neural networks with low precision-based multiplication and exploiting sparsity in higher order bits
US12282748B1 (en) 2020-05-26 2025-04-22 Analog Devices, Inc. Coarse floating point accumulator circuit, and MAC processing pipelines including same
CN113867792A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
US12282749B2 (en) 2020-08-20 2025-04-22 Analog Devices, Inc. Configurable MAC pipelines for finite-impulse-response filtering, and methods of operating same
CN114186186B (zh) * 2020-09-15 2023-08-04 华为技术有限公司 矩阵计算方法及相关设备
CN112148249B (zh) * 2020-09-18 2023-08-18 北京百度网讯科技有限公司 点积运算实现方法、装置、电子设备及存储介质
CN114327360B (zh) * 2020-09-29 2023-07-18 华为技术有限公司 运算装置、浮点数计算的方法、装置、芯片和计算设备
CN112416295B (zh) * 2020-12-09 2024-02-02 厦门壹普智慧科技有限公司 用于浮点数据、张量数据运算的运算器
US12020028B2 (en) * 2020-12-26 2024-06-25 Intel Corporation Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
EP4275113A4 (en) * 2021-01-07 2024-12-04 Groq, Inc. DIGITAL PRECISION IN A DIGITAL MULTIPLIER CIRCUIT ASSEMBLY
US12455723B2 (en) 2021-02-02 2025-10-28 Analog Devices, Inc. MAC processing pipeline having activation circuitry, and methods of operating same
CN112860218B (zh) * 2021-02-07 2023-07-11 厦门壹普智慧科技有限公司 用于fp16浮点数据和int8整型数据运算的混合精度运算器
US12461713B2 (en) 2021-03-03 2025-11-04 Analog Devices, Inc. MAC processing pipelines, circuitry to configure same, and methods of operating same
CN113076083B (zh) * 2021-06-04 2021-08-31 南京后摩智能科技有限公司 数据乘加运算电路
WO2022271243A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Programmable fabric-based instruction set architecture for a processor
US12353878B2 (en) * 2021-06-26 2025-07-08 Intel Corporation Apparatuses, methods, and systems for instructions for matrix multiplication instructions
US20230050279A1 (en) * 2021-08-12 2023-02-16 Taiwan Semiconductor Manufacturing Company, Ltd. Integrated circuit and method of operating same
KR102653107B1 (ko) * 2021-08-23 2024-04-01 삼성전자주식회사 연산 방법 및 장치
US20230069000A1 (en) * 2021-08-31 2023-03-02 Intel Corporation Bfloat16 arithmetic instructions
US12608175B2 (en) 2021-08-31 2026-04-21 Intel Corporation BFLOAT16 square root and/or reciprocal square root instructions
US20230133360A1 (en) * 2021-10-28 2023-05-04 Taiwan Semiconductor Manufacturing Company, Ltd. Compute-In-Memory-Based Floating-Point Processor
CN114169498B (zh) * 2021-11-24 2025-07-15 北京大觥科技有限公司 基于神经网络的特征数据处理方法及装置
CN114141086A (zh) * 2021-12-13 2022-03-04 湖南文理学院 一种内置模拟物理力学实验场景的电子装置
US20230205527A1 (en) * 2021-12-23 2023-06-29 Intel Corporation Conversion instructions
GB202202905D0 (en) 2022-03-02 2022-04-13 Graphcore Ltd Processing device for intermediate value scaling
US20230289139A1 (en) * 2022-03-08 2023-09-14 International Business Machines Corporation Hardware device to execute instruction to convert input value from one data format to another data format
US20230289138A1 (en) * 2022-03-08 2023-09-14 International Business Machines Corporation Hardware device to execute instruction to convert input value from one data format to another data format
CN114847914A (zh) * 2022-05-18 2022-08-05 上海交通大学 一种基于混合精度神经网络的电阻抗成像方法及系统
CN115269003B (zh) * 2022-07-29 2026-01-30 上海壁仞科技股份有限公司 数据处理方法及装置、处理器、电子设备、存储介质
US12399713B2 (en) * 2022-09-29 2025-08-26 Tenstorrent Ai Ulc Multiplication hardware block with adaptive fidelity control system
CN115718586B (zh) * 2022-11-29 2024-01-19 格兰菲智能科技有限公司 像素颜色混合操作方法、图形绘制方法、装置和设备
EP4481554A1 (en) * 2023-06-20 2024-12-25 Huawei Technologies Co., Ltd. Methods for decomposition of high-precision matrix multiplications into multiple matrix multiplications of different data types
US20250004661A1 (en) * 2023-06-27 2025-01-02 Western Digital Technologies, Inc. Computational storage device with computation precision-defined fixed point data grouping and storage management
US20250130794A1 (en) * 2023-10-20 2025-04-24 Advanced Micro Devices, Inc. Multi-format operand circuit
US12405786B1 (en) 2024-02-27 2025-09-02 Apple Inc. Hardware support for conversion between integer and floating-point data
US20250307133A1 (en) * 2024-03-28 2025-10-02 Advanced Micro Devices, Inc. Offloading Quantization of Directional Blocked Data Formats to Near-Memory Units
CN120671828B (zh) * 2025-06-05 2026-02-24 中科加禾(北京)科技有限公司 模型数据的反量化方法、矩阵运算方法以及相关设备
CN120631450B (zh) * 2025-08-15 2025-10-24 上海壁仞科技股份有限公司 数据处理方法、装置、芯片和计算机设备

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3389379A (en) * 1965-10-05 1968-06-18 Sperry Rand Corp Floating point system: single and double precision conversions
JP3178746B2 (ja) 1991-09-25 2001-06-25 松下電器産業株式会社 浮動小数点数のためのフォーマット変換装置
US6108772A (en) * 1996-06-28 2000-08-22 Intel Corporation Method and apparatus for supporting multiple floating point processing models
US6029243A (en) * 1997-09-19 2000-02-22 Vlsi Technology, Inc. Floating-point processor with operand-format precision greater than execution precision
US6230257B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Method and apparatus for staggering execution of a single packed data instruction using the same circuit
US5995122A (en) * 1998-04-30 1999-11-30 Intel Corporation Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format
US6714197B1 (en) * 1999-07-30 2004-03-30 Mips Technologies, Inc. Processor having an arithmetic extension of an instruction set architecture
US8280941B2 (en) * 2007-12-19 2012-10-02 HGST Netherlands B.V. Method and system for performing calculations using fixed point microprocessor hardware
US20100180100A1 (en) 2009-01-13 2010-07-15 Mavrix Technology, Inc. Matrix microprocessor and method of operation
US8655937B1 (en) 2009-04-29 2014-02-18 Nvidia Corporation High precision integer division using low precision hardware operations and rounding techniques
US8745111B2 (en) * 2010-11-16 2014-06-03 Apple Inc. Methods and apparatuses for converting floating point representations
US8838664B2 (en) 2011-06-29 2014-09-16 Advanced Micro Devices, Inc. Methods and apparatus for compressing partial products during a fused multiply-and-accumulate (FMAC) operation on operands having a packed-single-precision format
US9128697B1 (en) 2011-07-18 2015-09-08 Apple Inc. Computer numerical storage format with precision type indicator
US9104474B2 (en) * 2012-12-28 2015-08-11 Intel Corporation Variable precision floating point multiply-add circuit
US10445092B2 (en) * 2014-12-27 2019-10-15 Intel Corporation Method and apparatus for performing a vector permute with an index and an immediate
US9870341B2 (en) * 2016-03-18 2018-01-16 Qualcomm Incorporated Memory reduction method for fixed point matrix multiply
US10282169B2 (en) 2016-04-06 2019-05-07 Apple Inc. Floating-point multiply-add with down-conversion
EP4553650A1 (en) 2017-03-20 2025-05-14 INTEL Corporation Systems, methods, and apparatuses for tile matrix multiplication and accumulation
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
GB2563878B (en) 2017-06-28 2019-11-20 Advanced Risc Mach Ltd Register-based matrix multiplication
GB2568083B (en) * 2017-11-03 2021-06-02 Imagination Tech Ltd Histogram-based per-layer data format selection for hardware implementation of deep neutral 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
US10678508B2 (en) * 2018-03-23 2020-06-09 Amazon Technologies, Inc. Accelerated quantized multiply-and-add operations
US20190340499A1 (en) * 2018-05-04 2019-11-07 Microsoft Technology Licensing, Llc Quantization for dnn accelerators
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions

Also Published As

Publication number Publication date
EP4044020B1 (en) 2025-07-30
EP4044020A1 (en) 2022-08-17
CN112506467B (zh) 2024-08-30
US10853067B2 (en) 2020-12-01
EP4328744B1 (en) 2025-06-18
ES3040290T3 (en) 2025-10-29
EP4328744A3 (en) 2024-04-17
PL4044020T3 (pl) 2025-12-22
US20230214215A1 (en) 2023-07-06
US11126428B2 (en) 2021-09-21
US11868770B2 (en) 2024-01-09
ES2927546T3 (es) 2022-11-08
PL4328744T3 (pl) 2025-10-06
EP4328744A2 (en) 2024-02-28
EP3812883A1 (en) 2021-04-28
CN110955404A (zh) 2020-04-03
US20210089303A1 (en) 2021-03-25
US20210103444A1 (en) 2021-04-08
US20240211252A1 (en) 2024-06-27
EP3812883B1 (en) 2022-03-16
US20190042244A1 (en) 2019-02-07
US11544057B2 (en) 2023-01-03
ES2914605T3 (es) 2022-06-14
PL3812883T3 (pl) 2022-06-06
DK4328744T3 (da) 2025-09-08
CN117931121A (zh) 2024-04-26
US12346692B2 (en) 2025-07-01
EP3629147B1 (en) 2022-07-06
FI4328744T3 (fi) 2025-09-03
EP3629147A1 (en) 2020-04-01
PL3629147T3 (pl) 2022-09-26
CN112506467A (zh) 2021-03-16

Similar Documents

Publication Publication Date Title
ES3048775T3 (en) Computer processor for higher precision computations using a mixed-precision decomposition of operations
ES3056098T3 (en) Systems and methods for performing 16-bit floating-point matrix dot product instructions
ES2982493T3 (es) Acelerador de multiplicación de matrices densas-dispersas
ES3013609T3 (en) Systems and methods for performing instructions to convert to 16-bit floating-point format
CN113762490B (zh) 使用列折叠和挤压的稀疏矩阵的矩阵乘法加速
ES2987811T3 (es) Sistemas y métodos para realizar instrucciones de producto escalar de vectores en coma flotante de 16 bits
TWI800118B (zh) 用於融合乘加運算的系統、裝置及方法
KR20240011204A (ko) 행렬 연산 가속기의 명령어들을 위한 장치들, 방법들, 및 시스템들
US10324689B2 (en) Scalable memory-optimized hardware for matrix-solve
CN110909883A (zh) 用于执行指定三元片逻辑操作的指令的系统和方法
EP3702940A1 (en) Systolic array accelerator systems and methods
EP3716054A2 (en) Interleaved pipeline of floating-point adders
KR102585780B1 (ko) 실행을 위해 데이터 성분들을 로딩하는데 있어서 공간 구역성을 고려하기 위한 장치 및 방법
ES2971474T3 (es) Método y aparato de aproximación utilizando polinomios
US10437562B2 (en) Apparatus and method for processing sparse data
CN111767512A (zh) 离散余弦变换/反离散余弦变换dct/idct系统和方法
CN111752605A (zh) 使用浮点乘法-累加结果的模糊-j位位置