[go: up one dir, main page]

ES2982493T3 - Acelerador de multiplicación de matrices densas-dispersas - Google Patents

Acelerador de multiplicación de matrices densas-dispersas Download PDF

Info

Publication number
ES2982493T3
ES2982493T3 ES20199012T ES20199012T ES2982493T3 ES 2982493 T3 ES2982493 T3 ES 2982493T3 ES 20199012 T ES20199012 T ES 20199012T ES 20199012 T ES20199012 T ES 20199012T ES 2982493 T3 ES2982493 T3 ES 2982493T3
Authority
ES
Spain
Prior art keywords
matrix
instruction
field
source matrix
processor
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
ES20199012T
Other languages
English (en)
Inventor
Srinivasan Narayanamoorthy
Nadathur Rajagopalan Satish
Alexey Suprun
Kenneth J Janik
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 ES2982493T3 publication Critical patent/ES2982493T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

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

Abstract

Las realizaciones descritas se refieren a operaciones de multiplicación-acumulación. En un ejemplo, un procesador comprende: una memoria caché para almacenar datos; al menos un núcleo acoplado a la memoria caché. El al menos un núcleo comprende: un circuito de ejecución para realizar operaciones de multiplicación-acumulación con una primera matriz fuente y una segunda matriz fuente para generar una matriz de resultados en respuesta a una instrucción, en donde la primera matriz fuente es una matriz dispersa que tiene elementos de datos distintos de cero ubicados en ciertas posiciones, en donde la primera matriz fuente se almacena en un formato comprimido que identifica las posiciones de los elementos de datos distintos de cero en la primera matriz fuente. El circuito de ejecución comprende además: una pluralidad de circuitos de multiplicación-acumulación para realizar una pluralidad de operaciones de multiplicación-acumulación para multiplicar los elementos de datos distintos de cero de la primera matriz fuente por los elementos de datos correspondientes de la segunda matriz fuente identificados en función de las posiciones en el formato comprimido para generar una pluralidad de productos, y para sumar la pluralidad de productos a los valores acumulados para generar elementos de datos de la matriz de resultados. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Acelerador de multiplicación de matrices densas-dispersas
CAMPO DE LA INVENCIÓN
La presente divulgación pertenece al campo de la lógica de procesamiento, los microprocesadores y las arquitecturas de conjuntos de instrucciones asociadas y, más específicamente, a un acelerador para instrucciones matriciales densas-dispersas.
ESTADO DE LA TÉCNICA ANTERIOR
El aprendizaje profundo es una clase de algoritmos de aprendizaje automático. Las arquitecturas de aprendizaje profundo, como las redes neuronales profundas, se han aplicado en campos que incluyen visión por ordenador, reconocimiento de voz, procesamiento del lenguaje natural, reconocimiento de audio, filtrado de redes sociales, traducción automática, bioinformática y diseño de fármacos.
La inferencia y el entrenamiento, dos herramientas usadas para el aprendizaje profundo, tienden hacia una aritmética de baja precisión. Maximizar el rendimiento de los algoritmos y cálculos de aprendizaje profundo puede ayudar a satisfacer las necesidades de los procesadores de aprendizaje profundo, por ejemplo, aquellos que realizan un aprendizaje profundo en un centro de datos.
Las operaciones de multiplicación de matrices densas-dispersas (SDMM) son útiles en un contexto de aprendizaje profundo. Pero las arquitecturas tradicionales de conjuntos de instrucciones de CPU y GPU requieren entradas simétricas que tengan la misma densidad, lo que limita la capacidad de obtener una ventaja de rendimiento aprovechando la dispersión de una matriz de entrada dispersa.
El documento US 2018/046900 A1 se refiere a operaciones primitivas de un acelerador de red neuronal convolucional disperso. Por ejemplo, se proporciona un método, un producto de programa informático y un sistema para realizar cálculos usando un procesador. Se recibe una primera instrucción que incluye un primer operando de vector de índice y un segundo operando de vector de índice y el primer operando de vector de índice se decodifica para producir primeros conjuntos de coordenadas para un primer arreglo, incluyendo cada primer conjunto de coordenadas al menos una primera coordenada y una segunda coordenada de una posición de un elemento distinto de cero en el primer arreglo. El segundo operando de vector de índice se decodifica para producir segundos conjuntos de coordenadas para un segundo arreglo, incluyendo cada segundo conjunto de coordenadas al menos una tercera coordenada y una cuarta coordenada de una posición de un elemento distinto de cero en el segundo arreglo. Los primeros conjuntos de coordenadas se suman con los segundos conjuntos de coordenadas para producir conjuntos de coordenadas de salida y los conjuntos de coordenadas de salida se convierten en un conjunto de índices lineales.
El documento de Morad Amir y col.: ''Efficient Dense and Sparse Matrix Multiplication on GP-SIMD" se refiere a la multiplicación de matrices densas y dispersas en GP-SIMD, una arquitectura de computación SIMD híbrida de propósito general que elimina la sincronización mediante computación en memoria, combinando el almacenamiento de datos y el procesamiento paralelo masivo.
El documento de Yavits L. y col.: "Sparse Matrix Multiplication on an Associative Processor" concierne algoritmos de multiplicación de matrices dispersas, que combinan el procesador asociativo (AP) y el procesamiento básico de la CPU en varios niveles.
El documento de Koanantakool Penporn y col.: "Communication-Avoiding Parallel Sparse-Dense Matrix-Matrix Multiplication" analiza los límites inferiores de la comunicación y compara los costes de comunicación de varios algoritmos paralelos clásicos en el contexto de la multiplicación matriz-matriz densa-dispersa. Se analiza un algoritmo para evitar la comunicación basado en una descomposición 1D, denominada 1.5D, que supera las variantes 2D y 3D para la multiplicación densa-dispersa.
El documento de Wu Tao y col.: "An efficient sparse-dense matrix multiplication on a multicore system" describe un formato de almacenamiento de matriz dispersa, un formato de almacenamiento comprimido basado en bloques y un formato de coordenadas, y un núcleo informático escalable por subprocesos para la multiplicación de matrices densas dispersas.
SUMARIO
La presente invención está definida en las reivindicaciones independientes. Las reivindicaciones dependientes definen realizaciones de las mismas. Cualquier "realización" o "ejemplo" que se divulgue en la siguiente descripción, pero que no esté cubierto por las reivindicaciones debe considerarse presentado únicamente con fines ilustrativos.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
La presente invención se ilustra a modo de ejemplo y sin limitación en las figuras de los dibujos adjuntos, en los que referencias similares indican elementos similares y en los que:
la Figura 1 es un diagrama de bloques que ilustra componentes de procesamiento para ejecutar una instrucción de multiplicación de matrices densas-dispersas (SDMM), tal como una instrucción de red neuronal virtual (SDMM), según algunas realizaciones;
la Figura 2A es un diagrama de bloques que ilustra un flujo de datos para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones;
la Figura 2B es un diagrama de bloques que ilustra un flujo de datos para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones;
la Figura 3 es un diagrama de bloques que ilustra circuitería de ejecución para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones;
la Figura 4 es un diagrama de bloques que ilustra circuitería de ejecución para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones;
la Figura 5 es un pseudocódigo que ilustra circuitería de ejecución para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones;
la Figura 6 es un diagrama de flujo de un proceso que ilustra la ejecución de una instrucción de multiplicación de matrices densas-dispersas (SDMM) mediante un procesador, según algunas realizaciones;
la Figura 7 es un diagrama de bloques que ilustra un formato de una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones;
las Figuras 8A-8B son diagramas de bloques que ilustran un formato de instrucciones genérico compatible con vectores y plantillas de instrucciones del mismo según algunas realizaciones;
la Figura 8A es un diagrama de bloques que ilustra un formato de instrucciones genérico compatible con vectores y plantillas de instrucciones de clase A del mismo según algunas realizaciones;
la Figura 8B es un diagrama de bloques que ilustra el formato de instrucciones genérico compatible con vectores y plantillas de instrucciones de clase B del mismo según algunas realizaciones;
la Figura 9A es un diagrama de bloques que ilustra un formato de instrucciones específico compatible con vectores ilustrativo según algunas realizaciones;
la Figura 9B es un diagrama de bloques que ilustra los campos del formato de instrucciones específico compatible con vectores que constituye el campo de código de operación completo, según una realización de la invención;
la Figura 9C es un diagrama de bloques que ilustra los campos del formato de instrucciones específico compatible con vectores que constituyen el campo de índice de registro, según una realización de la invención;
la Figura 9D es un diagrama de bloques que ilustra los campos del formato de instrucciones específico compatible con vectores que constituye el campo de operación de aumento según una realización de la invención;
la Figura 10 es un diagrama de bloques de una arquitectura de registro según una realización de la invención; la Figura 11A es un diagrama de bloques que ilustra tanto una canalización ilustrativa en orden como una canalización ilustrativa de emisión/ejecución fuera de orden y cambio de nombre de registro, según algunas realizaciones;
la Figura 11B es un diagrama de bloques que ilustra tanto una realización ilustrativa de un núcleo de arquitectura en orden y un núcleo ilustrativo de arquitectura de emisión/ejecución fuera de orden y cambio de nombre de registro que se incluirá en un procesador, según algunas realizaciones;
Las Figuras 12A-B ilustran un ejemplo más específico de un diagrama de bloques de una arquitectura de núcleo en orden, cuyo núcleo sería uno de varios bloques lógicos (que incluyen otros núcleos del mismo tipo y/o tipos diferentes) en un chip;
la Figura 12A es un diagrama de bloques de un único núcleo de procesador, junto con su conexión a la red de interconexión integrada y con su subconjunto local de la caché de Nivel 2 (L2), según algunas realizaciones;
la Figura 12B es una vista ampliada de parte del núcleo de procesador de la Figura 12A según algunas realizaciones;
la Figura 13 es un diagrama de bloques de un procesador que puede tener más de un núcleo, puede tener un controlador de memoria integrado y puede tener gráficos integrados según algunas realizaciones;
las Figuras 14-17 son diagramas de bloques de arquitecturas informáticas ilustrativas;
la Figura 14 muestra un diagrama de bloques de un sistema de acuerdo con una realización de la presente invención;
la Figura 15 es un diagrama de bloques de un primer sistema ilustrativo más específico de acuerdo con una realización de la presente invención;
la Figura 16 es un diagrama de bloques de un segundo sistema ilustrativo más específico de acuerdo con una realización de la presente invención;
la Figura 17 es un diagrama de bloques de un Sistema en chip (SoC) de acuerdo con una realización de la presente invención; y
la Figura 18 es un diagrama de bloques que contrasta el uso de un convertidor de instrucciones de software para convertir instrucciones binarias en un conjunto de instrucciones de origen a instrucciones binarias en un conjunto de instrucciones objetivo según algunas realizaciones.
DESCRIPCIÓN DETALLADA
En la siguiente descripción, se exponen numerosos detalles específicos. Sin embargo, se entiende que algunas realizaciones pueden ponerse en práctica sin estos detalles específicos. En otros casos, no se han mostrado en detalle circuitos, estructuras y técnicas bien conocidos para no complicar la comprensión de esta descripción.
Las referencias en la memoria descriptiva a "una realización", "una realización ilustrativa", etc., indican que la realización descrita puede incluir un rasgo, estructura o característica, pero cada realización no necesariamente puede incluir el rasgo, estructura, o característica. Además, tales expresiones no se refieren necesariamente a la misma realización. Además, cuando se describe un rasgo, estructura o característica en relación con una realización, se afirma que está dentro del conocimiento de un experto en la materia modificar tal rasgo, estructura o característica acerca de otras realizaciones si se describe explícitamente.
Las realizaciones divulgadas maximizan el rendimiento de ejecución de una instrucción de multiplicación de matrices densas-dispersas (SDMM) que tiene entradas de precisión variable, tal como una instrucción de multiplicación de matrices de red neuronal virtual (VNN) que tiene una entrada de matriz dispersa y una entrada de matriz densa. Usando la circuitería divulgada en el presente documento, se espera que las instrucciones de SDMM divulgadas produzcan una ganancia de rendimiento con respecto a las instrucciones de multiplicación de matrices que tienen operandos simétricos.
Se espera que las realizaciones divulgadas, al no usar un circuito de multiplicación de matrices simétrico convencional, mejoren el rendimiento de instrucciones de SDMM de un ordenador por un factor proporcional a la dispersión de la matriz de entrada dispersa. Tal y como se usa en el presente documento, la dispersión se refiere a la proporción de elementos de la matriz que tienen valores cero o nulos. Por ejemplo, se espera que una instrucción de SDMM que opera en una matriz dispersa que tiene una dispersión de 0,125, teniendo solo 1/8 de los elementos valores distintos de cero, tenga un rendimiento 8 veces mayor. A modo de otro ejemplo, se espera que una instrucción de SDMM que opera en una matriz dispersa que tiene una dispersión de 0,05, teniendo solo 1/20 de los elementos valores distintos de cero, tenga un rendimiento 20 veces mayor.
En algunas realizaciones, las instrucciones de SDMM se ejecutan mediante una circuitería de ejecución que tiene carriles de procesamiento de SIMD usando una rejilla de circuitos multiplicación-suma fusionada (FMA). El ancho del carril de SIMD puede diferir en diferentes realizaciones. Por ejemplo, el ancho de carril de SIMD puede incluir cualquiera de 16 elementos, 32 elementos, 64 elementos y 128 elementos, y los elementos pueden ser cualquiera de 8 bits, 16 bits, 32 bits, 64 bits y 128 bits, sin limitación. Los carriles de SIMD se usan para ejecutar una instrucción en paralelo en múltiples elementos de datos.
En algunas realizaciones, se usan memorias de múltiples bancos para datos intermedios y almacenamiento de resultados mediante los múltiples carriles de SIMD. Por ejemplo, una circuitería de ejecución de SIMD que tiene 8 carriles de SIMD de 64 bits puede usar una memoria de 8 bancos.
La Figura 1 es un diagrama de bloques que ilustra componentes de procesamiento para ejecutar una instrucción de multiplicación de matrices densas-dispersas (SDMM), tal como una instrucción de red neuronal virtual (SDMVNNI), que tiene entradas asimétricas según algunas realizaciones. Una instrucción de red neuronal virtual se aplica en un contexto de aprendizaje profundo y es un tipo de instrucción que puede beneficiarse de una multiplicación de matrices densas-dispersas. Existen otros tipos de aplicaciones que pueden beneficiarse de una instrucción de SDMM, tal como las nuevas instrucciones de campo Galois (GFNI). Por tanto, las instrucciones de SDMM divulgadas no pretenden limitarse a las instrucciones VNNI. Como se ilustra, el almacenamiento 101 almacena una instrucción de SDMM 103 para ser ejecutada.
La instrucción de SDMM 103 se extrae del almacenamiento 101 mediante el circuito de extracción 105. La instrucción de SDMM 107 extraída se decodifica mediante el circuito decodificador 109. Por ejemplo, el circuito decodificador 109 recibe la instrucción de SDMM 107 extraída del circuito de extracción 105. El formato de instrucciones de SDMM, como se describe más adelante y con respecto a las Figuras 7-9, tiene campos para especificar un código de operación, una matriz de salida densa, una matriz de origen densa y una matriz de origen dispersa que tiene una dispersión de elementos distintos de cero que son inferiores a uno. El circuito de decodificación 109 decodifica la instrucción de SDMM 107 extraída en una o más operaciones. En algunas realizaciones, esta decodificación incluye la generación de una pluralidad de microoperaciones que realizará la circuitería de ejecución (tal como la circuitería de ejecución 117). El circuito de decodificación 109 también decodifica sufijos y prefijos de instrucciones (si se usan). La circuitería de ejecución 117 se describe e ilustra con más detalle más adelante, al menos con respecto a las Figuras 2-6 y Figuras 11-12, incluidas más adelante.
En algunas realizaciones, el circuito 113 de cambio de nombre de registro, asignación de registro y/o planificación proporciona funcionalidad para uno o más de: 1) cambiar el nombre de los valores de operandos lógicos a valores de operandos físicos (por ejemplo, una tabla de alias de registros en algunas realizaciones), 2) asignar bits de estado y banderas a la instrucción decodificada, y 3) planificar la instrucción de SDMM decodificada 111 para su ejecución en la circuitería de ejecución 117 fuera de una agrupación de instrucciones (por ejemplo, usando una estación de reserva en algunas realizaciones).
Los registros (archivo de registro) y/o la memoria 115 almacenan datos como operandos de la instrucción de SDMM decodificada 111 para ser operados por la circuitería de ejecución 117. Los tipos de registro ilustrativos incluyen registros de máscara de escritura, registros de datos empaquetados, registros de propósito general y registros de coma flotante, como se describe e ilustra con mayor detalle más adelante, al menos con respecto a Figura 10.
En algunas realizaciones, el circuito de escritura diferida 119 confirma el resultado de la ejecución de la instrucción de SDMM decodificada 111.
La Figura 2A es un diagrama de bloques que ilustra un flujo de datos para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones. Como se muestra, la instrucción de SDMM 202 tiene campos para especificar un código de operación 204 (SDMMVNNIW), una matriz de salida densa 206, una matriz de origen densa 210 y una matriz de origen dispersa 208. Como se muestra, la matriz de origen dispersa 212 especificada es lógicamente una matriz de M=3 filas por K=6 columnas que tiene una dispersión de elementos distintos de cero que es aproximadamente igual al 16,67 %. En otras palabras, solo el 16,67 % de los elementos de la matriz de origen dispersa tienen valores distintos de cero. El procesamiento de la instrucción de SDMM 202 según las realizaciones divulgadas en el presente documento mejora el rendimiento del procesador hasta seis veces, en comparación con el uso de un circuito de multiplicación de matrices simétrico convencional. Las realizaciones divulgadas evitan desperdiciar ciclos de procesamiento en elementos de valor cero de la matriz de origen dispersa 212 especificada. En algunas realizaciones, la dispersión de la matriz de origen dispersa 212 especificada está limitada a menos del 20 %. En el contexto de las redes neuronales virtuales, y como se muestra, las matrices de origen densas y dispersas pueden representar una matriz de activación y un vector de ponderaciones.
En algunas realizaciones, la matriz de origen dispersa 212 especificada es lógicamente una matriz de M por K, pero solo sus elementos distintos de cero se almacenan en la memoria en un formato de fila dispersa comprimida (CSR) o de columna dispersa comprimida (CSC), que en algunas realizaciones se prepara con antelación. Los formatos CSC y CSR se describen con más detalle más adelante, al menos con referencia a la Figura 4.
En algunas realizaciones, la instrucción de SDMM 202 especifica además un tamaño de elemento (en este caso, el código de operación 204 incluye un sufijo "W", que especifica Elementos de tamaño normal). El formato de la instrucción de SDMM se ilustra y describe con más detalle más adelante, al menos con respecto a las Figuras 7-9. En algunas realizaciones, una o más de las matrices identificadas se almacenan en registros, tales como en un archivo de registro de un procesador, por ejemplo, como se ilustra y analiza más adelante con referencia a la Figura 10. En algunas realizaciones, una o más de las matrices identificadas se almacenan en una ubicación de memoria.
Como se muestra, la matriz de origen dispersa 212 especificada es una matriz que lógicamente tiene M filas (igual a 3) y K columnas (igual a 6), con elementos distintos de cero en (0,0), (3,3) y (2,5). Por consiguiente, la matriz de origen dispersa 212 especificada tiene una dispersión de aproximadamente 16,67 %, y el procesamiento de la instrucción según las realizaciones divulgadas proporciona una mejora de hasta seis veces en el rendimiento del procesador. La matriz de origen densa 214 especificada tiene K filas (igual a 6) y N columnas (igual a 6). La matriz de salida densa 216 especificada se muestra con M filas y N columnas. Como se describe en el presente documento, las letras mayúsculas, M, N y K, se usan para hacer referencia a las dimensiones máximas de las matrices, mientras que las letras minúsculas, m, n y k, se usan como índices de las posiciones de los elementos dentro de las matrices.
En funcionamiento, como lo muestran los indicadores de flujo de datos 218, 220 y 222, para cada elemento distinto de cero en la fila m y columna k de la matriz de origen dispersa 212 especificada, la circuitería de ejecución genera un producto del elemento distinto de cero y todos los correspondientes elementos densos en la fila k de la matriz de origen densa 214 especificada. A continuación, la circuitería de ejecución acumula cada producto generado con valores anteriores de un elemento de salida correspondiente en la fila m de la matriz de salida densa 216 especificada. En algunas realizaciones, la circuitería de ejecución escribe la suma acumulada en los elementos correspondientes de la matriz de salida densa 216 especificada. En algunas realizaciones, la circuitería de ejecución escribe la suma acumulada en una memoria de bloc de notas (no mostrada) antes de escribir en la matriz de salida densa.
La Figura 2B es un diagrama de bloques que ilustra un flujo de datos para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones. Como se muestra, la instrucción de SDMM 252 tiene campos para especificar un código de operación 254 (SDMMVNNI), una matriz de salida densa 256, una matriz de origen densa 260 y una matriz de origen dispersa 258. La matriz de origen dispersa 262 especificada es lógicamente una matriz de M=4 por K=4, con elementos distintos de cero en la primera y tercera columnas. Por consiguiente, la matriz de origen dispersa 262 especificada tiene una dispersión de 0,5. En otras palabras, el 50 % de los elementos de la matriz de origen dispersa 262 especificada tienen valores distintos de cero. La instrucción de SDMM 252, procesada según las realizaciones divulgadas en el presente documento, mejora el rendimiento del procesador dos veces, en comparación con el uso de un circuito de multiplicación de matrices simétrico convencional. Las realizaciones divulgadas evitan desperdiciar ciclos de procesamiento en elementos de origen de valor igual a cero. En algunas realizaciones, la dispersión de la matriz de origen dispersa 262 especificada está limitada a menos del 10 %. En algunas realizaciones, una o más de las matrices identificadas se almacenan en registros, tales como en un archivo de registro de un procesador, por ejemplo, como se ilustra y analiza más adelante con referencia a la Figura 10. En algunas realizaciones, una o más de las matrices de origen dispersas, de origen densas y de salida densas especificadas se almacenan en una ubicación de memoria.
Como se muestra, la matriz de origen dispersa 262 especificada es una matriz que lógicamente tiene M filas (igual a 4) y K columnas (igual a 4), con ocho elementos distintos de cero en la columna 0 y la columna 2. La matriz de origen densa 270 especificada tiene K filas (igual a 4) y N columnas (igual a 4). Como se describe en el presente documento, las letras mayúsculas, M, N y K, se usan para hacer referencia a las dimensiones máximas de las matrices, mientras que las letras minúsculas, m, n y k, se usan para referirse a índices de las posiciones del elemento dentro de las matrices.
En funcionamiento, según algunas realizaciones, para cada elemento distinto de cero en la fila m y la columna k de la matriz de origen dispersa 262 especificada, la circuitería de ejecución genera un producto del elemento distinto de cero y cada elemento correspondiente en la fila k y la columna {0, n-1} de la matriz de origen densa 264 especificada. En esta realización, como se muestra en la etapa 1, 266, cada uno de los elementos distintos de cero de la primera columna de la matriz de origen dispersa 262 especificada se multiplica por cada elemento en la primera fila correspondiente de la matriz de origen densa 264 especificada. Como se muestra en la etapa 2, 268, cada uno de los elementos distintos de cero de la tercera columna de la matriz de origen dispersa 262 especificada se multiplica por cada elemento en la tercera fila correspondiente de la matriz de origen densa 264 especificada. A continuación, la circuitería de ejecución acumula los productos generados en la etapa 1, 266, y la etapa 2, 268, con los valores anteriores del elemento de salida correspondiente en la fila m y la columna n de la matriz de salida densa especificada 270. Para simplificar, en este caso no se muestran los valores anteriores de la matriz de salida, pero se supone que son cero. En algunas realizaciones, la circuitería de ejecución escribe las sumas acumuladas en los elementos correspondientes de la matriz de salida densa. En algunas realizaciones, la circuitería de ejecución escribe la suma acumulada en una memoria de bloc de notas antes de escribir en la matriz de salida densa.
La Figura 3 es un diagrama de bloques que ilustra un circuito de ejecución para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones. Como se muestra, la instrucción de SDMM 302 tiene campos para especificar un código de operación 304 (SDMMVNNI), una matriz de salida densa 306, una matriz de origen dispersa 308 y una matriz de origen densa 310. Como se ilustra, la matriz de origen dispersa 312 especificada tiene una dispersión de elementos distintos de cero que es, a efectos de ilustración, de aproximadamente 0,07. En otras palabras, alrededor del 7 % de los elementos de la matriz de origen dispersa especificada tienen valores distintos de cero. El procesamiento de la instrucción de SDMM según las realizaciones divulgadas en el presente documento mejora el rendimiento del procesador aproximadamente 14 veces, en comparación con el uso de un circuito de multiplicación de matrices simétrico convencional. Las realizaciones divulgadas evitan desperdiciar ciclos de procesamiento en elementos de origen de valor igual a cero. En algunas realizaciones, la dispersión de la matriz de origen dispersa está limitada a menos del 10 %. En algunas realizaciones, una o más de las matrices identificadas se almacenan en registros, tales como en un archivo de registro de un procesador, por ejemplo, como se ilustra y analiza más adelante con referencia a la Figura 10. En algunas realizaciones, una o más de las matrices identificadas se almacenan en una ubicación de memoria.
Como se muestra, la matriz de origen dispersa 312 especificada es una matriz que tiene M filas (igual a 8) y K columnas (igual a 2), con un elemento distinto de cero en la fila 6 y la columna 1. La matriz de origen densa 314 especificada tiene K filas (igual a 2) y N columnas (igual a 6). La matriz de salida densa 316 especificada se muestra con M filas (igual a 8) y N columnas (igual a 6).
En funcionamiento, según algunas realizaciones, para cada elemento distinto de cero en la fila m y la columna k de la matriz de origen dispersa 312 especificada, la circuitería de ejecución genera un producto del elemento distinto de cero y cada elemento denso correspondiente en la fila k y la columna n de la matriz de origen densa 314 especificada. Como se muestra, el elemento distinto de cero en el elemento (6,1) de la matriz de origen dispersa 312 especificada se multiplica por cada elemento en la fila correspondiente 1 de la matriz de origen densa 314 especificada usando multiplicadores 318. La circuitería de ejecución genera a continuación una suma acumulada de los productos generados por los multiplicadores 318 y los valores anteriores de los elementos correspondientes de la matriz de salida densa 316 especificada usando sumadores/acumuladores 320. En este caso, no se muestran los valores anteriores de la matriz de salida, pero, por simplicidad, se supone que son cero. En algunas realizaciones, la circuitería de ejecución escribe las sumas acumuladas en los elementos correspondientes de la matriz de salida densa 316 especificada. En algunas realizaciones, la circuitería de ejecución escribe las sumas acumuladas en una memoria de bloc de notas 322 antes de escribir en la matriz de salida densa 316 especificada.
Los circuitos de ejecución para ejecutar la instrucción de SDMM, según las realizaciones divulgadas, se ilustran y analizan con más detalle al menos con respecto a las Figuras 4-6, y las Figuras 11-12.
La Figura 4 es un diagrama de bloques que ilustra un circuito de ejecución 411 para procesar una instrucción de multiplicación de matrices densas-dispersas (SDMM), según algunas realizaciones. Como se muestra, la instrucción de SDMM 402 tiene campos para especificar un código de operación 404 (SDMMVNNI), una matriz de salida densa 406, una matriz de origen dispersa 408 y una matriz de origen densa 410. En la realización ilustrada, las matrices de salida densa, de origen densa y de origen dispersa especificadas tienen dimensiones M=N=256 y K=512 de entradas de 2 bytes de precisión y la matriz de origen dispersa especificada tiene una dispersión de 0,125.
FORMATO DE FILA DISPERSA COMPRIMIDA/FORMATO DE COLUMNA DISPERSA COMPRIMIDA
En algunas realizaciones, la matriz de origen dispersa especificada se almacena en formato disperso en la memoria 412, de tal manera que el circuito de ejecución 411 lee la matriz con formato disperso, pero solo almacena en memoria intermedia los valores distintos de cero en memorias intermedias dispersas 414.
Sin embargo, para evitar accesos innecesarios a la memoria y conservar el espacio de memoria, algunas realizaciones almacenan solo los elementos distintos de cero de la matriz de origen dispersa en la memoria 412 en formato de fila dispersa comprimida (CSR) o de columna dispersa comprimida (CSC). Con los formatos CSR y CSC, solo se almacenan los elementos distintos de cero de la matriz de origen dispersa, organizados en formato de fila principal o formato de columna principal, respectivamente. En algunas realizaciones, las matrices de origen dispersas con formato CSR o CSC se preparan en la memoria 412 antes de la operación mediante hardware o software especializado.
MEMORIAS INTERMEDIAS DISPERSAS 414
La matriz de origen dispersa especificada en la realización ilustrada es lógicamente una matriz de 256X512 que tiene 32 elementos distintos de cero por columna, es decir, con una dispersión de 0,125. La realización ilustrada usa el formato CSC para almacenar la matriz de origen dispersa en las memorias intermedias dispersas 414 y cada columna de la matriz dispersa de origen dispersa se divide en 8 bancos basándose en el índice de fila M. En funcionamiento, 32 elementos distintos de cero por columna de la matriz de origen dispersa se almacenan en 8 bancos de las memorias intermedias dispersas 414, distribuidos equitativamente entre ellos en el caso ideal. En algunas realizaciones, cada una de las entradas de la memoria intermedia dispersa usa hasta cinco bytes, que incluyen dos bytes para almacenar un valor de datos y hasta 3 bytes para especificar una posición de matriz del elemento dentro de la matriz de origen dispersa especificada. En algunas realizaciones, la matriz de origen dispersa especificada tiene lógicamente M=16 filas y K=16 columnas, y la posición de la matriz de 1 byte especifica un desplazamiento del elemento dentro de los 256 elementos. En algunas realizaciones, la matriz de origen dispersa especificada tiene M=16 filas y K=16 columnas y la posición de la matriz de 1 byte incluye un cuarteto para especificar la columna y un cuarteto para especificar la fila en la que se encuentra el elemento.
ARREGLO DE MULTIPLICADORES 416
En la realización ilustrada, el arreglo de multiplicadores tiene un tamaño de 8X32 donde las 8 filas del arreglo de multiplicadores están conectadas a los 8 bancos de las memorias intermedias dispersas 414 que proporcionan los 8 valores multiplicadores por ciclo necesarios para la multiplicación. 32 elementos de la fila k de la matriz de origen densa especificada que forman el multiplicando se difunden y se multiplican a través de 8 elementos de las memorias intermedias dispersas 414, realizando así 256 multiplicaciones por ciclo. El producto parcial de 32 elementos generado por banco se acumula a continuación en el arreglo acumulador 418. En algunas realizaciones, los 32 elementos de la matriz de origen densa especificada se almacenan en registros (no mostrados) antes de las multiplicaciones. En algunas realizaciones, como se muestra, los 32 elementos se introducen en el arreglo de multiplicadores 416 a medida que se cargan desde la memoria 412. En algunas realizaciones, el arreglo de multiplicadores 416 comprende una rejilla de unidades de hardware de multiplicación-suma-fusionada (FMA).
ARREGLO DE ACUMULADORES 418
Como se muestra, el arreglo de acumuladores 418 incluye 256 acumuladores divididos en 8 bancos, cada uno de ellos conectado al banco correspondiente de memorias intermedias dispersas 414 y el arreglo de multiplicadores 416. En las operaciones, los acumuladores (32 por banco) del arreglo de acumuladores 418 acumulan los productos generados por el arreglo de multiplicadores 416 con valores anteriores de los elementos correspondientes de la matriz de salida densa especificada por el campo de la matriz de salida densa 406 de la instrucción de SDMM 402.
CIRCUITO DE REDONDEO Y SATURACIÓN 420
En algunas realizaciones, los productos generados por el arreglo de multiplicadores 416 y acumulados por el arreglo de acumuladores 418 son resultados intermedios de alta precisión representados por al menos el doble de bits que los usados por los elementos de datos de las matrices especificadas. En algunas realizaciones, el circuito de redondeo y saturación 420 satura los resultados intermedios a un máximo predefinido y los redondea para que quepan dentro del número de bits de elementos de la matriz de salida densa especificados por el campo de matriz de salida densa 406 de la instrucción de SDMM 402, que en este caso es de 16 bits.
En el caso de la aritmética de coma flotante, el circuito de redondeo y saturación 420 puede redondear los resultados intermedios según el estándar de coma flotante IEEE 754, establecido en 1985 y actualizado en 2008 por el Instituto de Ingenieros Eléctricos y Electrónicos. El estándar de coma flotante IEEE 754 define las reglas de redondeo que se aplicarán, incluyendo el redondeo al valor más cercano con empates a par, el redondeo al valor más cercano con empates lejos de cero, hacia cero, hacia infinito positivo y hacia infinito negativo. En algunas realizaciones, el circuito de redondeo y saturación 420 incluye un registro de control de redondeo accesible por software (no mostrado) para especificar la regla de redondeo que se aplicará.
En algunas realizaciones, cada una de las unidades de hardware de FMA en el arreglo de multiplicadores 416 realiza el redondeo por sí misma. En algunas realizaciones, cada una de las unidades de hardware de FMA del arreglo de multiplicadores 416 verifica la saturación y realiza la saturación por sí misma.
BLOC DE NOTAS 422
Como se muestra, el circuito de ejecución 411 incluye un bloc de notas 422 para almacenar resultados de ejecución intermedios. En algunas realizaciones, como en este caso, el bloc de notas 422 es una memoria de 32 kB, dividida en ocho (8) bancos, cada uno de ellos conectado uno a uno con la fila correspondiente del arreglo de multiplicadores y el banco del acumulador. En algunas realizaciones, todos los bancos del bloc de notas 422 se comunican con los bancos correspondientes del arreglo de acumuladores 418 en paralelo, generando una conexión de gran ancho de banda. El uso del formato CSC para la multiplicación, mediante el cual solo los elementos distintos de cero de la matriz de origen dispersa especificada se almacenan en memorias intermedias dispersas 414 y se suministran al arreglo de multiplicadores 416, evita la necesidad de usar un costoso circuito de dispersión de recopilación para recopilar y suministrar datos distintos de cero al arreglo de multiplicadores 416 y al arreglo de acumuladores 418.
En algunas realizaciones, como en este caso, el circuito de ejecución 411 utiliza uno o más carriles de procesamiento de instrucción única y múltiples datos (SIMD), por ejemplo, 8 carriles, para realizar una misma operación en múltiples elementos de datos al mismo tiempo. En algunas realizaciones, un carril de procesamiento de SIMD tiene un ancho de carril de 32 elementos y se usan 8 líneas de procesamiento de SIMD para realizar 256 operaciones en 256 elementos de datos.
En algunas realizaciones, dos o más líneas de procesamiento de SIMD operan simultáneamente y en paralelo. El número de carriles en un procesador de SIMD, así como el número de elementos asignados a cada carril, puede variar, sin limitación. Según algunas realizaciones, un carril de procesamiento de SIMD se implementa con un ancho de carril de 8 elementos, 16 elementos o 32 elementos, con anchos de elementos de 8 bits, 16 bits, 32 bits o 64 bits, sin limitación.
En algunas realizaciones, el circuito de ejecución 411 realiza la instrucción de SDMM 402 realizando operaciones de multiplicación-acumulación usando unidades de hardware de multiplicación-suma fusionada (FMA) para generar los productos de cada elemento distinto de cero de la matriz de origen dispersa especificada y cada uno de los elementos en una fila correspondiente de la matriz de origen densa especificada, y acumular productos con los valores anteriores de los elementos correspondientes de la matriz de salida densa especificada por el campo de matriz de salida densa 406 de la instrucción de SDMM 402.
Tal como se usa en el presente documento, el término "correspondiente" tiene una interpretación diferente en función de su contexto. En el contexto de generar los productos, los elementos correspondientes de la matriz de origen densa especificada por el campo de matriz de origen densa 410 que corresponden a cada elemento distinto de cero (m, k) de la matriz de origen dispersa especificada por el campo de matriz de origen dispersa 408 de la instrucción de SDMM 402 son los elementos correspondientes, (k, n), en una fila correspondiente, k, de la matriz de origen densa especificada por el campo de matriz de origen densa 410 de la instrucción de SDMM 402. En el contexto de acumular los productos con contenidos previos de la matriz de salida densa especificada por el campo de matriz de salida densa 406 de la instrucción de SDMM 402. Los elementos correspondientes de la matriz de salida densa especificada son aquellos en las ubicaciones (m, n).
En consecuencia, el circuito de ejecución 411, al ejecutar una instrucción de SDMM 402 que especifica una matriz de origen dispersa 408 que tiene una dispersión de 0,125, mejora 8 veces el rendimiento del procesador en el que está incorporado, en comparación con el uso de un circuito de multiplicación de matrices simétrico.
La circuitería de ejecución para ejecutar la instrucción de SDMM según las realizaciones divulgadas se ilustra y analiza con más detalle, al menos con respecto a las Figuras 3-6, y las
Figuras 11-12.
La Figura 5 es un pseudocódigo que ilustra el funcionamiento de la circuitería de ejecución para procesar instrucciones que demandan una multiplicación de matrices, en este caso, una instrucción de red neuronal virtual (VNNI). Con fines ilustrativos, los pseudocódigos 502 y 504 ilustran la implementación de una instrucción de multiplicación de matrices VNNI en operandos de origen simétricos. Como se describe en el presente documento, las letras mayúsculas, M, N y K, se usan para hacer referencia a las dimensiones máximas de las matrices, mientras que las letras minúsculas, m, n y k, se usan para referirse a los índices de las posiciones del elemento dentro de las matrices. Tanto el pseudocódigo 502 como el pseudocódigo 504 ilustran la ejecución de una instrucción de VNNI en una matriz de origen A de M filas por K columnas (M x K) y en una matriz de origen B de K filas por N columnas (K x N) para generar resultados de una Matriz de salida C de M filas por N columnas (M x N). Los pseudocódigos 506 y 508, por otro lado, ilustran la ejecución de la instrucción de SDMM según las realizaciones divulgadas, en donde solo se procesan los elementos distintos de cero de la matriz de origen dispersa A, aumentando así el rendimiento del procesador en proporción a la dispersión de la matriz de origen A.
La circuitería de ejecución para ejecutar la instrucción de SDMM según las realizaciones divulgadas se ilustra y analiza al menos con respecto a las Figuras 3-6, y las Figuras 11-12.
La Figura 6 es un diagrama de flujo de un proceso que ilustra la ejecución de una instrucción de multiplicación de matrices densas-dispersas (SDMM) mediante un procesador, según algunas realizaciones. En 602, el procesador extrae, del almacenamiento de código usando circuitería de extracción, la instrucción de multiplicación de matriz densa-dispersa que tiene campos para especificar un código de operación, una matriz de salida densa, una matriz de origen densa y una matriz de origen dispersa que tiene una dispersión de elementos distintos de cero, siendo la dispersión inferior a uno. La instrucción de SDMM extraída en 602 puede denominarse instrucción de SDMM asimétrica, en la medida en que un origen es una matriz dispersa y el otro origen es una matriz densa. En 604, el procesador decodifica, mediante una circuitería de decodificación, la instrucción de SDMM extraída. En 606, el procesador opcionalmente programa la ejecución de la instrucción de SDMM decodificada mediante un circuito de ejecución de SIMD. La operación 606 es opcional, como lo indica su borde discontinuo, en la medida en que la programación de la ejecución de la instrucción decodificada puede producirse en un momento diferente o no producirse en absoluto. En 608, el procesador ejecuta, mediante una circuitería de ejecución, la instrucción de SDMM decodificada, para cada elemento distinto de cero en la fila M y columna K de la matriz de origen dispersa, para generar un producto del elemento distinto de cero y cada elemento denso correspondiente en la fila K y columna N de la matriz de origen densa; y acumula cada producto generado con un valor anterior de un elemento de salida correspondiente en la fila M y columna N de la matriz de salida densa. En 610, el procesador opcionalmente confirma o retira la instrucción de SDMM ejecutada. La operación 610 es opcional, como lo indica su borde discontinuo, en la medida en que puede producirse en un momento diferente o no producirse en absoluto.
La circuitería de ejecución para ejecutar la instrucción de SDMM según las realizaciones divulgadas se ilustra y analiza al menos con respecto a las Figuras 3-6, y las Figuras 11-12.
La Figura 7 es un formato ilustrativo de una instrucción de multiplicación de matrices densas dispersas (SDMM), según algunas realizaciones. Como se muestra, la instrucción de SDMM 700 incluye un código de operación 702 (SDMMVNNI*) y campos para especificar una matriz de salida densa 704, una matriz de origen densa 706 y una matriz de origen dispersa 708. La instrucción de SDMM 700 incluye además campos opcionales para especificar el tamaño del elemento 710 y las dimensiones M, N y K, 712, 714 y 716. En algunas realizaciones, una o más de las dimensiones 712, 714 y 716 opcionales se especifican mediante un registro específico de modelo (MSR) programable por software, que puede ser un MSR predeterminado. Como se muestra en Figura 7, el tamaño de elemento 710 opcional puede estar especificado como parte del código de operación y las dimensiones M, N y K, 712, 714 y 716 pueden estar especificadas por un MSR, como parte del código de operación, o una combinación de los mismos. Se muestra que el código de operación 702 incluye un asterisco para indicar que, opcionalmente, puede incluir prefijos o sufijos adicionales para especificar comportamientos de instrucción. Por ejemplo, el código de operación 702 puede incluir un sufijo, tal como "B", "W", "D" o "Q", para especificar un tamaño de elemento de ocho, dieciséis, treinta y dos y sesenta y cuatro bits, respectivamente. Si la instrucción de SDMM 700 no especifica ninguno de los parámetros opcionales, se usan valores predeterminados. El formato de la instrucción de SDMM se ilustra y describe con más detalle más adelante con respecto a la Figura 8A,
la Figura 8B y las Figuras 9A-D.
PREPARACIÓN ANTICIPADA DE LA MATRIZ DE ORIGEN DISPERSA COMPRIMIDA
Con referencia de nuevo a la Figura 2B, la matriz de origen dispersa comprimida (CSR o CSC) especificada en algunas realizaciones se prepara con antelación. Los formatos CSC y CSR se ilustran y describen con más detalle, al menos con referencia a la Figura 4.
En algunas realizaciones, la instrucción de SDMM 700 se usa para hacer que el procesador prepare una matriz de origen dispersa en formato comprimido (ya sea, CSR o CSC, como se ilustra y describe con más detalle, con respecto a la Figura 4). En algunas realizaciones, el código de operación 702 puede incluir un prefijo o un sufijo, tal como "PREP", para indicar al procesador que prepare una matriz de origen dispersa comprimida. En tales realizaciones, el campo de la matriz de salida densa 704 especifica una dirección de memoria en la que almacenar la matriz de origen dispersa comprimida, y la matriz de origen dispersa 708 especifica una ubicación de memoria en la que se almacena un conjunto de datos dispersos, comprendiendo el conjunto de datos dispersos un bloque grande de memoria que tiene una dispersión de elementos válidos, estando la validez determinada por los propios valores de datos (por ejemplo, no válido siendo nulo, cero o por debajo de un valor umbral), o por un campo de control adjunto e indicando la validez de cada elemento. El tamaño del conjunto de datos dispersos se especifica en tales realizaciones mediante el campo de matriz de origen densa 706.
En un ejemplo, la instrucción de SDMM 700 incluye un código de operación 702 que tiene un sufijo "PREP", especifica una matriz de salida densa 704 donde almacenar la matriz de origen dispersa condensada, usa el campo de la matriz de origen dispersa 708 para especificar dónde se encuentra un conjunto de datos dispersos que comprende decenas, cientos, miles, millones o miles de millones de elementos de datos, con elementos no válidos que tienen valores nulos, y usa el campo de matriz de origen densa 706 para especificar un tamaño del conjunto de datos dispersos. En respuesta, el procesador carga los elementos de datos desde la ubicación de la matriz de origen dispersa 708 especificada, usa el campo de la matriz de origen densa 706 para determinar el tamaño del conjunto de datos dispersos, determina si cada elemento de datos es válido y escribe los elementos válidos, en formato comprimido (CSR o CSC) en la ubicación de la matriz de salida densa 704 especificada, que en algunas realizaciones es una ubicación alineada con la línea de memoria caché. Por tanto, el procesador empaqueta los elementos válidos del conjunto de datos dispersos en formato comprimido (CSR o CSC) en la matriz de salida especificada, que puede servir como una matriz de origen dispersa para una instrucción de SDMM posterior.
En otro ejemplo, la instrucción de SDMM 700 incluye un código de operación 702 que tiene un sufijo "PREP", especifica una matriz de salida densa 704 donde almacenar la matriz de origen dispersa condensada, usa el campo de la matriz de origen dispersa 708 para especificar dónde se encuentra un conjunto de datos dispersos que comprende decenas, cientos, miles, millones o miles de millones de elementos de datos, incluyendo cada elemento campos de control que incluyen al menos un bit válido, y usa el campo de matriz de origen densa 706 para especificar un tamaño (es decir, un número de elementos) del conjunto de datos dispersos. En respuesta, el procesador carga los elementos de datos desde la ubicación de la matriz de origen dispersa 708 especificada, usa el campo de la matriz de origen densa 706 para determinar el tamaño del conjunto de datos dispersos, determina si cada elemento de datos es válido y escribe los elementos válidos, en formato comprimido (CSR o CSC) en la ubicación de la matriz de salida densa 704 especificada, que en algunas realizaciones es una ubicación alineada con la línea de memoria caché. Por tanto, el procesador empaqueta los elementos válidos del conjunto de datos dispersos en formato comprimido (CSR o CSC) en la matriz de salida especificada, que puede servir como una matriz de origen dispersa para una instrucción de SDMM posterior.
En algunas realizaciones, un procesador que responde a una instancia de instrucción de SDMM 700 que tiene un código de operación con un sufijo "PREP" opera en segundo plano programando de manera oportunista la ejecución de sus cargas requeridas y almacena solo cuando el nivel de actividad del procesador está por debajo de un valor umbral. En algunas realizaciones, un procesador que responde a una instancia de instrucción de SDMM 700 que tiene un código de operación con un sufijo "PREP" genera una interrupción al finalizar la compresión del conjunto de datos dispersos especificado.
CONJUNTOS DE INSTRUCCIONES
Un conjunto de instrucciones puede incluir uno o más formatos de instrucciones. Un formato de instrucciones dado puede definir diversos campos (por ejemplo, número de bits, ubicación de los bits) para especificar, entre otras cosas, la operación a realizar (por ejemplo, código de operación) y los operandos en los que se realizará esa operación y/u otro campo o campos de datos (por ejemplo, máscara). Algunos formatos de instrucción se desglosan aún más mediante la definición de plantillas de instrucciones (o subformatos). Por ejemplo, las plantillas de instrucciones de un formato de instrucciones dado pueden definirse para tener diferentes subconjuntos de los campos del formato de instrucciones (los campos incluidos típicamente están en el mismo orden, pero al menos algunos tienen posiciones de bits diferentes porque hay menos campos incluidos) y/o definirse para tener un campo dado interpretado de manera diferente. Por tanto, cada instrucción de una ISA se expresa usando un formato de instrucciones dado (y, si está definido, en cada una de las plantillas de instrucciones de ese formato de instrucciones) e incluye campos para especificar la operación y los operandos. Por ejemplo, una instrucción ADD de ejemplo tiene un código de operación específico y un formato de instrucciones que incluye un campo de código de operación para especificar ese código de operación y campos de operando para seleccionar operandos (origenl/destino y origen2); y una aparición de esta instrucción ADD en una secuencia de instrucciones tendrá contenidos específicos en los campos de operandos que seleccionan operandos específicos. Se ha lanzado y/o publicado un conjunto de extensiones de SIMD denominadas Extensiones vectoriales avanzadas (AVX) (AVX1 y AVX2) y que usan el esquema de codificación de Extensiones vectoriales (VEX) (por ejemplo, véase Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, septiembre de 2014; y véase la Referencia de programación de extensiones vectoriales avanzadas Intel®, octubre de 2014).
FORMATOS DE INSTRUCCIONES ILUSTRATIVOS
Las realizaciones de las instrucciones descritas en el presente documento pueden realizarse en diferentes formatos. Además, a continuación, se detallan sistemas, arquitecturas y canales ilustrativos. Se pueden ejecutar realizaciones de la instrucción o instrucciones en tales sistemas, arquitecturas y canalizaciones, pero no se limitan a las detalladas.
Formato de instrucciones genérico compatible con vectores
Un formato de instrucciones compatible con vectores es un formato de instrucciones adecuado para instrucciones vectoriales (por ejemplo, hay ciertos campos específicos para operaciones vectoriales). Si bien se describen realizaciones en las que tanto las operaciones vectoriales como las escalares están soportadas a través del formato de instrucciones compatible con vectores, realizaciones alternativas usan únicamente operaciones vectoriales en el formato de instrucciones compatible con vectores.
Las Figuras 8A-8B son diagramas de bloques que ilustran un formato de instrucciones genérico compatible con vectores y plantillas de instrucciones del mismo, según algunas realizaciones. La Figura 8A es un diagrama de bloques que ilustra un formato de instrucciones genérico compatible con vectores y plantillas de instrucciones de clase A del mismo, según algunas realizaciones; mientras que la Figura 8B es un diagrama de bloques que ilustra el formato de instrucciones genérico compatible con vectores y sus plantillas de instrucciones de clase B, según algunas realizaciones. Específicamente, un formato de instrucciones genérico compatible con vectores 800 para el que se definen plantillas de instrucciones de clase A y clase B, ambas de las cuales incluyen las plantillas de instrucciones sin acceso a memoria 805 y las plantillas de instrucciones de acceso a memoria 820. El término genérico en el contexto del formato de instrucciones compatible con vectores se refiere al formato de instrucciones que no está vinculado a ningún conjunto de instrucciones específico.
Si bien se describirán algunas realizaciones en las que el formato de instrucciones compatible con vectores admite lo siguiente: una longitud (o tamaño) de operando vectorial de 64 bytes con anchos (o tamaños) de elementos de datos de 32 bits (4 bytes) o 64 bits (8 bytes) (y, por tanto, un vector de 64 bytes consta de 16 elementos de tamaño de palabra doble o, alternativamente, de 8 elementos de tamaño de palabra cuádruple); una longitud (o tamaño) de operando vectorial de 64 bytes con anchos (o tamaños) de elementos de datos de 16 bits (2 bytes) u 8 bits (1 bytes); una longitud (o tamaño) de operando vectorial de 32 bytes con anchos (o tamaños) de elementos de datos de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) u 8 bits (1 bytes); y una longitud (o tamaño) de operando vectorial de 16 bytes con anchos (o tamaños) de elementos de datos de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) u 8 bits (1 bytes); realizaciones alternativas pueden soportar más, menos y/o diferentes tamaños de operandos vectoriales (por ejemplo, operandos vectoriales de 256 bytes) con más, menos o diferentes anchos de elementos de datos (por ejemplo, anchos de elementos de datos de 128 bits (16 bytes)).
Las plantillas de instrucciones de clase A en la Figura 8A incluyen: 1) dentro de las plantillas de instrucciones 805 sin acceso a memoria se muestra una plantilla de instrucciones de operación de tipo control de redondeo completo sin acceso a memoria 810 y una plantilla de instrucciones de operación de tipo transformación de datos sin acceso a memoria 815; y 2) dentro de las plantillas de instrucciones de acceso a memoria 820 se muestra una plantilla de instrucciones de acceso a memoria temporal 825 y una plantilla de instrucciones de acceso a memoria no temporal 830. Las plantillas de instrucciones de clase B en Figura 8B incluyen: 1) dentro de las plantillas de instrucciones sin acceso a memoria 805 se muestra una plantilla de instrucciones sin acceso a memoria, control de máscara de escritura, operación de tipo de control de redondeo parcial 812 y una plantilla de instrucciones sin acceso a memoria, control de máscara de escritura, operación de tipo vsize 817; y 2) dentro de las plantillas de instrucciones de acceso a la memoria 820 se muestra una plantilla de instrucciones de acceso a la memoria y control de máscara de escritura 827.
El formato de instrucciones genérico compatible con vectores 800 incluye los siguientes campos enumerados más adelante en el orden ilustrado en las Figuras 8A-8B.
Campo de formato 840: un valor específico (un valor identificador de formato de instrucciones) en este campo se identifica de forma única el formato de instrucciones compatible con vectores y, por tanto, las apariciones de instrucciones en el formato de instrucciones compatible con vectores en flujos de instrucciones. Como tal, este campo es opcional en el sentido de que no es necesario para un conjunto de instrucciones que solo tiene el formato de instrucciones genérico compatible con vectores.
Campo de operación de base 842 - su contenido distingue diferentes operaciones de base.
Campo de índice de registro 844 - su contenido, directamente o a través de la generación de direcciones, especifica las ubicaciones de los operandos de origen y destino, ya sea en los registros o en la memoria. Estos incluyen suficientes bits para seleccionar N registros de un archivo de registros PxQ (por ejemplo, 32x512, 16x128, 32x1024, 64x1024). Si bien en una realización N puede ser hasta tres registros de origen y uno de destino, realizaciones alternativas pueden soportar registros de origen y de destino (por ejemplo, pueden soportar hasta dos orígenes donde uno de estos orígenes también actúa como el destino, pueden soportar hasta tres orígenes 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 846 - su contenido distingue las apariciones de instrucciones en el formato de instrucciones genérico de vector que especifican el acceso a memoria de aquellas que no lo hacen; es decir, entre las plantillas de instrucciones sin acceso a memoria 805 y las plantillas de instrucciones de acceso a memoria 820. 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). Si bien en una realización este campo también selecciona entre tres formas diferentes de realizar cálculos de direcciones de memoria, realizaciones alternativas pueden soportar más, menos o diferentes formas de realizar cálculos de direcciones de memoria.
Campo de operación de aumento 850 - su contenido distingue cuál de una diversidad de operaciones diferentes se realizará además de la operación de 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 868, un campo alfa 852 y un campo beta 854. El campo de operación de aumento 850 permite que se realicen grupos comunes de operaciones en una única instrucción en lugar de 2, 3 o 4 instrucciones.
Campo de escala 860 - su contenido permite escalar el contenido del campo de índice para la generación de direcciones de memoria (por ejemplo, para la generación de direcciones que usa 2escala * índice base).
Campo de desplazamiento 862A - su contenido se usa como parte de la generación de direcciones de memoria (por ejemplo, para la generación de direcciones que usa 2escala * índice base desplazamiento).
Campo de factor de desplazamiento 862B (obsérvese que la yuxtaposición del campo de desplazamiento 862A directamente sobre el campo de factor de desplazamiento 862B indica que se usa uno u otro) - su contenido se usa como parte de la generación de direcciones; especifica un factor de desplazamiento a escalar de acuerdo con el tamaño de un acceso a memoria (N), donde N es el número de bytes en el acceso a memoria (por ejemplo, para la generación de direcciones que usa 2escala * índice base desplazamiento escalado). Los bits redundantes de orden inferior se ignoran y, por consiguiente, el contenido del campo del factor de desplazamiento se multiplica por el tamaño total de los operandos de memoria (N) para generar el desplazamiento final que se usará en el cálculo de una dirección efectiva. El valor de N está determinado por el hardware del procesador en tiempo de ejecución basándose en el campo de código de operación completo 874 (descrito más adelante en el presente documento) y el campo de manipulación de datos 854C. El campo de desplazamiento 862A y el campo de factor de desplazamiento 862B son opcionales en el sentido de que no se usan para las plantillas de instrucciones sin acceso a memoria 805 y/o diferentes realizaciones pueden implementar únicamente uno o ninguno de los dos.
Campo de ancho de elemento de datos 864: su contenido distingue cuál de muchos anchos de elemento de datos se va a usar (en algunas realizaciones para todas las instrucciones; en otras realizaciones solo para algunas de las instrucciones). Este campo es opcional en el sentido de que no es necesario si únicamente se soporta una anchura de elemento de datos y/o se soportan anchuras de elementos de datos usando algún aspecto de los códigos de operación.
Campo de máscara de escritura 870: su contenido controla, por cada posición del elemento de datos, si esa posición del elemento de datos en el operando del vector de destino refleja el resultado de la operación de base y la operación de aumento. Las plantillas de instrucciones de clase A soportan la fusión de máscaras de escritura, mientras que las plantillas de instrucciones de clase B soportan tanto la fusión como la puesta a cero de máscaras de escritura. Cuando se fusionan, las máscaras vectoriales permiten proteger de actualizaciones cualquier conjunto de elementos en el destino durante la ejecución de cualquier operación (especificada por la operación de base y la operación de aumento); en otra realización, conservando el valor antiguo de cada elemento del destino donde el bit de máscara correspondiente tiene un 0. Por el contrario, cuando las máscaras vectoriales de puesta a cero permiten poner a cero cualquier conjunto de elementos en el destino durante la ejecución de cualquier operación (especificada por la operación de 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 del vector de la operación que se realiza (es decir, el intervalo 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 tanto, el campo de máscara de escritura 870 permite operaciones vectoriales parciales, incluyendo cargas, almacenamientos, aritméticas, lógicas, etc. Si bien se describen algunas realizaciones de la invención en las que el contenido del campo de máscara de escritura 870 selecciona uno de muchos registros de máscara de escritura que contiene la máscara de escritura que se va a usar (y, por tanto, el contenido del campo de máscara de escritura 870 identifica indirectamente ese enmascaramiento que se va a realizar), unas realizaciones alternativas en su lugar o adicionales permiten que el contenido del campo de escritura de máscara 870 especifique directamente el enmascaramiento a realizar.
Campo inmediato 872 - su contenido permite la especificación de un inmediato. Este campo es opcional en el sentido de que no está presente en una implementación del formato compatible con vectores genéricos que no soporta inmediato y no está presente en instrucciones que no usan un inmediato.
Campo de clase 868 - su contenido distingue entre diferentes clases de instrucciones. Con referencia a las Figuras 8A-B, el contenido de este campo selecciona entre instrucciones de clase A y clase B. En las Figuras 8A-B, se usan cuadrados de esquinas redondeadas para indicar que un valor específico está presente en un campo (por ejemplo, clase A 868A y clase B 868B para el campo de clase 868, respectivamente, en las
Figuras 8A-B).
PLANTILLAS DE INSTRUCCIONES DE CLASE A
En el caso de las plantillas de instrucciones sin acceso a memoria de clase A 805, el campo alfa 852 se interpreta como un campo de RS 852A, cuyo contenido distingue cuál de los diferentes tipos de operación de aumento va a realizarse (por ejemplo, el redondeo 852A.1 y la transformación de datos 852A.2 se especifican respectivamente para las plantillas de instrucciones de operación de tipo de redondeo sin acceso a memoria 810 y operación de tipo de transformación de datos sin acceso a memoria 815), mientras que el campo beta 854 distingue cuál de las operaciones del tipo especificado va a realizarse. En las plantillas de instrucciones sin acceso a memoria 805, el campo de escala 860, el campo de desplazamiento 862A y el campo de escala de desplazamiento 862B no están presentes.
PLANTILLAS DE INSTRUCCIONES SIN ACCESO A MEMORIA - OPERACIÓN DE TIPO DE CONTROL DE REDONDEO COMPLETO
En la plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 810, el campo beta 854 se interpreta como un campo de control de redondeo 854A, cuyo contenido o contenidos proporcionan redondeo estático. Si bien en las realizaciones descritas de la invención, el campo de control de redondeo 854A incluye un campo de supresión 856 de todas las excepciones de coma flotante (SAE) y un campo de control de operación de redondeo 858, las realizaciones alternativas pueden soportar la codificación de ambos conceptos en el mismo campo o solo tener uno o el otro de estos conceptos/campos (por ejemplo, pueden tener solo el campo de control de operación de redondeo 858).
Campo de SAE 856 - su contenido distingue si se debe o no inhabilitar el informe de eventos de excepción; cuando el contenido del campo de SAE 856 indica que la supresión está habilitada, una instrucción dada no informa de ningún tipo de bandera de excepción de coma flotante y no genera ningún manejador de excepción de coma flotante.
Campo de control de operación de redondeo 858 - su contenido distingue cuál de un grupo de operaciones de redondeo se realizará (por ejemplo, redondeo hacia arriba, redondeo hacia abajo, redondeo hacia cero y redondeo hacia el valor más cercano). Por tanto, el campo de control de operación de redondeo 858 permite el cambio del modo de redondeo por instrucción. En una realización de la invención donde un procesador incluye un registro de control para especificar modos de redondeo, el contenido del campo de control de operación de redondeo 850 anula ese valor de registro.
PLANTILLAS DE INSTRUCCIONES SIN ACCESO A MEMORIA - OPERACIÓN DE TIPO DE TRANSFORMACIÓN DE DATOS
En la plantilla de instrucciones de operación de tipo de transformada de datos sin acceso a memoria 815, el campo beta 854 se interpreta como un campo de transformada de datos 854B, cuyo contenido distingue cuál de un número de transformaciones 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 820 de clase A, el campo alfa 852 se interpreta como un campo de sugerencia de desalojo 852B, cuyo contenido distingue cuál de las sugerencias de desalojo se va a usar (en la Figura 8A , temporal 852B.1 y no temporal 852B.2 se especifican respectivamente para la plantilla de instrucciones de acceso a memoria, temporal 825 y la plantilla de instrucciones de acceso a memoria, no temporal 830), mientras que el campo beta 854 se interpreta como un campo de manipulación de datos 854C, 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 instrucciones de acceso a memoria 820 incluyen el campo de escala 860 y, opcionalmente, el campo de desplazamiento 862A o el campo de escala de desplazamiento 862B.
Las instrucciones de memoria vectoriales realizan cargas y almacenes de vectores en la memoria, con soporte de conversión. Al igual que con las instrucciones vectoriales normales, las instrucciones de memoria vectorial transfieren datos desde/hacia la memoria en forma de elementos de datos y los elementos que se transfieren están dictados por el contenido de la máscara vectorial que se selecciona como máscara de escritura.
PLANTILLAS DE INSTRUCCIONES DE ACCESO A LA MEMORIA-TEMPORAL
Los datos temporales son datos que probablemente se reutilizarán lo suficientemente pronto como para beneficiarse del almacenamiento en caché. Sin embargo, esto es una sugerencia, y diferentes procesadores pueden implementarla de diferentes maneras, incluso ignorando la sugerencia por completo.
PLANTILLAS DE INSTRUCCIONES DE ACCESO A MEMORIA - NO TEMPORAL
Los datos no temporales son datos que es poco probable que se reutilicen lo suficientemente pronto como para beneficiarse del almacenamiento en la memoria caché en la caché de 1er nivel y se les debe dar prioridad para el desalojo. Sin embargo, esto es una sugerencia, y diferentes procesadores pueden implementarla de diferentes maneras, incluso ignorando la sugerencia por completo.
PLANTILLAS DE INSTRUCCIONES DE CLASE B
En el caso de las plantillas de instrucciones de clase B, el campo alfa 852 se interpreta como un campo de control de máscara de escritura (Z) 852C, cuyo contenido distingue si el enmascaramiento de escritura controlado por el campo de máscara de escritura 870 debe ser una fusión o una puesta a cero.
En el caso de las plantillas de instrucciones sin acceso a memoria 805 de clase B, parte del campo beta 854 se interpreta como un campo RL 857A, cuyo contenido distingue cuál de los diferentes tipos de operación de aumento se va a realizar (por ejemplo, redondeo 857A.1) y la longitud del vector (VSIZE) 857A.2 se especifica respectivamente para la plantilla de instrucción de la operación de tipo de control de redondeo parcial de control de máscara de escritura sin acceso a memoria 812 y la plantilla de instrucción de la operación de tipo VSIZE de control de máscara de escritura sin acceso a memoria 817), mientras que el resto del campo beta 854 distingue cuál de las operaciones del tipo especificado se va a realizar. En las plantillas de instrucciones sin acceso a memoria 805, el campo de escala 860, el campo de desplazamiento 862A y el campo de escala de desplazamiento 862B no están presentes.
En la plantilla de instrucción de operación sin acceso a memoria, de control de máscara de escritura, tipo de control de redondeo parcial 810, el resto del campo beta 854 se interpreta como un campo de operación de redondeo 859A y el informe de eventos de excepción está inhabilitado (una instrucción dada no informa ninguna clase de bandera de excepción de coma flotante y no genera ningún manejador de excepción de coma flotante).
Campo de control de operación de redondeo 859A - al igual que el campo de control de operación de redondeo 858, 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 valor más cercano). Por tanto, el campo de control de operación de redondeo 859A permite el cambio del modo de redondeo por instrucción. En una realización de la invención donde un procesador incluye un registro de control para especificar modos de redondeo, el contenido del campo de control de operación de redondeo 850 anula ese valor de registro.
En la plantilla de instrucciones de operación de tipo VSIZE 817, control de máscara de escritura, sin acceso a memoria, el resto del campo beta 854 se interpreta como un campo de longitud de vector 859B, cuyo contenido distingue cuál de varias longitudes de vector de datos se va a realizar (por ejemplo, 128, 256 o 512 bytes).
En el caso de una plantilla de instrucciones de acceso a memoria 820 de clase B, parte del campo beta 854 se interpreta como un campo de difusión 857B, cuyo contenido distingue si se va a realizar la operación de manipulación de datos de tipo difusión, mientras que el resto del campo beta 854 se interpreta como el campo de longitud de vector 859B. Las plantillas de instrucciones de acceso a memoria 820 incluyen el campo de escala 860 y, opcionalmente, el campo de desplazamiento 862A o el campo de escala de desplazamiento 862B.
Acerca del formato de instrucciones genérico compatible con vectores 800, se muestra un campo de código de operación completo 874 que incluye el campo de formato 840, el campo de operación de base 842 y el campo de ancho de elemento de datos 864. Si bien se muestra una realización donde el campo de código de operación completo 874 incluye estos campos, el campo de código de operación completo 874 incluye menos que estos campos en realizaciones que no los soportan todos. El campo de código de operación completo 874 proporciona el código de operación (opcode).
El campo de operación de aumento 850, el campo de anchura de elemento de datos 864 y el campo de máscara de escritura 870 permiten que estas características se especifiquen en una base por instrucción en el formato de instrucciones genérico compatible con vectores.
La combinación del campo de máscara de escritura y el campo de anchura de elemento de datos crea instrucciones escritas que permiten que se aplique la máscara basándose en diferentes anchuras de elementos de datos.
Las diversas plantillas de instrucciones que se encuentran dentro de la clase A y la clase B son beneficiosas en diferentes situaciones. En algunas realizaciones, diferentes procesadores o diferentes núcleos dentro de un procesador pueden admitir solo la clase A, solo la clase B o ambas clases. Por ejemplo, un núcleo fuera de orden de propósito general de alto rendimiento destinado a computación de propósito general puede soportar solo clase B, un núcleo destinado principalmente a gráficos y/o computación científica (rendimiento) puede soportar solo clase A, y un núcleo destinado a ambos puede soportar ambos (por supuesto, un núcleo que tiene alguna mezcla de plantillas e instrucciones de ambas clases, pero no todas las plantillas e instrucciones de ambas clases están dentro del alcance de la invención). Además, un solo 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 gráficos separados y núcleos de propósito general, uno de los núcleos de gráficos destinado principalmente a gráficos y/o computación científica puede soportar solo la clase A, mientras que uno o más de los núcleos de propósito general pueden ser núcleos de propósito general de alto rendimiento con ejecución fuera de orden y cambio de nombre de registro destinado a computación de propósito general que soportan solo clase B. Otro procesador que no tiene un núcleo de gráficos separado, puede incluir uno más núcleos de propósito general en o fuera de orden que soportan tanto clase A como clase B. Por supuesto, las características de una clase también pueden implementarse en la otra clase en diferentes realizaciones. Los 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 únicamente instrucciones de la clase o clases soportadas por el procesador objetivo para su ejecución; o 2) una forma que tiene rutinas alternativas escritas usando diferentes combinaciones de las 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.
FORMATO DE INSTRUCCIONES COMPATIBLE CON VECTORES ESPECÍFICO ILUSTRATIVO
La Figura 9A es un diagrama de bloques que ilustra un formato de instrucciones específico compatible con vectores ilustrativo, según algunas realizaciones. La Figura 9A muestra un formato de instrucciones específico compatible con vectores 900 que es específico en el sentido de que especifica la ubicación, el tamaño, la interpretación y el orden de los campos, así como los valores para algunos de esos campos. El formato de instrucciones específico compatible con vectores 900 se puede usar para ampliar el conjunto de instrucciones x86 y, por tanto, algunos de los campos son similares o iguales a aquellos usados en el conjunto de instrucciones x86 existente y la extensión del mismo (por ejemplo, AVX). Este formato sigue siendo consistente 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 x86 existente con extensiones. Se ilustran los campos de la Figura 8 a los que se mapean los campos de la Figura 9A .
Se debe entender que, aunque algunas realizaciones se describen con referencia al formato de instrucciones específico compatible con vectores 900 en el contexto del formato de instrucciones genérico compatible con vectores 800 con fines ilustrativos, la invención no se limita al formato de instrucciones específico compatible con vectores 900 excepto donde se reivindique. Por ejemplo, el formato de instrucciones genérico compatible con vectores 800 contempla una diversidad de tamaños posibles para los diversos campos, mientras que el formato de instrucciones compatible con vectores específicos 900 se muestra teniendo campos de tamaños específicos. A modo de ejemplo específico, mientras que el campo de anchura de elemento de datos 864 se ilustra como un campo de un bit en el formato de instrucciones específico compatible con vectores 900, la invención no está así limitada (es decir, el formato de instrucciones genérico compatible con vectores 800 contempla otros tamaños del campo de anchura de elemento de datos 864).
El formato de instrucciones genérico compatible con vectores 800 incluye los siguientes campos enumerados más adelante en el orden ilustrado en la Figura 9A.
Prefijo EVEX (Bytes 0-3) 902: está codificado en formato de cuatro bytes.
Campo de formato 840 (Byte de EVEX 0, bits [7:0]) - el primer byte (Byte de EVEX 0) es el campo de formato 840 y contiene 0x62 (el valor único usado para distinguir el formato de instrucciones compatible con vectores en una realización de la invención).
El segundo-cuarto de bytes (Bytes de EVEX 1-3) incluyen un número de campos de bits que proporcionan una capacidad específica.
Campo REX 905 (Byte de EVEX 1, bits [7-5]): consta de 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 857BEX 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 en 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 es conocido en la técnica (rrr, xxx y bbb), de modo que Rrrr, Xxxx y Bbbb pueden formarse sumando EVEX.R, EVEX.X, y EVEX.B.
Campo REX' 810 - esta es la primera parte del campo REX' 810 y es el campo de bits EVEX.R' (Byte de EVEX 1, 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 más adelante, se almacena en formato de bits invertidos para distinguir (en el bien conocido modo x86 de 32 bits) 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 más adelante) el valor de 11 en el campo MOD; algunas realizaciones alternativas de la invención no almacenan este y los otros bits indicados más adelante 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 de otros campos.
Campo de mapa de código de operación 915 (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).
El campo de anchura de elemento de datos 864 (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 (ya sean elementos de datos de 32 bits o elementos de datos de 64 bits).
EVEX.vvvv 920 (Byte de EVEX 2, bits [6:3]-vvvv)- la función de EVEX.vvvv puede incluir lo siguiente: 1) EVEX.vvvv codifica el primer operando de registro de origen, especificado en forma invertida (complemento a 1) y es válido para instrucciones con 2 o más operandos de origen; 2) EVEX.vvvv codifica el operando de registro de destino, especificado en forma de complemento a 1 para ciertos desplazamientos de vector; o 3) EVEX.vvvv no codifica ningún operando, el campo está reservado y debe contener 1111b. Por tanto, el campo 920 de EVEX.vvvv codifica los 4 bits de orden inferior del primer especificador de registro de origen almacenado en forma invertida (complemento a 1s). Dependiendo de la instrucción, se usa un campo de bits EVEX adicional diferente para extender el tamaño del especificador a 32 registros.
EVEX.U 868 campo de Clase (byte de EVEX 2, bit [2]-U) - Si EVEX.U = 0, indica clase A o EVEX.U0; si EVEX.U = 1 indica clase B o EVEX.U1.
Campo de codificación de prefijo 925 (byte de EVEX 2, bits [1:0] - pp) - proporciona bits adicionales para el campo de operación de base. Además de proporcionar soporte para las instrucciones SSE heredadas en el formato de prefijo EVEX, esto también tiene la ventaja de compactar el prefijo de SIMD (en lugar de requerir un byte para expresar el prefijo de SIMD, el prefijo de EVEX requiere solo 2 bits). En una realización, para soportar instrucciones SSE heredadas que usan un prefijo de SIMD (66H, F2H, F3H) tanto en el formato heredado como en el formato de prefijo EVEX, estos prefijos de SIMD heredados se codifican en el campo de codificación de prefijo de SIMD; y en el tiempo de ejecución se expanden en el prefijo de SIMD heredado antes de proporcionarse al PLA del decodificador (para que el<p>L<a>pueda ejecutar tanto el formato heredado como el EVEX de estas instrucciones heredadas sin modificaciones). Aunque las instrucciones más nuevas podrían usar el contenido del campo de codificación del prefijo EVEX directamente como una extensión del código de operación, ciertas realizaciones se expanden de manera similar para mantener la consistencia, pero permiten que estos prefijos de SIMD heredados especifiquen diferentes significados. Una realización alternativa puede rediseñar el PLA para soportar las codificaciones de prefijo de SIMD de 2 bits y, por lo tanto, no requerir la expansión.
Campo alfa 852 (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 ilustrado con a) - como se describió anteriormente, este campo es específico del contexto.
EVEX Campo beta 854 (byte de EVEX 3, bits [6:4]-SSS, también conocido como EVEX.s<2>-<0>, EVEX.r<2>-<0>, EVEX.rr1, EVEX.LL0, EVEX.LLB; también ilustrado con ppp) como se describió anteriormente, este campo es específico del contexto.
Campo REX' 810 - 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 formato de bits invertidos. 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 870 (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 describió anteriormente. En una realización de la invención, el valor específico EVEX.kkk=000 tiene un comportamiento especial que implica que no se usa una máscara de escritura para la instrucción particular (esto se puede implementar de una diversidad de formas, incluyendo el uso de una máscara de escritura cableada a todos o al hardware que sortea el hardware de enmascaramiento).
El campo de código de operación real 930 (byte 4) también se conoce como byte de código de operación. Parte del código de operación se especifica en este campo.
El campo MOD R/M 940 (byte 5) incluye el campo MOD 942, el campo Reg 944 y el campo R/M 946. Como se describió anteriormente, el contenido del campo MOD 942 distingue entre operaciones de acceso a memoria y operaciones sin acceso a memoria. La función del campo Reg 944 se puede resumir en dos situaciones: codificar el operando del registro de destino o un operando del registro de origen, o tratarse como una extensión de código de operación y no usarse para codificar un operando de instrucción. La función del campo R/M 946 puede incluir lo siguiente: codificar el operando de instrucción que hace referencia a una dirección de memoria, o codificar el operando del registro de destino o un operando del registro de origen.
Byte de escala, índice, base (SIB) (Byte 6): como se describió anteriormente, el contenido del campo de escala 850 se usa para la generación de direcciones de memoria. SIB.xxx 954 y SIB.bbb 956 - el contenido de estos campos ha sido mencionado anteriormente con respecto a los índices de registro Xxxx y Bbbb.
Campo de desplazamiento 862A (Bytes 7-10) - cuando el campo MOD 942 contiene 10, los bytes 7-10 son el campo de desplazamiento 862A, y funciona igual que el desplazamiento de 32 bits heredado (disp32) y funciona con granularidad de byte.
Campo de factor de desplazamiento 862B (Byte 7) - cuando el campo MOD 942 contiene 01, el byte 7 es el campo de factor de desplazamiento 862B. La ubicación de este campo es la misma que la del desplazamiento de 8 bits (disp8) del conjunto de instrucciones x86 heredado, que funciona con granularidad de bytes. Dado que disp8 es un signo extendido, solo puede direccionar entre -128 y 127 compensaciones de bytes; en términos de líneas de caché de 64 bytes, disp8 usa 8 bits que se pueden establecer en solo cuatro valores realmente útiles: -128, -64, 0 y 64; dado 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 862B es una reinterpretación de disp8; cuando se usa el campo de factor de desplazamiento 862B, el desplazamiento real se determina 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 (un solo byte de lo usado para el desplazamiento, pero con un rango mucho mayor). Tal desplazamiento comprimido se basa en la suposición de que el desplazamiento efectivo es un múltiplo de la granularidad del acceso a memoria y, por lo tanto, no es necesario codificar los bits de bajo orden redundantes de la compensación de dirección. En otras palabras, el campo de factor de desplazamiento 862B sustituye el desplazamiento de 8 bits del conjunto de instrucciones x86 heredado. Por tanto, el campo de factor de desplazamiento 862B se codifica de la misma manera que un desplazamiento de 8 bits del conjunto de instrucciones x86 (por lo que no hay cambios en las reglas de codificación ModRM/SIB) con la única excepción de que disp8 se sobrecarga a disp8*N. En otras palabras, no hay cambios en las reglas de codificación o longitudes de codificación, sino solo en la interpretación del valor de desplazamiento por el 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 inmediato 872 funciona como se ha descrito anteriormente.
CAMPO DE CÓDIGO DE OPCIÓN COMPLETO
La Figura 9B es un diagrama de bloques que ilustra los campos del formato de instrucciones específico compatible con vectores 900 que constituyen el campo de código de operación completo 874, según una realización de la invención. Específicamente, el campo de código de operación completo 874 incluye el campo de formato 840, el campo de operación de base 842 y el campo de anchura de elemento de datos (W) 864. El campo de operación de base 842 incluye el campo de codificación de prefijo 925, el campo de mapa de código de operación 915 y el campo de código de operación real 930.
CAMPO DE ÍNDICE DE REGISTRO
La Figura 9C es un diagrama de bloques que ilustra los campos del formato de instrucciones específico compatible con vectores 900 que constituyen el campo de índice de registro 844, según una realización de la invención. Específicamente, el campo de índice de registro 844 incluye el campo REX 905, el campo REX' 910, el campo MODR/M.reg 944, el campo MODR/M.r/m 946, el campo V<v>V<v>920, el campo xxx 954 y el campo bbb 956.
CAMPO DE OPERACIÓN DE AUMENTO
La Figura 9D es un diagrama de bloques que ilustra los campos del formato de instrucciones específico compatible con vectores que constituye el campo de operación de aumento 850, según una realización de la invención. Cuando el campo de clase (U) 868 contiene 0, significa EVEX.U0 (clase A 868A); cuando contiene 1, significa EVEX.U1 (clase B 868B). Cuando U=0 y el campo MOD 942 contiene 11 (lo que significa una operación sin acceso a memoria), el campo alfa 852 (byte de EVEX 3, bit [7] - EH) se interpreta como el campo de rs 852A. Cuando el campo de RS 852A contiene un 1 (redondeo 852A.1), el campo beta 854 (byte de EVEX 3, bits [6:4]-SSS) se interpreta como el campo de control de redondeo 854A. El campo de control de redondeo 854A incluye un campo de SAE de un bit 856 y un campo de operación de redondeo de dos bits 858. Cuando el campo rs 852A contiene un 0 (transformación de datos 852A.2), el campo beta 854 (byte de EVEX 3, bits [6:4]-SSS) se interpreta como un campo de transformación de datos de tres bits 854B. Cuando U=0 y el campo MOD 942 contiene 00, 01 o 10 (lo que significa una operación de acceso a memoria), el campo alfa 852 (byte de EVEX 3, bit [7] - EH) se interpreta como el campo de sugerencia de desalojo (EH) 852B y el campo beta 854 (byte de EVEX 3, bits [6:4]-SSS) se interpreta como un campo de manipulación de datos de tres bits 854C.
Cuando U=1, el campo alfa 852 (byte de EVEX 3, bit [7] - EH) se interpreta como el campo de control de máscara de escritura (Z) 852C. Cuando U=1 y el campo MOD 942 contiene 11 (lo que significa una operación sin acceso a memoria), parte del campo beta 854 (byte de EVEX 3, bit [4] - S<0>) se interpreta como el campo de RL 857A; cuando contiene un 1 (redondeo 857A.1) el resto del campo beta 854 (byte de EVEX 3, bit [6-5] - S<2>-<1>) se interpreta como el campo de operación de redondeo 859A, mientras que cuando el campo de RL 857A contiene un 0 (VSIZE 857.A2) el resto del campo beta 854 (byte de EVEX 3, bit [6-5] - S<2>-<1>) se interpreta como el campo de longitud de vector 859B (byte de EVEX 3, bit [6-5] - L<1>-<0>). Cuando U=1 y el campo MOD 942 contiene 00, 01 o 10 (lo que significa una operación de acceso a memoria), el campo beta 854 (byte de EVEX 3, bits [6:4] - SSS) se interpreta como el campo de longitud de vector 859B (byte de EVEX 3, bit [6-5] - L<1>-<0>) y el campo de difusión 857B (byte de EVEX 3, bit [4] - B).
Arquitectura de registro ilustrativa
La Figura 10 es un diagrama de bloques de una arquitectura de registro 1000 según una realización de la invención. En la realización ilustrada, hay 32 registros vectoriales 1010 que tienen 512 bits de anchura; estos registros se referencian como zmm0 a zmm31. Los 256 bits de orden inferior de los 16 registros zmm inferiores se superponen en los registros ymm0-16. Los 128 bits de orden inferior de los 16 registros zmm inferiores (los 128 bits de orden inferior de los registros ymm) se superponen en los registros xmm0-15. El formato de instrucciones específico compatible con vectores 900 opera en este archivo de registro superpuesto, como se ilustra en las siguientes tablas.
En otras palabras, el campo de longitud de vector 859B selecciona entre una longitud máxima y una o más longitudes más cortas, donde cada una de tales longitudes más cortas es la mitad de la longitud de la longitud precedente; y las plantillas de instrucciones sin el campo de longitud de vector 859B operan en la longitud de vector máxima. Además, en una realización, las plantillas de instrucciones de clase B del formato de instrucciones específico compatible con vectores 900 operan en datos de coma flotante de precisión sencilla/doble escalar o empaquetados y datos de entero escalar o empaquetados. Las operaciones escalares son operaciones realizadas en la posición del elemento de datos de orden más bajo en un registro zmm/ymm/xmm; las posiciones de los elementos de datos de orden superior se dejan igual que antes de la instrucción o se ponen a cero dependiendo de la realización.
Registros de máscara de escritura 1015 - en la realización ilustrada, hay 8 registros de máscara de escritura (k0 a k7), cada uno de 64 bits de tamaño. En una realización alternativa, los registros de máscara de escritura 1015 tienen un tamaño de 16 bits. Como se describió anteriormente, en una realización de la invención, el registro de máscara vectorial k0 no se puede usar como máscara de escritura; cuando la codificación que normalmente indicaría k0 se usa para una máscara de escritura, selecciona una máscara de escritura cableada de 0xFFFF, inhabilitando efectivamente la máscara de escritura para esa instrucción.
Registros de propósito general 1025 - en la realización ilustrada, hay dieciséis registros de propósito general de 64 bits que se usan junto con los modos de direccionamiento x86 existentes para direccionar operandos de memoria. A estos registros se hace referencia con los nombres RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP y R8 a R15.
Archivo de registro de pila de coma flotante escalar (pila x87) 1045, en el que se asigna un alias al archivo de registro plano entero empaquetado MMX 1050, en la realización ilustrada, la pila x87 es una pila de ocho elementos usada para realizar operaciones escalares de coma flotante en datos de coma flotante de 32/64/80 bits usando la extensión del conjunto de instrucciones x87; mientras que los registros MMX se usan para realizar operaciones con datos enteros empaquetados de 64 bits, así como para contener operandos para algunas operaciones realizadas entre los registros MMX y XMM.
Realizaciones alternativas pueden usar registros más anchos o más estrechos. Además, las realizaciones alternativas pueden usar más, menos o diferentes registros y archivos de registro.
ARQUITECTURAS DE NÚCLEO, PROCESADORES Y ARQUITECTURAS INFORMÁTICAS ILUSTRATIVAS
Los núcleos de procesador se pueden implementar de diferentes maneras, para diferentes propósitos y en diferentes procesadores. Por ejemplo, las implementaciones de tales núcleos pueden incluir: 1) un núcleo de propósito general en orden destinado a computación de propósito general; 2) un núcleo de propósito general fuera de orden de alto rendimiento destinado a computación de propósito general; 3) un núcleo de propósito especial destinado principalmente a gráficos y/o computación científica (rendimiento). Las implementaciones de diferentes procesadores pueden incluir: 1) una CPU que incluye uno o más núcleos de propósito general en orden destinados a la computación de propósito general y/o uno o más núcleos de propósito general fuera de orden destinados a la computación de propósito general; y 2) un coprocesador que incluye uno o más núcleos de propósito especial destinados principalmente a gráficos y/o temas científicos (rendimiento). Tales procesadores diferentes conducen a diferentes arquitecturas de sistemas informáticos, que pueden incluir: 1) el coprocesador en un chip separado de la CPU; 2) el coprocesador en una matriz separada en el mismo paquete que una CPU; 3) el coprocesador en la misma matriz que una CPU (en cuyo caso, un coprocesador de este tipo a veces se denomina lógica de propósito especial, tal como gráficos integrados y/o lógica científica (de rendimiento), o núcleos de propósito especial); y 4) un sistema en un chip que puede incluir en la misma matriz la CPU descrita (en ocasiones denominada como el núcleo o núcleos de aplicación o el procesador o procesadores de aplicación), el coprocesador descrito anteriormente y funcionalidad adicional. A continuación, se describen arquitecturas de núcleo ilustrativas, seguidas de descripciones de procesadores y arquitecturas informáticas ilustrativas.
ARQUITECTURAS DE NÚCLEO ILUSTRATIVAS
DIAGRAMA DE BLOQUES DEL NÚCLEO EN ORDEN Y FUERA DE ORDEN
La Figura 11A es un diagrama de bloques que ilustra tanto una canalización ilustrativa en orden como una canalización ilustrativa de emisión/ejecución fuera de orden y cambio de nombre de registro, según algunas realizaciones. La Figura 11B es un diagrama de bloques que ilustra tanto una realización ilustrativa de un núcleo de arquitectura en orden y un núcleo ilustrativo de arquitectura de emisión/ejecución fuera de orden y cambio de nombre de registro que se incluirá en un procesador, según algunas realizaciones. Los cuadros con líneas continuas de las Figuras 11A-B ilustran la canalización en orden y el núcleo en orden, mientras que la adición opcional de los cuadros con líneas discontinuas ilustra el cambio de nombre del registro, la canalización y el núcleo de emisión/ejecución fuera de orden. Dado que el aspecto en orden es un subconjunto del aspecto fuera de orden, se describirá el aspecto fuera de orden.
En la Figura 11A, una canalización de procesador 1100 incluye una etapa de extracción 1102, una etapa de decodificación de longitud 1104, una etapa de decodificación 1106, una etapa de asignación 1108, una etapa de cambio de nombre 1110, una etapa de planificación (también conocida como despacho o emisión) 1112, una etapa de lectura de registro/lectura de memoria 1114, una etapa de ejecución 1116, una etapa de escritura diferida/escritura de memoria 1118, una etapa de manejo de excepciones 1122 y una etapa de confirmación 1124.
La Figura 11B muestra el núcleo de procesador 1190 que incluye una unidad extremo frontal 1130 acoplada a una unidad de motor de ejecución 1150, y ambas están acopladas a una unidad de memoria 1170. El núcleo 1190 puede ser un núcleo de computación de conjunto de instrucciones reducidas (RISC), un núcleo de computación de conjunto de instrucciones complejas (CISC), un núcleo de palabra de instrucción muy larga (VLIW) o un tipo de núcleo híbrido o alternativo. Como otra opción más, el núcleo 1190 puede ser un núcleo de propósito especial, tal como, por ejemplo, un núcleo de red o comunicación, un motor de compresión, un núcleo de coprocesador, un núcleo de unidad de procesamiento de gráficos informáticos de propósito general (GPGPU), un núcleo de gráficos o similar.
La unidad de extremo frontal 1130 incluye una unidad de predicción de ramificación 1132 acoplada a una unidad de caché de instrucciones 1134, que está acoplada a una memoria intermedia de traducción adelantada (TLB) de instrucciones 1136, que está acoplada a una unidad de extracción de instrucciones 1138, que está acoplada a una unidad de decodificación 1140. La unidad de decodificación 1140 (o decodificador) puede decodificar instrucciones y generar como salida una o más microoperaciones, puntos de entrada de microcódigo, microinstrucciones, otras instrucciones u otras señales de control, que se decodifican a partir de, o que de otro modo reflejan o se derivan de las instrucciones originales. La unidad de decodificación 1140 se puede implementar usando varios mecanismos diferentes. Ejemplos de mecanismos adecuados incluyen, pero no se limitan a tablas de consulta, implementaciones de hardware, matrices lógicas programables (PLA), memorias de solo lectura (ROM) de microcódigo, etc. En una realización, el núcleo 1190 incluye una ROM de microcódigo u otro medio que almacena microcódigo para determinadas macroinstrucciones (por ejemplo, en la unidad de decodificación 1140 o de otro modo dentro de la unidad de extremo frontal 1130). La unidad de decodificación 1140 está acoplada a una unidad de cambio de nombre/asignación 1152 en la unidad de motor de ejecución 1150.
La unidad de motor de ejecución 1150 incluye la unidad de cambio de nombre/asignación 1152 acoplada a una unidad de retiro 1154 y un conjunto de una o más unidades de planificación 1156. La unidad o unidades de planificación 1156 representan cualquier número de planificadores diferentes, incluyendo estaciones de reserva, ventana de instrucción central, etc. La unidad o unidades de planificación 1156 están acopladas a la unidad o unidades de archivo o archivos de registro físico 1158. Cada una de las unidades de archivos de registro físico 1158 representa uno o más archivos de registro físico, diferentes de los cuales almacenan uno o más tipos de datos diferentes, como entero escalar, coma flotante escalar, entero empaquetado, coma flotante empaquetado, entero vectorial, coma flotante vectorial, estado (por ejemplo, un puntero de instrucción que es la dirección de la siguiente instrucción que se va a ejecutar), etc. En una realización, la unidad de archivos de registro físico 1158 comprende una unidad de registros vectoriales, una unidad de registros de máscara de escritura y una unidad de registros escalares. Estas unidades de registro pueden proporcionar registros vectoriales arquitectónicos, registros de máscara vectorial y registros de propósito general. La o las unidades de archivo o archivos de registro físico 1158 se superponen con la unidad de retiro 1154 para ilustrar diversas formas en las que se puede implementar el cambio de nombre de registro y la ejecución fuera de orden (por ejemplo, usando una memoria o memorias intermedias de reordenación y un archivo o archivos de registro de retiro; usando un archivo o archivos futuros, una memoria o memorias intermedias de historial y un archivo o archivos de registro de retiro; usando mapas de registros y una agrupación de registros; etc.). La unidad de retiro 1154 y la o las unidades de archivos de registro físico 1158 están acopladas al o a los grupos de ejecución 1160. El o los grupos de ejecución 1160 incluye un conjunto de una o más unidades de ejecución 1162 y un conjunto de una o más unidades con acceso a memoria 1164. Las unidades de ejecución 1162 pueden realizar varias operaciones (por ejemplo, desplazamientos, suma, resta, multiplicación) y en varios tipos de datos (por ejemplo, coma flotante escalar, entero empaquetado, coma flotante empaquetado, entero vectorial, vector coma flotante). Si bien algunas realizaciones pueden incluir varias unidades de ejecución dedicadas a funciones o conjuntos de funciones específicas, otras realizaciones pueden incluir solo una unidad de ejecución o múltiples unidades de ejecución que realizan todas las funciones. La o las unidades de planificación 1156, la o las unidades de archivos de registro físico 1158 y el o los grupos de ejecución 1160 se muestran como posiblemente plurales porque ciertas realizaciones crean canales separados para ciertos tipos de datos/operaciones (por ejemplo, un canal de entero escalar, un canal de coma flotante escalar/entero empaquetado/coma flotante empaquetado/entero vectorial/coma flotante vectorial y/o un canal con acceso a memoria, cada una de las cuales tiene su propia unidad de planificación, unidad de archivos de registro físico y/o grupo de ejecución - y en el caso de un canal con acceso a memoria separado, se implementan ciertas realizaciones en las que solo el grupo de ejecución de este canal tiene la o las unidades con acceso a memoria 1164). También se debe 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 con acceso a memoria 1164 está acoplado a la unidad de memoria 1170, que incluye una unidad TLB de datos 1172 acoplada a una unidad de caché de datos 1174 acoplada a una unidad de caché de nivel 2 (L2) 1176. En una realización ilustrativa, las unidades de acceso a memoria 1164 pueden incluir una unidad de carga, una unidad de dirección de almacenamiento y una unidad de datos de almacenamiento, cada una de las cuales está acoplada a la unidad de TLB de datos 1172 en la unidad de memoria 1170. La unidad de caché de instrucciones 1134 se acopla adicionalmente a una unidad de caché de nivel 2 (L2) 1176 en la unidad de memoria 1170. La unidad de caché de L2 1176 se acopla a otros uno o más niveles de 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 1100 como sigue: 1) la extracción de instrucciones 1138 realiza las etapas de extracción y decodificación de longitud 1102 y 1104; 2) la unidad de decodificación 1140 realiza la etapa de decodificación 1106; 3) la unidad de cambio de nombre/asignación 1152 realiza la etapa de asignación 1108 y la etapa de cambio de nombre 1110; 4) la o las unidades de planificación 1156 realizan la etapa de planificación 1112; 5) la o las unidades de archivos de registro físico 1158 y la unidad de memoria 1170 realizan la etapa 1114 de lectura de registro/lectura de memoria; el grupo de ejecución 1160 realiza la etapa de ejecución 1116; 6) la unidad de memoria 1170 y la o las unidades de archivos de registro físico 1158 realizan la etapa 1118 de escritura diferida/escritura en memoria; 7) varias unidades pueden estar implicadas en la etapa de manejo de excepciones 1122; y 8) la unidad de retiro 1154 y la o las unidades de archivos de registro físico 1158 realizan la etapa de confirmación 1124.
El núcleo 1190 puede soportar uno o más conjuntos de instrucciones (por ejemplo, el conjunto de instrucciones x86 (con algunas extensiones que se han añadido con versiones más recientes); el conjunto de instrucciones MIPS de MIPS Technologies de Sunnyvale, CA; el conjunto de instrucciones ARM (con extensiones opcionales adicionales tal 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 1190 incluye una lógica para soportar una extensión del conjunto de instrucciones de datos empaquetados (por ejemplo, AVX1, AVX2), permitiendo de este modo que las operaciones usadas por muchas aplicaciones multimedia se realicen usando datos empaquetados.
Se debe entender que el núcleo puede soportar subprocesos múltiples (ejecutando dos o más conjuntos paralelos de operaciones o subprocesos), y puede hacerlo de diversas maneras, incluyendo subprocesos múltiples en intervalos de tiempo, subprocesos múltiples simultáneos (donde un único núcleo físico proporciona un núcleo lógico para cada uno de los subprocesos que el núcleo físico está subprocesando de forma múltiple simultáneamente), o una combinación de los mismos (por ejemplo, extracción y decodificación en intervalos de tiempo y subprocesos múltiples simultáneos a partir de entonces, tal como en la tecnología Intel® Hyperthreading).
Si bien el cambio de nombre de registros se describe en el contexto de la ejecución fuera de orden, se debe entender que el cambio de nombre de registros se puede usar en una arquitectura en orden. Si bien la realización ilustrada del procesador también incluye unidades de caché de datos e instrucciones separadas 1134/1174 y una unidad de caché L2 compartida 1176, unas realizaciones alternativas pueden tener una única caché interna tanto para instrucciones como para datos, tal como, por ejemplo, una caché interna de nivel 1 (L1), o múltiples niveles de caché interna. En algunas realizaciones, el sistema puede incluir una combinación de una memoria caché interna y una memoria caché externa que es externa al núcleo y/o al procesador. Como alternativa, toda la caché puede ser externa al núcleo y/o al procesador.
ARQUITECTURA DE NÚCLEO EN ORDEN ILUSTRATIVA ESPECÍFICA
Las Figuras 12A-B ilustran 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 (que incluyen otros núcleos del mismo tipo y/o tipos diferentes) en un chip. Los bloques lógicos se comunican a través de una red de interconexión de gran ancho de banda (por ejemplo, una red en anillo) con alguna lógica de función fija, interfaces de E/S de memoria y otra lógica de E/S necesaria, de acuerdo con la aplicación.
La circuitería de ejecución para ejecutar la instrucción de SDMM según las realizaciones divulgadas se ilustra y analiza al menos con respecto a las Figuras 3-6, y las Figuras 11-12.
La Figura 12A es un diagrama de bloques de un único núcleo de procesador, junto con su conexión a la red de interconexión integrada 1202 y con su subconjunto local de la caché de Nivel 2 (L2) 1204, según algunas realizaciones. En una realización, un decodificador de instrucciones 1200 soporta el conjunto de instrucciones x86 con una extensión del conjunto de instrucciones de datos empaquetados. Una caché L1 1206 permite accesos de baja latencia a la memoria caché en las unidades escalares y vectoriales. Si bien en una realización (para simplificar el diseño), una unidad escalar 1208 y una unidad vectorial 1210 usan conjuntos de registros separados (respectivamente, registros escalares 1212 y registros vectoriales 1214) y los datos transferidos entre ellos se escriben en la memoria y a continuación se vuelven a leer desde una caché de nivel 1 (L1) 1206, realizaciones alternativas pueden usar un enfoque diferente (por ejemplo, usar un único conjunto de registros o incluir una ruta de comunicaciones que permita que los datos se transfieran entre los dos archivos de registro sin tener que escribirse ni volverse a leer).
El subconjunto local de la caché de L21204 es parte de una 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 caché de L2 1204. Los datos leídos por un núcleo de procesador se almacenan en su subconjunto de caché de L2 1204 y se puede acceder a los mismos rápidamente, en paralelo con que otros núcleos de procesador accedan a sus propios subconjuntos de caché de L2 locales. Los datos escritos por un núcleo de procesador se almacenan en su propio subconjunto de caché L2 1204 y se eliminan de otros subconjuntos, si es necesario. La red en anillo garantiza la coherencia de los datos compartidos. La red en anillo es bidireccional para permitir que agentes tales como núcleos de procesador, caché L2 y otros bloques lógicos se comuniquen entre sí dentro del chip. Cada ruta de datos del anillo tiene 1012 bits de anchura por dirección.
La Figura 12B es una vista ampliada de parte del núcleo de procesador de la Figura 12A, según algunas realizaciones. La Figura 12B incluye una caché de datos L1 1206A parte de la caché L1 1204, así como más detalles con respecto a la unidad vectorial 1210 y los registros vectoriales 1214. Específicamente, la unidad vectorial 1210 es una unidad de procesamiento vectorial (VPU) de 16 de ancho (véase la ALU 1228 de 16 de ancho), que ejecuta una o más instrucciones flotantes de precisión de enteros, sencilla y doble. La VPU soporta el mezclado de las entradas de registro con la unidad de mezcla 1220, la conversión numérica con las unidades de conversión numérica 1222A-B y la replicación con la unidad de replicación 1224 en la entrada de memoria. Los registros de máscara de escritura 1226 permiten predecir escrituras vectoriales resultantes.
La circuitería de ejecución para ejecutar la instrucción de SDMM según las realizaciones divulgadas se ilustra y analiza al menos con respecto a las Figuras 3-6, y las Figuras 11-12.
La Figura 13 es un diagrama de bloques de un procesador 1300 que puede tener más de un núcleo, puede tener un controlador de memoria integrado y puede tener gráficos integrados, según algunas realizaciones. Los recuadros con líneas continuas en la Figura 13 ilustran un procesador 1300 con un único núcleo 1302A, un agente de sistema 1310, un conjunto de una o más unidades de controlador de bus 1316, mientras que, la adición opcional de los recuadros con líneas discontinuas ilustra un procesador alternativo 1300 con múltiples núcleos 1302A-N, un conjunto de una o más de controlador de memoria integrado 1314 en la unidad de agente de sistema 1310 y lógica de propósito especial 1308.
Por tanto, diferentes implementaciones del procesador 1300 pueden incluir: 1) una CPU con la lógica de propósito especial 1308 siendo gráficos integrados y/o lógica científica (de rendimiento) (que puede incluir uno o más núcleos), y siendo los núcleos 1302A-N uno o más núcleos de propósito general (por ejemplo, núcleos de propósito general en orden, núcleos de propósito general fuera de orden, una combinación de los dos); 2) un coprocesador con núcleos 1302A-N que son un gran número de núcleos de propósito especial destinados principalmente a gráficos y/o científicos (rendimiento); y 3) un coprocesador con los núcleos 1302A-N que son un gran número de núcleos de propósito general en orden. Por tanto, el procesador 1300 puede ser un procesador de propósito general, coprocesador o procesador de propósito especial, tal como, por ejemplo, un procesador de red o comunicación, motor de compresión, procesador de gráficos, GPGPU (unidad de procesamiento de gráficos de propósito general), un coprocesador de alto rendimiento de muchos núcleos integrados (MIC) (que incluye 30 o más núcleos), procesador integrado o similar. El procesador puede implementarse en uno o más chips. El procesador 1300 puede ser parte y/o puede implementarse en uno o más sustratos usando cualquiera de muchas tecnologías de proceso, tales como, por ejemplo, BiCMOS, CMOS o NMOS.
La jerarquía de memoria incluye uno o más niveles de caché dentro de los núcleos, un conjunto o una o más unidades de caché compartidas 1306 y memoria externa (no mostrada) acoplada al conjunto de unidades de controlador de memoria integrado 1314. El conjunto de unidades de caché compartidas 1306 puede incluir una o más cachés de nivel medio, tales como de nivel 2 (L2), de nivel 3 (L3), de nivel 4 (L4) o de otros niveles de caché, una caché de último nivel (LLC) y/o combinaciones de las mismas. Si bien en una realización una unidad de interconexión basada en anillo 1312 interconecta la lógica de gráficos integrada 1308 (la lógica de gráficos integrada 1308 es un ejemplo y también se denomina en el presente documento lógica de propósito especial), el conjunto de unidades de caché compartida 1306 y la unidad de agente del sistema 1310/unidad o unidades de controlador de memoria integrada 1314, realizaciones alternativas pueden usar cualquier número de técnicas bien conocidas para interconectar dichas unidades. En una realización, se mantiene la coherencia entre una o más unidades de caché 1306 y núcleos 1302-A-N.
En algunas realizaciones, uno o más de los núcleos 1302A-N son capaces de realizar subprocesos múltiples. El agente de sistema 1310 incluye aquellos componentes que coordinan y operan los núcleos 1302A-N. La unidad de agente de sistema 1310 puede incluir, por ejemplo, una unidad de control de energía (PCU) y una unidad de visualización. La PCU puede ser o incluir la lógica y los componentes necesarios para regular el estado de energía de los núcleos 1302A-N y la lógica de gráficos integrados 1308. La unidad de visualización es para controlar una o más pantallas conectadas externamente.
Los núcleos 1302A-N pueden ser homogéneos o heterogéneos en términos de conjunto de instrucciones de arquitectura; es decir, dos o más de los núcleos 1302A-N pueden ser capaces de ejecutar el mismo conjunto de instrucciones, mientras que otros pueden ejecutar solo un subconjunto de ese conjunto de instrucciones o un conjunto de instrucciones diferente.
ARQUITECTURAS INFORMÁTICAS ILUSTRATIVAS
Las Figuras 14-17 son diagramas de bloques de arquitecturas informáticas ilustrativas. 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 de 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 móviles, reproductores multimedia portátiles, dispositivos de mano y diversos otros dispositivos electrónicos, también son adecuados. En general, son generalmente adecuados una gran diversidad de sistemas o dispositivos electrónicos que pueden incorporar un procesador y/u otra lógica de ejecución como se divulga en el presente documento.
Con referencia ahora a la Figura 14, se muestra un diagrama de bloques de un sistema 1400 de acuerdo con una realización de la presente invención. El sistema 1400 puede incluir uno o más procesadores 1410, 1415, que están acoplados a un concentrador de controlador 1420. En una realización, el concentrador DE controlador 1420 incluye un concentrador DE controlador de memoria gráfica (GMCH) 1490 y un concentrador de entrada/salida (IOH) 1450 (que puede estar en chips separados); el GMCH 1490 incluye controladores de memoria y gráficos a los que están acoplados la memoria 1440 y un coprocesador 1445; el IOH 1450 acopla los dispositivos de entrada/salida (E/S) 1460 al GMCH 1490. Como alternativa, uno o ambos controladores de memoria y gráficos están integrados dentro del procesador (como se describe en el presente documento), la memoria 1440 y el coprocesador 1445 están acoplados directamente al procesador 1410 y al concentrador de controlador 1420 en un único chip con el IOH 1450.
La naturaleza opcional de los procesadores adicionales 1415 se indica en la Figura 14 con líneas discontinuas. Cada procesador 1410, 1415 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 1300.
La memoria 1440 puede ser, por ejemplo, una memoria dinámica de acceso aleatorio (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 1420 se comunica con el o los procesadores 1410, 1415 a través de un bus multipunto, tal como un bus frontal (FSB), una interfaz punto a punto tal como QuickPath Interconnect (QPI) o una conexión similar 1495.
En una realización, el coprocesador 1445 es un procesador de propósito especial, tal como, por ejemplo, un procesador MIC de alto rendimiento, un procesador de red o comunicación, motor de compresión, procesador de gráficos, GPGPU, procesador integrado o similar. En una realización, el concentrador de controlador 1420 puede incluir un acelerador de gráficos integrado.
Puede haber una diversidad de diferencias entre los recursos físicos 1410, 1415 en términos de un espectro de métricas de mérito que incluyen características arquitectónicas, microarquitectónicas, térmicas, de consumo de energía y similares.
En una realización, el procesador 1410 ejecuta instrucciones que controlan operaciones de procesamiento de datos de un tipo general. Incrustadas dentro de las instrucciones puede haber instrucciones de coprocesador. El procesador 1410 reconoce estas instrucciones de coprocesador como de un tipo que debería ser ejecutado por el coprocesador adjunto 1445. En consecuencia, el procesador 1410 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 1445. Los coprocesadores 1445 aceptan y ejecutan las instrucciones de coprocesador recibidas.
Con referencia ahora a la Figura 15, se muestra un diagrama de bloques de un primer sistema 1500 ilustrativo más específico de acuerdo con una realización de la presente invención. Como se muestra en la Figura 15, el sistema multiprocesador 1500 es un sistema de interconexión punto a punto e incluye un primer procesador 1570 y un segundo procesador 1580 acoplados a través de una interconexión punto a punto 1550. Cada uno de los procesadores 1570 y 1580 puede ser alguna versión del procesador 1300. En una realización de la invención, los procesadores 1570 y 1580 son respectivamente los procesadores 1410 y 1415, mientras que el coprocesador 1538 es el coprocesador 1445. En otra realización, los procesadores 1570 y 1580 son respectivamente el procesador 1410 y el coprocesador 1445.
Los procesadores 1570 y 1580 se muestran incluyendo las unidades de controlador de memoria integrada (IMC) 1572 y 1582, respectivamente. El procesador 1570 también incluye como parte de sus unidades de controlador de bus, interfaces punto a punto (P-P) 1576 y 1578; de manera similar, el segundo procesador 1580 incluye interfaces P-P 1586 y 1588. Los procesadores 1570, 1580 pueden intercambiar información a través de una interfaz punto a punto (P-P) 1550 usando circuitos de interfaz P-P 1578, 1588. Como se muestra en la Figura 15, los IMC 1572 y 1582 acoplan los procesadores a las respectivas memorias, en concreto, una memoria 1532 y una memoria 1534, que pueden ser porciones de la memoria principal conectadas localmente a los respectivos procesadores.
Cada uno de los procesadores 1570, 1580 puede intercambiar información con un conjunto de chips 1590 a través de interfaces P-P individuales 1552, 1554 usando circuitos de interfaz de punto a punto 1576, 1594, 1586, 1598. El conjunto de chips 1590 puede opcionalmente intercambiar información con el coprocesador 1538 a través de una interfaz de alto rendimiento 1592. En una realización, el coprocesador 1538 es un procesador de propósito especial, tal como, por ejemplo, un procesador MIC de alto rendimiento, un procesador de red o comunicación, motor de compresión, procesador de gráficos, GPGPU, procesador integrado o similar.
Se puede incluir una caché compartida (no mostrada) en cualquiera de los procesadores o fuera de ambos procesadores, pero conectada con los procesadores a través de la interconexión P-P, de tal manera que la información de la caché local de uno o ambos procesadores puede almacenarse en la caché compartida si se coloca un procesador en un modo de bajo consumo.
El conjunto de chips 1590 se puede acoplar a un primer bus 1516 a través de una interfaz 1596. En una realización, el primer bus 1516 puede ser un bus de interconexión de componentes periféricos (PCI), o un bus tal como un bus PCI Express u otro bus de interconexión de E/S de tercera generación, aunque el alcance de la presente invención no está así limitado.
Como se muestra en la Figura 15, diversos dispositivos de E/S 1514 pueden acoplarse al primer bus 1516, junto con un puente de bus 1518 que acopla el primer bus 1516 a un segundo bus 1520. En una realización, uno o más procesadores adicionales 1515, tales como coprocesadores, procesadores MIC de alto rendimiento, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP)), conjuntos de puertas programación en campo o cualquier otro procesador, están acoplados al primer bus 1516. En una realización, el segundo bus 1520 puede ser un bus de recuento bajo de pines (LPC). Se pueden acoplar diversos dispositivos a un segundo bus 1520 que incluye, por ejemplo, un teclado y/o ratón 1522, dispositivos de comunicaciones 1527 y una unidad de almacenamiento 1528 tal como una unidad de disco u otro dispositivo de almacenamiento masivo que puede incluir instrucciones/códigos y datos 1530, en una realización. Además, se puede acoplar una E/S de audio 1524 al segundo bus 1520. Obsérvese que son posibles otras arquitecturas. Por ejemplo, en lugar de la arquitectura de punto a punto de la Figura 15, un sistema puede implementar un bus multipunto u otra arquitectura de este tipo.
Con referencia ahora a la Figura 16, se muestra un diagrama de bloques de un segundo sistema 1600 ilustrativo más específico de acuerdo con una realización de la presente invención. Elementos similares en las Figuras 15 y 16 llevan números de referencia similares y determinados aspectos de la Figura 15 se han omitido de la Figura 16 para evitar complicar otros aspectos de la Figura 16.
La Figura 16 ilustra que los procesadores 1570, 1580 pueden incluir una memoria integrada y lógica de control de E/S ("CL") 1572 y 1582, respectivamente. Por tanto, la CL 1572, 1582 incluyen unidades controladoras de memoria integradas e incluyen lógica de control de E/S. La Figura 16 ilustra que no solo las memorias 1532, 1534 están acopladas a la CL 1572, 1582, sino también que los dispositivos de E/S 1614 también están acoplados a la lógica de control 1572, 1582. Los dispositivos de E/S heredados 1615 están acoplados al conjunto de chips 1590.
Con referencia ahora a la Figura 17, se muestra un diagrama de bloques de un SoC 1700 de acuerdo con una realización de la presente invención. Elementos similares en la Figura 13 llevan los mismos números de referencia. Además, los recuadros con línea discontinua son características opcionales en los SoC más avanzados. En la Figura 17, una unidad o unidades de interconexión 1702 están acopladas a: un procesador de aplicaciones 1710 que incluye un conjunto de uno o más núcleos 1302A-N, que incluyen una o más unidades de caché 1304A-N y una unidad o unidades de caché compartida 1306; una unidad de agente de sistema 1310; una unidad o unidades de controlador de bus 1316; una unidad o unidades de controlador de memoria integrado 1314; un conjunto o uno o más coprocesadores 1720 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) 1730; una unidad de acceso directo a memoria (DMA) 1732; y una unidad de visualización 1740 para acoplarse a una o más pantallas externas. En una realización, el o los coprocesadores 1720 incluyen un procesador de propósito especial, tal como, por ejemplo, un procesador de red o comunicación, motor de compresión, GPGPU, un procesador MIC de alto rendimiento, procesador integrado o similar.
Las realizaciones de los mecanismos divulgados en el presente documento pueden implementarse en hardware, software, firmware o una combinación de tales enfoques de implementación. Algunas realizaciones pueden implementarse como programas informáticos o código de programa que se ejecuta en sistemas programables que comprenden al menos un procesador, un sistema de almacenamiento (que incluye memoria y/o elementos de almacenamiento volátiles y no volátiles), al menos un dispositivo de entrada y al menos un dispositivo de salida.
El código de programa, tal como el código 1530 ilustrado en la Figura 15, se puede aplicar en las instrucciones de entrada para realizar las funciones descritas en el presente documento y generar información de salida. La información de salida puede aplicarse a uno o más dispositivos de salida, de forma conocida. Para los propósitos 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 específico de la aplicación (ASIC) o un microprocesador.
El código del programa puede implementarse en un lenguaje de programación orientado a objetos o procedimental de alto nivel para comunicarse con un sistema de procesamiento. El código del programa también puede implementarse en lenguaje ensamblador o máquina, si se desea. De hecho, los mecanismos descritos en el presente documento no están limitados en su alcance a ningún lenguaje de programación. En cualquier caso, el lenguaje puede ser un lenguaje compilado o interpretado.
Uno o más aspectos de al menos una realización pueden implementarse mediante instrucciones representativas almacenadas en un medio legible por máquina que representa diversa lógica dentro del procesador que, cuando las lee una máquina, hace que la máquina fabrique lógica para realizar las técnicas descritas en el presente documento. Tales representaciones, conocidas como "núcleos de IP", pueden almacenarse en un medio tangible, legible por máquina, y suministrarse a diversos clientes o instalaciones de fabricación para cargarlas en las máquinas de fabricación que realmente 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, que incluyen medios de almacenamiento tales como discos duros, cualquier otro tipo de disco, incluyendo disquetes, discos ópticos memorias de solo lectura de disco compacto (CD-ROM), discos compactos reescribibles (CD-RW) 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), memorias de cambio de fase (PCM), tarjetas magnéticas u ópticas, o cualquier otro tipo de medio adecuado para almacenamiento de instrucciones electrónicas.
En consecuencia, algunas realizaciones también incluyen medios tangibles, legibles por máquina, no transitorios que contienen instrucciones o datos de diseño, tales como el lenguaje de descripción de hardware (HDL), que define estructuras, circuitos, aparatos, procesadores y/o características del sistema descritos en el presente documento. Tales realizaciones también pueden denominarse productos de programa.
EMULACIÓN (INCLUYENDO TRADUCCIÓN BINARIA, TRANSFORMACIÓN DE CÓDIGOS, ETC.)
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 otras una o más instrucciones para que las procese el núcleo. El convertidor de instrucciones puede implementarse en software, hardware, firmware o una combinación de los mismos. El convertidor de instrucciones puede estar en el procesador, fuera del procesador o en parte dentro y fuera del procesador.
La Figura 18 es un diagrama de bloques que contrasta el uso de un convertidor de instrucciones de software para convertir instrucciones binarias en un conjunto de instrucciones de origen a instrucciones binarias en un conjunto de instrucciones objetivo según algunas realizaciones. En la realización ilustrada, el convertidor de instrucciones es un convertidor de instrucciones de software, aunque, como alternativa, el convertidor de instrucciones puede implementarse en software, firmware, hardware o diversas combinaciones de los mismos. La Figura 18 muestra un programa en un lenguaje de alto nivel 1802 que puede compilarse usando un compilador x86 1804 para generar código binario x86 1806 que puede ejecutarse de forma nativa mediante un procesador con al menos un núcleo de conjunto de instrucciones x86 1816. El procesador con al menos un núcleo de conjunto de instrucciones x86 1816 representa cualquier procesador que puede realizar sustancialmente las mismas funciones que un procesador Intel con al menos un núcleo de conjunto de instrucciones x86 mediante la ejecución compatible o el procesamiento de otro modo (1) de una porción sustancial del conjunto de instrucciones del núcleo del conjunto de instrucciones Intel x86 o (2) de versiones de código objeto de aplicaciones u otro software destinado a ejecutarse en un procesador Intel con al menos un núcleo del conjunto de instrucciones x86, para conseguir sustancialmente el mismo resultado que un procesador Intel con al menos un núcleo del conjunto de instrucciones x86. El compilador x86 1804 representa un compilador que puede funcionar para generar código binario x86 1806 (por ejemplo, código objeto) que puede, con o sin procesamiento de vinculación adicional, ejecutarse en el procesador con al menos un núcleo de conjunto de instrucciones x86 1816. De manera similar, la Figura 18 muestra que el programa en el lenguaje de alto nivel 1802 puede compilarse usando un compilador de conjunto de instrucciones alternativo 1808 para generar un código binario de conjunto de instrucciones alternativo 1810 que puede ejecutarse de forma nativa mediante un procesador sin al menos un núcleo de conjunto de instrucciones x86 1814 (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 1812 se usa para convertir el código binario x86 1806 en un código que el procesador puede ejecutar de forma nativa sin un núcleo de conjunto de instrucciones x86 1814. No es probable que este código convertido sea el mismo que el código binario del conjunto de instrucciones alternativo 1810 porque es difícil hacer un convertidor de instrucciones apto para esto; sin embargo, el código convertido conseguirá la operación general y estará compuesto por instrucciones del conjunto de instrucciones alternativo. Por tanto, el convertidor de instrucciones 1812 representa software, firmware, hardware o una combinación de los mismos que, mediante 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 x86 ejecute el código binario x86 1806.

Claims (9)

REIVINDICACIONES
1. Un procesador (1300) que comprende:
una memoria caché (1306) para almacenar datos;
al menos un núcleo (1302) acoplado a la memoria caché (1306), comprendiendo el al menos un núcleo (1302):
circuitería de ejecución (411, 1150) para realizar operaciones de multiplicación-acumulación con una primera matriz de origen y una segunda matriz de origen para generar una matriz de resultados en respuesta a una instrucción de multiplicación de matrices, comprendiendo la instrucción de multiplicación de matrices una pluralidad de campos incluyendo un primer campo para especificar un código de operación, un segundo campo para identificar la matriz de resultados, un tercer campo para identificar la primera matriz de origen y un cuarto campo para identificar la segunda matriz de origen, en donde la primera matriz de origen es una matriz dispersa que tiene elementos de datos distintos de cero ubicados en determinadas posiciones y en donde la segunda matriz de origen comprende una matriz densa, en donde una o más de las matrices identificadas se almacenan en un archivo de registro del procesador (1300), en donde solo la primera matriz de origen se almacena en un formato comprimido que identifica las posiciones de los elementos de datos distintos de cero en la primera matriz de origen, comprendiendo además la circuitería de ejecución (411, 1150):
una pluralidad de circuitos de multiplicación-acumulación (416, 418) para realizar una pluralidad de operaciones de multiplicación-suma para multiplicar los elementos de datos distintos de cero de la primera matriz de origen por los elementos de datos correspondientes de la segunda matriz de origen identificados basándose en las posiciones en el formato comprimido para generar una pluralidad de productos, para sumar la pluralidad de productos a valores acumulados para generar elementos de datos de la matriz de resultados, y para realizar un redondeo en cada uno de los valores acumulados según un modo de redondeo especificado por la instrucción de multiplicación de matrices,
en donde la pluralidad de circuitos de multiplicación-acumulación (416, 418) de la circuitería de ejecución (411, 1150) debe, para cada elemento de datos distinto de cero en una fila y una columna de la primera matriz de origen, generar un producto del elemento de datos distinto de cero de la primera matriz de origen y todos los elementos de datos correspondientes en una fila de la segunda matriz de origen, correspondiendo en número la fila de la segunda matriz de origen a la columna de la primera matriz de origen, y a continuación acumular cada producto generado con los valores acumulados anteriores de un elemento de datos correspondiente en una fila de la matriz de resultados, correspondiendo en número la fila de la matriz de resultados a la fila de la primera matriz.
2. El procesador (1300) de la reivindicación 1, en donde el formato de matriz dispersa comprimida comprende un formato de fila dispersa comprimida, CSR, o un formato de columna dispersa comprimida, CSC.
3. El procesador (1300) de la reivindicación 1 o 2, que comprende además un circuito de extracción de instrucciones (1138) para extraer la instrucción y un decodificador (1140) para decodificar la instrucción de multiplicación de matrices.
4. El procesador (1300) de cualquiera de las reivindicaciones 1 a 3, en donde la primera matriz de origen y la segunda matriz de origen comprenden una matriz de activación de aprendizaje automático y/o un vector de ponderación.
5. Un método, que comprende:
almacenar datos en una memoria caché de un procesador;
realizar, mediante al menos un núcleo del procesador acoplado a la memoria caché, operaciones de multiplicaciónacumulación con una primera matriz de origen y una segunda matriz de origen para generar una matriz de resultados en respuesta a una instrucción de multiplicación de matrices, comprendiendo la instrucción de multiplicación de matrices una pluralidad de campos incluyendo un primer campo para especificar un código de operación, un segundo campo para identificar la matriz de resultados, un tercer campo para identificar la primera matriz de origen y un cuarto campo para identificar la segunda matriz de origen, en donde la primera matriz de origen es una matriz dispersa que tiene elementos de datos distintos de cero ubicados en determinadas posiciones y en donde la segunda matriz de origen comprende una matriz densa, en donde una o más de las matrices identificadas se almacenan en un archivo de registro del procesador,
en donde solo la primera matriz de origen se almacena en un formato comprimido que identifica las posiciones de los elementos de datos distintos de cero en la primera matriz de origen, en donde realizar una operación de multiplicaciónacumulación comprende, además:
realizar una pluralidad de operaciones de multiplicación-suma para multiplicar los elementos de datos distintos de cero de la primera matriz de origen por los elementos de datos correspondientes de la segunda matriz de origen identificados basándose en las posiciones en el formato comprimido para generar una pluralidad de productos, añadir la pluralidad de productos a los valores acumulados para generar elementos de datos de la matriz de resultados, y
realizar un redondeo en cada uno de los valores acumulados según un modo de redondeo especificado por la instrucción de multiplicación de matrices,
en donde, para cada elemento de datos distinto de cero en una fila y una columna de la primera matriz de origen, se genera un producto del elemento de datos distinto de cero de la primera matriz de origen y todos los elementos de datos correspondientes en una fila de la segunda matriz de origen, correspondiendo en número la fila de la segunda matriz de origen a la columna de la primera matriz de origen, y a continuación se acumula cada producto generado con los valores acumulados anteriores de un elemento de datos correspondiente en una fila de la matriz de resultados, correspondiendo en número la fila de la matriz de resultados a la fila de la primera matriz.
6. El método de la reivindicación 5, en donde el formato de matriz dispersa comprimida comprende un formato de fila dispersa comprimida, CSR, o un formato de columna dispersa comprimida, CSC.
7. El método de la reivindicación 5 o 6, que comprende además extraer la instrucción y decodificar la instrucción de multiplicación de matrices.
8. El método de cualquiera de las reivindicaciones 5 a 7, en donde la primera matriz de origen y la segunda matriz de origen comprenden una matriz de activación de aprendizaje automático y/o un vector de ponderación.
9. Un medio legible por máquina que tiene un código de programa almacenado en el mismo que, cuando es ejecutado por un procesador (1300) de cualquiera de las reivindicaciones 1 a 4, hace que el procesador realice el método de cualquiera de las reivindicaciones 5 a 8.
ES20199012T 2018-03-28 2019-02-13 Acelerador de multiplicación de matrices densas-dispersas Active ES2982493T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/938,924 US10572568B2 (en) 2018-03-28 2018-03-28 Accelerator for sparse-dense matrix multiplication

Publications (1)

Publication Number Publication Date
ES2982493T3 true ES2982493T3 (es) 2024-10-16

Family

ID=65231633

Family Applications (2)

Application Number Title Priority Date Filing Date
ES19157044T Active ES3019657T3 (en) 2018-03-28 2019-02-13 Accelerator for sparse-dense matrix multiplication
ES20199012T Active ES2982493T3 (es) 2018-03-28 2019-02-13 Acelerador de multiplicación de matrices densas-dispersas

Family Applications Before (1)

Application Number Title Priority Date Filing Date
ES19157044T Active ES3019657T3 (en) 2018-03-28 2019-02-13 Accelerator for sparse-dense matrix multiplication

Country Status (7)

Country Link
US (7) US10572568B2 (es)
EP (4) EP4592827A3 (es)
CN (4) CN110321525A (es)
DK (1) DK3779681T3 (es)
ES (2) ES3019657T3 (es)
FI (1) FI3779681T3 (es)
PL (2) PL3779681T3 (es)

Families Citing this family (86)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4336369A3 (en) 2017-03-20 2024-06-19 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
WO2019090325A1 (en) 2017-11-06 2019-05-09 Neuralmagic, Inc. Methods and systems for improved transforms in convolutional neural networks
US11715287B2 (en) 2017-11-18 2023-08-01 Neuralmagic Inc. Systems and methods for exchange of data in distributed training of machine learning algorithms
US10691772B2 (en) * 2018-04-20 2020-06-23 Advanced Micro Devices, Inc. High-performance sparse triangular solve on graphics processing units
GB2574060B (en) * 2018-05-25 2022-11-23 Myrtle Software Ltd Processing matrix vector multiplication
US11216732B2 (en) 2018-05-31 2022-01-04 Neuralmagic Inc. Systems and methods for generation of sparse code for convolutional neural networks
US10832133B2 (en) 2018-05-31 2020-11-10 Neuralmagic Inc. System and method of executing neural networks
US11449363B2 (en) 2018-05-31 2022-09-20 Neuralmagic Inc. Systems and methods for improved neural network execution
US10963787B2 (en) * 2018-05-31 2021-03-30 Neuralmagic Inc. Systems and methods for generation of sparse code for convolutional neural networks
US10620951B2 (en) * 2018-06-22 2020-04-14 Intel Corporation Matrix multiplication acceleration of sparse matrices using column folding and squeezing
WO2020046859A1 (en) 2018-08-27 2020-03-05 Neuralmagic Inc. Systems and methods for neural network convolutional layer matrix multiplication using cache memory
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US11636343B2 (en) 2018-10-01 2023-04-25 Neuralmagic Inc. Systems and methods for neural network pruning with accuracy preservation
US12008475B2 (en) * 2018-11-14 2024-06-11 Nvidia Corporation Transposed sparse matrix multiply by dense matrix for neural network training
US11663001B2 (en) * 2018-11-19 2023-05-30 Advanced Micro Devices, Inc. Family of lossy sparse load SIMD instructions
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US11544559B2 (en) 2019-01-08 2023-01-03 Neuralmagic Inc. System and method for executing convolution in a neural network
ES3041900T3 (en) 2019-03-15 2025-11-17 Intel Corp Architecture for block sparse operations on a systolic array
EP3938893B1 (en) 2019-03-15 2025-10-15 Intel Corporation Systems and methods for cache optimization
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
DE112020001258T5 (de) 2019-03-15 2021-12-23 Intel Corporation Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat
US11392376B2 (en) * 2019-04-11 2022-07-19 Arm Limited Processor for sparse matrix computation
US11127167B2 (en) * 2019-04-29 2021-09-21 Nvidia Corporation Efficient matrix format suitable for neural networks
US11379556B2 (en) * 2019-05-21 2022-07-05 Arm Limited Apparatus and method for matrix operations
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US12353846B2 (en) * 2019-07-09 2025-07-08 MemryX Matrix data reuse techniques in multiply and accumulate units of processing system
US11195095B2 (en) 2019-08-08 2021-12-07 Neuralmagic Inc. System and method of accelerating execution of a neural network
WO2021040921A1 (en) * 2019-08-29 2021-03-04 Alibaba Group Holding Limited Systems and methods for providing vector-wise sparsity in a neural network
CN114424252A (zh) * 2019-09-25 2022-04-29 渊慧科技有限公司 快速稀疏神经网络
KR20210045224A (ko) * 2019-10-16 2021-04-26 삼성전자주식회사 데이터를 처리하는 방법 및 장치
CN110766136B (zh) * 2019-10-16 2022-09-09 北京航空航天大学 一种稀疏矩阵与向量的压缩方法
CN110889259B (zh) * 2019-11-06 2021-07-09 北京中科胜芯科技有限公司 针对排列的块对角权重矩阵的稀疏矩阵向量乘法计算单元
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11372644B2 (en) * 2019-12-09 2022-06-28 Meta Platforms, Inc. Matrix processing instruction with optional up/down sampling of matrix
CN113094099A (zh) * 2019-12-23 2021-07-09 超威半导体(上海)有限公司 矩阵数据广播架构
KR102788804B1 (ko) * 2019-12-27 2025-03-31 삼성전자주식회사 전자 장치 및 그 제어 방법
US11829439B2 (en) * 2019-12-30 2023-11-28 Qualcomm Incorporated Methods and apparatus to perform matrix multiplication in a streaming processor
CN111240743B (zh) * 2020-01-03 2022-06-03 格兰菲智能科技有限公司 人工智能集成电路
US11586601B2 (en) * 2020-02-05 2023-02-21 Alibaba Group Holding Limited Apparatus and method for representation of a sparse matrix in a neural network
US11226816B2 (en) 2020-02-12 2022-01-18 Samsung Electronics Co., Ltd. Systems and methods for data placement for in-memory-compute
US11281554B2 (en) 2020-03-17 2022-03-22 Samsung Electronics Co., Ltd. System and method for in-memory computation
DE102020131666A1 (de) * 2020-05-05 2021-11-11 Intel Corporation Skalierbare Multiplikationsbeschleunigung dünnbesetzter Matrizen unter Verwendung systolischer Arrays mit Rückkopplungseingaben
US11204977B2 (en) * 2020-05-05 2021-12-21 Intel Corporation Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs
CA3186225A1 (en) 2020-07-21 2022-01-27 Mostafa MAHMOUD System and method for using sparsity to accelerate deep learning networks
CN112199636B (zh) * 2020-10-15 2022-10-28 清华大学 适用于微处理器的快速卷积方法及装置
WO2022109115A1 (en) * 2020-11-19 2022-05-27 Google Llc Systolic array cells with output post-processing
US11556757B1 (en) 2020-12-10 2023-01-17 Neuralmagic Ltd. System and method of executing deep tensor columns in neural networks
US12493779B2 (en) * 2020-12-15 2025-12-09 The George Washington University SGCNAX: a scalable graph convolutional neural network accelerator with workload balancing
US20220197595A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Efficient multiply and accumulate instruction when an operand is equal to or near a power of two
CN114692074A (zh) * 2020-12-25 2022-07-01 安徽寒武纪信息科技有限公司 矩阵乘法电路、方法及相关产品
CN114692077A (zh) * 2020-12-30 2022-07-01 华为技术有限公司 一种矩阵计算装置、方法、系统、电路、芯片及设备
GB2609690A (en) * 2021-01-20 2023-02-15 Nvidia Corp Technique to perform min-sum decoding of QC-LDPC codewords of wireless communications signal data
CN112835552A (zh) * 2021-01-26 2021-05-25 算筹信息科技有限公司 一种外积累加求解稀疏矩阵与稠密矩阵内积的方法
CN112799635B (zh) * 2021-02-08 2022-11-15 算筹(深圳)信息科技有限公司 一种新型外积累加求解稠密矩阵与稀疏矩阵内积的方法
CN115244507A (zh) * 2021-02-25 2022-10-25 阿里巴巴集团控股有限公司 用于减少数据移动的跳零稀疏技术
US12400120B2 (en) * 2021-03-04 2025-08-26 Samsung Electronics Co., Ltd. Method and apparatus with neural network operation using sparsification
US20220318013A1 (en) 2021-03-25 2022-10-06 Intel Corporation Supporting 8-bit floating point format operands in a computing architecture
KR20220140694A (ko) * 2021-04-09 2022-10-18 엔비디아 코포레이션 데이터 세트들의 희소도 증가
TWI847030B (zh) 2021-05-05 2024-07-01 創鑫智慧股份有限公司 矩陣乘法器及其操作方法
US20220365833A1 (en) * 2021-05-13 2022-11-17 Nvidia Corporation Application programming interface to compress data
US12189710B2 (en) * 2021-05-25 2025-01-07 Google Llc Sparse matrix multiplication in hardware
CN113377534A (zh) * 2021-06-08 2021-09-10 东南大学 一种基于csr格式的高性能稀疏矩阵向量乘法计算方法
US20230008777A1 (en) * 2021-07-09 2023-01-12 Waymo Llc Accelerating convolutions for sparse inputs
US20250106022A1 (en) * 2021-07-23 2025-03-27 Cryptography Research, Inc. Multi-lane cryptographic engine and operations thereof
US11443014B1 (en) * 2021-08-23 2022-09-13 SambaNova Systems, Inc. Sparse matrix multiplier in hardware and a reconfigurable data processor including same
US20230102279A1 (en) * 2021-09-25 2023-03-30 Intel Corporation Apparatuses, methods, and systems for instructions for structured-sparse tile matrix fma
CN113870918B (zh) * 2021-09-30 2023-03-28 华中科技大学 存内稀疏矩阵乘法运算方法、方程求解方法以及求解器
US11960982B1 (en) 2021-10-21 2024-04-16 Neuralmagic, Inc. System and method of determining and executing deep tensor columns in neural networks
US20230133305A1 (en) * 2021-10-28 2023-05-04 Kwai Inc. Methods and devices for accelerating a transformer with a sparse attention pattern
US11941248B2 (en) * 2021-12-13 2024-03-26 Xilinx, Inc. Compression of sparse tensors
US20250307008A1 (en) * 2022-05-18 2025-10-02 Google Llc Exploiting data sparsity at a machine-learning hardware accelerator
US12417100B2 (en) * 2022-08-03 2025-09-16 Intel Corporation Instructions for structured-sparse tile matrix FMA
CN115310037A (zh) * 2022-08-17 2022-11-08 平头哥(杭州)半导体有限公司 矩阵乘法计算单元、加速单元、计算系统和相关方法
CN115481364B (zh) * 2022-09-19 2025-06-10 浙江大学 基于gpu加速的大规模椭圆曲线多标量乘法的并行计算方法
CN115578243B (zh) * 2022-10-09 2024-01-05 北京中科通量科技有限公司 一种面向稀疏矩阵的膨胀处理方法
TWI819937B (zh) * 2022-12-28 2023-10-21 國立成功大學 應用於類神經網路的記憶內運算的加速器
WO2024243796A1 (en) * 2023-05-30 2024-12-05 Intel Corporation Methods and apparatus for matrix multiplication with reinforcement learning
CN119337040A (zh) * 2023-07-21 2025-01-21 华为技术有限公司 计算装置、方法、设备、芯片及系统
CN116821576B (zh) * 2023-08-28 2023-12-26 英特尔(中国)研究中心有限公司 用于基于risc-v加速n:m稀疏网络的方法和装置
CN117931131B (zh) * 2024-03-22 2024-07-26 中国人民解放军国防科技大学 一种稀疏矩阵乘指令实现方法及系统
CN119646369B (zh) * 2024-11-28 2025-11-25 西安交通大学 一种基于张量核心加速任意精度稀疏矩阵乘加运算的方法
CN119808860B (zh) * 2025-03-17 2025-07-08 上海燧原科技股份有限公司 混合专家模型的优化方法、装置、设备、介质及程序
CN120336834B (zh) * 2025-03-20 2025-10-31 上海期智研究院 基于无规则稀疏模型的加速方法、装置、电子设备和介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5673407A (en) * 1994-03-08 1997-09-30 Texas Instruments Incorporated Data processor having capability to perform both floating point operations and memory access in response to a single instruction
JP3790307B2 (ja) * 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US7725521B2 (en) * 2001-10-29 2010-05-25 Intel Corporation Method and apparatus for computing matrix transformations
US8775495B2 (en) * 2006-02-13 2014-07-08 Indiana University Research And Technology Compression system and method for accelerating sparse matrix computations
US8577948B2 (en) 2010-09-20 2013-11-05 Intel Corporation Split path multiply accumulate unit
US20150277904A1 (en) * 2014-03-28 2015-10-01 Roger Espasa Method and apparatus for performing a plurality of multiplication operations
US10275247B2 (en) * 2015-03-28 2019-04-30 Intel Corporation Apparatuses and methods to accelerate vector multiplication of vector elements having matching indices
US20160378465A1 (en) * 2015-06-23 2016-12-29 Intel Corporation Efficient sparse array handling in a processor
US9558156B1 (en) * 2015-11-24 2017-01-31 International Business Machines Corporation Sparse matrix multiplication using a single field programmable gate array module
US20170337156A1 (en) * 2016-04-26 2017-11-23 Onnivation Llc Computing machine architecture for matrix and array processing
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
CN107239823A (zh) * 2016-08-12 2017-10-10 北京深鉴科技有限公司 一种用于实现稀疏神经网络的装置和方法
US10360163B2 (en) * 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US11003985B2 (en) * 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
KR102499396B1 (ko) * 2017-03-03 2023-02-13 삼성전자 주식회사 뉴럴 네트워크 장치 및 뉴럴 네트워크 장치의 동작 방법
US10331762B1 (en) * 2017-12-07 2019-06-25 International Business Machines Corporation Stream processing for LU decomposition
US20190278600A1 (en) * 2018-03-09 2019-09-12 Nvidia Corporation Tiled compressed sparse matrix format

Also Published As

Publication number Publication date
US20190042542A1 (en) 2019-02-07
US11829440B2 (en) 2023-11-28
CN110321525A (zh) 2019-10-11
EP4592827A3 (en) 2025-10-15
EP4462250A3 (en) 2025-03-05
CN121030150A (zh) 2025-11-28
US20250272354A1 (en) 2025-08-28
US20250272355A1 (en) 2025-08-28
PL3547114T3 (pl) 2025-06-09
US10867009B2 (en) 2020-12-15
US20240070226A1 (en) 2024-02-29
US10572568B2 (en) 2020-02-25
EP3547114A1 (en) 2019-10-02
EP3547114B1 (en) 2025-01-15
EP3779681A3 (en) 2021-02-24
DK3779681T3 (da) 2024-07-08
FI3779681T3 (fi) 2024-06-28
US20210342417A1 (en) 2021-11-04
EP3779681B1 (en) 2024-04-10
US20200265107A1 (en) 2020-08-20
EP4592827A2 (en) 2025-07-30
ES3019657T3 (en) 2025-05-21
US20200334323A1 (en) 2020-10-22
US10984074B2 (en) 2021-04-20
CN119377541A (zh) 2025-01-28
CN112069459A (zh) 2020-12-11
EP3779681A2 (en) 2021-02-17
EP4462250A2 (en) 2024-11-13
CN112069459B (zh) 2024-06-04
PL3779681T3 (pl) 2024-07-29

Similar Documents

Publication Publication Date Title
ES2982493T3 (es) Acelerador de multiplicación de matrices densas-dispersas
ES2997191T3 (en) Systems and methods for performing 16-bit floating-point matrix dot product instructions
ES2927546T3 (es) Procesador informático para cálculos de precisión superior que utiliza una descomposición de operaciones de precisión mixta
ES2988859T3 (es) Instrucción de multiplicación de matrices de dispersión variable de formato variable
ES2993213T3 (en) Systems and methods for performing 16-bit floating-point vector dot product instructions
ES2976107T3 (es) Sistemas y métodos para realizar instrucciones para convertir a formato de coma flotante de 16 bits
US12288062B2 (en) Instructions for fused multiply-add operations with variable precision input operands
US20210216323A1 (en) Systems and methods for performing instructions to transform matrices into row-interleaved format
EP3623941B1 (en) Systems and methods for performing instructions specifying ternary tile logic operations
CN104838357B (zh) 向量化方法、系统及处理器
US11269630B2 (en) Interleaved pipeline of floating-point adders
US12405770B2 (en) Matrix transpose and multiply
ES2951658T3 (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
EP3929732A1 (en) Matrix data scatter and gather by row