ES2927546T3 - Procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta - Google Patents

Procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta Download PDF

Info

Publication number
ES2927546T3
ES2927546T3 ES19182449T ES19182449T ES2927546T3 ES 2927546 T3 ES2927546 T3 ES 2927546T3 ES 19182449 T ES19182449 T ES 19182449T ES 19182449 T ES19182449 T ES 19182449T ES 2927546 T3 ES2927546 T3 ES 2927546T3
Authority
ES
Spain
Prior art keywords
values
value
bits
floating point
instruction
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
ES19182449T
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 ES2927546T3 publication Critical patent/ES2927546T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • 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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (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 detalladas en este documento se refieren a operaciones aritméticas de valores de coma flotante. Un procesador ejemplar incluye circuitos de decodificación para decodificar una instrucción, donde la instrucción especifica ubicaciones de una pluralidad de operandos, cuyos valores están en un formato de punto flotante. El procesador ejemplar incluye además un circuito de ejecución para ejecutar la instrucción decodificada, donde la ejecución incluye: convertir los valores para cada operando, convirtiéndose cada valor en una pluralidad de valores de menor precisión, donde se 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 al convertir un valor resultante de las operaciones aritméticas al formato de punto flotante y almacenar el valor de punto flotante. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta
Campo técnico
Las realizaciones de la invención se refieren al campo de la arquitectura de procesadores informáticos; y, más específicamente, a la conversión de precisión de valores para operaciones aritméticas dentro de una arquitectura de procesadores informáticos.
Antecedentes de la técnica
Matrices, vectores y otros conjuntos de datos de múltiples dimensiones cada vez son más importantes en muchas tareas informáticas, tales como el aprendizaje automático y otro procesamiento de datos en masa. La realización de las operaciones aritméticas en elementos de datos de coma flotante en estos conjuntos de datos de múltiples dimensiones puede ser intensiva en recursos y/o consumir tiempo al realizar el cálculo.
El documento US 8655937 B1 se refiere a realizar división de números enteros usando unidades de coma flotante. En particular, la división de números enteros se realiza usando una unidad de hardware de coma flotante que soporta variables de coma flotante de un cierto tamaño de bits. El numerador y el denominador son números enteros que tienen un tamaño de bits que es mayor que el tamaño de bits de las variables de coma flotante soportadas por la unidad de hardware de coma flotante.
El documento US 9128697 B1 se refiere a un almacenamiento y manipulación de números dentro de procesadores. Por ejemplo, una unidad de procesamiento de datos está configurada para representar los números de coma flotante usando 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 fijar un valor de tipo de coma flotante en un almacenamiento de memoria para indicar si una primera representación de un número de coma flotante usa el primer o segundo número de bits. Se pueden almacenar correspondientemente una segunda representación del número de coma flotante y del valor de tipo de coma flotante. La segunda representación se puede corresponder con la primera representación con uno o más bits desplazados.
El documento US 2017/293470 A1 se refiere a circuitos de coma flotante para realizar operaciones de coma flotante con conversión descendente. Por ejemplo, una unidad de coma flotante está configurada para realizar operaciones de multiplicación-adición fusionadas basándose en primeros y segundos tipos de instrucción diferentes. El primer tipo de instrucción especifica el resultado en el primer formato de coma flotante y el segundo tipo de instrucción especifica la multiplicación adición fusionada de operandos de entrada en el primer formato de coma flotante para generar un resultado en un segundo formato de coma flotante de precisión inferior. El primer formato puede ser un formato de 32 bits y el segundo formato puede ser un formato de 16 bits. La unidad de coma 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.
Sumario
La presente invención se define en las reivindicaciones independientes. Las reivindicaciones dependientes definen realizaciones de la misma.
Breve descripción de los dibujos
La invención puede entenderse mejor haciendo referencia a la siguiente descripción y a los dibujos adjuntos que se usan para mostrar realizaciones de la invención. En los dibujos:
La Figura 1 muestra operaciones de conversión de valores en coma flotante, cada uno a múltiples números enteros para operaciones aritméticas, y la reconstrucción de los valores resultantes de las operaciones aritméticas de vuelta a la coma flotante por una realización de la invención.
La Figura 2A muestra el pseudocódigo para convertir un valor de FP32 en tres números enteros de 8 bits sin signo por una realización de la invención.
La Figura 2B muestra el pseudocódigo para convertir un valor de FP32 en dos números enteros de 16 bits sin signo por una realización de la invención.
La Figura 2C muestra el pseudocódigo para convertir un valor de FP32 en tres números enteros de 8 bits con signo por una realización de la invención.
La Figura 2D muestra el pseudocódigo para convertir un valor de FP32 en cuatro números enteros de 8 bits sin signo por una realización de la invención.
La Figura 2E muestra el pseudocódigo para reconstruir un valor de FP32 de cuatro números enteros de 8 bits con signo por una realización de la invención.
La Figura 3 muestra la exactitud de datos de una realización de la invención usando coma flotante en un enfoque de múltiples números enteros en comparación con enfoques anteriores.
La Figura 4 muestra operaciones de conversión de valores en coma flotante, cada uno a múltiples comas flotantes de precisión inferior para operaciones aritméticas, y la reconstrucción de los valores resultantes de las operaciones aritméticas de vuelta a la coma flotante por una realización de la invención.
La Figura 5A muestra el pseudocódigo para convertir un valor de FP32 en dos valores de bfloat16 por una realización de la invención.
La Figura 5B muestra el pseudocódigo para construir un valor de FP32 de dos valores de bfloat16 por una realización de la invención.
La Figura 6 muestra la exactitud de datos de una realización de la invención que usa un enfoque de coma flotante en múltiples comas flotantes de precisión inferior en comparación con enfoques anteriores.
La Figura 7A es un diagrama de flujo que muestra operaciones aritméticas que incluyen convertir valores en coma flotante en múltiples valores de precisión inferior y reconstruir los valores resultantes de vuelta a la coma flotante por una realización de la invención.
La Figura 7B es un diagrama de flujo que muestra la conversión de valor de valores en coma flotante a múltiples valores de precisión inferior por una realización de la invención.
La Figura 8A es un diagrama de bloques que muestra tanto una canalización en orden ilustrativa como una canalización de cambio de nombre de registro, emisión/ejecución fuera de orden ilustrativa de acuerdo con realizaciones de la invención.
La Figura 8B es un diagrama de bloques que muestra tanto una realización ilustrativa de un núcleo de arquitectura en orden como un núcleo de arquitectura de cambio de nombre de registro, emisión/ejecución fuera de orden ilustrativo a incluir en un procesador de acuerdo con realizaciones de la invención.
La Figura 9 es un diagrama de bloques de un procesador de único núcleo y un procesador de múltiples núcleos con controlador de memoria y de gráficos integrado de acuerdo con las realizaciones de la invención.
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.
La Figura 12 muestra un diagrama de bloques de un tercer sistema de acuerdo con una realización de la presente invención.
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.
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 en instrucciones binarias en un conjunto de instrucciones objetivo de acuerdo con realizaciones de la invención.
Las Figuras 15A y 15B son diagramas de bloques que muestran un formato de instrucción apto para vectores genérico y plantillas de instrucción del mismo de acuerdo con realizaciones de la invención.
Las Figuras 16A-D son diagramas de bloques que muestran un formato de instrucción apto para vectores específico ilustrativo de acuerdo con las realizaciones de la invención.
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 único núcleo de procesador, junto con su conexión a la red de interconexión integrada en pastilla y con su subconjunto local de la memoria 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 de procesador en la Figura 84A de acuerdo con realizaciones de la invención.
La Figura 19 ilustra una realización de teselas configuradas.
La Figura 20 ilustra varios ejemplos de almacenamiento de matriz.
La Figura 21 ilustra una realización de un sistema que utiliza un acelerador de operaciones matriciales (de teselas). Las Figuras 22 y 23 muestran diferentes realizaciones de cómo se comparte memoria usando un acelerador de operaciones matriciales.
La Figura 24 ilustra una realización de una operación de acumulación de multiplicación matricial usando teselas ("TMMA").
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 de multiplicación fusionada encadenada.
La Figura 26 muestra implementaciones de SIMD de tamaño potencia de dos en las que los acumuladores usan tamaños que son mayores que las entradas a los multiplicadores de acuerdo con una realización.
Descripción detallada
En la siguiente descripción, se exponen numerosos detalles específicos. Sin embargo, se entiende que las realizaciones de la invención se pueden poner en práctica sin estos detalles específicos. En otros casos, no se han mostrado con detalle circuitos, estructuras y técnicas bien conocidos con el fin de no complicar la comprensión de esta descripción.
El texto entre paréntesis y los bloques con bordes de línea discontinua (tal como línea discontinua grande, líneas discontinuas pequeñas, línea discontinua de puntos y puntos) pueden usarse para ilustrar operaciones opcionales que añaden características adicionales a las realizaciones de la invención. Sin embargo, tal notación, no debe tomarse para significar que estas son únicamente opciones u operaciones opcionales, y/o, entonces, los bloques con bordes de línea continua no son opcionales en algunas realizaciones de la invención.
Las referencias en la memoria descriptiva a "una realización", "una realización", "una realización de ejemplo" y similares indican que la realización descrita puede incluir un rasgo, estructura o característica particular, pero no es necesario que cada realización incluya el rasgo, estructura o característica particular. Además, tales expresiones no hacen referencia necesariamente a la misma realización. Además, cuando una prestación, estructura o característica particular se describe en conexión con una realización, se afirma que está dentro del conocimiento de un experto en la materia para afectar a tal prestación, estructura o característica en conexión con otras realizaciones se describa explícitamente o no.
La siguiente descripción y las reivindicaciones pueden usar los términos "acoplado" y "conectado", junto con sus derivados. Estos términos no se pretenden como sinónimos entre sí. Se usa "acoplado" para indicar que dos o más elementos, que pueden estar o no en contacto físico o en contacto directo entre sí, cooperan entre sí. Se usa "conectado" para indicar el establecimiento de la comunicación entre dos o más elementos que están acoplados entre sí. Un "conjunto", como se usa en el presente documento se refiere a cualquier número total positivo de elementos que incluyen un elemento.
Precisión de valores
En el cálculo, a menudo los valores se representan en un formato de números enteros o un formato de coma flotante. Un valor ocupa un número de bits en memoria informática. Dependiendo de los rangos de valores usados en el cálculo, puede asignarse diferente número de bits. Por ejemplo, un número entero puede tomar 8 bits, que tiene el rango de -128 a 127, si es un número entero con signo (-27 a 27-1), y el rango de 0 a 255 si es un número entero sin signo (0 a 28-1). El formato de número entero de 8 bits a menudo se abrevia como int8, por ejemplo, int8 para los números enteros con signo y unit8 para los números enteros sin signo. Excepto para ejemplos que específicamente lo llaman sin signo o con signo, cualquier momento que escribimos "int" puede sustituirse por "uint". Se usa un número de formatos de números enteros en el cálculo, y la Tabla 1 muestra una lista de formatos de números enteros ilustrativos.
Tabla 1. Formatos de números enteros ilustrativos
Figure imgf000004_0001
Figure imgf000005_0001
El rango de un formato de número entero es de -2(n'1) a 2(n-1)-1 para números enteros con signo, y de 0 a 2n-1 para números enteros sin signo. Un formato de número entero puede representar un número entero en la precisión exacta, pero para número reales distintos de números enteros, que son números irracionales o números racionales excluyendo los números enteros, los valores almacenados en un formato de número entero son una aproximación de los valores. La aproximación de los números reales en el formato de número entero a menudo no es tan precisa como la de un formato de coma flotante para representar valores en el mismo rango usando el mismo número de bits.
Un formato de coma flotante (FP) usa la representación de fórmulas de números reales como una aproximación para soportar un equilibrio entre rango y precisión. Un valor puede representarse aproximadamente a un número fijo de dígitos significativos (el significando, que puede denominarse también "mantisa", y los dos términos se usan de manera intercambiable) y escalarse usando un exponente en alguna base fija (obsérvese que el exponente puede denominarse también escala, o escala exponencial, y estos términos se usan de manera intercambiable); la base para el escalamiento puede ser de dos, de diez o de dieciséis (u otro número entero). El valor puede representarse en la siguiente forma: significando x baseexponente, donde el significando puede ser un valor de número entero o de coma flotante, base es un número entero mayor o igual que dos, y el exponente es un número entero. Con un número fijo de dígitos, puede usarse un sistema de coma flotante para representar valores de diferentes órdenes de magnitud en el cálculo. Se usa un número de formatos de coma flotante en cálculo, y la Tabla 2 muestra una lista de formatos de coma flotante ilustrativos.
Tabla 2. Formatos de coma flotante ilustrativos
Figure imgf000005_0002
En la Tabla 2, la precisión de los formatos de coma flotante aumenta del formato de coma flotante bfloat16 al formato de coma flotante de precisión óctuple debido a que se usan más bits para la precisión de significando (de 8 bits en bfloat16 a 237 bits en la precisión óctuple).
Dentro de los formatos de coma flotante ilustrativos en la Tabla 2, bfloat16 es un formato de coma flotante relativamente nuevo que parece que está 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 exactitud que el formato de coma flotante de precisión sencilla (FP32), puesto que, como se muestra en la Tabla 2, los valores de FP32 tienen 8 bits de exponente y 24 bits de significando (uno implícito), mientras que los valores de bfloat16 tienen 8 bits de exponente y 8 bits de significando. El tamaño de significando reducido significa que muchos valores (pero no todos) no pueden representarse de manera tan exacta en el formato bfloat16 que en el formato FP32.
Puesto que se crean las circuiterías/lógica especializadas usando el formato bfloat16 (por ejemplo, en aprendizaje automático), es deseable usar el formato bfloat16 para representar un valor de precisión superior (por ejemplo, los unos almacenados en el formato FP32, FP64, FP128 o FP256) en el cálculo y a continuación ejecutar operaciones aritméticas usando bfloat16, particularmente en cálculo vectorial/matricial (por ejemplo, la multiplicación de matrizmatriz general, GEMM). Algunas realizaciones de la invención combinan múltiples (K) valores de bfloat16 juntos para representar valores de coma flotante de precisión superior. Puesto que los múltiples valores bfloat16 tienen 8xK bits de precisión de significando, pueden representar un único valor dentro de un formato de valor de precisión arbitrariamente superior aumentando la múltiple K. Por lo tanto, las realizaciones de la invención pueden aprovecharse de las unidades de hardware de bfloat16 existentes (por ejemplo, circuiterías) que están especializadas para operaciones aritméticas bfloat16, y que pueden ejecutar uno o más órdenes de magnitud más rápido que una unidad/circuito de hardware de coma flotante clásico usando el formato FP32, FP64, FP128 o FP256. Ejecutar las operaciones aritméticas bfloat16 usando las unidades/circuitos de hardware bfloat16 puede aproximar y/o superar la exactitud de FP32/64/128/256 por la combinación de los múltiples valores de bfloat16, y puede conseguir adicionalmente una tasa de ejecución más rápida que las unidades/circuitos de hardware de coma flotante clásicos usando el formato FP32, FP64, FP128 o FP256.
Además de bfloat16, el aprendizaje automático (ML) y la inteligencia artificial (IA) también usan de manera extensiva formatos de números enteros tales como int4, int8, int16, int32, int64 e inte128. En ML y/o IA, un valor de coma flotante (por ejemplo, uno almacenado en el formato FP32, FP64, FP128 o FP256) puede cuantificarse para que se almacene en un formato de número entero, y el valor cuantificado en un formato de número entero se usa a continuación para una aplicación de ML y/o IA (por ejemplo, en una red neuronal). La cuantificación es útil en la aplicación, puesto que el hardware basado en ML/IA a menudo incluye unidades de hardware (por ejemplo, circuiterías) que están especializadas para operaciones aritméticas de números enteros, y que pueden ejecutar uno o más órdenes de magnitud más rápido que una unidad/circuito de hardware de coma flotante clásico usando formato de FP32, FP64, FP128 o FP256. Ejecutar las operaciones aritméticas de números enteros usando las unidades/circuitos de hardware de números enteros puede aproximar y/o superar la exactitud de FP32/64/128/256 por la combinación de los múltiples valores de número entero, y puede conseguir adicionalmente una tasa de ejecución más rápida que las unidades/circuitos de hardware de coma flotante clásicos usando el formato FP32, FP64, FP128 o FP256.
Convertir un valor de coma flotante único de formato FP32, FP64, FP128 o FP256 a múltiples valores en formato bfloat16 o formatos de números enteros tales como int8 e int16 a menudo da como resultado los múltiples valores en una precisión inferior en cada uno de los múltiples valores que el valor de coma flotante original, puesto que se usan menos bits para representar cada uno de los múltiples valores (denominados así como valores de precisión inferior). Sin embargo, existen las unidades/circuitos de hardware más rápidos para los formatos bfloat16 y de números enteros (por ejemplo, uno o más órdenes de magnitudes más rápidos que una unidad/circuito de hardware de coma flotante clásico usando formato FP32, FP64, FP128 o FP256) en alguna arquitectura informática, 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 múltiples veces) de modo que el coste adicional (por ejemplo, tiempo de cálculo y recursos de hardware/software) de la conversión y reconstrucción se dispersa a través de las múltiples operaciones aritméticas, las realizaciones de la invención pueden dar como resultado un tiempo de operación aritmética global más rápido (produciendo de esta manera una capacidad de proceso superior), así como aproximadamente la misma o incluso mejor exactitud que las operaciones aritméticas sin la conversión.
Los ejemplos proporcionados en esta divulgación en el presente documento a continuación usan conversiones de FP32 a bfloat16, y de FP32 a int8. De manera evidente, las realizaciones de la invención no están así limitadas, y cada uno de los valores en un formato de coma flotante (por ejemplo, un formato en la Tabla 2) puede convertirse (1) a múltiples valores en un formato de coma flotante de precisión inferior (por ejemplo, otro formato que tiene bits de menos significando en la Tabla 2) o (2) a múltiples valores de números enteros en un formato de números enteros (que están en precisión inferior, y que pueden estar en formato en la Tabla 1 con una longitud de bits menor) usando la realización de la invención. Tal conversión puede conseguir un tiempo de operación aritmética global más rápido (produciendo, por lo tanto, capacidad de proceso superior), así como aproximadamente la misma o incluso mejor exactitud que las operaciones aritméticas sin la conversión.
Las realizaciones de la invención pueden implementar nuevas instrucciones para tal conversión, y las instrucciones pueden usarse no únicamente en aprendizaje automático (ML) e inteligencia artificial (IA), sino también en aplicación de cálculo de alto rendimiento (HPC) y otras aplicaciones. Las realizaciones de la invención pueden aprovechar circuiterías de hardware (por ejemplo, circuitos de multiplicador-acumulador (MAC), circuitos de multiplicación adición fusionada (FMA)) que están especializados a operaciones aritméticas (por ejemplo, Multiplicación Matriz-Matriz General (GEMM)), en particular, formatos de datos (por ejemplo, bfloat16 o diversos formatos de números enteros). Además de y/o, como alternativa, al tiempo de operación aritmética global más rápido según se analiza, las realizaciones de la invención pueden ajustar la exactitud de la operación aritmética como se explica en más detalle a continuación. Obsérvese que, aunque se proporcionan los ejemplos para la multiplicación matricial, las realizaciones de la invención pueden aplicarse a otras operaciones aritméticas (una o más de adición, resta, multiplicación y división) entre 1D, 2D, 3D, u otras matrices multidimensionales, tales como matriz y matriz, matriz y vector, o vector y vector.
Conversión de comas flotantes, cada una a múltiples números enteros
Un valor de coma flotante de entrada puede convertirse en múltiples números enteros a través de la cuantificación. La cuantificación del valor de coma flotante de entrada añade necesidades adicionales para el soporte de la cuantificación. Sin embargo, la cuantificación permite que los múltiples valores de números enteros resultantes usen unidades de números enteros, que pueden ejecutarse uno o más órdenes de magnitud más rápido que las unidades/circuitos de hardware de coma flotante clásicos usando formato FP32, FP64, FP128 o FP256 en un procesador informático.
En una realización, un procesador informático puede tomar una instrucción, que especifica al menos dos operandos, cada uno incluye parámetros que están en un formato de coma flotante. Los parámetros pueden corresponder a una entrada de una matriz en una dimensión (1D), dos dimensiones (2D), tres dimensiones (3D) o cualesquiera otras dimensiones. La matriz 1D puede denominarse un vector de N elementos de datos, y la matriz 2D puede denominarse una matriz o una tesela de M*N elementos de datos (obsérvese que se usan los términos "matriz" y "tesela" de manera intercambiable en esta divulgación). Los elementos de datos están típicamente en un mismo formato de coma flotante (por ejemplo, uno de formato FP32, FP64, FP128 o FP256). La instrucción es 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 adición, resta, multiplicación y división. Cada uno de los valores de coma flotante identificados por los operandos puede cuantificarse en múltiples números enteros y puede almacenarse un exponente compartido de los múltiples números enteros dentro de la memoria o un registro (por ejemplo, uno dentro del fichero de registro físico (PRF) de un procesador). El procesador puede ejecutar una serie de operaciones aritméticas de números enteros e identificar el exponente final, finalmente, el resultado de ejecución se convierte de vuelta a la coma flotante antes de almacenarlo en la matriz 1D o 2D resultante.
La cuantificación a números enteros y la conversión de vuelta a valores de coma flotante no cumplen con las presentes normas del Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) para la representación de valores, tal como las normas IEEE 754. Sin embargo, la serie de operaciones aritméticas de números enteros pueden aprovechar unidades/circuitos de hardware aritméticos de números enteros, tal como circuitos (también denominados circuitos de multiplicación-adición o MADD) de multiplicador-acumulador (MAC), que han de realizar operaciones de multiplicaciónacumulación de números enteros. En una realización, un circuito MAC incluye un circuito de multiplicación adición fusionado (FMA). Los circuitos MAC pueden ejecutar uno o más órdenes de magnitud más rápido en sus operaciones aritméticas de números enteros que las unidades/circuitos de hardware de coma flotante clásicos usando formato FP32, FP64, FP128 o FP256. El cálculo que no cumple con IEEE proporciona operaciones aritméticas comparables o más exactas que las de coma flotante sin la cuantificación y conversión en algunas realizaciones.
La Figura 1 muestra operaciones de conversión de valores en coma flotante, cada uno a múltiples números enteros para operaciones aritméticas, y la reconstrucción de los valores resultantes de las operaciones aritméticas de vuelta a la coma flotante por una realización de la invención. En la referencia 102, se decodifica una instrucción. La instrucción especifica al menos dos operandos, identificado cada uno una ubicación (por ejemplo, memoria, caché o registro) para una matriz, matriz A{m,k} de FP32 y matriz B{k,n} de FP32, respectivamente. Las matrices A y B pueden almacenarse en registros, en caché o en memoria en las realizaciones de la invención.
Los valores en las matrices A y B se cuantifican a continuación en las referencias 104 y 106. La cuantificación da como resultado las matrices A' y B', que contienen valores de 16 bits cuantificados para el valor correspondiente en las matrices A y B. Cada valor cuantificado se divide a continuación 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. Las operaciones aritméticas de números enteros se realizan en las referencias 122 a 128. En este ejemplo, las operaciones aritméticas de números enteros son productos entre las matrices. Pueden realizarse otras operaciones aritméticas (por ejemplo, uno o más de uno o más de adición, resta, multiplicación y división) en las referencias 122 a 128 también. Las operaciones de producto se realizan cuatro veces: A1 * B1, A1 * B2, A2 * B1, y A2 * B2. Las operaciones de producto pueden realizarse en serie o paralelo dependiendo de la implementación. Los números enteros resultantes de las referencias 122 a 128 se reconstruyen a continuación y se convierten de vuelta en FP32 descuantificando en la referencia 132.
Obsérvese que, las operaciones de producto como se muestran en las referencias 122 a 128 pueden acumularse a múltiples tiempos de longitud de bits de los valores de entrada, de modo que se mantiene la precisión de los resultados. En este ejemplo, los valores int8 de dos entradas (8 bits cada una) pueden acumularse en mínimamente 16 bits (preferentemente 24 o mayor) que el resultado de la operación aritmética, por lo tanto, los acumuladores que almacenan los resultados de las operaciones de producto están en la anchura de bits de al menos 2*8 = 16 bits para cada resultado de producto. La idea es que los acumuladores para almacenar los resultados de las operaciones aritméticas entre los valores de precisión inferior convertidos son lo suficientemente grandes de modo que la precisión de las operaciones aritméticas no se pierde en las realizaciones de la invención. Los circuitos de hardware de operación aritmética de números enteros (por ejemplo, circuitos de MAC y/o FMA) que implementan la acumulación/acumuladores no cumplen con las presentes normas del IEEE, pero la descomposición mixta-precisión de las operaciones permite que se realicen las realizaciones de la invención para realizar las operaciones aritméticas con una precisión superior.
Una medición del esfuerzo de cálculo es de complejidad computacional, que puede indicarse en notación O grande, O(x), donde x es el orden más alto de magnitud del trabajo. En este ejemplo, el procesador realiza las operaciones aritméticas cuatro veces, cada cálculo de número entero tiene la complejidad computacional de O(mnk). Es decir, el orden más alto de magnitud de los cálculos es una o más veces el de m*n*k (k productos para rrfn elementos de datos). A continuación, el procesador realiza la conversión de vuelta en FP32, que tiene la complejidad computacional de O(mn) para el cálculo de coma flotante. Si se realizara el producto entre las matrices A y B sin los procesos de cuantificación y reconstrucción en la referencia 104-132, el cálculo de coma flotante entre las matrices A y B tiene la complejidad computacional de O(mnk). Sin embargo, el cálculo de números enteros de O(mnk) puede ser diez veces o mayor (es decir, uno o más órdenes de magnitudes) más rápido que el cálculo de coma flotante de O(mnk). Por lo tanto, las operaciones mostradas en la Figura 1, incluso aunque se ejecutan los productos internos de números enteros cuatro veces más, pueden ser más eficientes que el producto de coma flotante sin los procesos de cuantificación y reconstrucción.
Obsérvese que, se cuantifican los valores de las matrices en la Figura 1 y, a continuación, se dividen en dos partes en este ejemplo. Las realizaciones de la invención incluyen dividir un valor cuantificado en más de dos partes como muestra el siguiente ejemplo. En algunas realizaciones, cada valor de FP32 (24 bits de precisión de significando) se divide en tres int8 que es preferible (3*8 bits = 24 bits). En general, el número de partes divididas puede depender de la exactitud deseada de la aproximación usando la cuantificación de los valores de coma flotante.
Puede cuantificarse un valor de coma flotante usando tantos bits como sea necesario para obtener la exactitud deseada. Por ejemplo, puede cuantificarse un valor de 17,1 en FP32 a un valor entero 17 usando int16 o incluso int8. Sin embargo, para conseguir una exactitud superior, las realizaciones de la invención pueden cuantificar el valor usando dos valores int16 o cuatro valores int8, ambos de los cuales usan 32 bits. La cuantificación puede cuantificar el valor en un número entero mayor usando un exponente menor. Los siguientes ejemplos ilustran la cuantificación y división de un valor de FP32 original en múltiples valores de números enteros.
Ejemplo 1: convertir un valor de FP32 en tres números enteros sin signo, uint8
Para la conversión, supóngase que el rango de los valores se encuentra dentro de [Minval, Maxval]. Por ejemplo, el rango de los valores de una matriz de datos puede ser [-19, 19], y tiene que cuantificarse el valor de 17,1 en FP32. La Figura 2A muestra el pseudocódigo para convertir un valor de FP32 en tres números enteros de 8 bits sin signo por una realización de la invención. En la referencia 202, se determina la escala, y está basada en el formato de números enteros (uint8) y el número de números enteros que van a usarse (tres). Por lo tanto, la escala es (Maxval -Minval)/(2A(longitud de número entero*el número de números 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 memoria.
A continuación, se establecen tres números como máscaras para obtener tres partes de valores de precisión inferior a partir del valor de FP32 cuantificado en la referencia 204. Los primeros_8_bits cogerán los primeros 8 bits únicamente, puesto que 255 tiene todo unos en binario (bits 0-7); los segundos_8_bits cogerán los 8 bits medios, puesto que 65280 tiene todo unos en los bits 8-15 y ceros en los bits 8-7; y los terceros_8_bits cogerán los terceros 8 bits únicamente, puesto que 16.711.680 tiene todo unos en los bits 16-23 y ceros en los bits 0-15.
En la referencia 206, se obtiene un valor intermedio, v = 17,1 -(-19) = 36,1. En la referencia 208, se cuantifica el valor intermedio, donde el valor cuantificado num = uint32_t 36,1/escala = 15.938.354. El valor cuantificado es un binario con 24 bits: [11110011] [00110011] [00110010], donde se añaden corchetes para mostrar la división de las tres partes. En la referencia 210, el valor intermedio cuantificado se separa en tres partes usando las máscaras definidas en la referencia 204. Para la segunda y tercera partes, los valores resultantes son los bits 8 y 16 bits desplazados a la derecha, de modo que son valores de 8 bits de manera que q1 = [00110010]; q2 = [00110011]; q3 = [11110011]. Los tres números enteros sin signo pueden usarse a continuación para hacer operaciones aritméticas con otros números enteros sin signo resultantes de la cuantificación de otro valor de FP32. Las operaciones aritméticas pueden usar los circuitos de operación aritmética de números enteros tales como circuitos de multiplicador-acumulador (MAC), donde cada valor de 8 bits se asigna al respectivo circuito de MAC basándose en su posición de parte, y se reconstruyen los resultados del cálculo como se ha analizado anteriormente en el presente documento. Aunque se usan máscaras para obtener las tres partes de los valores de precisión inferior en este ejemplo, uno puede usar también otras maneras para obtener los valores de precisión inferior. Por ejemplo, puede usarse también el desplazamiento bits y/o el truncamiento para obtener los valores de precisión inferior. Las realizaciones de la invención cubren diversas maneras de las que se obtienen/identifican los valores de precisión inferior.
Obsérvese que, la precisión de la cuantificación está basada en el valor de la escala, y cuanto menor es la escala, mejor son los resultados de aproximación de la cuantificación. El valor de escala está basado en varios factores: el intervalo de valores y el número de bits disponible. Cuanto menor es el rango y/o cuantos más bits están disponibles para la cuantificación, menor es la escala y mejor es la aproximación.
El valor de la escala puede proporcionarse por una instrucción para solicitar las operaciones aritméticas. Por ejemplo, la instrucción puede incluir, otro de los dos o más operandos, conteniendo cada uno 1D, matriz de 2D, matriz de 3D, u otra matriz dimensional de elementos de datos, uno o más operandos que especifican los rangos de las matrices. Como alternativa o, además, el procesador puede explorar los elementos de datos de las matrices después de recibir la instrucción y determinar los rangos.
Ejemplos 2-4: Convertir un valor de FP32 en diferentes números de números enteros
Los ejemplos 2-4 proporcionan más ejemplos de la cuantificación de un valor de FP32. La Figura 2B muestra el pseudocódigo para convertir un valor de FP32 en dos números enteros de 16 bits sin signo por 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 cuantificación probablemente da como resultado una aproximación mejor de la Figura 2A.
La Figura 2C muestra el pseudocódigo para convertir un valor de FP32 en tres números enteros de 8 bits con signo por 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) basándose en el rango del número entero de 8 bits con signo (del rango de números enteros con signo de [0, 28-1] al rango de números enteros con signo de [-27, 27-1]).
La Figura 2D muestra el pseudocódigo para convertir un valor de FP32 en cuatro números enteros de 8 bits sin signo por 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 número entero * 4 números enteros = 32) para la cuantificación, la escala es menor, por lo tanto, la cuantificación da como resultado probablemente en una mejor aproximación de la de la Figura 2A.
Aunque se usa FP32 en los ejemplos en las Figuras 2A-2D, pueden cuantificarse los valores en otros formatos de coma flotante tales como FP64, FP128 o FP256 usando el pseudocódigo similar. Por ejemplo, FP64 tiene 53 bits para su significando, usando siete números enteros sin signo de 8 bits (uint8s), podemos cubrir completamente la precisión del significando de FP64. La escala es un valor incluso menor: escala = (maxval - minval) / (2A(8*7)-1. En general, el número de bits disponible para la cuantificación se encuentra en o a través de la longitud de bits para el significando del respectivo formato de coma flotante. En algunas realizaciones, puede ser deseable usar intencionadamente una longitud de bits menor que la del significando del respectivo formato de coma flotante (por ejemplo, para conseguir un compromiso de calidad de servicio - menos exactitud que el formato de coma flotante original pero mucho más rápido).
Obsérvese que, cuando está disponible la rutina de software y es rápida, puede no ser necesaria la cuantificación usando las realizaciones de la invención. Por ejemplo, puede cuantificarse un valor de FP128 en una cadena de 8 largos de uint16s, pero la precisión de doble-doble de software o de cuádruple de software puede operar más rápido que las operaciones aritméticas usando la cadena de 8 largos de uint16s. La determinación de si la cuantificación y el uso de cuántos bits cuantificar puede depender de la circuitería de hardware disponible que realiza operaciones aritméticas de números enteros rápidas y de cuánto más rápido sea la circuitería de hardware. El aumento de la velocidad de magnitud de cálculo debe compensar el trabajo adicional requerido para realizar la cuantificación y reconstrucción como se analiza en el presente documento.
Ejemplo 5: reconstruir un valor de FP32 de cuatro números enteros con signo
Una vez que los múltiples valores de números enteros de la cuantificación y división realizan operaciones aritméticas, se reconstruyen para devolver un resultado final en el que estaba el formato de coma flotante que el valor inicial. La Figura 2E muestra el pseudocódigo para reconstruir un valor de FP32 de cuatro números enteros de 8 bits con signo por una realización de la invención. La escala permanece igual como otro ejemplo de conversión en cuatro números enteros sin signo en la Figura 2D, ya que se usa el mismo número de bits (32 bits) para la cuantificación y reconstrucción, incluso, aunque, en este punto, se usen números enteros con signo en la Figura 2E. El valor intermedio reconstruido es num, que se obtiene en la referencia 240 a través del ajuste del rango basándose en el rango de un número entero de 8 bits con signo (int8), y, a continuación, el desplazamiento de bits desde los cuatro números enteros con signo de las operaciones aritméticas corresponde a diferentes posiciones de bits de los resultados finales. El valor intermedio, que es un número entero representado por los 32 bits totales del resultado de las cuatro acumulaciones de 8 bits con signo, que ya puede ser los 32 bits, se convierte a continuación de vuelta al valor de FP32 usando el valor mínimo y la escala en la referencia 242.
Obsérvese que, en algunas realizaciones, cada una de las operaciones aritméticas en los valores de precisión inferior int8 pueden ya acumularse en un tipo int mayor, tal como el valor int32. Los valores int32 se combinan a continuación para formar el resultado para las operaciones aritméticas. A continuación, la reconstrucción a FP32 puede ser simplemente convertir los valores int32 en un valor correspondiente de FP32 (sin el desplazamiento de bits ilustrado en la Figura 2E).
Ajuste de carga de trabajo y exactitud: Coma flotante en números enteros
En los ejemplos relacionados con la Figura 1, se dividen dos matrices en dos pares de términos y al multiplicar matrices con ellos, se obtiene cuatro veces la cantidad de trabajo a través de las operaciones de números enteros mostradas en una de las referencias 122-128. Sin embargo, puesto que las operaciones aritméticas en los números enteros pueden ejecutarse significativamente más rápido que las mismas operaciones aritméticas en coma flotante en alguna arquitectura informática, puede ser más eficiente realizar la conversión y reconstrucción adicional que hacer las operaciones aritméticas a través de los valores de coma flotante originales. Adicionalmente, puede omitirse alguna de las operaciones de números enteros para hacer las realizaciones de la invención más eficientes.
Usándose diferente número de números enteros para convertir una coma flotante, resultan diferentes números de términos de las operaciones matriciales entre dos matrices. Por ejemplo, si se usan dos números enteros para dividir cada elemento de datos de una matriz, se realizan cuatro veces las multiplicaciones para una multiplicación de matriz (como se muestra en las referencias 122-128). Si se usan tres números enteros, se realizan nueve veces la multiplicación, y si se usan cuatro números enteros 16 veces. Puesto que pueden realizarse los circuitos de hardware aritméticos de números enteros (por ejemplo, circuitos de MAC) a precisión (sin ninguna pérdida de exactitud de las operaciones aritméticas), el cálculo con la carga de trabajo completa puede ser muy exacta (perdiendo únicamente la exactitud en la etapa de cuantificación). Sin embargo, si sacrificamos algo de exactitud en las operaciones aritméticas, podemos omitir alguna de las múltiples veces de carga de trabajo.
Por ejemplo, en la Figura 1, la cuantificación de A da como resultado la matriz A1 formada usando los 8 bits superiores y la matriz A2 usando los 8 bits inferiores, y la cuantificación de B da como resultado la matriz B1 formada usando los 8 bits superiores y la matriz B2 usando los 8 bits inferiores. La carga de trabajo puede expresarse como int8x2_4p, donde "int8x" indica operaciones int8, "2" indica que cada valor de FP32 se divide en dos valores int8, y "4p" indica que están incluidos cuatro términos en el cálculo. En lugar de las cuatro veces de la carga de trabajo con A1*B1, A1*B2, A2*B1, y A2*B2, podemos omitir la multiplicación para la porción menos significativa, la multiplicación entre los 8 bits inferiores, A2*B2. La carga de trabajo puede mostrarse como int8x2_3p (un término menor que int8x2_4p, que incluye A2*B2). Por lo tanto, en lugar de cuatro veces de la carga de trabajo, podemos ahorrar aproximadamente el 25 % de la carga de trabajo realizando la multiplicación para las tres porciones más significativas (a expensas de alguna pérdida de exactitud).
Para otro ejemplo, la cuantificación de A puede dar como resultado tres matrices, A1 a A3, cada una formada usando 8 bits desde los bits más significativos a los menos significativos (es decir, A1: bits 23-16; A2: bits 15-8; y A3: bits 7­ 0), y la cuantificación de B puede dar como resultado tres matrices, B1 a B3, cada una formada usando 8 bits desde los bits más significativos a 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 de una multiplicación matricial: 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 para la última porción menos significativa, la multiplicación entre los 8 bits más bajos, A3*B3, y obtener int8x3_8p
Adicionalmente, si deseamos eliminar carga de trabajo adicional, podemos eliminar la menor o más porciones significativas, reduciendo de esta manera la exactitud mientras se aumenta la velocidad de cálculo o reduciendo el uso de recursos de cálculo. Por ejemplo, podemos descartar los términos con los coeficientes que añaden 5 o más, por lo tanto, podemos descartar adicionalmente A2*B2 y A3*B2. Para aumentar adicionalmente la velocidad de cálculo o reducir el uso de recursos de cálculo, podemos descartar adicionalmente los términos con los coeficientes que añaden 4 o más: A1*B3, A2*B2, A3*B1. Cuantos más términos se descarten, menos exactos son los valores de coma flotante reconstruidos resultantes al aproximar los valores de coma flotante sin la cuantificación y reconstrucción, pero se realiza menos carga de trabajo. Las realizaciones de la invención proporcionan maneras para ajustar la carga de trabajo y la exactitud.
Una aplicación que usa 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 carga de trabajo, requisito de velocidad de cálculo, y un procesador que implementa las realizaciones de la invención puede determinar cómo cumplir los requisitos de QoS. Por ejemplo, el procesador puede determinar (1) cuántos números enteros, (2) la longitud de bits de cada uno de los números enteros, (3) si los números enteros son con signo o sin signo, y/o (4) con cuántos términos ejecutar las operaciones aritméticas. La determinación puede estar basada en la instrucción recibida. La instrucción puede especificar, otro de los dos o más operandos conteniendo cada uno una matriz de elementos de datos, uno o más operandos que especifican uno o más de (1) a (4). Obsérvese que, la determinación de (1) a (2) también contribuye al cálculo de la escala analizada en el presente documento anteriormente con relación al Ejemplo 1.
La determinación por el procesador puede determinarse también internamente sin la especificación por la instrucción en algunas realizaciones. El procesador puede determinar (1) a (4) basándose en los recursos informáticos disponibles (por ejemplo, circuiterías disponibles, ancho de banda requerido y/o espacio de almacenamiento en registro/caché/memoria para las operaciones aritméticas requeridas). Obsérvese que, las operaciones aritméticas internas que incluyen la conversión y la reconstrucción son invisibles para una aplicación usando algunas realizaciones de la invención.
A través de todo el ajuste opcional, en algunas realizaciones de la invención, una aplicación puede tener más de las opciones analizadas anteriormente: usando comas flotantes en las operaciones aritméticas (que pueden ser exactas, pero lentas), usando la cuantificación para cuantificar cada valor de coma flotante en un único número entero (que puede ser impreciso, pero rápido), o usando cuantificación para cuantificar cada valor de coma flotante en múltiples números enteros, ejecutando operaciones aritméticas de números enteros y reconstruyendo de vuelta en comas flotantes (que pueden ser rápidas y comparativamente exactas o incluso más exactas que las comas flotantes originales). Las realizaciones de la invención proporcionan otro mando para ajustar la carga de trabajo para adecuar los requisitos de QoS de una aplicación y/o hacer un mejor uso de los recursos de computación disponibles de un procesador.
Obsérvese que, los resultados cuantificados en las realizaciones de la invención pueden almacenarse para la ejecución de instrucciones en desorden. Por ejemplo, si se cuantifican los valores de una matriz A en una primera instrucción, los resultados cuantificados pueden almacenarse en un registro en el PRF. Cuando una segunda instrucción posterior también usa la matriz A, los resultados cuantificados almacenados de la matriz A pueden obtenerse a partir del registro y no es necesaria la cuantificación repetida.
Exactitud de la coma flotante en el enfoque de números enteros en comparación con los enfoques anteriores
Como se analiza en el presente documento anteriormente, sin las realizaciones de la invención, pueden ejecutarse operaciones aritméticas en coma flotante, que puede ser exacto pero lento. Pueden ejecutarse también las operaciones aritméticas en números enteros, donde cada valor de coma flotante se cuantifica en un único número entero (en contraste a cuantificar usando múltiples números enteros en las realizaciones de la invención), que es menos exacto pero rápido. Usando las realizaciones de la invención, por otra parte, puede proporcionarse tanto exactitud como velocidad u ofrecer un compromiso de exactitud y velocidad deseado. La prueba usando valores pseudo-aleatorios confirma las características de las realizaciones de la invención.
La Figura 3 muestra la exactitud de datos de una realización de la invención usando coma flotante en un enfoque de múltiples números enteros en comparación con enfoques anteriores. Los datos de entrada son un valor pseudoaleatorio de precisión sencilla entre [0, 1]. El eje x es el número de productos escalares consecutivos realizado (puede denominarse como el tamaño del problema), y el eje y es la exactitud de los datos resultantes. Como se esperaría, cuantos más productos escalares se realicen, menos exactos serán los datos resultantes, ya que cada producto escalar de coma flotante puede mantener únicamente un número limitado de bits. Por ejemplo, FP32 tiene 24 bits para la precisión de significando, por lo que se truncan los resultados del producto escalar de más de 24 bits, lo que da como resultado una exactitud inferior. Cuantos más resultados se acumulen en el eje de izquierda a derecha, menos exactos se muestran los datos resultantes.
La exactitud de línea de base de los productos escalares se muestra en la referencia 302. Los datos no se cuantifican, y se realizan los productos escalares usando los datos de entrada en FP32. La precisión de los productos escalares es mejor que lo que se muestra en la referencia 304, donde cada dato se cuantifica en un número entero int16 único. Esto no es sorprendente, dada la pérdida de exactitud debido a la cuantificación.
La referencia 306 muestra la precisión de los productos escalares usando una realización de la invención, donde cada valor se cuantifica en dos números enteros int16. La exactitud de la realización de la invención es mejor no únicamente en comparación con la cuantificación de los valores sencillos, sino también comparando con la no cuantificación. La mejora de la realización de la invención sobre el enfoque de no cuantificación puede contribuirse a los errores intermedios al ejecutar productos escalares FP32 en este último. En este ejemplo, el resultado intermedio del primer producto escalar es una entrada al segundo producto escalar, y el resultado intermedio del segundo producto escalar es una entrada al tercer producto escalar. Cada uno de los resultados intermedios del producto escalar puede truncar un número de bits y, por lo tanto, perder algo de exactitud. En contraste, en el primero, puesto que se acumulan los números enteros int16 en un campo de acumulación más ancho (por ejemplo, 64 bits de un producto escalar en este ejemplo), los productos se hacen sin la pérdida de exactitud.
Es decir, algunas realizaciones de la invención pierden exactitud en la cuantificación inicial, pero posteriormente se realizan los productos escalares como productos escalares de números enteros, y los resultados intermedios son números enteros y los números enteros se almacenan en los acumuladores con una anchura de bits lo suficientemente larga, dando como resultado de esta manera ninguna pérdida de exactitud acumulativa. En general, cuando las operaciones aritméticas incluyen una serie de operaciones, los resultados intermedios se almacenan con una anchura de bits lo suficientemente larga para no perder exactitud en algunas realizaciones de la invención. Por ejemplo, el primer resultado intermedio del primer producto escalar de dos int16 se almacenará en un campo de acumulación de 32 bits (o más largo), 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 largo). Puesto que las operaciones aritméticas de cadena no pierden exactitud en estas realizaciones de la invención, la ventaja de estas realizaciones de la invención es más evidente cuando se realiza un número grande de operaciones aritméticas en secuencia.
Conversión de comas flotantes, cada una a múltiples comas flotantes de precisión inferior
Similar a la conversión de comas flotantes a números enteros, las realizaciones de la invención incluyen la conversión de valores de coma flotante, convirtiendo cada uno a múltiples valores de coma flotante de precisión inferior tal como bfloat16.
La Figura 4 muestra operaciones de conversión de valores en coma flotante, cada uno a múltiples comas flotantes de precisión inferior para operaciones aritméticas, y la reconstrucción de los valores resultantes de las operaciones aritméticas de vuelta a la coma flotante por una realización de la invención. El ejemplo convierte valores en FP32 a bfloatl 6, pero, por supuesto, otras conversiones de comas flotantes de precisión superior a comas flotantes de precisión inferior también pueden usar las realizaciones de la invención.
Las operaciones se inician en la referencia 402, y las operaciones son similares a las de la referencia 102 de la Figura 1 y, por lo tanto, el análisis relacionado no se repite en este punto. Cada uno de los valores se convierte, a continuación, en dos valores en formato bfloat16. En las referencias 404 y 406, se aproximan los valores en A y B en FP32 con los valores en formato bfloat16. Los valores de A1 y B1 (en formato bfloat16) son la aproximación de los de A y B (en formato FP32) y tienen precisión inferior que los de A y B, puesto que 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 significativos de los 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 coma flotante de bfloat16 de los dos pares de matrices: A1*B1, A1*B2, A2*B1, y A2*B2. Las operaciones de producto pueden realizarse en serie o paralelo dependiendo de la implementación. Los valores resultantes de las referencias 422 a 428 a continuación se reconstruyen y se convierten de vuelta en FP32 en la referencia 432.
Obsérvese que, las operaciones de producto como se muestra en las referencias 422 a 428 pueden acumularse a una longitud de bits múltiples veces la de los valores de entrada, similar al enfoque de coma flotante a números enteros analizado en el presente documento anteriormente. La anchura de bits de acumulación que es más ancha que la de los valores de entrada hace a la acumulación más precisa que el caso donde la anchura de bits de acumulación es igual a la 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 mayor como el 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 de FP32 (con precisión de significando de 24 bits). Por lo tanto, los resultados de las referencias 422 a 428 pueden ya estar 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 de vuelta. Los circuitos de hardware de operación aritmética de coma flotante (por ejemplo, circuitos de MAC y/o FMA) que implementan tal acumulación/acumuladores no cumplen con las presentes normas del IEEE, pero la descomposición mixta-precisión de las operaciones permiten que se realicen las realizaciones de la invención para realizar las operaciones aritméticas con una precisión superior.
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) (k productos para m x n elementos de datos), entonces el procesador realiza la conversión de vuelta en FP32, que tiene la complejidad computacional de O(mnk) para el cálculo de coma flotante de FP32. La complejidad computacional del uso de operaciones aritméticas bfloat16, que tienen cuatro veces la de O(mnk), parece que es peor que la complejidad computacional del uso de operaciones aritméticas FP32, que es O(mnk). Sin embargo, las operaciones aritméticas matriciales en las referencias 422-428 pueden realizarse usando circuiterías aritméticas especializadas para operaciones aritméticas bfloat16, y estas circuiterías aritméticas float16 pueden ejecutarse en uno o más órdenes de magnitud más rápido que una unidad/circuito de hardware de coma flotante clásico que usa FP32. Por lo tanto, puede ser más eficiente realizar operaciones en la Figura 4 (que incluyen convertir los valores FP32, cada uno a múltiples valores bfloat16, a continuación, usar bfloat16 para ejecutar operaciones aritméticas, y a continuación convertirlas de vuelta a valores FP32) que realizar operaciones aritméticas en los valores FP32.
Obsérvese que, la conversión a los valores de precisión inferior, el rendimiento de las operaciones aritméticas y la reconstrucción pueden no cumplir con las normas del Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) para la representación de valores, tales como las normas IEEE 754. Sin embargo, la serie de operaciones aritméticas en los valores de precisión inferior pueden aprovechar la unidad de hardware aritmética.
Ejemplos 6 y 7: convertir un valor de FP32 en múltiples valores bfloat16 y reconstruir unos valores FP32 a partir de múltiples valores bfloat16
En la Figura 4, cada valor de 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 de FP32 en dos valores de bfloat16 por una realización de la invención. En la referencia 502, el valor de FP32 x se aproxima usando un valor bfloat16 b1. En la referencia 504, el resto del valor x restado por b1 se establece a un valor de FP32 tmp. A continuación, en la referencia 506, el valor de FP32 tmp se aproxima usando un valor bfloat16 b2. Los dos valores bfloat16, b1 y b2, se usan a continuación para las operaciones aritméticas entre las matrices (1D o 2D) como se analiza relacionad con la Figura 4.
Una vez que están completadas las operaciones aritméticas, pueden devolverse valores bfloat16. Por ejemplo, las operaciones en las referencias 422 a 428 pueden dar como resultado los 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 ha analizado en el presente documento anteriormente), y estos valores bfloat16 pueden convertirse de vuelta al formato FP32. La Figura 5B muestra el pseudocódigo para construir un valor de FP32 de dos valores de bfloat16 por una realización de la invención. La construcción del valor de FP32 x es simplemente para añadir los dos valores bfloat16 almacenados en formato FP32 como se muestra en la referencia 510.
Ajuste de carga de trabajo y exactitud: Coma flotante en comas flotante de precisión inferior Aunque las Figuras 4-5 muestran la conversión de un valor de FP32 en dos valores bfloatl 6, de manera evidente puede convertirse el valor de FP32 en más de dos valores bfloat16. La diferencia de usar diferente número de valores de bfloat16 por valor de FP32 es la complejidad computacional. Similar al enfoque de coma flotante en múltiples números enteros analizado en el presente documento, aunque se divide cada valor de FP32 en dos valores bfloat16, da como resultado cuatro veces multiplicaciones como se muestra en la Figura 4, dividiendo cada valor de FP32 en tres valores bfloat16 que da como resultado nueve veces multiplicaciones, y dividiendo cada valor de FP32 en cuatro valores bfloat16 da como resultado 16 veces multiplicaciones. Sin embargo, si sacrificamos algo de exactitud en las operaciones aritméticas, podemos omitir alguna de las múltiples veces de carga de trabajo.
Por ejemplo, podemos hacer referencia a los cuatro productos internos de las multiplicaciones bfloat16 de la siguiente manera:
bx2_4p: dado por A1 *B1 A1 *B2 A2*B1 A2*B2
donde "bx" indica las operaciones bfloat16, "2" indica que cada valor de FP32 se divide en dos valores bfloat16, y "4p" indica que están incluidos cuatro términos en el cálculo.
Para reducir la carga de trabajo, podemos omitir el término de orden inferior, A2*B2, de modo que la carga de trabajo se vuelve de la siguiente manera:
bx2_3p: dado por A1 *B1 A1 *B2 A2*B1
De manera similar, la carga de trabajo para dividir cada valor de FP32 en tres valores bfloat16 puede mostrarse de la siguiente manera:
bx3_9p: dado por A1 *B1 A1 *B2 A1 *B3 A2*B1 A2*B2 A2*B3 A3*B1 A3*B2 A3*B3
Puede reducirse la carga de trabajo omitiendo el término de orden más bajo, A3*B3, es decir, descartando el término o términos con los coeficientes que suman 6:
bx3_8p: dado por A1 *B1 A1 *B2 A1 *B3 A2*B1 A2*B2 A2*B3 A3*B1 A3*B2
La carga de trabajo puede reducirse adicionalmente descartando los términos adicionales con los coeficientes que suman 5, A3*B2 y A2*B3 y que dan como resultado bx3_6p. El proceso puede continuar. Descartando más términos, se reduce la carga de trabajo, lo que puede aumentar la velocidad de cálculo y/o reducir el uso de recursos de cálculo a expensas de reducir la exactitud computacional. La Tabla 3 muestra una lista de selecciones de término ilustrativas cuando se convierten los valores de FP32 a bfloat16 o int8.
Tabla 3. Selecciones de término ilustrativas para la conversión de FP32 a bfloat16 e int8
Figure imgf000013_0001
Una aplicación que usa 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 carga de trabajo, requisito de velocidad de cálculo, y un procesador que implementa las realizaciones de la invención puede determinar cómo cumplir los requisitos de QoS. Por ejemplo, el procesador puede determinar (1) qué formato de coma flotante de precisión inferior usar (por ejemplo, bfloat16 u otro formato de precisión inferior con relación al formato de coma flotante original), (2) cuántos valores de precisión inferior de coma flotante usar para convertir el formato de coma flotante original, y/o (3) con cuántos términos ejecutar las operaciones aritméticas. La determinación puede estar basada en la instrucción recibida. La instrucción puede especificar, otro de los dos o más operandos conteniendo cada uno una matriz de elementos de datos, uno o más operandos que especifican uno o más de (1) a (3).
La determinación por el procesador puede determinarse también internamente sin la especificación por la instrucción en algunas realizaciones. El procesador puede determinar (1) a (3) basándose en los recursos informáticos disponibles (por ejemplo, circuiterías disponibles, ancho de banda requerido y/o espacio de almacenamiento en registro/caché/memoria para las operaciones aritméticas requeridas). Obsérvese que, las operaciones aritméticas internas que incluyen la conversión y la reconstrucción son invisibles para una aplicación usando estas realizaciones de la invención.
A través del ajuste opcional en algunas realizaciones de la invención, una aplicación puede tener más de las dos opciones analizadas anteriormente: usando las comas flotantes originales en las operaciones aritméticas (lo que puede ser exacto pero lento) o convertir cada valor de coma flotante original en múltiples valores de coma flotante de precisión inferior, que ejecutan operaciones aritméticas de números enteros, y reconstruir de vuelta en comas flotantes en el formato de coma flotante original (que puede ser rápido y comparativamente exacto o incluso más exacto). Las realizaciones de la invención proporcionan otro mando para ajustar la carga de trabajo para adecuar los requisitos de QoS de una aplicación y/o hacer un mejor uso de los recursos de computación disponibles de un procesador.
Obsérvese que, los resultados intermedios en las realizaciones de la invención pueden almacenarse para la ejecución de instrucciones en desorden. Por ejemplo, si los valores de una matriz A se dividen en dos valores de coma flotante de precisión inferior (por ejemplo, A1 y A2 en la Figura 4) en una primera instrucción, los valores de coma flotante de precisión inferior pueden almacenarse en un registro en el PRF (o en una caché o memoria). Cuando una segunda instrucción posterior también usa la matriz A, los valores de coma flotante de precisión inferior almacenados de la matriz A pueden obtenerse a partir del registro y no es necesaria cuantificación repetida.
Exactitud de la coma flotante en múltiples enfoques de coma flotante de precisión inferior en comparación con enfoques anteriores
Como se analiza en el presente documento anteriormente, sin realizaciones de la invención, pueden ejecutarse operaciones aritméticas en el formato de coma flotante original, que puede ser exacto pero lento. Pueden ejecutarse también las operaciones aritméticas en formato de coma flotante de precisión inferior, donde cada valor de coma flotante original se aproxima usando un valor de coma flotante de precisión inferior (en contraste a usar múltiples valores de coma flotante de precisión inferior para el único valor de coma flotante original en las realizaciones de la invención), que es menos exacto pero rápido. Usando las realizaciones de la invención, por otra parte, puede proporcionarse tanto exactitud como velocidad u ofrecer un compromiso de exactitud y velocidad deseado. La prueba usando valores pseudo-aleatorios confirma las características de las realizaciones de la invención.
La Figura 6 muestra la exactitud de datos de una realización de la invención que usa un enfoque de coma flotante en múltiples comas flotantes de precisión inferior en comparación con enfoques anteriores. La distribución de la Figura 6 es similar a la de la Figura 3 y los datos originales son valores pseudoaleatorios en FP64 en el intervalo de [-1,0, 1,0] como se explica en la referencia 650.
La exactitud de línea de base del producto escalar del FP32 original (según se mide en la exactitud de FP64) se muestra en la referencia 602. Similar a la Figura 3, se realizan los productos escalares más consecutivos, el menos exacto es el resultado y la curva se mueve a la exactitud inferior a medida que aumenta el tamaño del problema (hacia arriba de izquierda a derecha en la Figura). En comparación, cada valor de FP32 original puede convertirse a un único valor bfloat16, y debido a la precisión inferior de bfloat16, la curva de exactitud en la referencia 604 es notablemente peor que la de FP32, como se explica en la referencia 652.
Puede dividirse cada valor de FP32 en dos valores bfloat16 y usar todos los cuatro términos de los productos escalares (similar a los cuatro términos analizados anteriormente: A1*B1, A1*B2, A2*B1, y A2*B2). La curva de exactitud en la referencia 612, indicada como bx2_4p escalar, es el resultado. Los productos escalares pueden omitir el término de orden más bajo (por ejemplo, A2*B2), que da como resultado la curva de exactitud en la referencia 614 (indicada como bx2_3p). Comprensiblemente, la exactitud de bx2_4p escalar es mejor que la exactitud de bx2_3p, y ambas no son tan exactas como la línea de base de FP32. La peor exactitud de bx2 frente a la línea de base también es lógico, puesto que cada bfloat16 tiene una precisión de significando de 8 bits, dos bfloat16 tienen precisión de significando de 16 bits en total. En comparación, cada FP32 tiene precisión de significando de 24 bits, usando, por lo tanto, dos valores bfloat16 para representar un valor de FP32 que puede provocar una pérdida de precisión significativa. La pérdida de exactitud en la conversión inicial provoca la exactitud inicial de la conversión y reconstrucción menor que la de línea de base.
Puede dividirse también cada valor de FP32 en tres bfloat16 y usar todos los nueve términos de los productos escalares (similar a los cuatro términos anteriormente analizados: A1 *B1, A1 *B2, A1 *B3, A2*B1, A2*B2, A2*B3, A3*B1, A3*B2 y A3*B3). La curva de exactitud en la referencia 622, indicada como bx3_9p escalar, 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), que da como resultado la curva de exactitud en la referencia 624 (indicada como bx3_6p). Comprensiblemente, la exactitud de bx3_9p escalar es mejor que la exactitud de bx3_6p.
Sin embargo, puede parecer contradictorio que se muestre la exactitud tanto de bx3_9p como de bx3_6p mejor que la exactitud de línea de base de FP32. Después de un examen más cercano, la mejora de exactitud también es lógica. Tres bfloat16 tienen precisión de significando de 24 bits en total, por lo tanto, la conversión de un valor de FP32 (que también tiene precisión de significando de 24 bits) a tres valores bloat16 no pierde exactitud. Durante los productos escalares consecutivos usando los valores FP32 originales, los errores intermedios se acumulan como se ha analizado en el presente documento anteriormente relacionado con la Figura 3. En contraste, la conversión de un valor de FP32 a tres valores bfloat16 puede realizarse sin perder exactitud, y los productos escalares que usan bfloat16 pueden mantener mejor exactitud durante las operaciones aritméticas intermedias, puesto que los acumuladores para los resultados de operación aritmética intermedia tienen una mejor anchura de bits que es múltiples veces la de los valores de entrada (por ejemplo, precisión de significando de 8 bits de los valores de entrada bfloat16 frente a precisión de significando de 24 bits del acumulador FP32 para almacenar los resultados de operación aritmética intermedia). Por lo tanto, la precisión de bx3_9p y bx3_6p es mejor que la de FP32 original. En ese caso, las realizaciones de la invención pueden conseguir tanto mejor exactitud como una velocidad de ejecución rápida (asumiendo que el bfloat16 especializado se ejecuta uno o dos órdenes de magnitud más rápido que FP32).
Algunas realizaciones de la invención
La Figura 7A es un diagrama de flujo que muestra operaciones aritméticas que incluyen convertir valores en coma flotante en múltiples valores de precisión inferior y reconstruir los valores resultantes de las operaciones aritméticas de vuelta a la coma flotante por una realización de la invención. El método 700 puede realizarse en un procesador, que contiene circuitería de decodificación y circuitería de ejecución. En la referencia 702, la circuitería 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 coma flotante. La instrucción puede especificar al menos dos operandos, incluyendo cada uno un parámetro o más 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 van a realizarse. Adicionalmente, el código de operación y/o el operando pueden indicar los valores de la pluralidad de operandos que están en el formato de coma flotante.
Por ejemplo, cada uno de los operandos pueden indicar un vector (matriz 1D), una matriz (matriz 2D) que está en un formato de coma flotante. Cada operando puede indicar también un tensor multidimensional (objetos geométricos que describen relaciones lineales entre vectores geométricos, escalares y otros tensores) o escalar en un formato de coma flotante también. El formato de coma flotante puede ser uno de la norma FP16, FP32, FP64, FP128 o FP256, o un formato de coma flotante propietario que tiene su propia definición de anchura de exponente, precisión de significando y/o bit de signo. Cada vector o matriz puede contener múltiples elementos de datos, y cada uno estar almacenado en una o más unidades de almacenamiento tales como registros, cachés o memoria informática. El operando puede apuntar a las ubicaciones de las unidades de almacenamiento (por ejemplo, memoria, caché o registro) de modo que la circuitería de decodificación puede obtener los elementos de datos del vector o matriz. Las operaciones aritméticas pueden ser uno o más de adición, resta, multiplicación y división en los elementos de datos.
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 la exactitud de operaciones aritméticas (el nivel de exactitud esperado de mantener después de las operaciones aritméticas requeridas por la instrucción), limitación de carga de trabajo (los recursos informáticos esperados a consumir durante las operaciones aritméticas), el requisito de velocidad de cálculo (el tiempo de ejecución esperado para completar las operaciones aritméticas). El requisito de QoS determina cómo la circuitería de ejecución ejecuta la instrucción decodificada en una realización. Adicionalmente o, como alternativa, el código de operación puede especificar uno o más requisitos de calidad de servicio (QoS) para las operaciones aritméticas en una realización. Adicionalmente, el código de operación y uno o más operandos adicionales pueden especificar la longitud de bits acumulados para almacenar los resultados de la operación aritmética (por ejemplo, la longitud de bits que son las múltiples veces de los valores de entrada como se ha analizado en el presente documento anteriormente).
En la referencia 704, la circuitería de ejecución ejecuta la instrucción decodificada. La ejecución incluye convertir valores para cada operando, convirtiéndose cada valor en una pluralidad de valores de precisión inferior en la referencia 712, donde ha de almacenarse un exponente para cada operando. El exponente para cada operando puede almacenarse en un registro, en una caché o en la memoria. En una realización, los valores de precisión inferior están en un formato de números enteros tal como int4, int8, int16, int32, int64, int128 u otro número entero de n bits. El formato de números enteros tiene menos bits que los bits de precisión de significando del formato de coma flotante usado por el vector o matriz. En otra realización, los valores de precisión inferior están en otro formato de coma flotante que tiene menos bits que los bits de precisión de significando del formato de coma flotante usado por el vector o matriz. Cando los valores de precisión inferior están en el otro formato de coma flotante de precisión inferior, el exponente almacenado es el de los valores de precisión inferior para el operando.
El número de los valores de precisión inferior convertidos por valor puede depender del operando adicional para el requisito de QoS en una realización. Por ejemplo, cuando se espera que la exactitud de las operaciones aritméticas sea alta, cada valor puede convertirse a más valores de precisión inferior (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). Adicionalmente, cuando están disponibles más recursos informáticos para la ejecución, cada valor puede convertirse también a más valores de precisión inferior. Adicionalmente, cuando se espera que el tiempo de ejecución sea corto (por ejemplo, menor que un umbral especificado o indicación genérica de una ejecución rápida), cada valor puede convertirse a menos valores de precisión inferior.
La ejecución incluye además realizar operaciones aritméticas entre valores de precisión inferior convertidos de valores para la pluralidad de los operandos en la referencia 714. Las operaciones aritméticas incluyen las mostradas en las Figuras 1 y 4 y analizadas en los párrafos relacionados en el presente documento anteriormente. Las operaciones aritméticas pueden realizarse en circuitos especializados a operaciones aritméticas específicas. Por ejemplo, cuando la circuitería de ejecución comprende uno o más circuitos de multiplicador-acumulador (MAC) especializados, y el uno o más circuitos de MAC especializados tienen que realizar operaciones de multiplicación-acumulación de números enteros. En una realización, cada circuito de MAC es un circuito de multiplicación adición fusionado (FMA). Los circuitos pueden estar especializados a valores de coma flotante de precisión baja en formato bfloat16 en una realización. Por ejemplo, se han creado circuitos especializados para operaciones aritméticas bfloat16 en aplicaciones de aprendizaje automático (ML) e inteligencia artificial (IA).
El número de las operaciones aritméticas puede depender del operando adicional para el requisito de QoS en una realización. Por ejemplo, cuando se espera que la exactitud de las operaciones aritméticas sea alta, se realizan más operaciones aritméticas; y, cuando se espera que la exactitud de las operaciones aritméticas sea inferior, se omiten algunas operaciones (por ejemplo, en lugar de realizar los cuatro términos de productos internos para obtener una exactitud alta en la Figura 1, puede omitirse el orden más bajo dando como resultado, por lo tanto, una exactitud inferior). Adicionalmente, cuando se espera que los recursos informáticos que van a consumirse sean altos, se realizan más operaciones aritméticas. Adicionalmente, cuando se espera que el tiempo de ejecución sea corto (inferior a un umbral especificado o 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).
La ejecución incluye adicionalmente generar un valor de coma flotante convirtiendo un valor resultante de las operaciones aritméticas en el formato de coma flotante y almacenando el valor de coma flotante en la referencia 716. La generación del valor de coma flotante incluye las reconstrucciones mostradas en las Figuras 1 y 4 y analizadas en los párrafos relacionados en el presente documento anteriormente. El valor de coma flotante puede almacenarse en una ubicación especificada por la instrucción (por ejemplo, memoria, caché o registro). En una realización, el valor de coma flotante se almacena en una ubicación que tiene almacenados los operandos de entrada.
La Figura 7B es un diagrama de flujo que muestra la conversión de valor de valores en coma flotante a múltiples valores de precisión inferior por una realización de la invención. Las operaciones pueden ser una realización de las operaciones en la referencia 712 de la Figura 7A.
Cuando la conversión de valores es convertir cada valor en números enteros, se cuantifica cada valor en el formato de coma flotante en la referencia 722. La cuantificación incluye determinar el exponente para el operando basándose en un rango de valores de los valores y la pluralidad de valores de números enteros en la referencia 732.
En una realización, la cuantificación incluye determinar el exponente para el operando basándose en el rango de valores de los valores y la pluralidad de valores de precisión inferior en la referencia 732, siendo cada uno un valor entero. A continuación, en la referencia 734, se cuantifica cada valor en un valor entero basándose en el rango de valores (por ejemplo, el valor num en los Ejemplos 1-4). La cuantificación se analiza en más detalle en relación con los Ejemplos 1-4 en el presente documento anteriormente.
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 coma flotante. Por lo tanto, la cuantificación puede usar el rango de valores de la instrucción en la realización. En otra realización, el rango de los valores no se proporciona por la instrucción, y el rango se determina basándose en examinar todos los valores para los operandos. Por ejemplo, el procesador puede explorar todos los elementos de datos identificados por un operando y determinar el rango del operando.
En la referencia 723, cada valor (los valores originales o los resultantes de la cuantificación de los valores originales) se representa usando una pluralidad de bits que incluyen al menos un primer y segundo número de bits. En la referencia 724, se identifica el primer número de bits dentro la pluralidad de bits para un primer valor de precisión inferior para aproximar cada valor; y, en la referencia 724, se identifica el segundo número de bits que no está solapando con el primer número de bits para un segundo valor de precisión inferior que representa un resto de la aproximación del primer valor de precisión inferior, donde se usa el primer y segundo valores de precisión inferior para realizar las operaciones aritméticas con valores de precisión inferior de uno o más operandos distintos. Las Figuras 1 2 proporcionan ejemplos de la identificación del primer y segundo números de bits para el enfoque de conversión a números enteros, y las Figuras 4-5 proporcionan ejemplos similares para la conversión al enfoque de coma flotante de precisión inferior.
Usando realizaciones de la invención, puede ejecutarse la Multiplicación de Matriz-Matriz General (GEMM) y otras operaciones aritméticas de vector/matriz de manera más eficiente, y con opciones de exactitud ajustables. Los enfoques de conversión y reconstrucción en las realizaciones de la invención pueden aplicarse a aprendizaje automático (ML) e inteligencia artificial (IA), aplicaciones de cálculo de alto rendimiento (HPC) y otras aplicaciones. Por ejemplo, los valores originales en vectores y matrices pueden convertirse a los valores de precisión inferior, y se usan los valores de precisión inferior 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 especializado para estas operaciones aritméticas. Los valores de precisión inferior pueden usar los circuitos de hardware para generar pesos para una red neuronal; y pueden usar también los mismos o diferentes circuitos de hardware para generar valores de entrada a una función de activación. Una vez que las operaciones aritméticas aprovechan los circuitos de hardware, los valores resultantes pueden convertirse a continuación de vuelta en el formato de coma flotante original.
Adicionalmente, usar circuitos de hardware para realizar las operaciones aritméticas en formatos de coma flotante de precisión superior (por ejemplo, FP128, FP256, etc.) puede ser costoso y poco práctico en algunas arquitecturas informáticas. Las realizaciones de la invención pueden convertir valores a un formato de coma flotante de precisión superior, cada uno a un gran número de valores en un formato de precisión inferior (por ejemplo, int4, int8, bfloat16), y realizar las operaciones aritméticas en el formato de precisión inferior. Los resultados en el formato de precisión inferior pueden reconstruirse a continuación en el formato de coma flotante de precisión superior como se analiza en las Figuras 1-7. Por lo tanto, las realizaciones de la invención pueden aliviar la necesidad de crear circuitos de hardware para realizar las operaciones aritméticas en formatos de coma flotante de precisión superior.
Arquitecturas de procesador y tipos de datos ilustrativos
La Figura 8A es un diagrama de bloques que muestra tanto una canalización en orden ilustrativa como una canalización de cambio de nombre de registro, emisión/ejecución fuera de orden ilustrativa de acuerdo con realizaciones de la invención. La Figura 8B es un diagrama de bloques que muestra tanto una realización ilustrativa de un núcleo de arquitectura en orden como un núcleo de arquitectura de cambio de nombre de registro, emisión/ejecución fuera de orden ilustrativo a incluir en un procesador de acuerdo con realizaciones de la invención. Los recuadros con líneas de trazo continuo en las Figuras 8A-B muestran la canalización en orden y el núcleo en orden, mientras que la adición opcional de los recuadros con líneas de trazo discontinuo muestra la canalización y el núcleo de cambio de nombre de registro, emisión/ejecución fuera de orden. Debido a que el aspecto en orden es un subconjunto del aspecto fuera de orden, se describirá el aspecto fuera de orden.
En la Figura 8A, una canalización de procesador 800 incluye una etapa de recuperación 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 programació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 escritura no simultánea/escritura en memoria 818, una etapa de manejo de excepciones 822 y una etapa de confirmación 824. Cada etapa puede incluir circuitería para realizar las operaciones en la etapa, y la circuitería puede denominarse circuitería de recuperación, circuitería de decodificación, circuitería de planificación, circuitería de ejecución, y, etc., para indicar que se usan circuitos de hardware para implementar estas etapas.
La Figura 8B muestra el núcleo de procesador 890 que incluye una unidad de extremo frontal 830 acoplada a una unidad de motor de ejecución 850, y ambas se acoplan a una unidad de memoria 870. El núcleo 890 puede ser un núcleo de informática de conjunto de instrucciones reducido (RISC), un núcleo de informática de conjunto de instrucciones complejo (CISC), un núcleo de palabras de instrucción muy largas (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 fin especial, tal como, por ejemplo, un núcleo de red o de comunicación, un motor de compresión, un núcleo de coprocesador, un núcleo de unidad de procesamiento de gráficos informáticos de fin general (GPGPU), un núcleo de gráficos o similares.
La unidad de extremo frontal 830 incluye una unidad de predicción de ramal 832 acoplada a una unidad de memoria caché de instrucciones 834, que se acopla a una memoria intermedia de traducción adelantada (TLB) de instrucciones 836, que se acopla a una unidad de recuperación de instrucciones 838, que se acopla a una unidad de decodificación 840. La unidad de decodificación 840 (o decodificador) puede decodificar instrucciones y generar como una 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, o que reflejan de otro modo, o se derivan de, las instrucciones originales. La unidad de decodificación 840 se puede implementar usando diversos mecanismos diferentes. Ejemplos de mecanismos adecuados incluyen, pero sin limitación, tablas de búsqueda, implementaciones de hardware, matrices lógicas programables (PLA), memorias de solo lectura de microcódigo (ROM), 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 otra manera, dentro de la unidad de extremo frontal 830). La unidad de decodificación 840 se acopla a una unidad de cambio de nombre/asignación 852 en la unidad de motor de ejecución 850.
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 unidad o más unidades de planificador 856. La unidad o unidades del planificador 856 representan cualquier número de diferentes planificadores, que incluyen estaciones de reserva, ventana de instrucción central, etc. La unidad o unidades del planificador 856 están acopladas a la unidad o unidades de fichero o ficheros de registro físico 858. Cada una de las unidades de fichero o ficheros de registro físico 858 representa uno o más ficheros de registro físico, unos diferentes de los cuales almacenan uno o más tipos de datos diferentes, tales como entero escalar, coma flotante escalar, entero empaquetado, coma flotante empaquetada, entero vectorial, coma flotante vectorial, estado (por ejemplo, un puntero de instrucción que es la dirección de la siguiente instrucción a ejecutar), etc. En una realización, la unidad de fichero o ficheros físicos 858 comprende una unidad de registro vectorial, una unidad de registros de máscara de escritura y una unidad de registros escalar. Estas unidades de registro pueden proporcionar registros de vector arquitectónicos, registros de máscara de vector y registros de fin general. La unidad o unidades de fichero o ficheros de registro físico 858 son solapadas por la unidad de retiro 854 para mostrar diversas formas en las que se pueden implementar un cambio de nombre de registro y una ejecución fuera de orden (por ejemplo, usando una memoria intermedia o memorias intermedias de reordenación y un fichero o ficheros de registro de retiro; usando un fichero o ficheros futuros, una memoria o memorias de historial y un fichero o ficheros de registro de retiro; usando mapas de registro y una agrupación de registros; etc.). La unidad de retiro 854 y la unidad o unidades de fichero o ficheros de registro físico 858 se acoplan a la agrupación o agrupaciones de ejecución 860. La agrupación o agrupaciones 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 diversas operaciones (por ejemplo, desplazamientos, suma, resta, multiplicación) y sobre diversos tipos de datos (por ejemplo, coma flotante escalar, entero empaquetado, coma flotante empaquetada, entero vectorial, coma flotante vectorial). Aunque algunas realizaciones pueden incluir un número de unidades de ejecución especializadas a funciones o conjuntos de funciones específicos, otras realizaciones pueden incluir solo una unidad de ejecución o múltiples unidades de ejecución que realizan, todas ellas, todas las funciones. La unidad o unidades de planificador 856, la unidad o unidades de fichero o ficheros de registro físico 858 y la agrupación o agrupaciones de ejecución 860 se muestran como que son posiblemente una pluralidad debido a que ciertas realizaciones crean canalizaciones separadas para ciertos tipos de datos/operaciones (por ejemplo, una canalización de entero escalar, una canalización de coma flotante escalar/entero empaquetado/coma flotante empaquetada/entero vectorial/coma flotante vectorial y/o una canalización de acceso a memoria que tienen, cada una, su propia unidad de planificador, unidad de fichero o ficheros de registro físico y/o agrupación de ejecución - y, en el caso de una canalización de acceso a memoria separada, se implementan ciertas realizaciones en las que solo la agrupación de ejecución de esta canalización tiene la unidad o unidades de acceso a memoria 864). También se debería entender que, cuando se usan canalizaciones separadas, una o más de estas canalizaciones pueden ser de emisión/ejecución fuera de orden y, el resto, en orden.
El conjunto de unidades de acceso a memoria 864 se acopla a la unidad de memoria 870, que incluye una unidad de TLB de datos 872 acoplada a una unidad de memoria caché de datos 874 acoplada a una unidad de memoria caché de nivel 2 (L2) 876. En una realización ilustrativa, 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 se acopla a la unidad de TLB de datos 872 en la unidad de memoria 870. La unidad de memoria caché de instrucciones 834 se acopla adicionalmente a una unidad de memoria caché de nivel 2 (L2) 876 en la unidad de memoria 870. La unidad de memoria caché de L2876 se acopla a uno o más niveles de memoria caché y, finalmente, a una memoria principal.
A modo de ejemplo, la arquitectura de núcleo de cambio de nombre de registro, emisión/ejecución fuera de orden ilustrativa puede implementar la canalización 800 como sigue: 1) la recuperación de instrucciones 838 realiza las etapas de recuperación y de 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 cambio de nombre/asignación 852 realiza la etapa de asignación 808 y la etapa de cambio de nombre 810; 4) la unidad o unidades de planificador 856 realizan la etapa de planificación 812; 5) la unidad o unidades de fichero o ficheros de registro físico 858 y la unidad de memoria 870 realizan la etapa de lectura de registro/lectura de memoria 814; la agrupación de ejecución 860 realiza la etapa de ejecución 816; 6) la unidad de memoria 870 y la unidad o unidades de fichero o ficheros de registro físico 858 realizan la etapa de escritura no simultánea/escritura en memoria 818; 7) diversas unidades pueden estar implicadas en la etapa de manejo de excepciones 822; y 8) la unidad de retiro 854 y la unidad o unidades de fichero o ficheros de registro físico 858 realizan la etapa de confirmación 824.
El núcleo 890 puede soportar uno o más conjuntos de instrucciones (por ejemplo, el conjunto de instrucciones de x86 (con algunas ampliaciones que se han añadido con versiones más nuevas); el conjunto de instrucciones MIPS de MIPS Technologies de Sunnyvale, CA; el conjunto de instrucciones ARM (con ampliaciones adicionales opcionales tales como NEON) de ARM Holdings de Sunnyvale, CA), incluyendo la instrucción o instrucciones descritas en el presente 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 del formato de instrucción apto para vectores genéricos (U=0 y/o U=1), descritas a continuación), permitiendo de esta manera que las operaciones usadas por muchas aplicaciones multimedia se realicen usando datos empaquetados.
Se debería entender que, el núcleo puede soportar múltiples hilos (ejecutar dos o más conjuntos paralelos de operaciones o hilos), y puede hacer esto de una diversidad de formas, incluyendo múltiples hilos segmentados en el tiempo, múltiples hilos simultáneos (en donde un único núcleo físico proporciona un núcleo lógico para cada uno de los hilos para los que ese núcleo físico está sometiendo a múltiples hilos simultáneamente), o una combinación de los mismos (por ejemplo, recuperación y decodificación segmentadas en el tiempo y múltiples hilos simultáneos a continuación de lo anterior, tal como en la tecnología Hyperthreading de Intel®).
Aunque el cambio de nombre de registros se describe en el contexto de una ejecución fuera de orden, se debería entender que el cambio de nombre de registros se puede usar en una arquitectura en orden. Aunque la realización ilustrada del procesador también incluye unidades de memoria caché de instrucciones y de datos 834/874 separadas y una unidad de memoria caché de L2 876 compartida, realizaciones alternativas pueden tener una única memoria caché interna tanto para instrucciones como para datos, tal como, por ejemplo, una memoria caché interna de nivel 1 (L1) o múltiples niveles de memoria caché interna. En algunas realizaciones, el sistema puede incluir una combinación de una memoria caché interna y una memoria caché externa que es externa al núcleo y/o al procesador. Como alternativa, toda la memoria caché puede ser externa al núcleo y/o al procesador.
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 recuadros con líneas de trazo continuo en la Figura 9 muestran un procesador 900 con un único 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 recuadros con líneas de trazo discontinuo muestra un procesador 900 alternativo con múltiples núcleos 902A-N, un conjunto de una unidad o más unidades de controlador de memoria integrado 914 en la unidad de agente de sistema 910 y la lógica de fin especial 908 (por ejemplo, lógica de gráficos integrados).
Por lo tanto, diferentes implementaciones del procesador 900 pueden incluir: 1) una CPU con la lógica de fin especial 908 que es una lógica de gráficos y/o científica (de capacidad de proceso) integrada (que puede incluir uno o más núcleos), y los núcleos 902A-N que son uno o más núcleos de fin general (por ejemplo, núcleos en orden de fin general, núcleos fuera de orden de fin general, una combinación de los dos); 2) un coprocesador con los núcleos 902A-N que son un gran número de núcleos de fin especial destinados principalmente a cálculos gráficos y/o científicos (de capacidad de proceso); y 3) un coprocesador con los núcleos 902A-N que son un gran número de núcleos en orden de fin general. Por lo tanto, el procesador 900 puede ser un procesador de fin general, un coprocesador o un procesador de fin 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 fin general), un coprocesador de muchos núcleos integrados (MIC) de capacidad de proceso alta (que incluye 30 o más núcleos), un procesador integrado o similar. El procesador se puede implementar en uno o más chips. El procesador 900 puede ser una parte y/o se puede implementar sobre uno o más sustratos usando cualquiera de un número de tecnologías de proceso, tales como, por ejemplo, BiCMOS, CMOS o NMOS.
La jerarquía de memoria incluye uno o más niveles de memoria caché dentro de los núcleos, un conjunto o una o más unidades de memoria caché compartidas 906 y memoria externa (no mostrada) acoplada al conjunto de unidades de controlador de memoria integrado 914. El conjunto de unidades de memoria caché compartidas 906 puede incluir una o más memorias caché de nivel medio, tales como de nivel 2 (L2), de nivel 3 (L3), de nivel 4 (L4) o de otros niveles de memoria caché, una memoria caché de último nivel (LLC) y/o combinaciones de las mismas. Aunque, en una realización, una unidad de interconexión basada en anillo 912 interconecta la lógica de fin especial 908, el conjunto de unidades de memoria caché compartidas 906 y la unidad de agente de sistema 910/unidad o unidades de controlador de memoria integrado 914, realizaciones alternativas pueden usar cualquier número de técnicas bien conocidas para interconectar tales unidades. En una realización, se mantiene la coherencia entre una o más unidades de memoria caché 906 y los núcleos 902-A-N.
En algunas realizaciones, uno o más de los núcleos 902A-N son aptas para múltiples hilos. El agente de sistema 910 incluye aquellos 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 alimentación (PCU) y una unidad de visualización. La PCU puede ser o incluir una lógica y unos componentes necesarios para regular el estado de alimentación de los núcleos 902A-N y la lógica de fin especial 908. La unidad de visualización es para accionar uno o más visualizadores conectados externamente.
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 solo un subconjunto de ese conjunto de instrucciones o un conjunto de instrucciones diferente.
Las Figuras 10-13 son diagramas de bloques de arquitecturas de ordenador ilustrativas. También son adecuados otros diseños y configuraciones de sistema conocidos en la técnica para portátiles, equipos de sobremesa, PC portátiles, asistentes digitales personales, estaciones de trabajo para ingeniería, servidores, dispositivos de red, concentradores de red, conmutadores, procesadores integrados, procesadores de señales digitales (DSP), dispositivos de gráficos, dispositivos de videojuegos, decodificadores de salón, microcontroladores, teléfonos celulares, reproductores de medios portátiles, dispositivos de mano y diversos otros dispositivos electrónicos. En general, son generalmente adecuados una enorme diversidad 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.
Haciendo referencia a continuación a la Figura 10, se muestra un diagrama de bloques 1000 de un sistema de acuerdo con una realización de la presente invención. El sistema 1000 puede incluir uno o más procesadores 1010, 1015, que se acoplan a un concentrador de controlador 1020. En una realización, el concentrador de controlador 1020 incluye un concentrador de controlador de memoria de gráficos (GMCH) 1090 y un Concentrador de Entrada/Salida (IOH) 1050 (que pueden estar en chips separados); el GMCH 1090 incluye controladores de memoria y de gráficos a los que se acoplan la memoria 1040 y un coprocesador 1045; el IOH 1050 acopla a los dispositivos de entrada/salida (E/S) 1060 al GMCH 1090. Como alternativa, uno o ambos de los controladores de memoria y de gráficos están integrados dentro del procesador (como se describe en el presente documento), la memoria 1040 y el coprocesador 1045 se acoplan directamente al procesador 1010, y al concentrador de controlador 1020 en un único chip con el IOH 1050.
La naturaleza opcional de los procesadores adicionales 1015 se indica en la Figura 10 con líneas de trazo discontinuo. 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.
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 de controlador 1020 se comunica con el procesador o procesadores 1010, 1015 a través de un bus multipunto, tal como un bus de lado frontal (FSB), una interfaz de punto a punto tal como QuickPath Interconnect (QPI) o una conexión similar 1095.
En una realización, el coprocesador 1045 es un procesador de fin especial, tal como, por ejemplo, un procesador de MIC de capacidad de proceso alta, un procesador de red o de comunicación, un motor de compresión, un procesador de gráficos, una GPGPU, un procesador integrado o similar. En una realización, el concentrador de controlador 1020 puede incluir un acelerador de gráficos integrado.
Puede haber una diversidad de diferencias entre los procesadores 1010 y 1015 en términos de un espectro de métricas de méritos que incluyen características arquitectónicas, microarquitectónicas, térmicas, de consumo de energía y similares.
En una realización, el procesador 1010 ejecuta instrucciones que controlan operaciones de procesamiento de datos de un tipo general. Puede haber instrucciones de coprocesador integradas dentro de las instrucciones. El procesador 1010 reconoce estas instrucciones de coprocesador como de un tipo que debería 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 del coprocesador u otra interconexión, al coprocesador 1045. El coprocesador o coprocesadores 1045 aceptan y ejecutan las instrucciones de coprocesador recibidas.
Haciendo referencia a continuación a la Figura 11, se muestra un diagrama de bloques de un primer sistema 1100 ilustrativo más específico de acuerdo con una realización de la presente invención. Como se muestra en la Figura 11, el sistema de múltiples procesadores 1100 es un sistema de interconexión de punto a punto e incluye un primer procesador 1170 y un segundo procesador 1180 acoplados a través de una interconexión de 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.
Los procesadores 1170 y 1180 se muestran incluyendo las unidades de controlador de memoria integrado (IMC) 1172 y 1182, respectivamente. El procesador 1170 también incluye, como parte de sus unidades de controlador de bus, las interfaces de punto a punto (P-P) 1176 y 1178; de forma 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 de punto a punto (P-P) 1150 usando los circuitos de interfaz P-P 1178, 1188. Como se muestra en la Figura 11, los IMC 1172 y 1182 acoplan los procesadores a respectivas memorias, en concreto una memoria 1132 y una memoria '434, que pueden ser porciones de memoria principal localmente adjuntas a los respectivos procesadores.
Cada uno de los procesadores 1170, 1180 puede intercambiar información con un conjunto de chips 1190 a través de las interfaces P-P 1152, 1154 individuales usando los circuitos de interfaz de punto a punto 1176, 1194, 1186, 1198. El conjunto de chips 1190 puede opcionalmente intercambiar información con el coprocesador 1138 a través de una interfaz de desempeño alto 1139. En una realización, el coprocesador 1138 es un procesador de fin especial, tal como, por ejemplo, un procesador de MIC de capacidad de proceso alta, un procesador de red o de comunicación, un motor de compresión, un procesador de gráficos, una GPGPU, un procesador integrado o similar.
Se puede incluir una memoria caché compartida (no mostrada) en uno cualquiera de los procesadores o fuera de ambos procesadores, pero conectada con los procesadores a través de una interconexión P-P, de tal forma que la información de memoria caché local de uno cualquiera de los procesadores, o de ambos, se puede almacenar en la memoria caché compartida si un procesador se coloca en un modo de bajo consumo.
El conjunto de chips 1190 se puede acoplar 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 se limita a ello.
Como se muestra en la Figura 11, diversos dispositivos de E/S 1114 se pueden acoplar 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, un procesador o más procesadores 1115 adicionales, tales como coprocesadores, procesadores de MIC de capacidad de proceso alta, unas GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP)), matrices de puertas programables en campo, o cualquier otro procesador, se acoplan al primer bus 1116. En una realización, el segundo bus 1120 puede ser un bus de bajo recuento de patillas (LPC). Diversos dispositivos se pueden acoplar a un segundo bus 1120 incluyendo, por ejemplo, un teclado y/o un ratón 1122, unos 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 se puede acoplar al segundo bus 1120. Obsérvese que son posibles otras arquitecturas. Por ejemplo, en lugar de la arquitectura de punto a punto de la Figura 11, un sistema puede implementar un bus multipunto u otra arquitectura de este tipo.
Haciendo referencia a continuación a la Figura 12, se muestra un diagrama de bloques de un segundo sistema 1200 ilustrativo más específico de acuerdo con una realización de la presente invención. Elementos semejantes en las Figuras 11 y 12 llevan números de referencia semejantes, y ciertos aspectos de la Figura 11 se han omitido de la Figura 12 con el fin de evitar complicar otros aspectos de la Figura 12.
La Figura 12 muestra que los procesadores 1270, 1280 pueden incluir la memoria integrada y la lógica de control ("CL") de E/S 1272 y 1282, respectivamente. Por lo tanto, las CL 1272, 1282 incluyen unidades de controlador de memoria integrado e incluyen lógica de control de E/S. La Figura 12 muestra que no solo las memorias 1232, 1234 se acoplan a la CL 1272, 1282, sino también que los dispositivos de E/S 1214 también se acoplan a la lógica de control 1272, 1282. Los dispositivos de E/S heredados 1215 se acoplan al conjunto de chips 1290.
Haciendo referencia a continuación a la Figura 13, se muestra un SoC 1300 de un sistema de acuerdo con una realización de la presente invención. Elementos semejantes en la Figura 9 llevan números de referencia semejantes. Además, los recuadros con líneas de trazo discontinuo son características opcionales en SoC más avanzados. En la Figura 13, una unidad o 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 la unidad o unidades de caché compartida 906; una unidad de agente de sistema 910; una unidad o unidades de controlador de bus 916; una unidad o unidades de controlador de memoria integrado 914; un conjunto o 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ática (SRAM) 1330; una unidad de acceso a memoria directo (DMA) 1332; y una unidad de visualización 1340 para acoplar a uno o más visualizadores externos. En una realización, el coprocesador o coprocesadores 1320 incluyen un procesador de fin especial, tal como, por ejemplo, un procesador de red o de comunicación, un motor de compresión, una GPGPU, un procesador de MIC de capacidad de proceso alta, un procesador integrado o similar.
Se pueden implementar realizaciones de los mecanismos divulgados en el presente documento en hardware, software, firmware o una combinación de tales enfoques de implementación. Se pueden implementar realizaciones de la invención como programas informáticos o códigos de programa que se ejecutan en sistemas programables que comprenden al menos un procesador, un sistema de almacenamiento (que incluye 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.
Un código de programa, tal como el código 1130 mostrado en la Figura 11, se puede aplicar a unas instrucciones de entrada para realizar las funciones descritas en el presente documento y generar una información de salida. La información de salida se puede aplicar a uno o más dispositivos de salida, de una forma 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ñales digitales (DSP), un microcontrolador, un circuito integrado de aplicación específica (ASIC) o un microprocesador.
El código de programa se puede implementar en un lenguaje de programación orientado a objetos o de procedimientos de alto nivel para comunicarse con un sistema de procesamiento. El código de programa también se puede implementar en lenguaje ensamblador o máquina, si se desea. De hecho, los mecanismos descritos en el presente documento no están limitados en su alcance a lenguaje de programación particular alguno. En cualquier caso, el lenguaje puede ser un lenguaje compilado o interpretado.
Uno o más aspectos de al menos una realización se pueden implementar mediante instrucciones representativas almacenadas en un medio legible por máquina que representa diversas lógicas dentro del procesador, que, cuando son leídas por una máquina, hacen que la máquina fabrique una lógica para realizar las técnicas descritas en el presente documento. Tales representaciones, conocidas como "núcleos de IP", se pueden almacenar en un medio legible por máquina tangible y suministrarse a diversos clientes o instalaciones de fabricación para cargarlas en las máquinas de fabricación que realmente hacen la lógica o el procesador.
Tales 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, incluyendo medios de almacenamiento tales como discos duros, cualquier otro tipo de disco, incluyendo disquetes, discos ópticos, discos compactos -memorias de solo lectura (CD-ROM), discos compactos regrabables (CD-RW), discos de vídeo digital/versátil (DVD), Blu-ray (BD) y discos magnetoópticos, dispositivos de 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.
En consecuencia, realizaciones de la invención también incluyen medios legibles por máquina tangibles no transitorios que contienen instrucciones o que contienen datos de diseño, tales como Lenguaje de Descripción de Hardware (HDL), que definen estructuras, circuitos, aparatos, procesadores y/o características de sistema descritos en el presente documento. Tales realizaciones también se pueden denominar productos de programa.
En algunos casos, se puede usar 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, usando traducción binaria estática, traducción binaria dinámica que incluye compilación dinámica), transformar, emular o convertir de otro modo una instrucción en una o más instrucciones a procesar por el núcleo. El convertidor de instrucciones se puede implementar en software, hardware, firmware o una combinación de los mismos. El convertidor de instrucciones puede estar en un procesador, fuera de un procesador o en parte dentro y en parte fuera de un procesador.
La Figura 14 es un diagrama de bloques que contrapone el uso de un convertidor de instrucciones de software para convertir instrucciones binarias en un conjunto de instrucciones de origen en 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, como alternativa, el convertidor de instrucciones se puede implementar en software, firmware, hardware o diversas combinaciones de los mismos. La Figura 14 muestra que un programa en un lenguaje de alto nivel 1402 se puede compilar usando un compilador de x861404 para generar un código binario de x86 1406 que puede ser ejecutado de forma nativa por un procesador con al menos un núcleo de conjunto de instrucciones de x86 1416. El procesador con al menos un núcleo de conjunto de instrucciones de x86 1416 representa cualquier procesador que pueda realizar sustancialmente las mismas funciones que un procesador de Intel con al menos un núcleo de conjunto de instrucciones de x86 ejecutando o procesando de otro modo, de forma compatible, (1) una porción sustancial del conjunto de instrucciones del núcleo de conjunto de instrucciones de x86 de Intel o (2) versiones de código objeto de aplicaciones u otro software destinado a ejecutarse en un procesador de Intel con al menos un núcleo de conjunto de instrucciones de x86, con el fin de lograr sustancialmente el mismo resultado que un procesador de Intel con al menos un núcleo de conjunto de instrucciones de x86. El compilador de x86 1404 representa un compilador que se puede hacer funcionar para generar un código binario de x86 1406 (por ejemplo, código objeto) que, con o sin un procesamiento de vinculación adicional, se puede ejecutar en el procesador con al menos un núcleo de conjunto de instrucciones de x86 1416. De forma similar, la Figura 14 muestra que el programa en el lenguaje de alto nivel 1402 se puede compilar usando un compilador de conjunto de instrucciones alternativo 1408 para generar un código binario de conjunto de instrucciones alternativo 1410 que puede ser ejecutado de forma nativa por un procesador sin al menos un núcleo de conjunto de instrucciones de 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 usa para convertir el código binario de x86 1406 en un código que puede ser ejecutado de forma nativa por el procesador sin un núcleo de conjunto de instrucciones de x86 1414. No es probable que este código convertido sea el mismo que el código binario de conjunto de instrucciones alternativo 1410 debido a que es difícil hacer un convertidor de instrucciones capaz de esto; sin embargo, el código convertido logrará el funcionamiento general y estará compuesto por instrucciones a partir del conjunto de instrucciones alternativo. Por lo tanto, el convertidor de instrucciones 1412 representa software, firmware, hardware o una combinación de los mismos que, a través de emulación, simulación o cualquier otro proceso, permite que un procesador u otro dispositivo electrónico que no tiene un procesador o núcleo de conjunto de instrucciones de x86 ejecute el código binario de x86 1406.
Formatos de instrucción ilustrativos
Se pueden materializar realizaciones de la instrucción o instrucciones descritas en el presente documento en diferentes formatos. Adicionalmente, a continuación, se detallan sistemas, arquitecturas y canalizaciones ilustrativos. Se pueden ejecutar realizaciones de la instrucción o instrucciones en tales sistemas, arquitecturas y canalizaciones, pero no se limitan a las detalladas.
Un formato de instrucción apto para vectores es un formato de instrucción adecuado para instrucciones de vector (por ejemplo, hay ciertos campos específicos de operaciones vectoriales). Aunque se describen realizaciones en las que se soportan operaciones tanto vectoriales como escalares a través del formato de instrucción apto para vectores, realizaciones alternativas usan solo operaciones vectoriales en el formato de instrucción apto para vectores.
Las Figuras 15A-15B son diagramas de bloques que muestran un formato de instrucción apto para vectores genérico y plantillas de instrucción 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 apto para vectores genérico y plantillas de instrucción 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 apto para vectores genérico y plantillas de instrucción de clase B del mismo de acuerdo con realizaciones de la invención. Específicamente, un formato de instrucción apto para vectores genérico 1500 para el que se definen plantillas de instrucción de clase A y de clase B, ambas de 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 apto para vectores se refiere a que el formato de instrucción no está vinculado a conjunto de instrucciones específico alguno.
Aunque se describirán las realizaciones de la invención en las que el formato de instrucción apto para vectores soporta lo siguiente: una longitud (o tamaño) de operando de vector de 64 bytes con unas anchuras (o tamaños) de elemento de datos de 32 bits (4 bytes) o 64 bits (8 bytes) (y, por lo tanto, un vector de 64 bytes consiste o bien en 16 elementos de tamaño de palabra doble o bien, como alternativa, en 8 elementos de tamaño de palabra cuádruple); una longitud (o tamaño) de operando de vector de 64 bytes con unas anchuras (o tamaños) de elemento 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 unas anchuras (o tamaños) de elemento 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 de vector de 16 bytes con unas anchuras (o tamaños) de elemento 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 operando de vector (por ejemplo, operandos de vector de 256 bytes) con más, menos o diferentes anchuras de elemento de datos (por ejemplo, anchuras de elemento de datos de 128 bits (16 bytes)).
Las plantillas de instrucción 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 control de redondeo completo sin acceso a memoria 1510 y una plantilla de instrucción de operación de tipo transformada 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 temporal de acceso a memoria 1525 y una plantilla de instrucción no temporal de acceso a memoria 1530. Las plantillas de instrucción de clase B en la Figura 15B 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 control de redondeo parcial de control de máscara de escritura sin acceso a memoria 1512 y una plantilla de instrucción de operación de tipo vsize de control de máscara de escritura sin acceso a memoria 1517; y 2) dentro de las plantillas de instrucción de acceso a memoria 1520 se muestra una plantilla de instrucción de control de máscara de escritura de acceso a memoria 1527.
El formato de instrucción apto para vectores genérico 1500 incluye los campos siguientes enumerados a continuación en el orden mostrado en las Figuras 15A-15B.
Campo de formato 1540 - un valor específico (un valor de identificador de formato de instrucción) en este campo identifica de forma exclusiva el formato de instrucción apto para vectores y, por lo tanto, apariciones de instrucciones en el formato de instrucción apto para vectores en flujos de instrucciones. En ese sentido, 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 apto para vectores genérico.
Campo de operación base 1542 - su contenido distingue diferentes operaciones base.
Campo de índice de registro 1544 - su contenido, directamente o a través de una generación de direcciones, especifica las ubicaciones de los operandos de origen y de destino, ya estén estos en registros o en memoria. Estos incluyen un número suficiente de bits para seleccionar N registros de un fichero de registro P x Q (por ejemplo, 32 x 512, 16 x 128, 32 x 1024, 64 x 1024). Aunque, en una realización, N puede ser hasta tres orígenes y un registro de destino, realizaciones alternativas pueden soportar más o menos orígenes y registros de destino (por ejemplo, pueden soportar hasta dos orígenes en donde uno de estos orígenes también actúa como el destino, pueden soportar hasta tres orígenes en donde uno de estos orígenes también actúa como el destino, puede soportar hasta dos orígenes y un destino).
Campo de modificador 1546 - su contenido distingue apariciones de instrucciones en el formato de instrucción de vector genérico que especifican un acceso a memoria de aquellas que no lo hacen; es decir, entre las plantillas de instrucción sin acceso a memoria 1505 y las 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 (especificando, en algunos casos, las direcciones de origen y/o de destino usando valores en registros), mientras que las operaciones sin acceso a memoria no lo hacen (por ejemplo, el origen y los destinos son registros). Aunque, en una realización, este campo también selecciona entre tres formas diferentes de realizar cálculos de dirección de memoria, realizaciones alternativas pueden soportar más, menos o diferentes formas de realizar cálculos de dirección de memoria.
Campo de operación de aumento 1550 - su contenido distingue cuál de una diversidad de operaciones diferentes se va a 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 que se realicen grupos comunes de operaciones en una única instrucción en lugar de en 2, 3 o 4 instrucciones.
Campo de escala 1560 - su contenido permite ajustar a escala el contenido del campo de índice para una generación de direcciones de memoria (por ejemplo, para una generación de direcciones que usa 2escala * índice base).
Campo de desplazamiento 1562A - su contenido se usa como parte de la generación de direcciones de memoria (por ejemplo, para una generación de direcciones que usa 2escala * índice base desplazamiento).
Campo de factor de desplazamiento 1562B (obsérvese que la yuxtaposición del campo de desplazamiento 1562A directamente sobre el campo de factor de desplazamiento 1562B indica que se usa uno u otro) - su contenido se usa como parte de una generación de direcciones; este especifica un factor de desplazamiento que se va a ajustar a escala con el tamaño de un acceso a memoria (N) - en donde N es el número de bytes en el acceso a memoria (por ejemplo, para una generación de direcciones que usa 2escala * índice base desplazamiento ajustado a escala). Los bits de orden bajo redundantes se ignoran y, por lo tanto, el contenido del campo de factor de desplazamiento es multiplicado por el tamaño total de operandos de memoria (N) con el fin de generar el desplazamiento final a usar en el cálculo de una dirección eficaz. El valor de N es determinado por el hardware de procesador en tiempo de ejecución basándose en el campo de código de operación completo 1574 (descrito más adelante 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 estos no se usan para las plantillas de instrucción sin acceso a memoria 1505 y/o diferentes realizaciones pueden implementar solo uno o ninguno de los dos.
Campo de anchura de elemento de datos 1564 - su contenido distingue cuál de un número de anchuras de elemento de datos se va a usar (en algunas realizaciones para todas las instrucciones; en otras realizaciones, para solo algunas de las instrucciones). Este campo es opcional en el sentido de que el mismo no es necesario si solo se soporta una anchura de elemento de datos y/o se soportan anchuras de elemento de datos usando algún aspecto de los códigos de operación.
Campo de máscara de escritura 1570 - su contenido controla, de una forma por posición de elemento de datos, si esa posición de elemento de datos en el operando de vector de destino refleja el resultado de la operación base y la operación de aumento. Las plantillas de instrucción de clase A soportan un enmascaramiento de escritura de combinación, mientras que las plantillas de instrucción de clase B soportan un enmascaramiento de escritura tanto de combinación como de puesta a cero. Cuando se combina, las máscaras de vector permiten proteger de actualizaciones 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 otra realización, conservando el valor antiguo de cada elemento del destino en donde el bit de máscara correspondiente tiene un 0. En contraposición, cuando se pone a cero, las máscaras de vector permiten 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 a 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 realiza (es decir, el rango de elementos que se modifican, 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, que incluyen cargas, almacenes, aritméticas, lógicas, etc. Aunque se describen realizaciones de la invención en las que el contenido del campo de máscara de escritura 1570 selecciona uno de un número de registros de máscara de escritura que contiene la máscara de escritura a usar (y, por lo tanto, el contenido del campo de máscara de escritura 1570 identifica indirectamente el enmascaramiento a realizar), realizaciones alternativas permiten, en su lugar o adicionalmente, que el contenido del campo de escritura de máscara 1570 especifique directamente el enmascaramiento a realizar.
Campo de valor inmediato 1572 - su contenido permite la especificación de un valor inmediato. Este campo es opcional en el sentido de que no está presente en una implementación del formato apto para vectores genérico que no soporta un valor inmediato y no está presente en instrucciones que no usan un valor inmediato.
Campo de clase 1568 - su contenido distingue entre diferentes clases de instrucciones. Con referencia a las Figuras 15A-B, los contenidos de este campo seleccionan entre instrucciones de clase A y de clase B. En las Figuras 15A-B, se usan unos cuadrados de esquinas redondeadas para indicar que un valor específico está presente en un campo (por ejemplo, la clase A 1568A y la clase B 1568B para el campo de clase 1568, respectivamente, en las Figuras 15A-B).
Plantillas de instrucción de clase A
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 operación de aumento se va a realizar (por ejemplo, el redondeo 1552A.1 y la transformada de datos 1552A.2 se especifican, respectivamente, para las plantillas de instrucción de operación de tipo redondeo sin acceso a memoria 1510 y de operación de tipo transformada de datos sin acceso a memoria 1515), mientras que el campo beta 1554 distingue cuál de las operaciones del tipo especificado se va a realizar. En las plantillas de instrucción sin acceso a memoria 1505, no están presentes el campo de escala 1560, el campo de desplazamiento 1562A y el campo de escala de desplazamiento 1562B.
Plantillas de instrucción sin acceso a memoria - operación de tipo control de redondeo completo
En la plantilla de instrucción de operación de tipo control de redondeo completo sin acceso a memoria 1510, el campo beta 1554 se interpreta como un campo de control de redondeo 1554A, cuyo contenido o contenidos proporcionan un redondeo estático. Aunque, 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 coma flotante (SAE) 1556 y un campo de control de operación de redondeo 1558, realizaciones alternativas pueden soportar que pueden codificar ambos de estos 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).
Campo de SAE 1556 - su contenido distingue si se inhabilita o no la notificación de sucesos de excepción; cuando el contenido del campo de SAE 1556 indica que se habilita una supresión, una instrucción dada no notifica tipo alguno de indicador de excepción de coma flotante y no genera manejador de excepciones de coma flotante alguno.
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 hacia el más cercano). Por lo tanto, el campo de control de operación de redondeo 1558 permite el cambio del modo de redondeo de una forma por instrucción. En una realización de la invención en la que un procesador incluye un registro de control para especificar modos de redondeo, el contenido del campo de control de operación de redondeo 1558 reemplaza ese valor de registro.
Plantillas de instrucción sin acceso a memoria - operación de tipo transformada de datos
En la plantilla de instrucción de la operación de tipo transformada de datos sin acceso a memoria 1515, el campo beta 1554 se interpreta como un campo de transformada de datos 1554B, cuyo contenido distingue cuál de un número de transformadas de datos se va a realizar (por ejemplo, sin transformada de datos, mezcla, difusión).
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 expulsión se va a usar (en la Figura 15A, se especifican temporal 1552B.1 y no temporal 1552B.2, respectivamente, para la plantilla de instrucción temporal de acceso a memoria 1525 y la plantilla de instrucción no temporal de acceso a memoria 1530), mientras que el campo beta 1554 se interpreta como un campo de manipulación de datos 1554C, cuyo contenido distingue cuál de un número 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 instrucción 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 (en ocasiones denominado campo de escala de desplazamiento).
Las instrucciones de memoria de vectores realizan cargas de vector desde y almacenamientos de vector en memoria, con soporte de conversión. Al igual que con las instrucciones de vector regulares, las instrucciones de memoria de vector transfieren datos desde/hacia la memoria de una forma elemento de datos a elemento de datos, con los elementos que realmente se transfieren dictados por los contenidos de la máscara de vector que se selecciona como máscara de escritura.
Plantillas de instrucción de acceso a memoria - temporal
Los datos temporales son datos que es probable que se reutilicen lo bastante pronto como para beneficiarse de un almacenamiento en memoria caché. Sin embargo, esto es una sugerencia, y diferentes procesadores pueden implementarlo de diferentes formas, incluso ignorando la sugerencia por completo.
Plantillas de instrucción de acceso a memoria - no temporal
Los datos no temporales son datos que es poco probable que se reutilicen lo bastante pronto como para beneficiarse de un almacenamiento en memoria caché en la memoria caché de primer nivel y se les debería dar prioridad para la expulsión. Sin embargo, esto es una sugerencia, y diferentes procesadores pueden implementarlo de diferentes formas, incluso ignorando la sugerencia por completo.
Plantillas de instrucción de clase B
En el caso de las plantillas de instrucción 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 debería ser una combinación o una puesta a cero.
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 operación de aumento se va a realizar (por ejemplo, el redondeo 1557A.1 y la longitud de vector (VSIZE) 1557A.2 se especifican, respectivamente, para la plantilla de instrucción de operación de tipo control de redondeo parcial de control de máscara de escritura sin acceso a memoria 1512 y la plantilla de instrucción de operación de tipo VSIZE de control de máscara de escritura sin acceso a memoria 1517), mientras que el resto del campo beta 1554 distingue cuál de las operaciones del tipo especificado se va a realizar. En las plantillas de instrucción sin acceso a memoria 1505, no están presentes el campo de escala 1560, el campo de desplazamiento 1562A y el campo de escala de desplazamiento 1562B.
En la plantilla de instrucción de operación de tipo control de redondeo parcial de 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 se inhabilita la notificación de sucesos de excepción (una instrucción dada no notifica tipo alguno de indicador de excepción de coma flotante y no genera manejador de excepciones de coma flotante alguno).
Campo de control de operación de redondeo 1559A - exactamente 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 hacia el más cercano). Por lo tanto, el campo de control de operación de redondeo 1559A permite el cambio del modo de redondeo de una forma por instrucción. En una realización de la invención en la que un procesador incluye un registro de control para especificar modos de redondeo, el contenido del campo de control de operación de redondeo 1559 reemplaza ese valor de registro.
En la plantilla de instrucción de la operación de tipo VSIZE de 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 sobre cuál de un número de longitudes de vector de datos se va a realizar (por ejemplo, 128, 256 o 512 bytes).
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 va a 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 instrucción 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.
Con respecto al formato de instrucción apto para vectores genérico 1500, se muestra un campo de código de operación completo 1574 que incluye el campo de formato 1540, el campo de operación base 1542 y el campo de anchura de elemento de datos 1564. Aunque se muestra una realización en la que el campo de código de operación completo 1574 incluye todos estos campos, el campo de código de operación completo 1574 incluye menos de todos estos campos en realizaciones que no soportan la totalidad de los mismos. El campo de código de operación completo 1574 proporciona el código de operación (opcode).
El campo de operación de aumento 1550, el campo de anchura de elemento de datos 1564 y el campo de máscara de escritura 1570 permiten que estas características se especifiquen de una forma por instrucción en el formato de instrucción apto para vectores genérico.
La combinación de campo de máscara de escritura y campo de anchura de elemento de datos crea instrucciones con tipo, ya que permiten aplicar la máscara basándose en diferentes anchuras de elemento de datos.
Las diversas plantillas de instrucción halladas 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 fin general de desempeño alto destinado a computación de fin general puede soportar solo la clase B, un núcleo destinado principalmente a gráficos y/o computación científica (de capacidad de proceso) puede soportar solo la clase A, y un núcleo destinado para ambos puede soportar ambas (por supuesto, un núcleo que tiene alguna combinación de plantillas e instrucciones a partir de ambas clases, pero no todas las plantillas e instrucciones a partir de ambas clases, está dentro del alcance de la invención). Además, un único procesador puede incluir múltiples núcleos, todos los cuales soportan la misma clase o en los que diferentes núcleos soportan diferentes clases. Por ejemplo, en un procesador con núcleos de gráficos y de fin general separados, uno de los núcleos de gráficos destinado principalmente para computación de gráficos y/o científica puede soportar únicamente la clase A, mientras que uno o más de los núcleos de fin general pueden ser núcleos de fin general de desempeño alto con ejecución fuera de orden y cambio de nombre de registro destinado para computación de fin general que soporta únicamente la clase B. Otro procesador que no tiene un núcleo de gráficos separado, puede incluir uno o más núcleos en orden o fuera de orden de fin general que soportan tanto la clase A como la clase B. Por supuesto, las características de una clase pueden implementarse también en la otra clase en diferentes realizaciones de la invención. Programas escritos en un lenguaje de alto nivel se pondrían (por ejemplo, compilados justo a tiempo o compilados estáticamente) en una diversidad de formas ejecutables diferentes, que incluyen: 1) una forma que tiene solo instrucciones de la clase o clases soportadas por el procesador de destino para su ejecución; o 2) una forma que tiene rutinas alternativas escritas usando diferentes combinaciones de instrucciones de todas las clases y que tiene un código de flujo de control que selecciona las rutinas a ejecutar basándose en las instrucciones soportadas por el procesador que actualmente está ejecutando el código.
Las Figuras 16A-D son diagramas de bloques que muestran un formato de instrucción apto para vectores específico ilustrativo de acuerdo con las realizaciones de la invención. La Figura 16 muestra un formato de instrucción apto para vectores específico 1600 que es específico en el sentido de que el mismo especifica la ubicación, el tamaño, la interpretación y el orden de los campos, así como valores para algunos de esos campos. El formato de instrucción apto para vectores específico 1600 se puede usar para ampliar el conjunto de instrucciones de x86 y, por lo tanto, algunos de los campos son similares o iguales a los usados en el conjunto de instrucciones de x86 existente y la ampliación del mismo (por ejemplo, AVX). Este formato sigue siendo coherente con el campo de codificación de prefijo, el campo de bytes de código de operación real, el campo MOD R/M, el campo SIB, el campo de desplazamiento y los campos inmediatos del conjunto de instrucciones de x86 existente con ampliaciones. Se muestran los campos de la Figura 15 en los que se mapean los campos a partir de la Figura 16.
Se debería entender que, aunque se describen realizaciones de la invención con referencia al formato de instrucción apto para vectores específico 1600 en el contexto del formato de instrucción apto para vectores genérico 1500 con fines ilustrativos, la invención no se limita al formato de instrucción apto para vectores específico 1600 excepto en donde se reivindique. Por ejemplo, el formato de instrucción apto para vectores genérico 1500 contempla una diversidad de tamaños posibles para los diversos campos, mientras que el formato de instrucción apto para vectores específico 1600 se muestra como que tiene campos de tamaños específicos. A modo de ejemplo específico, mientras que el campo de anchura de elemento de datos 1564 se muestra como un campo de un bit en el formato de instrucción apto para vectores específico 1600, la invención no se limita a ello (es decir, el formato de instrucción apto para vectores genérico 1500 contempla otros tamaños del campo de anchura de elemento de datos 1564).
El formato de instrucción apto para vectores genérico 1500 incluye los campos siguientes enumerados a continuación en el orden mostrado en la Figura 16A.
Prefijo EVEX (bytes 0-3) 1602 - se codifica en un formato de cuatro bytes.
Campo de formato 1540 (byte de EVEX 0, bits [7:0]) - el primer byte (byte de EVEX 0) es el campo de formato 1540 y contiene 0x62 (el valor exclusivo usado para distinguir el formato de instrucción apto para vectores en una realización de la invención).
Del segundo al cuarto bytes (bytes de EVEX 1-3) incluyen un número de campos de bits que proporcionan una capacidad específica.
Campo REX 1605 (byte de EVEX 1, bits [7-5]) - consiste en un campo de bits EVEX.R (byte de EVEX 1, bit [7] - R), campo de bits EVEX.X (byte de EVEX 1, bit [6] - X) y 1157BEX byte 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 usando la forma 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 tal forma que Rrrr, Xxxx y Bbbb se pueden formar sumando EVEX.R, EVEX.X y EVEX.B.
Campo REX' 1610 - esta es la primera parte del campo REX' 6510 y es el campo de bits EVEX.R' (byte 1 de EVEX, bit [4] - R') que se usa para codificar o bien los 16 superiores o bien los 16 inferiores del conjunto de 32 registros ampliado. En una realización de la invención, este bit, junto con otros como se indica a continuación, se almacena en un formato invertido en bits para distinguirlo (en el bien conocido modo de 32 bits de x86) de la instrucción BOUND, cuyo byte de código de operación 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 usa un valor de 1 para codificar los 16 registros inferiores. En otras palabras, R'Rrrr se forma combinando EVEX.R', EVEX.R y el otro RRR a partir de otros campos.
Campo de mapeo de código de operación 1615 (byte de EVEX 1, bits [3:0] - mmmm) - su contenido codifica un byte de código de operación inicial implícito (0F, 0F 38 o 0F 3).
Campo de anchura de elemento de datos 1564 (byte de EVEX 2, bit [7] - W) - se representa mediante la notación EVEX.W. EVEX.W se usa para definir la granularidad (tamaño) del tipo de datos (o bien elementos de datos de 32 bits o bien elementos de datos de 64 bits).
EVEX.vvvv 1620 (byte de EVEX 2, bits [6:3] - vvvv) - el papel de EVEX.vvvv puede incluir lo siguiente: 1) EVEX.vvvv codifica el primer operando de registro de origen, especificado de 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 de vector; o 3) EVEX.vvvv no codifica operando alguno, el campo está reservado y debería contener 1111b. Por lo tanto, el campo EVEX.vvvv 1620 codifica los 4 bits de orden inferior del primer especificador de registro de origen almacenado de forma invertida (complemento a 1). Dependiendo de la instrucción, se usa un campo de bits EVEX diferente adicional para ampliar el tamaño de especificador a 32 registros.
Campo de clase de EVEX.U 1568 (byte de EVEX 2, bit [2] - U) - Si EVEX.U = 0, este indica clase A o EVEX.U0; si EVEX.U = 1, este indica clase B o EVEX.U1.
Campo de codificación de prefijo 1625 (byte de 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, este también tiene la ventaja 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 de 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 tiempo de ejecución, se expanden al prefijo SIMD heredado antes de proporcionarse a la PLA del decodificador (de tal modo que la PLA pueda ejecutar tanto el formato heredado como el de EVEX de estas instrucciones heredadas sin modificaciones). Aunque instrucciones más nuevas podrían usar el contenido del campo de codificación de prefijo EVEX directamente como una ampliación de código de operación, ciertas realizaciones se expanden de una forma similar por razones de coherencia, pero permiten que diferentes significados sean especificados por estos prefijos SIMD heredados. Una realización alternativa puede rediseñar la PLA para soportar las codificaciones de prefijo SIMD de 2 bits y, por lo tanto, no requieren la expansión.
Campo alfa 1552 (byte de EVEX 3, bit [7] - EH; también conocido como EVEX.EH, EVEX.rs, EVEX.RL, EVEX.control de máscara de escritura y EVEX.N; también mostrado con a) - como se ha descrito previamente, este campo es específico del contexto.
Campo beta 1554 (byte de EVEX 3, bits [6:4] - SSS, también conocido como EVEX.s2-0 , EVEX.r2-0 , EVEX.rr1, EVEX.LL0, EVEX.LLB; también mostrado con ppp) - como se ha descrito previamente, este campo es específico del contexto.
Campo REX' 1610 - este es el resto del campo REX' y es el campo de bits EVEX.V' (byte 3 de EVEX, bit [3] - V') que se puede usar para codificar o bien los 16 superiores o bien los 16 inferiores del conjunto de 32 registros ampliado. Este bit se almacena en un formato invertido en bits. Se usa un valor de 1 para codificar los 16 registros inferiores. En otras palabras, V'VVVV se forma combinando EVEX.V', EVEX.vvvv.
Campo de máscara de escritura 1570 (byte de EVEX 3, bits [2:0] - kkk) - su contenido especifica el índice de un registro en los registros de máscara de escritura como se ha descrito previamente. En una realización de la invención, el valor específico EVEX.kkk = 000 tiene un comportamiento especial que implica que no se usa máscara de escritura alguna para la instrucción particular (esto se puede implementar de una diversidad de formas, incluyendo el uso de una máscara de escritura pregrabada a todo unos o hardware que omite el hardware de enmascaramiento).
El campo de código de operación real 1630 (byte 4) también se conoce como el byte de código de operación. Parte del código de operación se especifica en este campo.
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 ha descrito previamente, el contenido del campo MOD 1642 distingue entre operaciones de acceso a memoria y sin acceso a memoria. La función del campo Reg 1644 puede resumirse a dos situaciones: codificar o bien el operando de registro de destino o un operando de registro de origen o tratarse como una ampliación de código de operación y no usarse para codificar operando de instrucción alguno. 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 o bien el operando de registro de destino o bien un operando de registro de origen.
Byte de Escala, Índice, Base (SIB) (byte 6) - como se ha descrito previamente, el contenido del campo de escala 1550 se usa para una generación de direcciones de memoria. SIB.xxx 1654 y SIB.bbb 1656 - se ha hecho referencia previamente a los contenidos de estos campos con respecto a los índices de registro Xxxx y Bbbb.
Campo de desplazamiento 1562A (bytes 7-10) - cuando el campo MOD 1642 contiene un 10, los bytes 7-10 son el campo de desplazamiento 1562A, y este funciona igual que el desplazamiento de 32 bits heredado (disp32) y funciona con una granularidad de bytes.
Campo de factor de desplazamiento 1562B (byte 7) - cuando el campo MOD 1642 contiene un 01, el byte 7 es el campo de factor de desplazamiento 1562B. La ubicación de este campo es la misma que la del desplazamiento de 8 bits de conjunto de instrucciones de x86 heredado (disp8), que funciona con una granularidad de bytes. Debido a que disp8 se amplía con signo, este solo puede abordar desplazamientos entre -128 y 127 bytes; en términos de líneas de memorias caché de 64 bytes, disp8 usa 8 bits que se pueden establecer a solo cuatro valores realmente útiles -128, -64, 0 y 64; debido a que 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 usa el campo de factor de desplazamiento 1562B, el desplazamiento real es determinado por el contenido del campo de factor de desplazamiento multiplicado por el tamaño del acceso de operando de memoria (N). Este tipo de desplazamiento se denomina disp8*N. Esto reduce la longitud de instrucción promedio (se usa un único byte para el desplazamiento, pero con un rango mucho mayor). Tal desplazamiento comprimido está basado en la suposición de que el desplazamiento eficaz es un múltiplo de la granularidad del acceso a memoria y, por lo tanto, no es necesario codificar los bits de orden bajo redundantes del desplazamiento de dirección. En otras palabras, el campo de factor de desplazamiento 1562B sustituye el desplazamiento de 8 bits de conjunto de instrucciones de x86 heredado. Por lo tanto, el campo de factor de desplazamiento 1562B se codifica de la misma manera que un desplazamiento de 8 bits de 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 o en las longitudes de codificación, sino únicamente en la interpretación del valor de desplazamiento por hardware (que necesita escalar el desplazamiento por el tamaño del operando de memoria para obtener una compensación de dirección por bytes).
El campo de valor inmediato 1572 funciona como se ha descrito previamente.
Campo de código de operación completo
La Figura 16B es un diagrama de bloques que muestra los campos del formato de instrucción apto para vectores específico 1600 que constituyen el campo de código de operación completo 1574 de acuerdo con una realización de la invención. Específicamente, el campo de código de operación completo 1574 incluye el campo de formato 1540, el campo de operación base 1542 y el campo de anchura (W) de elemento de datos 1564. El campo de operación base 1542 incluye el campo de codificación de prefijo 1625, el campo de mapeo de código de operación 1615 y el campo de código de operación real 1630.
Campo de índice de registro
La Figura 16C es un diagrama de bloques que muestra los campos del formato de instrucción apto para vectores específicos 1600 que constituyen 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/Mr/m 1646, el campo VVVV 1620, el campo xxx 1654 y el campo bbb 1656.
Campo de operación de aumento
La Figura 16D es un diagrama de bloques que muestra los campos del formato de instrucción apto para vectores específico 1600 que constituyen 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 un 0, ello significa EVEX.U0 (clase A 1568A); cuando este contiene un 1, ello significa EVEX.U1 (clase B 1568B). Cuando U = 0 y el campo MOD 1642 contiene un 11 (lo que significa una operación sin acceso a memoria), el campo alfa 1552 (byte de 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 de 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 de 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 (transformada de datos 1552A.2), el campo beta 1554 (byte de EVEX 3, bits [6:4] -SSS) se interpreta como un campo de transformada 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 de EVEX 3, bits [7] - EH) se interpreta como el campo de sugerencia de expulsión (EH) 1552B y el campo beta 1554 (byte de EVEX 3, bits [6:4] - SSS) se interpreta como un campo de manipulación de datos 1554C de tres bits.
Cuando U = 1, el campo alfa 1552 (byte de 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 un 11 (lo que significa una operación sin acceso a memoria), parte del campo beta 1554 (byte de 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 de 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 de EVEX 3, bit [6-5] - S2-1) se interpreta como el campo de longitud de vector 1559B (byte de 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 de EVEX 3, bits [6:4] - SSS) se interpreta como el campo de longitud de vector 1559B (byte de Ev Ex 3, bit [6-5] - L1-0) y el campo de difusión 1557b (byte de EVEX 3, bit [4]-B).
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 de vector 1710 que tienen una anchura de 512 bits; estos registros se referencian como zmm0 a zmm31. Los 256 bits de orden inferior de los 16 registros zmm inferiores se superponen sobre 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 sobre los registros xmm0-15. El formato de instrucción apto para vectores específico 1600 opera sobre estos ficheros de registro superpuestos, como se muestra en la tabla a continuación.
Figure imgf000030_0001
En otras palabras, el campo de longitud de vector 1559B selecciona entre una longitud máxima y una o más otras longitudes más cortas, donde cada longitud más corta de este tipo es la mitad de la longitud de la longitud precedente; y las plantillas de instrucciones sin el campo de longitud de vector 1559B operan sobre la longitud de vector máxima. Además, en una realización, las plantillas de instrucción de clase B del formato de instrucción apto para vectores específico 1600 operan sobre datos de coma flotante de precisión simple/doble escalares o empaquetados y datos enteros escalares o empaquetados. Las operaciones escalares son operaciones realizadas sobre la posición de elemento de datos del orden más bajo en un registro zmm/ymm/xmm; las posiciones de elemento de datos de orden superior o bien se dejan igual que como estaban antes de la instrucción o bien se ponen a cero dependiendo de la realización.
Registros de máscara de escritura 1715 - en la realización mostrada, hay 8 registros de máscara de escritura (de k0 a k7), cada uno de un tamaño de 64 bits. En una realización alternativa, los registros de máscara de escritura 1715 tienen un tamaño de 16 bits. Como se ha descrito previamente, en una realización de la invención, el registro de máscara de vector k0 no se puede usar como una máscara de escritura; cuando la codificación que normalmente indicaría k0 se usa para una máscara de escritura, este selecciona una máscara de escritura pregrabada de 0xFFFF, inhabilitando en la práctica el enmascaramiento de escritura para esa instrucción.
Registros de fin general 1725 - en la realización mostrada, hay dieciséis registros de fin general de 64 bits que se usan junto con los modos de direccionamiento de x86 existentes para direccionar operandos de memoria. A estos registros se hace referencia mediante los nombres RAX, RBX, RCX, RDX, RBP, RSI, Rd I, RSP y de R8 a R15.
Fichero de registro de pila de coma flotante escalar (pila de x87) 1745, en el que se establece un alias para el fichero de registro plano de entero empaquetado MMX 1750 - en la realización mostrada, la pila de x87 es una pila de ocho elementos usada para realizar operaciones de coma flotante escalar sobre datos de coma flotante de 32/64/80 bits usando la ampliación del conjunto de instrucciones de x87; mientras que los registros MMX se usan para realizar operaciones sobre datos enteros empaquetados de 64 bits, así como para contener operandos para algunas operaciones realizadas entre los registros MMX y XMM.
Realizaciones alternativas de la invención pueden usar registros más anchos o más estrechos. Adicionalmente, realizaciones alternativas de la invención pueden usar más, menos o diferentes ficheros de registro y registros.
Las Figuras 18A-B muestran un diagrama de bloques de una arquitectura de núcleo en orden ilustrativa más específica, cuyo núcleo sería uno de varios bloques lógicos (incluyendo otros núcleos del mismo tipo y/o de diferentes tipos) en un chip. Los bloques lógicos se comunican a través de una red de interconexión de ancho de banda alto (por ejemplo, una red en anillo) con alguna lógica de función fija, interfaces de E/S de memoria y otra lógica de E/S necesaria, dependiendo de la aplicación.
La Figura 18A es un diagrama de bloques de un único núcleo de procesador, junto con su conexión a la red de interconexión integrada en pastilla 1802 y con su subconjunto local de la memoria 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 de x86 con una ampliación de conjunto de instrucciones de datos empaquetados. Una memoria caché de L1 1806 permite accesos de latencia baja a memoria caché a las unidades de escalares y de vectores. Aunque en una realización (para simplificar el diseño), una unidad de escalares 1808 y una unidad de vectores 1810 usan conjuntos de registros separados (respectivamente, los registros de escalar 1812 y los registros de vector 1814) y los datos transferidos entre los mismos se escriben en memoria y entonces se vuelven a leer desde una memoria caché de nivel 1 (L1) 1806, realizaciones alternativas de la invención pueden usar un enfoque diferente (por ejemplo, usar un único conjunto de registros o incluir una ruta de comunicación que permita que se transfieran datos entre los dos ficheros de registro sin que se escriban y se vuelvan a leer).
El subconjunto local de la memoria caché de L2 1804 es parte de una memoria caché de L2 global que se divide en subconjuntos locales separados, uno por núcleo de procesador. Cada núcleo de procesador tiene una ruta de acceso directo a su propio subconjunto local de la memoria caché de L2 1804. Los datos leídos por un núcleo de procesador se almacenan en su subconjunto de memoria caché de L2 1804 y se puede acceder a los mismos rápidamente, en paralelo con que otros núcleos de procesador accedan a sus propios subconjuntos de memoria caché de L2 locales. Los datos escritos por un núcleo de procesador se almacenan en su propio subconjunto de memoria caché de L21804 y se eliminan de otros subconjuntos, si es necesario. La red en anillo asegura una coherencia para datos compartidos. La red en anillo es bidireccional para permitir que agentes tales como núcleos de procesador, memorias caché de L2 y otros bloques lógicos se comuniquen entre sí dentro del chip. Cada ruta de datos de anillo tiene 1012 bits de anchura por dirección.
La Figura 18B es una vista ampliada de parte del núcleo de procesador en la Figura 18A de acuerdo con realizaciones de la invención. La Figura 18B incluye una memoria caché de datos de L1 1806A parte de la memoria caché de L1 1804, así como más detalles con respecto a la unidad de vectores 1810 y los registros de vector 1814. Específicamente, la unidad de vectores 1810 es una unidad de procesamiento de vectores (VPU) de anchura 16 (véase la ALU 1828 de anchura 16), que ejecuta una o más de instrucciones de números enteros, flotantes de precisión simple y flotantes de precisión doble. La VPU soporta la alineación de las entradas de registro con la unidad de mezcla 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 afirmar escrituras vectoriales resultantes.
Operaciones y hardware de tesela/matriz ilustrativas
La Figura 19 ilustra una realización de teselas configuradas. Como se muestra, hay cuatro teselas 1911, 1913, 1915 y 1917 que se cargan desde la memoria de aplicación 1901. En este ejemplo, las teselas T01911 y T1 1913 tienen M filas y N columnas con 4 bytes de elementos (por ejemplo, datos de precisión simple). Las teselas T2 1915 y T31917 tienen M filas y N/2 columnas con 8 bytes de elementos (por ejemplo, datos de precisión doble). Debido a que los operandos de precisión doble tienen el doble de anchura que los de precisión simple, esta configuración es coherente con una paleta, usada para proporcionar opciones de tesela, que suministra al menos 4 nombres con un almacenamiento total de 16*N*M bytes. Dependiendo del esquema de codificación de instrucción usado, el número de teselas disponible varía.
En algunas realizaciones, se pueden definir parámetros de tesela. Por ejemplo, se usa una "paleta" para proporcionar opciones de tesela. Las opciones ilustrativas incluyen, pero sin limitación: el número de nombres de tesela, el número de bytes en una fila de almacenamiento, el número de filas y columnas en una tesela, etc. Por ejemplo, una "altura" máxima (número de filas) de una tesela puede definirse como:
Filas máximas de tesela = almacenamiento estructurado / (el número de nombres de paleta * el número de bytes por fila)
En ese sentido, una aplicación se puede escribir de tal forma que un uso fijo de nombres será capaz de aprovechar los diferentes tamaños de almacenamiento en todas las implementaciones.
La configuración de las teselas se hace usando una instrucción de configuración de teselas ('TILECONFIG"), donde se define un uso de tesela particular en una paleta seleccionada. Esta declaración incluye el número de nombres de tesela a usar, el número solicitado de filas y columnas por nombre (tesela) y, en algunas realizaciones, el tipo de datos solicitado de cada tesela. En algunas realizaciones, se realizan comprobaciones de coherencia durante la ejecución de una instrucción TILECONFIG para determinar que esta coincide con las restricciones de la entrada de paleta.
La Figura 20 ilustra varios ejemplos de almacenamiento de matriz. En (A), una tesela se almacena en memoria. Como se muestra, cada "fila" consiste en cuatro elementos de datos empaquetados. Para llegar a la siguiente "fila", se usa un valor de zancada. Obsérvese que se pueden almacenar filas de forma consecutiva en memoria. Los accesos a memoria con zancada permiten el acceso de una fila a la siguiente cuando el almacenamiento de teselas no se mapea la anchura de fila de matriz de memoria subyacente.
Las cargas de tesela desde memoria y los almacenamientos en memoria son habitualmente accesos con zancada desde la memoria de aplicación a filas empaquetadas de datos. Las instrucciones ilustrativas TILELOAD y TILESTORE, u otras referencias de instrucción a la memoria de aplicación como un operando de TESELA en instrucciones de operación de carga son, en algunas realizaciones, reiniciables para manejar (hasta) 2 * filas de fallos de página, excepciones de coma flotante sin enmascarar y/o interrupciones por instrucción.
En (B), una matriz se almacena en una tesela compuesta por una pluralidad de registros tales como registros de datos empaquetados (una única instrucción, múltiples datos (SIMD) o registros de vector). En este ejemplo, la tesela se superpone sobre tres registros físicos. Habitualmente, se usan registros consecutivos, sin embargo, este no tiene que ser el caso.
En (C), una matriz se almacena en una tesela en almacenamiento no de registro accesible por un circuito de acumulación múltiple fusionado (FMA) usado en operaciones de teselas. Este almacenamiento puede estar dentro de un FMA o ser adyacente al mismo. Adicionalmente, en algunas realizaciones, que se analizan a continuación, el almacenamiento puede ser para un elemento de datos y no para una fila o tesela completa.
Los parámetros soportados para la arquitectura de TMMA se notifican a través de CPUID. En algunas realizaciones, la lista de información incluye una altura máxima y una dimensión de SIMD máxima. Configurar la arquitectura de TMMA requiere especificar las dimensiones para cada tesela, el tamaño de elemento para cada tesela y el identificador de paleta. Esta configuración se hace ejecutando la instrucción TILECONFIG.
Una ejecución con éxito de una instrucción TILECONFIG habilita operadores de TESELA subsiguientes. Una instrucción TILERELEASEALL borra la configuración de teselas e inhabilita las operaciones de TESELA (hasta que se ejecuta la instrucción TILECONFIG siguiente). En algunas realizaciones, se usan XSAVE, XSTORE, etc., en una conmutación de contexto usando teselas. En algunas realizaciones, se usan 2 bits XCR0 en XSAVE, uno para metadatos de TILECONFIF y un bit correspondiente a datos de cabida útil de tesela reales.
TILECONFIG no solo configura el uso de teselas, sino que también establece una variable de estado que indica que el programa está en una región de código con teselas configuradas. Una implementación puede enumerar restricciones sobre otras instrucciones que se pueden usar con una región de tesela, tal como no usar un conjunto de registros existente, etc.
Salir de una región de tesela se hace habitualmente con la instrucción TILERELEASEALL. Esta no acepta parámetro alguno e invalida rápidamente todas las teselas (lo que indica que los datos ya no necesitan guardado ni restablecimiento alguno) y borra el estado interno correspondiente a estar en una región de tesela.
En algunas realizaciones, las operaciones de teselas pondrán a cero cualquier fila y cualquier columna más allá de las dimensiones especificadas por la configuración de teselas. Por ejemplo, las operaciones de teselas 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 una tesela configurada con 10 filas y 12 columnas, una operación que escribe 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 teselas también ponen a cero por completo cualquier fila después de las primeras 10 filas configuradas. Cuando se usa una tesela de 1 K 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.
En algunas realizaciones, un restablecimiento de contexto (por ejemplo, XRSTOR), cuando se cargan datos, impone que los datos más allá de las filas configuradas para una tesela se mantengan como cero. Si no hay configuración válida alguna, todas las filas se ponen a cero. XRSTOR de datos de tesela puede cargar basura en las columnas más allá de las configuradas. No debería ser posible que XRSTOR borre más allá del número de columnas configuradas debido a que no hay una anchura de elemento asociada con la configuración de teselas.
Un guardado de contexto (por ejemplo, XSAVE) expone toda el área de almacenamiento de TESELA cuando se escribe la misma en memoria. Si XRSTOR cargó datos basura en la parte más a la derecha de una tesela, esos datos serán guardados por XSAVE. XSAVE escribirá ceros para las filas más allá del número especificado para cada tesela.
En algunas realizaciones, las instrucciones de tesela se pueden reiniciar. Las operaciones que acceden a memoria permiten reiniciar después de fallos de página. Las instrucciones computacionales que se ocupan de operaciones de coma flotante también permiten excepciones de coma flotante sin enmascarar, con el enmascaramiento de las excepciones controlado por un registro de control y/o de estado.
Para soportar instrucciones de reinicio después de estos sucesos, las instrucciones almacenan información en los registros de inicio detallados a continuación.
La Figura 21 ilustra una realización de un sistema que utiliza un acelerador de operaciones matriciales (de teselas). En esta ilustración, un sistema de procesamiento/procesador de anfitrión 2101 comunica las órdenes 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 de almacenamiento) a un acelerador de operaciones matriciales 2107. Sin embargo, esto se muestra de esta forma solo con fines de análisis. Como se detalla más adelante, este acelerador 2107 puede ser una parte de un núcleo de procesamiento. Habitualmente, las órdenes 2111 que son instrucciones de operador de manipulación de teselas se referirán a teselas como formato de registro-registro ("reg-reg") o de registro-memoria ("reg-mem"). Otras órdenes, tales como TILESTORE, TILELOAD, TILECONFIG, etc., no realizan operaciones de datos sobre una tesela. Las órdenes pueden ser instrucciones decodificadas (por ejemplo, microoperaciones) o macroinstrucciones para que las maneje el acelerador 2107.
En este ejemplo, una interfaz de memoria coherente 2103 se acopla al sistema de procesamiento/procesador de anfitrión 2101 y al acelerador de operaciones matriciales 2205 de tal forma que estos puedan compartir memoria. Las Figuras 22 y 23 muestran diferentes realizaciones de cómo se comparte memoria usando un acelerador de operaciones matriciales. Como se muestra en la Figura 22, el procesador de anfitrión 2201 y la circuitería de acelerador de operaciones matriciales 2205 comparten la misma memoria 2203. La Figura 23 ilustra una realización en la que el procesador principal 2301 y el acelerador de operaciones matriciales 2305 no comparten memoria, pero pueden acceder uno a la memoria del otro. Por ejemplo, el procesador 2301 puede acceder a la memoria de teselas 2307 y utilizar su memoria de anfitrión 2303 de forma normal. De forma similar, el acelerador de operaciones matriciales 2305 puede acceder a la memoria de anfitrión 2303, pero, más habitualmente, usa su propia memoria 2307. Obsérvese que estas memorias pueden ser de diferentes tipos.
El acelerador de operaciones matriciales 2107 incluye una pluralidad de los FMA 2109 acoplados a las memorias intermedias de datos 2105 (en algunas implementaciones, una o más de estas memorias intermedias 2105 se almacenan en los FMA de la cuadrícula como se muestra). Las memorias intermedias de datos 2105 almacenan teselas cargadas desde memoria y/o teselas a almacenar en memoria (por ejemplo, usando una instrucción de carga de teselas o de almacenamiento de teselas). Las memorias intermedias de datos pueden ser, por ejemplo, una pluralidad de registros. Habitualmente, estos FMA se disponen como una cuadrícula de FMA 2109 encadenados que son capaces de leer y de escribir teselas. En este ejemplo, el acelerador de operaciones matriciales 2107 es para realizar una operación de multiplicación matricial usando las teselas T0, T1 y T2. Al menos una de las teselas se aloja en la cuadrícula de FMA 2109. En algunas realizaciones, todas las teselas en 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 lo están. Obsérvese que A, B y C se refieren a las matrices de estas teselas que pueden ocupar, o no, todo el espacio de la tesela.
Realizaciones de la invención pueden usar circuitería de operación matricial especializada. La Figura 24 ilustra una realización de una operación de acumulación de multiplicación matricial usando teselas ("TMMA"). El número de filas en la matriz (la TESELA A 2401) coincide con el número de FMA en serie (encadenados) que comprenden la latencia del cálculo. Una implementación es libre de recircular en una cuadrícula de una altura menor, pero el cálculo sigue siendo el mismo.
El vector de origen/destino proviene de una tesela de N filas (la TESELA C 2405) y la cuadrícula de los FMA 2411 realiza N operaciones de matriz-vector que dan como resultado una instrucción completa que realiza una multiplicación matricial de teselas. La tesela B 2403 es el otro origen de vector y suministra términos de "difusión" a los FMA en cada etapa.
Durante el funcionamiento, en algunas realizaciones, los elementos de la matriz B (almacenados en una tesela B 2403) se diseminan por toda la cuadrícula rectangular de los FMA. La matriz B (almacenada en la tesela A 2401) tiene sus elementos de una fila transpuestos para coincidir con la dimensión de columna de la cuadrícula rectangular de los FMA. En cada FMA de la cuadrícula, un elemento de A y B se multiplica y se suma al sumando entrante (desde arriba en la figura) y la suma saliente se pasa a la fila siguiente de los FMA (o al resultado final).
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 de multiplicación fusionada encadenada. En particular, esto ilustra una circuitería de ejecución de una iteración de una posición de elemento de datos empaquetado del destino. En esta realización, la acumulación de multiplicación fusionada encadenada está operando sobre unos orígenes con signo en donde el acumulador tiene 2 veces el tamaño de datos de entrada.
Un primer origen con signo (el origen 12501) y un segundo origen con signo (el origen 2 2503) tienen, cada uno, cuatro elementos de datos empaquetados. Cada uno de estos elementos de datos empaquetados almacena datos con signo, tales como datos de coma flotante. Un tercer origen con signo (el origen 32509) tiene dos elementos de datos empaquetados, cada uno de los cuales almacena datos con signo. Los tamaños del primer y el segundo orígenes con signo 2501 y 2503 son la mitad de los del tercer origen con signo (valor inicial o resultado previo) 2509. Por ejemplo, el primer y el segundo orígenes con signo 2501 y 2503 podrían tener elementos de datos empaquetados de 32 bits (por ejemplo, coma 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, coma flotante de precisión doble).
En esta ilustración, solo se muestran las dos posiciones de elemento de datos empaquetado más significativas del primer y el segundo orígenes con signo 2501 y 2503 y la posición de elemento de datos empaquetado más significativa del tercer origen con signo 2509. Por supuesto, también se procesarían las otras posiciones de elemento de datos empaquetado.
Como se ilustra, los elementos de datos empaquetados se procesan en pares. Por ejemplo, los datos de las posiciones de elemento de datos empaquetado más significativas del primer y el segundo orígenes con signo 2501 y 2503 se multiplican usando un circuito de multiplicador 2505, y los datos a partir de las segundas posiciones de elemento de datos empaquetado más significativas del primer y el segundo orígenes con signo 2501 y 2503 se multiplican usando un circuito de multiplicador 2507. En algunas realizaciones, estos circuitos de multiplicador 2505 y 2507 se reutilizan para otras posiciones de elemento de datos empaquetado. En otras realizaciones, se usan circuitos de multiplicador adicionales de tal modo que los elementos de datos empaquetados se procesen en paralelo. En algunos contextos, se realiza una ejecución en paralelo usando carriles que tienen el tamaño del tercer origen con signo 2509. Los resultados de cada una de las multiplicaciones se suman usando la circuitería de suma 2511.
El resultado de la suma de los resultados de las multiplicaciones se suma a los datos a partir de la posición de elemento de datos empaquetado más significativa del origen con signo 32509 (usando un sumador 2513 diferente o el mismo sumador 2511).
Por último, el resultado de la segunda suma o bien 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 usada desde el tercer origen con signo 2509 o bien se pasa a la iteración siguiente, si hay una. En algunas realizaciones, se aplica una máscara de escritura a este almacenamiento de tal forma que si se establece una máscara de escritura (bit) correspondiente, tiene lugar el almacenamiento y, si no se establece, no tiene lugar el almacenamiento.
La Figura 26 muestra implementaciones de SIMD de tamaño potencia de dos en las que los acumuladores usan tamaños que son mayores que las entradas a los multiplicadores de acuerdo con una realización. Obsérvese que el origen (a los multiplicadores) y los valores de acumulador pueden ser valores con signo o sin signo. Para un acumulador que tiene unos tamaños de entrada 2X (en otras palabras, el valor de entrada de acumulador se establece para que sea al menos el doble del tamaño de los tamaños de elemento de datos empaquetado de los orígenes), la tabla 2601 ilustra diferentes configuraciones. Para orígenes de tamaño de byte (int8), el acumulador usa valores de palabra o de coma flotante de precisión mitad (HPFP) que tienen un tamaño de 16 bits. Para orígenes de tamaño de palabra (int16), el acumulador usa valores de coma flotante de precisión simple (SPFP) o enteros de 32 bits que tienen un tamaño de 32 bits. Para orígenes de tamaño entero de 32 bits o de SPFP, el acumulador usa valores de coma flotante de precisión doble (DPFP) o enteros de 64 que tienen un tamaño de 64 bits.
Para un acumulador que tiene unos tamaños de 4X (en otras palabras, el valor de entrada de acumulador se establece para que sea al menos cuatro veces el tamaño de los tamaños de elemento de datos empaquetado de los orígenes), la tabla 2603 ilustra diferentes configuraciones. Para orígenes de tamaño de byte, el acumulador usa valores de coma flotante de precisión simple (SPFP) o enteros de 32 bits que tienen un tamaño de 32 bits. Para orígenes de tamaño de palabra, el acumulador usa valores de coma flotante de precisión doble (DPFP) o enteros de 64 bits que tienen un tamaño de 64 bits en algunas realizaciones.
Para un acumulador que tiene unos tamaños de entrada 8X (en otras palabras, el valor de entrada de acumulador se establece para que sea al menos ocho veces el tamaño de los tamaños de elemento de datos empaquetado de los orígenes), la tabla 2605 ilustra una configuración. Para orígenes de tamaño de byte, el acumulador usa un número entero de 64 bits.
En la memoria descriptiva anterior, se han descrito las realizaciones de la invención con referencia a realizaciones ilustrativas específicas de la misma. Sin embargo, será evidente que pueden realizarse diversas modificaciones y cambios sin alejarse del espíritu y alcance más amplio de la invención como se expone en las reivindicaciones adjuntas. La memoria descriptiva y dibujos, por consiguiente, deben considerarse en un sentido ilustrativo en lugar de un sentido restrictivo.
Realizaciones de la invención pueden incluir diversas etapas, que se han descrito anteriormente. Las etapas pueden realizarse en instrucciones ejecutables por máquina que pueden usarse para hacer que un procesador de fin general o de fin especial realice las etapas. Como alternativa, estas etapas pueden realizarse por componentes de hardware específicos que contienen lógica pregrabada para realizar las etapas, o por cualquier combinación de componentes informáticos programados y componentes de hardware personalizados.
Como se describe en el presente documento, las instrucciones pueden hacer referencia a configuraciones de hardware específicas tales como circuitos integrados específicos de la aplicación (ASIC) configurados para realizar ciertas operaciones o que tienen una funcionalidad predeterminada o instrucciones de software almacenadas en memoria incorporada en un medio legible por ordenador no transitorio. Por lo tanto, las técnicas mostradas en las figuras pueden implementarse usando código y datos almacenados y ejecutarse en uno o más dispositivos electrónicos (por ejemplo, una estación final, un elemento de red, etc.). Tales dispositivos electrónicos almacenan y comunican (internamente y/o con otros dispositivos electrónicos a través de una red) código y datos usando medios legibles por máquina informáticos, tales como medios de almacenamiento legibles por máquina informáticos no transitorios (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 legibles por máquina informáticos transitorios (por ejemplo, señales eléctricas, ópticas, acústicas y otra forma de señales propagadas - tales como ondas portadoras, señales de infrarrojos, señales digitales, etc.). Además, tales dispositivos electrónicos típicamente incluyen un conjunto de uno o más procesadores acoplados a uno o más otros componentes, tales como uno o más dispositivos de almacenamiento (medios de almacenamiento legible 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 es típicamente 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 llevan 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. Por lo tanto, el dispositivo de almacenamiento de un dispositivo electrónico dado típicamente almacena código y/o datos para la 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 usando diferentes combinaciones de software, firmware y/o hardware. A lo largo de esta descripción detallada, con una finalidad explicativa, se han presentado numerosos detalles específicos con el fin de proporcionar una comprensión profunda de la presente invención. No obstante, para alguien experto en la técnica será evidente que la invención se puede llevar a la práctica sin algunos de estos detalles específicos. En ciertos casos, no se han descrito con gran detalle algunas estructuras y funciones ampliamente conocidas con el fin de evitar complicar el contenido de la presente invención. En consecuencia, el alcance de la invención se debe evaluar en términos de las siguientes reivindicaciones.

Claims (13)

REIVINDICACIONES
1. Un procesador que comprende:
una circuitería de decodificación (840) para decodificar una instrucción, en donde la instrucción especifica las ubicaciones de una pluralidad de operandos, cuyos valores están en un formato de coma flotante; y una circuitería de ejecución (850) para ejecutar la instrucción decodificada, en donde la ejecución incluye: convertir los valores de cada operando, siendo convertido cada valor en una pluralidad de valores de precisión inferior, en donde se debe almacenar un exponente para cada operando,
realizar operaciones aritméticas entre los valores de precisión inferior convertidos de valores para la pluralidad de los operandos, y
generar un valor de coma flotante convirtiendo un valor resultante de las operaciones aritméticas en el formato de coma flotante y almacenar el valor de coma flotante,
caracterizado por que la instrucción especifica además uno o más operandos que especifican los requisitos de calidad de servicio, QoS,
y por que el procesador ha de determinar un formato de los valores de precisión inferior que se debe utilizar, un número de los valores de precisión inferior y/o un número de términos para ejecutar las operaciones aritméticas con, en función de, uno o más de los operandos que especifican los requisitos de QoS.
2. El procesador de la reivindicación 1, en donde la conversión de los valores de un operando es para:
representar cada valor que se convierte en la pluralidad de valores de precisión inferior usando una pluralidad de bits que incluyen al menos un primer y segundo número de bits,
identificar el primer número de bits dentro de la pluralidad de bits de un primer valor de precisión inferior para aproximar cada valor, e
identificar el segundo número de bits que no están superpuestos con el primer número de bits de un segundo valor de precisión inferior para representar el resto de la aproximación del primer valor de precisión inferior, en donde el primer y segundo valor de precisión inferior se usan para realizar las operaciones aritméticas con los valores de precisión inferior de uno o más operandos distintos.
3. El procesador de la reivindicación 2, en donde la conversión de los valores del operando es posterior a:
determinar el exponente del operando en función de un rango de valores de los valores y de la pluralidad de valores de precisión inferior, siendo cada uno un valor de número entero, y cuantificar cada valor en un valor de número entero en función del rango de valores.
4. El procesador de la reivindicación 3, en donde el rango de valores se determina en función del examen de todos los valores del operando.
5. El procesador de la reivindicación 2, en donde cada uno del primer y segundo valor de precisión inferior es un valor de coma flotante de precisión inferior.
6. El procesador de la reivindicación 1, en donde la circuitería de ejecución (850) comprende uno o más circuitos de multiplicador-acumulador, MAC, especializados y el o los circuitos de MAC especializados deben realizar operaciones de multiplicación-acumulación de números enteros.
7. El procesador de la reivindicación 6, en donde cada circuito de MAC es un circuito de multiplicación adición fusionada, FMA.
8. El procesador de la reivindicación 1, en donde cada operando especifica una matriz, un vector o un escalar o tensor multidimensional.
9. Un método (700) que comprende:
decodificar una instrucción (702), en donde la instrucción especifica las ubicaciones de una pluralidad de operandos, cuyos valores están en un formato de coma flotante; y
ejecutar la instrucción decodificada (704) para:
convertir los valores de cada operando (712), siendo convertido cada valor en una pluralidad de valores de precisión inferior, en donde se debe almacenar un exponente para cada operando,
realizar operaciones aritméticas entre los valores de precisión inferior convertidos de valores para la pluralidad de los operandos (714), y
generar un valor de coma flotante convirtiendo un valor resultante de las operaciones aritméticas en el formato de coma flotante y almacenar el valor de coma flotante (716),
caracterizado por que la instrucción especifica además uno o más operandos que especifican los requisitos de calidad de servicio, QoS,
y por que el método comprende determinar un formato de los valores de precisión inferior que se debe utilizar, un número de los valores de precisión inferior y/o un número de términos para ejecutar las operaciones aritméticas con, en función de, uno o más de los operandos que especifican los requisitos de QoS.
10. El método (700) de la reivindicación 9, en donde la conversión de los valores de un operando (712) es para: representar cada valor que se convierte en la pluralidad de valores de precisión inferior usando una pluralidad de bits que incluyen al menos un primer y segundo número de bits (723),
identificar el primer número de bits dentro de la pluralidad de bits de un primer valor de precisión inferior para aproximar cada valor (724), e
identificar el segundo número de bits que no están superpuestos con el primer número de bits de un segundo valor de precisión inferior para representar el resto de la aproximación del primer valor de precisión inferior (726),
en donde el primer y segundo valor de precisión inferior se usan para realizar las operaciones aritméticas con los valores de precisión inferior de uno o más operandos distintos.
11. El método (700) de la reivindicación 10, en donde la conversión de los valores del operando (712) es posterior a:
determinar el exponente del operando en función de un rango de valores de los valores y de la pluralidad de valores de precisión inferior, siendo cada uno un valor de número entero (732), y
cuantificar cada valor en un valor de número entero en función del rango de valores (734).
12. El método (700) de la reivindicación 11, en donde el rango de valores se determina en función del examen de todos los valores del operando.
13. El método (700) de la reivindicación 10, en donde cada uno del primer y segundo valor de precisión inferior es un valor de coma flotante de precisión inferior.
ES19182449T 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 Active ES2927546T3 (es)

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
ES2927546T3 true ES2927546T3 (es) 2022-11-08

Family

ID=65229962

Family Applications (2)

Application Number Title Priority Date Filing Date
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 (1)

Application Number Title Priority Date Filing Date
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 (5)

Country Link
US (4) US10853067B2 (es)
EP (4) EP4328744A3 (es)
CN (3) CN112506467A (es)
ES (2) ES2927546T3 (es)
PL (2) PL3629147T3 (es)

Families Citing this family (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11816483B2 (en) * 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
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
US20220121421A1 (en) 2019-03-15 2022-04-21 Intel Corporation Multi-tile memory management
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
DE112020001249T5 (de) 2019-03-15 2021-12-23 Intel Corporation Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
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
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
US11494331B2 (en) 2019-09-10 2022-11-08 Cornami, Inc. Reconfigurable processor circuit architecture
US11288076B2 (en) 2019-09-13 2022-03-29 Flex Logix Technologies, Inc. IC including logic tile, having reconfigurable MAC pipeline, and reconfigurable memory
US11188303B2 (en) 2019-10-02 2021-11-30 Facebook, Inc. Floating point multiply hardware using decomposed component numbers
US11455368B2 (en) 2019-10-02 2022-09-27 Flex Logix Technologies, Inc. MAC processing pipeline having conversion circuitry, and methods of operating same
WO2021073511A1 (zh) * 2019-10-14 2021-04-22 安徽寒武纪信息科技有限公司 用于浮点运算的乘法器、方法、集成电路芯片和计算装置
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
CN113138750A (zh) * 2020-01-20 2021-07-20 华为技术有限公司 算数逻辑单元、浮点数乘法计算的方法及设备
US20200218508A1 (en) * 2020-03-13 2020-07-09 Intel Corporation Floating-point decomposition circuitry with dynamic precision
CN113408716A (zh) * 2020-03-17 2021-09-17 安徽寒武纪信息科技有限公司 计算装置、方法、板卡和计算机可读存储介质
CN113408717A (zh) * 2020-03-17 2021-09-17 安徽寒武纪信息科技有限公司 计算装置、方法、板卡和计算机可读存储介质
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
CN113867792A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
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 厦门壹普智慧科技有限公司 用于浮点数据、张量数据运算的运算器
CN112860218B (zh) * 2021-02-07 2023-07-11 厦门壹普智慧科技有限公司 用于fp16浮点数据和int8整型数据运算的混合精度运算器
CN113076083B (zh) * 2021-06-04 2021-08-31 南京后摩智能科技有限公司 数据乘加运算电路
US20210326135A1 (en) * 2021-06-25 2021-10-21 Dheeraj Subbareddy Programmable Fabric-Based Instruction Set Architecture for a Processor
US20230133360A1 (en) * 2021-10-28 2023-05-04 Taiwan Semiconductor Manufacturing Company, Ltd. Compute-In-Memory-Based Floating-Point Processor
CN114141086A (zh) * 2021-12-13 2022-03-04 湖南文理学院 一种内置模拟物理力学实验场景的电子装置
US20230205527A1 (en) * 2021-12-23 2023-06-29 Intel Corporation Conversion instructions
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
US20240111525A1 (en) * 2022-09-29 2024-04-04 Tenstorrent Inc. Multiplication hardware block with adaptive fidelity control system
CN115718586B (zh) * 2022-11-29 2024-01-19 格兰菲智能科技有限公司 像素颜色混合操作方法、图形绘制方法、装置和设备

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
EP4053695A1 (en) 2017-03-20 2022-09-07 INTEL Corporation Systems, methods, and apparatuses for dot production operations
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
PL3629147T3 (pl) 2022-09-26
US11544057B2 (en) 2023-01-03
EP4328744A2 (en) 2024-02-28
CN110955404A (zh) 2020-04-03
CN117931121A (zh) 2024-04-26
US20190042244A1 (en) 2019-02-07
EP3812883B1 (en) 2022-03-16
US11126428B2 (en) 2021-09-21
US20230214215A1 (en) 2023-07-06
PL3812883T3 (pl) 2022-06-06
EP4328744A3 (en) 2024-04-17
CN112506467A (zh) 2021-03-16
US20210103444A1 (en) 2021-04-08
EP4044020A1 (en) 2022-08-17
US20210089303A1 (en) 2021-03-25
US10853067B2 (en) 2020-12-01
EP3812883A1 (en) 2021-04-28
EP3629147B1 (en) 2022-07-06
EP3629147A1 (en) 2020-04-01
US11868770B2 (en) 2024-01-09
ES2914605T3 (es) 2022-06-14

Similar Documents

Publication Publication Date Title
ES2927546T3 (es) Procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta
EP3916543B1 (en) Systems and methods for performing instructions to transform matrices into row-interleaved format
KR101722645B1 (ko) 축소된 다중 네스트된 루프들의 벡터화
JP6466388B2 (ja) 方法及び装置
ES2934513T3 (es) Sistemas y métodos para omitir operaciones matriciales intrascendentes
KR20240011204A (ko) 행렬 연산 가속기의 명령어들을 위한 장치들, 방법들, 및 시스템들
CN110968346A (zh) 用于执行用于快速元素解包到二维寄存器中的指令的系统
CN110909883A (zh) 用于执行指定三元片逻辑操作的指令的系统和方法
TWI486872B (zh) 向量緊縮壓縮及重複之實施系統、設備和方法
EP3716054A2 (en) Interleaved pipeline of floating-point adders
KR102585780B1 (ko) 실행을 위해 데이터 성분들을 로딩하는데 있어서 공간 구역성을 고려하기 위한 장치 및 방법
JP6738579B2 (ja) 命令フローを最適化するチェックを実行するための装置および方法
EP4276608A2 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
CN111752605A (zh) 使用浮点乘法-累加结果的模糊-j位位置
EP3929732A1 (en) Matrix data scatter and gather by row
US20220100502A1 (en) Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
CN107077333B (zh) 用于实行向量位聚集的方法和装置
ES2905697T3 (es) Sistemas, aparatos y métodos para generar un índice por orden de clasificación y reordenar elementos basándose en el orden de clasificación
CN114721624A (zh) 用于处理矩阵的处理器、方法和系统