ES2943248T3 - Formato de instrucción compatible con vectores y ejecución del mismo - Google Patents

Formato de instrucción compatible con vectores y ejecución del mismo Download PDF

Info

Publication number
ES2943248T3
ES2943248T3 ES18177235T ES18177235T ES2943248T3 ES 2943248 T3 ES2943248 T3 ES 2943248T3 ES 18177235 T ES18177235 T ES 18177235T ES 18177235 T ES18177235 T ES 18177235T ES 2943248 T3 ES2943248 T3 ES 2943248T3
Authority
ES
Spain
Prior art keywords
field
vector
data element
instruction
data
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
ES18177235T
Other languages
English (en)
Inventor
Robert C Valentine
Adrian Jesus Corbal San
Roger Espasa Sans
Robert D Cavin
Bret L Toll
Santiago Galan Duran
Jeffrey G Wiedemeier
Sridhar Samudrala
Milind Baburao Girkar
Edward Thomas Grochowski
Jonathan Cannon Hall
Dennis R Bradford
Elmoustapha Ould-Ahmed-Vall
James C Abel
Mark Charney
Seth Abraham
Suleyman Sair
Andrew Thomas Forsyth
Charles Yount
Lisa Wu
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 ES2943248T3 publication Critical patent/ES2943248T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices specially adapted for rectifying, amplifying, oscillating or switching and having potential barriers; Capacitors or resistors having potential barriers, e.g. a PN-junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor
    • H01L29/66007Multistep manufacturing processes
    • H01L29/66075Multistep manufacturing processes of devices having semiconductor bodies comprising group 14 or group 13/15 materials
    • H01L29/66227Multistep manufacturing processes of devices having semiconductor bodies comprising group 14 or group 13/15 materials the devices being controllable only by the electric current supplied or the electric potential applied, to an electrode which does not carry the current to be rectified, amplified or switched, e.g. three-terminal devices
    • H01L29/66409Unipolar field-effect transistors
    • H01L29/66477Unipolar field-effect transistors with an insulated gate, i.e. MISFET
    • H01L29/66553Unipolar field-effect transistors with an insulated gate, i.e. MISFET using inside spacers, permanent or not
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices specially adapted for rectifying, amplifying, oscillating or switching and having potential barriers; Capacitors or resistors having potential barriers, e.g. a PN-junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor
    • H01L29/68Types of semiconductor device ; Multistep manufacturing processes therefor controllable by only the electric current supplied, or only the electric potential applied, to an electrode which does not carry the current to be rectified, amplified or switched
    • H01L29/76Unipolar devices, e.g. field effect transistors
    • H01L29/772Field effect transistors
    • H01L29/775Field effect transistors with one dimensional charge carrier gas channel, e.g. quantum wire FET
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices specially adapted for rectifying, amplifying, oscillating or switching and having potential barriers; Capacitors or resistors having potential barriers, e.g. a PN-junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor
    • H01L29/68Types of semiconductor device ; Multistep manufacturing processes therefor controllable by only the electric current supplied, or only the electric potential applied, to an electrode which does not carry the current to be rectified, amplified or switched
    • H01L29/76Unipolar devices, e.g. field effect transistors
    • H01L29/772Field effect transistors
    • H01L29/78Field effect transistors with field effect produced by an insulated gate
    • H01L29/7831Field effect transistors with field effect produced by an insulated gate with multiple gate structure
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices specially adapted for rectifying, amplifying, oscillating or switching and having potential barriers; Capacitors or resistors having potential barriers, e.g. a PN-junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor
    • H01L29/68Types of semiconductor device ; Multistep manufacturing processes therefor controllable by only the electric current supplied, or only the electric potential applied, to an electrode which does not carry the current to be rectified, amplified or switched
    • H01L29/76Unipolar devices, e.g. field effect transistors
    • H01L29/772Field effect transistors
    • H01L29/78Field effect transistors with field effect produced by an insulated gate
    • H01L29/786Thin film transistors, i.e. transistors with a channel being at least partly a thin film
    • H01L29/78696Thin film transistors, i.e. transistors with a channel being at least partly a thin film characterised by the structure of the channel, e.g. multichannel, transverse or longitudinal shape, length or width, doping structure, or the overlap or alignment between the channel and the gate, the source or the drain, or the contacting structure of the channel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L29/00Semiconductor devices specially adapted for rectifying, amplifying, oscillating or switching and having potential barriers; Capacitors or resistors having potential barriers, e.g. a PN-junction depletion layer or carrier concentration layer; Details of semiconductor bodies or of electrodes thereof ; Multistep manufacturing processes therefor
    • H01L29/66Types of semiconductor device ; Multistep manufacturing processes therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Power Engineering (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Hardware Design (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Condensed Matter Physics & Semiconductors (AREA)
  • Ceramic Engineering (AREA)
  • Mathematical Physics (AREA)
  • Manufacturing & Machinery (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Stored Programmes (AREA)
  • Insulated Gate Type Field-Effect Transistor (AREA)
  • Image Processing (AREA)

Abstract

Un formato de instrucción compatible con vectores y su ejecución. De acuerdo con una realización de la invención, un procesador está configurado para ejecutar un conjunto de instrucciones. El conjunto de instrucciones incluye un formato de instrucción compatible con vectores. El formato de instrucción compatible con vectores tiene una pluralidad de campos que incluyen un campo de operación base, un campo modificador, un campo de operación de aumento y un campo de ancho de elemento de datos, donde el primer formato de instrucción admite diferentes versiones de operaciones base y diferentes operaciones de aumento a través de la colocación de diferentes valores en el campo de operación base, el campo modificador, el campo alfa, el campo beta y el campo de ancho del elemento de datos, y en el que solo uno de los diferentes valores puede colocarse en cada uno de los campos de operación base, el campo modificador, el campo alfa, el campo beta, (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Formato de instrucción compatible con vectores y ejecución del mismo
REFERENCIA CRUZADA A SOLICITUDES RELACIONADAS
Esta solicitud reivindica el beneficio de la Solicitud Provisional de Estados Unidos N.° 61/471.043, presentada el 1 de abril de 2011.
ANTECEDENTES
Campo
Las realizaciones de la invención se refieren al campo de los ordenadores; y más específicamente, a conjuntos de instrucciones soportados por procesadores.
Antecedentes
Un conjunto de instrucciones, o arquitectura de conjunto de instrucciones (ISA), es la parte de la arquitectura del ordenador relacionada con la programación, que incluye los tipos de datos nativos, las instrucciones, la arquitectura de registro, los modos de direccionamiento, la arquitectura de memoria, el manejo de interrupciones y excepciones, y la entrada y salida externa (E/S). Cabe señalar que, el término instrucción generalmente se refiere en el presente documento a macroinstrucciones - es decir, instrucciones que se proporcionan al procesador para su ejecución - a diferencia de microinstrucciones o microoperaciones, que es el resultado de la decodificación de macroinstrucciones por el decodificador de un procesador).
La arquitectura del conjunto de instrucciones se distingue de la microarquitectura, que es el conjunto de técnicas de diseño del procesador usadas para implementar el conjunto de instrucciones. Los procesadores con diferentes microarquitecturas pueden compartir un conjunto de instrucciones común. Por ejemplo, los procesadores Intel Pentium 4, los procesadores Intel Core y los procesadores Advanced Micro Devices, Inc. de Sunnyvale CA implementan versiones casi idénticas del conjunto de instrucciones x86 (con algunas extensiones que se han añadido con versiones más nuevas), pero tienen diseños internos diferentes. Por ejemplo, la misma arquitectura de registro de la ISA se puede implementar de diferentes maneras en diferentes microarquitecturas usando técnicas bien conocidas, que incluyen registros físicos especializados, uno o más registros físicos asignados dinámicamente usando un mecanismo de cambio de nombre de registro (por ejemplo, el uso de una tabla de alias de registro (RAT), una memoria intermedia de reorden (ROB) y un archivo de registro de retiro como se describe en la patente de Estados Unidos N.° 5.446.912; el uso de mapas múltiples y una agrupación de registros como se describe en la patente de Estados Unidos N.° 5.207.132), etc. A menos que se especifique lo contrario, las expresiones arquitectura de registro, archivo de registro y registro se usan en el presente documento para lo que es visible para el software/programador y la forma en que las instrucciones especifican los registros. Cuando se requiera una distinción, el adjetivo lógico, arquitectónico o software visible se usará para indicar registros/archivos en la arquitectura de registros, mientras que se usarán diferentes adjetivos para designar registros en una microarquitectura determinada (por ejemplo, registro físico, memoria intermedia de reorden, registro de retiro, agrupación de registros).
Un conjunto de instrucciones incluye uno o más formatos de instrucciones. Un formato de instrucción dado define diversos campos (número de bits, ubicación de bits) para especificar, entre otras cosas, la operación a realizar y el operando u operandos en los que va a realizarse esa operación. Algunos formatos de instrucciones se descomponen aún más a través de la definición de plantillas de instrucción (o subformatos). Por ejemplo, las plantillas de instrucción de un formato de instrucción dado pueden definirse para tener diferentes subconjuntos de los campos del formato de instrucción (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. Una instrucción dada se expresa usando un formato de instrucción dado (y, si está definido, en una de las plantillas de instrucción dadas de ese formato de instrucción) y especifica la operación y los operandos. Un flujo de instrucciones es una secuencia específica de instrucciones, donde cada instrucción en la secuencia es una ocurrencia de una instrucción en un formato de instrucción (y, si se define, una determinada de las plantillas de instrucción de ese formato de instrucción).
Las aplicaciones científicas, financieras, auto-vectorizadas de propósito general, RMS (reconocimiento, minería y síntesis)/visuales y multimedia (por ejemplo, gráficos 2D/3D, procesamiento de imágenes, compresión/descompresión de vídeo, algoritmos de reconocimiento de voz y manipulación de audio) a menudo requieren que se realice la misma operación en una gran cantidad de elementos de datos (denominado como "paralelismo de datos"). Una instrucción única de datos múltiples (SIMD) se refiere a un tipo de instrucción que hace que un procesador realice la misma operación en múltiples elementos de datos. La tecnología de SIMD es especialmente adecuada para los procesadores que pueden dividir lógicamente los bits de un registro en una cantidad de elementos de datos de tamaño fijo, cada uno de los cuales representa un valor separado. Por ejemplo, los bits en un registro de 64 bits pueden especificarse como un operando de origen para ser operado como cuatro elementos de datos de 16 bits separados, cada uno de los cuales representa un valor de 16 bits separado. Este tipo de datos se denomina tipo de datos empaquetados o tipo de datos vectoriales, y los operandos de este tipo de datos se denominan operandos de datos empaquetados u operandos vectoriales. En otras palabras, un elemento o vector de datos empaquetados se refiere a una secuencia de elementos de datos empaquetados; y un operando de datos empaquetados o un operando de vector es un operando de origen o de destino de una instrucción de SIMD (también conocida como instrucción de datos empaquetados o instrucción de vector).
A modo de ejemplo, un tipo de instrucción de SIMD especifica una única operación vectorial que va a realizarse en dos operandos de vector de origen en forma vertical para generar un operando de vector de destino (también conocido como operando de vector de resultado) del mismo tamaño, con el mismo número de elementos de datos, y en el mismo orden de elementos de datos. Los elementos de datos en los operandos de vector de origen se denominan elementos de datos de origen, mientras que los elementos de datos en el operando de vector de destino se denominan elementos de datos de destino o resultado. Estos operandos de vector de origen tienen el mismo tamaño y contienen elementos de datos de la misma anchura y, por lo tanto, contienen el mismo número de elementos de datos. Los elementos de datos de origen en las mismas posiciones de bit en los dos operandos de vector de origen forman pares de elementos de datos (también denominados elementos de datos correspondientes). La operación especificada por esa instrucción de SIMD se realiza por separado en cada uno de estos pares de elementos de datos de origen para generar un número coincidente de elementos de datos de resultado y, por lo tanto, cada par de elementos de datos de origen tiene un elemento de datos de resultado correspondiente. Dado que la operación es vertical y que el operando de vector de resultado tiene el mismo tamaño, tiene el mismo número de elementos de datos y los elementos de datos de resultado se almacenan en el mismo orden de elementos de datos que los operandos de vector de origen, los elementos de datos de resultado están en las mismas posiciones de bit del operando de vector de resultado que su correspondiente par de elementos de datos de origen en los operandos de vector de origen. Además de este tipo ilustrativo de instrucción de SIMD, hay una diversidad de otros tipos de instrucciones de SIMD (por ejemplo, que tienen solo uno o tienen más de dos operandos de vector de origen; que operan de manera horizontal; que generan un operando de vector de resultado que es de un tamaño diferente, que tiene elementos de datos de diferente tamaño y/o que tiene un orden de elementos de datos diferente). Debe entenderse que, el término operando de vector de destino (u operando de destino) se define como el resultado directo de realizar la operación especificada por una instrucción, que incluye el almacenamiento de ese operando de destino en una ubicación (ya sea un registro o en una dirección de memoria especificada por esa instrucción) de modo que pueda ser accedido como un operando de origen por otra instrucción (mediante la especificación de esa misma ubicación por la otra instrucción).
La tecnología de SIMD, tal como la empleada por procesadores Intel® Coreque tienen un conjunto de instrucciones que incluye las instrucciones x86, MMX, Extensiones SIMD para envío por flujo continuo (SSE), SSE2, SSE3, SSE4.1 y SSE4.2, ha permitido una mejora significativa en el rendimiento de la aplicación (Corey MMXson marcas comerciales registradas o marcas comerciales de Intel Corporation de Santa Clara, California). Se ha publicado un conjunto adicional de futuras extensiones de SIMD, denominadas Extensiones Vectoriales Avanzadas (AVX) y que usan el esquema de codificación VEX.
El documento US 2005/125641 A1 se refiere a un aparato y método de procesamiento de datos para mover datos entre registros y memoria.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
La invención puede entenderse mejor haciendo referencia a la siguiente descripción y los dibujos adjuntos que se usan para ilustrar las realizaciones de la invención. En los dibujos:
La Figura 1A es un diagrama de bloques que ilustra un flujo de instrucciones que tiene únicamente instrucciones en el formato de instrucción compatible con vectores de acuerdo con una realización de la invención;
La Figura 1B es un diagrama de bloques que ilustra un flujo de instrucciones con instrucciones en múltiples formatos de instrucciones de acuerdo con una realización de la invención;
La Figura 2A es un diagrama de bloques que ilustra un formato de instrucción compatible con vectores genérico y las plantillas de instrucción de clase A del mismo de acuerdo con las realizaciones de la invención; La Figura 2B es un diagrama de bloques que ilustra el formato de instrucción compatible con vectores genérico y las plantillas de instrucción de clase B del mismo de acuerdo con las realizaciones de la invención; La Figura 3A es un diagrama de bloques que ilustra un formato de instrucción compatible con vectores específico ilustrativo de acuerdo con las realizaciones de la invención;
La Figura 3B es un diagrama de bloques que ilustra los campos del formato de instrucción compatible con vectores específico 300 que componen el campo de código de operación completo 274 de acuerdo con una realización de la invención;
La Figura 3C es un diagrama de bloques que ilustra los campos del formato de instrucción compatible con vectores específico 300 que componen el campo de índice de registro 244 de acuerdo con una realización de la invención;
La Figura 3D es un diagrama de bloques que ilustra los campos del formato de instrucción compatible con vectores específico 300 que componen el campo de operación de aumento 250 de acuerdo con una realización de la invención;
La Figura 4A es parte de un diagrama de flujo que muestra la interrelación de algunos de los campos del formato de instrucción compatible con vectores de acuerdo con una realización de la invención;
La Figura 4B es una segunda parte del diagrama de flujo que muestra la interrelación de algunos de los campos del formato de instrucción compatible con vectores de acuerdo con una realización de la invención; La Figura 4C es una tercera parte del diagrama de flujo que muestra la interrelación de algunos de los campos del formato de instrucción compatible con vectores de acuerdo con una realización de la invención La Figura 4D es el resto del diagrama de flujo que muestra la interrelación de algunos de los campos del formato de instrucción compatible con vectores de acuerdo con una realización de la invención;
La Figura 4E es una vista en despiece de cada uno de los bloques 415A-H de acuerdo con una realización de la invención;
La Figura 5 es un diagrama de bloques de una arquitectura de registro 500 de acuerdo con una realización de la invención;
La Figura 6A es un diagrama de flujo para el campo de índice de registro 244 para una operación de tipo sin acceso a memoria de acuerdo con las realizaciones de la invención;
La Figura 6B es un diagrama de flujo que ilustra el uso del campo de índice de registro 244, el campo de escala 260, el campo de desplazamiento 262A y el campo de factor de desplazamiento 262B para una operación de tipo acceso a memoria de acuerdo con las realizaciones de la invención;
La Figura 6C es una tabla que ilustra las diferencias entre disp8, disp32 y variaciones del desplazamiento a escala de acuerdo con las realizaciones de la invención;
La Figura 7A es una tabla que ilustra el grupo de posibles operaciones que puede especificar el campo de control de redondeo 254A de acuerdo con las realizaciones de la invención;
La Figura 7B es una tabla que ilustra el grupo de posibles operaciones que puede especificar el campo de control de redondeo 259A de acuerdo con las realizaciones de la invención;
La Figura 8A es una tabla que ilustra el grupo de posibles operaciones de transformación de datos que pueden especificarse mediante el campo de transformación de datos 254B cuando la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención;
La Figura 8B es una tabla que ilustra el grupo de posibles operaciones de transformación de datos que pueden especificarse mediante el campo de transformación de datos 254B cuando la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 9 es un diagrama de bloques que ilustra el mezclador de producto cruzado 815 de acuerdo con las realizaciones de la invención;
La Figura 10A es un diagrama de bloques que ilustra la difusión de un elemento a través de paquetes de 4 elementos 820 de acuerdo con las realizaciones de la invención;
La Figura 10B es un diagrama de bloques que ilustra la difusión de granularidad de 1 elemento para una anchura de elemento de datos de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 10C es un diagrama de bloques que ilustra la difusión de granularidad de 4 elementos para elementos de datos de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 11A es una tabla que ilustra el grupo de posibles mapas de código de operación que pueden especificarse mediante el campo de mapa de código de operación de acuerdo con las realizaciones de la invención;
La Figura 11B es una tabla que ilustra el grupo de posibles codificaciones de prefijos que pueden especificarse mediante el campo de mapa de código de operación de acuerdo con las realizaciones de la invención;
La Figura 12A es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C y el campo de difusión 257B para un int de carga/operación donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención;
La Figura 12B es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C y el campo de difusión 257B para un int de carga/operación donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 12C es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C y el campo de difusión 257B para una fp de carga/operación donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención;
La Figura 12D es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C y el campo de difusión 257B para una fp de carga/operación donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 13A es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para un int de carga donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención;
La Figura 13B es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para un int de carga donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 13C es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para una fp de carga donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención;
La Figura 13D es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para una fp de carga donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 14A es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para un int de almacenamiento donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención;
La Figura 14B es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para un int de almacenamiento donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 14C es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para una fp de almacenamiento donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención;
La Figura 14D es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para una fp de almacenamiento donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención;
La Figura 15A es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para unos gráficos de carga donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención;
La Figura 15B es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para unos gráficos empaquetados de carga donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención; La Figura 15C es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para unos gráficos de almacenamiento donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención; La Figura 16A es un diagrama de bloques que ilustra una operación ilustrativa 1600 que fusiona el uso de la máscara de escritura en el registro de máscara de escritura K1 donde la anchura del elemento de datos es de 32 bits y donde el segundo origen y el destino son los mismos de acuerdo con las realizaciones de la invención;
La Figura 16B es un diagrama de bloques que ilustra una operación ilustrativa 1625 que fusiona el uso de la máscara cableada de todos unos (la máscara de escritura cableada se usa en instrucciones que especifican el registro de máscara de escritura K0) donde la anchura del elemento de datos es de 32 bits y donde el segundo origen y el destino son el mismo de acuerdo con las realizaciones de la invención;
La Figura 16C es un diagrama de bloques que ilustra la correspondencia de bits en los registros de máscara de escritura con las posiciones de elementos de datos de un vector de 512 bits para las anchuras de elementos de datos de 8, 16, 32 y 64 bits de acuerdo con las realizaciones de la invención;
La Figura 16D es un diagrama de bloques que ilustra una operación ilustrativa 1660 que fusiona el uso de la máscara de escritura en el registro de máscara de escritura K1 donde la anchura del elemento de datos es de 32 bits y donde el segundo origen y el destino son de acuerdo con las realizaciones de la invención; La Figura 16E es un diagrama de bloques que ilustra una operación ilustrativa 1666 que pone a cero el uso de la máscara de escritura en el registro de máscara de escritura K1 donde la anchura del elemento de datos es de 32 bits y donde el segundo origen y el destino son diferentes de acuerdo con las realizaciones de la invención;
La Figura 17A ilustra un subconjunto de campos de un formato de instrucción compatible con vectores específico ilustrativo de acuerdo con las realizaciones de la invención;
La Figura 17B ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 17A de acuerdo con las realizaciones de la invención;
La Figura 17C ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 17A de acuerdo con las realizaciones de la invención;
La Figura 17D ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 17A de acuerdo con las realizaciones de la invención;
La Figura 18A ilustra un subconjunto de campos de un formato de instrucción compatible con vectores específico ilustrativo de acuerdo con las realizaciones de la invención;
La Figura 18B ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 18A de acuerdo con las realizaciones de la invención;
La Figura 18C ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 18A de acuerdo con las realizaciones de la invención;
La Figura 18D ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 18A de acuerdo con las realizaciones de la invención;
La Figura 18E ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 18A de acuerdo con las realizaciones de la invención;
La Figura 18F ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 18A de acuerdo con las realizaciones de la invención;
La Figura 19A es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 210 se utilizan en diferentes etapas de una primera canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 19B es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de operación de tipo de transformación de datos sin acceso a memoria 215 se utilizan en diferentes etapas de una primera canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 19C es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de acceso a memoria 220 se utilizan en diferentes etapas de una primera canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 20A es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 210 se utilizan en diferentes etapas de una segunda canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 20B es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de operación de tipo de transformación de datos sin acceso a memoria 215 se utilizan en diferentes etapas de una segunda canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 20C es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de acceso a memoria 220 se utilizan en diferentes etapas de una segunda canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 21A es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 210 se utilizan en diferentes etapas de una tercera canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 21B es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de operación de tipo de transformación de datos sin acceso a memoria 215 se utilizan en diferentes etapas de una tercera canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 21C es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de acceso a memoria 220 se utilizan en diferentes etapas de una tercera canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 22A es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 210 se utilizan en diferentes etapas de una cuarta canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 22B es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de operación de tipo de transformación de datos sin acceso a memoria 215 se utilizan en diferentes etapas de una cuarta canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 22C es un diagrama de bloques que ilustra qué campos de la plantilla de instrucción de acceso a memoria 220 se utilizan en diferentes etapas de una cuarta canalización de procesador ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 23A es un diagrama de bloques de un único núcleo de CPU, junto con su conexión a la red de interconexión en chip 2302 y con su subconjunto local de la caché de nivel 2 (L2) 2304, de acuerdo con las realizaciones de la invención;
La Figura 23B es una vista en despiece de parte del núcleo de la CPU de la figura 23A de acuerdo con las realizaciones de la invención;
La Figura 24 es un diagrama de bloques que ilustra una arquitectura en desorden ilustrativa de acuerdo con las realizaciones de la invención;
La Figura 25 es un diagrama de bloques de un sistema 2500 de acuerdo con una realización de la invención; La Figura 26 es un diagrama de bloques de un segundo sistema 2600 de acuerdo con una realización de la invención;
La Figura 27 es un diagrama de bloques de un tercer sistema 2700 de acuerdo con una realización de la invención;
La Figura 28 es un diagrama de bloques de un SoC 2800 de acuerdo con una realización de la invención; La Figura 29 es un diagrama de bloques de un procesador de un único núcleo y un procesador de múltiples núcleos 2900 con controlador de memoria y gráficos integrados de acuerdo con las realizaciones de la invención; y
La Figura 30 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 en instrucciones binarias en un conjunto de instrucciones objetivo de acuerdo con las realizaciones de la invención.
DESCRIPCIÓN DE REALIZACIONES
En la siguiente descripción, se exponen numerosos detalles específicos, tales como implementaciones lógicas, códigos de operación, formas de especificar operandos, implementaciones de partición/compartición/duplicación de recursos, tipos e interrelaciones de los componentes de sistema y elecciones de partición/integración lógica para proporcionar una comprensión más profunda de la presente invención. Sin embargo, un experto en la materia apreciará que la invención puede practicarse sin tales detalles específicos. En otros casos, las estructuras de control, los circuitos de nivel de puerta y las secuencias de instrucciones de software completas no se han mostrado en detalle para no oscurecer la invención. Los expertos en la materia, con las descripciones incluidas, podrán implementar la funcionalidad apropiada sin experimentación indebida.
También debe apreciarse que, la referencia a lo largo de esta memoria descriptiva a "una realización" o "una o más realizaciones", por ejemplo, significa que una característica particular puede incluirse en la práctica de las realizaciones de la invención, pero cada realización puede no incluir necesariamente la característica particular. De manera similar, debe apreciarse que, en la descripción, varias características en ocasiones se agrupan en una sola realización, figura o descripción de la misma para simplificar la divulgación y ayudar en la comprensión de diversos aspectos inventivos. Además, cuando se describe un rasgo, estructura o característica particular en relación con una realización, se afirma que está dentro del conocimiento de un experto en la materia efectuar tal rasgo, estructura o característica en relación con otras realizaciones ya se haya descrito o no explícitamente. Sin embargo, este método de divulgación no debe interpretarse como reflejo de la intención de que la invención requiera más características de las que se mencionan expresamente en cada reivindicación. Más bien, como reflejan las siguientes reivindicaciones, los aspectos inventivos pueden radicar en menos de todas las características de una única realización divulgada. Por lo tanto, las reivindicaciones que siguen a la descripción detallada se incorporan expresamente por la presente en esta descripción detallada, y cada reivindicación se mantiene por sí misma como una realización separada de la invención.
En la siguiente descripción y reivindicaciones, pueden usarse los términos "acoplado" y "conectado", junto con sus derivados. Debe entenderse que, estos términos no pretenden ser sinónimos entre sí. "Acoplado" se usa para indicar que dos o más elementos, que pueden o no estar en contacto físico o eléctrico directo entre sí, cooperan o interactúan entre sí. "Conectado" se usa para indicar el establecimiento de comunicación entre dos o más elementos que están acoplados entre sí.
Las operaciones de los diagramas de flujo se describirán con referencia a las realizaciones ilustrativas de los diagramas de bloques. Sin embargo, debe entenderse que, las operaciones de los diagramas de flujo pueden realizarse mediante realizaciones de la invención distintas de las analizadas con referencia a los diagramas de bloques, y las realizaciones analizadas con referencia a los diagramas de bloques pueden realizar operaciones diferentes a las analizadas con referencia a los diagramas de flujo.
Para facilitar la comprensión, se han usado líneas discontinuas en las figuras para significar la naturaleza opcional de ciertos elementos (por ejemplo, características no soportadas por una determinada implementación de la invención; características soportadas por una determinada implementación, pero usadas en algunas situaciones y no en otras).
Formato de instrucción compatible con vectores - Figuras 1-16
Un formato de instrucción compatible con vectores es un formato de instrucción 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 se soportan a través del formato de instrucción compatible con vectores, realizaciones alternativas usan únicamente operaciones vectoriales en el formato de instrucción compatible con vectores.
Número de formatos de instrucciones - Figura 1A-1B
Formato de una instrucción - Figura 1A
La Figura 1A es un diagrama de bloques que ilustra un flujo de instrucciones que tiene únicamente instrucciones en el formato de instrucción compatible con vectores de acuerdo con una realización de la invención. El flujo de instrucciones incluye una secuencia de instrucciones J que están todas en el formato compatible con vectores 100A 100J. En una realización de la invención, un procesador soporta únicamente el formato de instrucción vectorial y puede ejecutar este flujo de instrucciones.
Formatos de múltiples instrucciones - Figura 1B
La Figura 1B es un diagrama de bloques que ilustra un flujo de instrucciones con instrucciones en múltiples formatos de instrucciones de acuerdo con una realización de la invención. Cada instrucción en el flujo de instrucciones se expresa en el formato de instrucción compatible con vectores, un segundo formato o un tercer formato. El flujo de instrucciones incluye las instrucciones J 110A-110J. En una realización de la invención, un procesador soporta formatos de múltiples instrucciones (que incluyen los formatos mostrados en la Figura 1B) y puede ejecutar los flujos de instrucciones en ambas Figuras 1A-1B.
Formato de instrucción compatible con vectores genéricos ilustrativo - Figura 2A-B
Las Figuras 2A-B son diagramas de bloques que ilustran un formato de instrucción compatible con vectores genérico y las plantillas de instrucción del mismo de acuerdo con las realizaciones de la invención. La Figura 2A es un diagrama de bloques que ilustra un formato de instrucción compatible con vectores genérico y las plantillas de instrucción de clase A del mismo de acuerdo con las realizaciones de la invención; mientras que la Figura 2B es un diagrama de bloques que ilustra el formato de instrucción compatible con vectores genérico y las plantillas de instrucción de clase B del mismo de acuerdo con las realizaciones de la invención. Específicamente, un formato de instrucción compatible con vectores genérico 200 para el que se definen plantillas de instrucción de clase A y clase B, ambas de las cuales incluyen las plantillas de instrucción sin acceso a memoria 205 y las plantillas de instrucción de acceso a memoria 220. El término genérico en el contexto del formato de instrucción compatible con vectores se refiere al formato de instrucción que no está vinculado a ningún conjunto de instrucciones específico. Si bien se describirán realizaciones en las que las instrucciones en el formato de instrucción compatible con vectores operan en vectores que provienen de registros (sin plantillas de instrucción de acceso a memoria 205) o registros/memoria (plantillas de instrucción de acceso a memoria 220), realizaciones alternativas de la invención pueden soportar solo uno de estos. Además, aunque se describirán realizaciones de la invención en las que hay instrucciones de carga y almacenamiento en el formato de instrucción vectorial, realizaciones alternativas, en su lugar o adicionalmente, tienen instrucciones en un formato de instrucción diferente que mueven vectores dentro y fuera de los registros (por ejemplo, de la memoria a registros, de registros a memoria, entre registros). Además, aunque se describirán realizaciones de la invención que soportan dos clases de plantillas de instrucción, realizaciones alternativas pueden soportar únicamente una de estas o más de dos. Si bien se describirán realizaciones de la invención en las que el formato de instrucción compatible con vectores soporta lo siguiente: una longitud (o tamaño) de operando de vector de 64 bytes con anchuras (o tamaños) de elementos de datos de 32 bits (4 bytes) o 64 bits (8 bytes) (y, por lo tanto, un vector de 64 bytes consiste en 16 elementos de tamaño de palabra doble o, como alternativa, 8 elementos de tamaño de palabra cuádruple); una longitud (o tamaño) de operando de vector de 64 bytes con anchuras (o tamaños) de elementos de datos de 16 bits (2 bytes) u 8 bits (1 byte); una longitud (o tamaño) de operando de vector de 32 bytes con anchuras (o tamaños) de elementos de datos de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) u 8 bits (1 byte); y una longitud (o tamaño) de operando de vector de 16 bytes con anchuras (o tamaños) de elementos de datos de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) u 8 bits (1 byte); realizaciones alternativas pueden soportar más, menos y/o diferentes tamaños de operandos vectoriales (por ejemplo, operandos vectoriales de 256 bytes) con más, menos o diferentes anchuras de elementos de datos (por ejemplo, anchuras de elementos de datos de 128 bits (16 bytes)).
Las plantillas de instrucción de clase A en la figura 2A incluyen: 1) dentro de las plantillas de instrucción sin acceso a memoria 205 se muestra una plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 210 y una plantilla de instrucción de operación de tipo de transformación de datos sin acceso a memoria 215; y 2) dentro de las plantillas de instrucción de acceso a memoria 220 se muestra una plantilla de instrucción temporal de acceso a memoria 225 y una plantilla de instrucción no temporal de acceso a memoria 230. Las plantillas de instrucción de clase B en la figura 2B incluyen: 1) dentro de las plantillas de instrucción sin acceso a memoria 205 se muestra una plantilla de instrucción de operación de tipo de control de redondeo parcial, control de máscara de escritura, sin acceso a memoria 212 y una plantilla de instrucción de operación de tipo vsize de control de máscara de escritura sin acceso a memoria 217; y 2) dentro de las plantillas de instrucción de acceso a memoria 220 se muestra una plantilla de instrucción de control de máscara de escritura de acceso a memoria 227.
Formato
El formato de instrucción compatible con vectores genérico 200 incluye los siguientes campos enumerados a continuación en el orden ilustrado en las Figuras 2A-B.
Campo de formato 240 - un valor específico (un valor de identificador de formato de instrucción) en este campo identifica de forma única el formato de instrucción compatible con vectores y, por lo tanto, las ocurrencias de instrucciones en el formato de instrucción compatible con vectores en los flujos de instrucciones. Por lo tanto, el contenido del campo de formato 240 distingue las ocurrencias de instrucciones en el primer formato de instrucción de las ocurrencias de instrucciones en otros formatos de instrucciones, permitiendo de esta manera la introducción del formato de instrucción compatible con vectores en un conjunto de instrucciones que tiene otros formatos de instrucciones. Como tal, este campo es opcional en el sentido de que no es necesario para un conjunto de instrucciones que solo tiene el formato de instrucción compatible con vectores genérico.
Campo de operación de base 242 - su contenido distingue diferentes operaciones de base. Como se describe más adelante en el presente documento, el campo de operación de base 242 puede incluir y/o ser parte de un campo de código de operación.
Campo de índice de registro 244 - 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 un número suficiente de bits para seleccionar N registros de un archivo de registro PxQ (por ejemplo, 32x512). Mientras que en una realización N puede ser hasta tres registros de origen y uno de destino, realizaciones alternativas pueden soportar más o menos 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). Mientras que en una realización P=32, las realizaciones alternativas pueden soportar más o menos registros (por ejemplo, 16). Mientras que en una realización Q=512 bits, las realizaciones alternativas pueden soportar más o menos bits (por ejemplo, 128, 1024). Campo de modificador 246 - su contenido distingue las ocurrencias de instrucciones en el formato de instrucción de vector genérico que especifican el acceso a memoria de aquellas que no lo hacen; es decir, entre plantillas de instrucción sin acceso a memoria 205 y plantillas de instrucción de acceso a memoria 220. Las operaciones de acceso a memoria leen y/o escriben en la jerarquía de la memoria (en algunos casos, especificando las direcciones de origen y/o destino usando valores en los registros), mientras que las operaciones sin acceso a memoria no lo hacen (por ejemplo, el origen y los destinos son registros). Mientras que en una realización este campo también selecciona entre tres formas diferentes de realizar cálculos de direcciones de memoria, las realizaciones alternativas pueden soportar más, menos o diferentes formas de realizar cálculos de direcciones de memoria.
Campo de operación de aumento 250 - 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 268, un campo alfa 252 y un campo beta 254. El campo de operación de aumento permite que se realicen grupos comunes de operaciones en una sola instrucción en lugar de 2, 3 o 4 instrucciones. A continuación, se muestran algunos ejemplos de instrucciones (cuya nomenclatura se describe con más detalle más adelante en el presente documento) que usan el campo de aumento 250 para reducir el número de instrucciones requeridas.
Figure imgf000010_0001
Donde [rax] es el puntero base que se usará para la generación de direcciones, y donde {} indica una operación de conversión especificada por el campo de manipulación de datos (que se describe con más detalle más adelante en este punto).
Campo de escala 260 - 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 262A - 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 262B (obsérvese que la yuxtaposición del campo de factor de desplazamiento 262A directamente sobre el campo de factor de desplazamiento 262B indica que se usa uno u otro) - su contenido se usa como parte de la generación de direcciones; especifica un factor de desplazamiento que va a escalarse 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 bajo orden se ignoran y, por lo tanto, el contenido del campo del factor de desplazamiento se multiplica por el tamaño total de los operandos de memoria (N) para generar el desplazamiento final que se usará para calcular una dirección efectiva. El valor de N se determina por el hardware del procesador en tiempo de ejecución basándose en el campo de código de operación completo 274 (descrito más adelante en el presente documento) y el campo de manipulación de datos 254C como se describe más adelante en el presente documento. El campo de desplazamiento 262A y el campo de factor de desplazamiento 262B son opcionales en el sentido de que no se usan para las plantillas de instrucción sin acceso a memoria 205 y/o diferentes realizaciones pueden implementar únicamente uno o ninguno de los dos.
Campo de anchura de elemento de datos 264 - su contenido distingue cuál de un número de anchuras de elementos de datos va a usarse (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 270 - su contenido controla, basándose en la posición del elemento de datos, si esa posición del elemento de datos en el operando de vector de destino refleja el resultado de la operación de base y la operación de aumento. Las plantillas de instrucción de clase A soportan la fusión de máscaras de escritura, mientras que las plantillas de instrucción 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 lo tanto, el campo de máscara de escritura 270 permite operaciones vectoriales parciales, que incluyen cargas, almacenamientos, aritméticas, lógicas, etc. Además, este enmascaramiento se puede usar para la supresión de fallos (es decir, enmascarando las posiciones de los elementos de datos de destino para evitar la recepción del resultado de cualquier operación que pueda causar/causará un fallo - por ejemplo, supongamos que un vector en la memoria cruza un límite de página y que la primera página, pero no la segunda, causaría un fallo de página, el fallo de página puede ignorarse si todos los elementos de datos del vector que se encuentran en la primera página están enmascarados por la máscara de escritura). Además, las máscaras de escritura permiten "bucles de vectorización" que contienen ciertos tipos de declaraciones condicionales. Si bien se describen realizaciones de la invención en las que el contenido del campo de máscara de escritura 270 selecciona uno de un número de registros de máscara de escritura que contiene la máscara de escritura que se usará (y, por lo tanto, el contenido del campo de máscara de escritura 270 identifica indirectamente el enmascaramiento que va a realizarse), realizaciones alternativas en su lugar o adicionales permiten que el contenido del campo de escritura de máscara 270 especifique directamente el enmascaramiento a realizar. Además, la puesta a cero permite mejoras en el rendimiento cuando: 1) el cambio de nombre de registro se usa en instrucciones cuyo operando de destino no es también una fuente (también llamado instrucciones no ternarias) porque durante la etapa de canalización de cambio de nombre de registro, el destino ya no es un origen implícito (no es necesario que se copien elementos de datos del registro de destino actual al registro de destino renombrado o que se lleven de alguna manera junto con la operación porque cualquier elemento de datos que no sea el resultado de la operación (cualquier elemento de datos enmascarado) se pondrá a cero); y 2) durante la etapa de reescritura porque se están escribiendo ceros.
Campo inmediato 272 - 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.
Selección de clase de plantilla de instrucción
Campo de clase 268 - su contenido distingue entre diferentes clases de instrucciones. Con referencia a las figuras 2A-B, el contenido de este campo selecciona entre instrucciones de clase A y clase B. En las figuras 2A-B, se usan cuadrados de esquina redondeada para indicar que un valor específico está presente en un campo (por ejemplo, clase A 268A y clase B 268B para el campo de clase 268 respectivamente en las figuras 2A-B).
Plantillas de instrucción sin acceso a memoria de clase A
En el caso de las plantillas de instrucción sin acceso a memoria de clase A 205, el campo alfa 252 se interpreta como un campo de RS 252A, cuyo contenido distingue cuál de los diferentes tipos de operación de aumento va a realizarse (por ejemplo, la redondeo 252A.1 y la transformación de datos 252A.2 se especifican respectivamente para las plantillas de instrucción de operación de tipo de redondeo sin acceso a memoria 210 y operación de tipo de transformación de datos sin acceso a memoria 215), mientras que el campo beta 254 distingue cuál de las operaciones del tipo especificado va a realizarse. En la Figura 2, los bloques de esquinas redondeadas se usan para indicar que un valor específico está presente (por ejemplo, sin acceso a memoria 246A en el campo de modificador 246; redondeo 252A.1 y transformación de datos 252A.2 para el campo alfa 252/campo rs 252A). En las plantillas de instrucción sin acceso a memoria 205, el campo de escala 260, el campo de desplazamiento 262A y el campo de escala de desplazamiento 262B no están presentes.
Plantillas de instrucción 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 210, el campo beta 254 se interpreta como un campo de control de redondeo 254A, cuyo contenido o contenidos proporcionan redondeo estático. Mientras que, en las realizaciones descritas de la invención, el campo de control de redondeo 254A incluye un campo de supresión de todas las excepciones de coma flotante (SAE) 256 y un campo de control de operación de redondeo 258, 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 258).
Campo de SAE 256 - su contenido distingue si se debe o no deshabilitar el informe de eventos de excepción; cuando el contenido del campo de SAE 256 indica que la supresión está habilitada, una instrucción dada no informa 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 258 - su contenido distingue cuál de un grupo de operaciones de redondeo realizar (por ejemplo, redondeo hacia arriba, redondeo hacia abajo, redondeo hacia cero y redondeo hacia el más cercano). Por lo tanto, el campo de control de operación de redondeo 258 permite el cambio del modo de redondeo por instrucción y, por lo tanto, es particularmente útil cuando se requiere. 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 250 anula ese valor de registro (pudiendo elegir el modo de redondeo sin tener que realizar un guardar-modificar-restaurar en un registro de control de este tipo que es ventajoso).
Plantillas de instrucción sin acceso a memoria - operación de tipo de transformación de datos
En la plantilla de instrucción de operación de tipo de transformación de datos sin acceso a memoria 215, el campo beta 254 se interpreta como un campo de transformación de datos 254B, cuyo contenido distingue cuál de un número de transformaciones de datos se va a realizar (por ejemplo, sin transformación de datos, mezcla, difusión).
Plantillas de instrucción de acceso a memoria de clase A
En el caso de una plantilla de instrucción de acceso a memoria 220 de clase A, el campo alfa 252 se interpreta como un campo de sugerencia de desalojo 252B, cuyo contenido distingue cuál de las sugerencias de desalojo se va a usar (en la Figura 2A, temporal 252B.1 y no temporal 252B.2 se especifican respectivamente para la plantilla de instrucción de acceso a memoria, temporal 225 y la plantilla de instrucción de acceso a memoria, no temporal 230), mientras que el campo beta 254 se interpreta como un campo de manipulación de datos 254C, cuyo contenido distingue cuál de un número de operaciones de manipulación de datos (también conocidas como primitivas) se va a realizar (por ejemplo, sin manipulación; difusión; conversión ascendente de un origen y conversión descendente de un destino). Las plantillas de instrucción de acceso a memoria 220 incluyen el campo de escala 260 y, opcionalmente, el campo de desplazamiento 262A o el campo de escala de desplazamiento 262B.
Las instrucciones de memoria vectorial realizan cargas de vectores y almacenamientos vectoriales en la memoria, con soporte de conversión. Al igual que con las instrucciones de vector normales, las instrucciones de memoria de vector transfieren datos desde/hasta la memoria en forma de elemento de datos, con los elementos que realmente se transfieren dictados por el contenido de la máscara de vector que se selecciona como la máscara de escritura. En la figura 2A, los cuadrados de esquina redondeada se usan para indicar que un valor específico está presente en un campo (por ejemplo, acceso a memoria 246B para el campo de modificador 246; temporal 252B. 1 y no temporal 252B.2 para el campo alfa 252/campo de sugerencia de desalojo 252B)
Plantillas de instrucción de acceso a 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 instrucción 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 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 instrucción de clase B
En el caso de las plantillas de instrucción de clase B, el campo alfa 252 se interpreta como un campo de control de máscara de escritura (Z) 252C, cuyo contenido distingue si el enmascaramiento de escritura controlado por el campo de máscara de escritura 270 debe ser una fusión o una puesta a cero.
Plantillas de instrucción sin acceso a memoria de clase B
En el caso de las plantillas de instrucción sin acceso a memoria 205 de clase B, parte del campo beta 254 se interpreta como un campo de RL 257A, cuyo contenido distingue cuál de los diferentes tipos de operación de aumento se va a realizar (por ejemplo, el redondeo 257A.1 y la longitud del vector (VSIZE) 257A.2 se especifican respectivamente para la plantilla de instrucción de operación sin acceso a memoria, de control de máscara de escritura, de tipo de control de redondeo parcial 212 y la plantilla de instrucción sin acceso a memoria, de control de máscara de escritura, de operación de tipo VSIZE 217), mientras que el resto del campo beta 254 distingue cuál de las operaciones del tipo especificado se va a realizar. En la Figura 2, los bloques de esquinas redondeadas se usan para indicar que un valor específico está presente (por ejemplo, sin acceso a memoria 246A en el campo de modificador 246; redondeo 257A.1 y VSIZE 257A.2 para el campo de RL 257A). En las plantillas de instrucción sin acceso a memoria 205, el campo de escala 260, el campo de desplazamiento 262A y el campo de escala de desplazamiento 262B no están presentes.
Plantillas de instrucción sin acceso a memoria - operación de control de máscara de escritura, tipo de control de redondeo parcial
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 210, el resto del campo beta 254 se interpreta como un campo de operación de redondeo 259A y el informe de eventos de excepción está deshabilitado (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 259A - al igual que el campo de control de operación de redondeo 258, su contenido distingue cuál de un grupo de operaciones de redondeo realizar (por ejemplo, redondeo hacia arriba, redondeo hacia abajo, redondeo hacia cero y redondeo hacia el más cercano). Por lo tanto, el campo de control de operación de redondeo 259A permite el cambio del modo de redondeo por instrucción y, por lo tanto, es particularmente útil cuando se requiere. 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 250 anula ese valor de registro (pudiendo elegir el modo de redondeo sin tener que realizar un guardar-modificar-restaurar en un registro de control de este tipo que es ventajoso).
Plantillas de instrucción sin acceso a memoria - operación de control de máscara de escritura, tipo VSIZE En la plantilla de instrucción de operación sin acceso a memoria, control de máscara de escritura, tipo VSIZE 217, el resto del campo beta 254 se interpreta como un campo de longitud de vector 259B, cuyo contenido distingue en cuál de un número de longitud de vector de datos se va a realizar (por ejemplo, 128, 256 o 512 bytes).
Plantillas de instrucción de acceso a memoria de clase B
En el caso de una plantilla de instrucción de acceso a memoria 220 de clase A, parte del campo beta 254 se interpreta como un campo de difusión 257B, cuyo contenido distingue si se va a realizar o no la operación de manipulación de datos de tipo difusión, mientras que el resto del campo beta 254 se interpreta como el campo de longitud de vector 259B. Las plantillas de instrucción de acceso a memoria 220 incluyen el campo de escala 260 y, opcionalmente, el campo de desplazamiento 262A o el campo de escala de desplazamiento 262B.
Comentarios adicionales con respecto a los campos
Con respecto al formato de instrucción compatible con vectores genéricos 200, se muestra un campo de código de operación completo 274 que incluye el campo de formato 240, el campo de operación de base 242 y el campo de anchura de elemento de datos 264. Aunque se muestra una realización donde el campo de código de operación completo 274 incluye todos estos campos, el campo de código de operación completo 274 incluye menos de todos estos campos en realizaciones que no los soportan todos. El campo de código de operación completo 274 proporciona el código de operación.
El campo de operación de aumento 250, el campo de anchura de elemento de datos 264 y el campo de máscara de escritura 270 permiten que estas características se especifiquen en una base por instrucciones en el formato de instrucción compatible con vectores genérico.
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.
El formato de instrucción requiere un número relativamente pequeño de bits porque reutiliza diferentes campos para diferentes propósitos basándose en el contenido de otros campos. Por ejemplo, una perspectiva es que el contenido del campo de modificador elige entre las plantillas de instrucción sin acceso a memoria 205 en las figuras 2A-B y las plantillas de instrucción de acceso a memoria 2250 en las figuras 2A-B; mientras que el contenido del campo de clase 268 elige dentro de esas plantillas de instrucción sin acceso a memoria 205 entre las plantillas de instrucción 210/215 de la figura 2A y 212/217 de la figura 2B; y, mientras que el contenido del campo de clase 268 elige dentro de esas plantillas de instrucción de acceso a memoria 220 entre las plantillas de instrucción 225/230 de la figura 2A y 227 de la figura 2B. Desde otra perspectiva, el contenido del campo de clase 268 elige entre las plantillas de instrucción de clase A y clase B respectivamente de las figuras 2A y B; mientras que el contenido del campo de modificador elige dentro de esas plantillas de instrucción de clase A entre las plantillas de instrucción 205 y 220 de la figura 2A; y, mientras que el contenido del campo de modificador elige dentro de esas plantillas de instrucción de clase B entre las plantillas de instrucción 205 y 220 de la figura 2B. En el caso de que el contenido del campo de clase indique una plantilla de instrucción de clase A, el contenido del campo de modificador 246 elige la interpretación del campo alfa 252 (entre el campo de RS 252A y el campo EH 252B. De manera relacionada, el contenido del campo de modificador 246 y del campo de clase 268 eligen si el campo alfa se interpreta como el campo de RS 252A, el campo EH 252B o el campo de control de máscara de escritura (Z) 252C. En el caso de que los campos de clase y modificador indiquen una operación sin acceso a memoria de clase A, la interpretación del campo beta del campo de aumento cambia basándose el contenido del campo de RS; mientras que en el caso de que los campos de clase y modificador indiquen una operación sin acceso a memoria de clase B, la interpretación del campo beta depende del contenido del campo de RL. En el caso de que los campos de clase y modificador indiquen una operación sin acceso a memoria de clase A, la interpretación del campo beta del campo de aumento cambia basándose el contenido del campo de operación de base; mientras que en el caso de que los campos de clase y modificador indiquen una operación de acceso a memoria de clase B, la interpretación del campo de difusión 257B del campo beta del campo de aumento cambia basándose en el contenido del campo de operación de base. Por lo tanto, la combinación del campo de operación de base, el campo de modificador y el campo de operación de aumento permite especificar una diversidad aún más amplia de operaciones de aumento.
Las diversas plantillas de instrucción que se encuentran dentro de la clase A y la clase B son beneficiosas en diferentes situaciones. La clase B es útil cuando se desea poner a cero-enmascarar la escritura o longitudes de vector más pequeñas por motivos de rendimiento. Por ejemplo, la puesta a cero permite evitar dependencias falsas cuando se usa el cambio de nombre, ya que ya no necesitamos más fusionarnos artificialmente con el destino; como otro ejemplo, el control de longitud de vector facilita los problemas de reenvío de almacenamiento-carga cuando se emulan tamaños de vector más cortos con la máscara de vector. La clase A es útil cuando se desea: 1) permitir excepciones de coma flotante (es decir, cuando el contenido del campo de SAE indica que no) mientras se usan controles de modo de redondeo al mismo tiempo; 2) poder usar conversión ascendente, mezcla, intercambio y/o conversión descendente; 3) operar en el tipo de datos de gráficos. Por ejemplo, la conversión ascendente, la mezcla, el intercambio, la conversión descendente y el tipo de datos gráficos reducen el número de instrucciones requeridas cuando se trabaja con fuentes en un formato diferente; como otro ejemplo, la capacidad de permitir excepciones proporciona un cumplimiento total de IEEE con modos de redondeo dirigidos. Además, en algunas realizaciones de la invención, diferentes procesadores o diferentes núcleos dentro de un procesador pueden soportar solo la clase A, solo la clase B o ambas clases. Por ejemplo, un núcleo fuera de orden de propósito general de alto rendimiento destinado a computación de propósito general puede soportar solo 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 independientes 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 dentro o fuera de orden de propósito general 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 de la invención. 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 instrucción compatible con vectores específico ilustrativo - Figuras 3A-D
La Figura 3A es un diagrama de bloques que ilustra un formato de instrucción compatible con vectores específico ilustrativo de acuerdo con las realizaciones de la invención. La Figura 3A muestra un formato de instrucción compatible con vectores específico 300 que es específico en el sentido de que especifica la ubicación, el tamaño, la interpretación y el orden de los campos, así como los valores para algunos de esos campos. El formato de instrucción compatible con vectores específico 300 se puede usar para ampliar el conjunto de instrucciones x86 y, por lo 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 2 a los que se mapean los campos de la Figura 3A.
Debe entenderse que, aunque las realizaciones de la invención se describen con referencia al formato de instrucción compatible con vectores específico 300 en el contexto del formato de instrucción compatible con vectores genérico 200 con fines ilustrativos, la invención no está limitada al formato de instrucción compatible con vectores específico 300 excepto donde se reivindique. Por ejemplo, el formato de instrucción compatible con vectores genérico 200 contempla una diversidad de tamaños posibles para los diversos campos, mientras que el formato de instrucción compatible con vectores específico 300 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 264 se ilustra como un campo de un bit en el formato de instrucción compatible con vectores específico 300, la invención no está así limitada (es decir, el formato de instrucción compatible con vectores genérico 200 contempla otros tamaños del campo de anchura de elemento de datos 264).
Formato - Figura 3A
El formato de instrucción compatible con vectores genérico 200 incluye los siguientes campos enumerados a continuación en el orden ilustrado en la Figura 3A.
Prefijo EVEX (Bytes 0-3)
Prefijo EVEX 302 - está codificado en formato de cuatro bytes.
Campo de formato 240 (EVEX Byte 0, bits [7:0]) - el primer byte (EVEX Byte 0) es el campo de formato 240 y contiene 0x62 (el valor único usado para distinguir el formato de instrucción compatible con vectores en una realización de la invención).
El segundo-cuarto bytes (EVEX Bytes 1-3) incluyen un número de campos de bits que proporcionan una capacidad específica.
El campo REX 305 (EVEX Byte 1, bits [7-5]) - consiste en un campo de bits EVEX.R (EVEX Byte 1, bit [7] - R), un campo de bits EVEX.X (EVEX byte 1, bit [6] -X), y 257BEX 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' 310 - esta es la primera parte del campo REX' 310 y es el campo de bits EVEX.R' (EVEX Byte 1, bit [4] - R') que se usa para codificar los 16 superiores o los 16 inferiores del conjunto de 32 registros extendido. En una realización de la invención, este bit, junto con otros como se indica a continuación, se almacena en formato de bits 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 a continuación) el valor de 11 en el campo MOD; realizaciones alternativas de la invención no almacenan este y los otros bits indicados a continuación en el formato invertido. Se usa un valor de 1 para codificar los 16 registros inferiores. En otras palabras, R'Rrrr se forma combinando EVEX.R', EVEX.R y el otro RRR de otros campos.
Campo de mapa de código de operación 315 (EVEX byte 1, bits [3:0] - mmmm) - su contenido codifica un byte de código de operación inicial implícito (0F, 0F 38 o 0F 3A).
El campo de anchura de elemento de datos 264 (EVEX byte 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 320 (EVEX Byte 2, bits [6:3]-vvvv)- la función de EVEX.vwv 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 lo tanto, el campo 320 de EVEX.ww codifica los 4 bits de orden inferior del primer especificador de registro de origen almacenado en forma invertida (complemento a 1). 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 268 campo de Clase (EVEX byte 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 325 (EVEX byte 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 PLA 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 252 (EVEX byte 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 α) - como se describió anteriormente, este campo es específico del contexto. Más adelante en el presente documento se proporciona una descripción adicional.
Campo beta 254 (EVEX byte 3, bits [6:4]-SSS, también conocido como EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; también ilustrado con βββ) - como se describió anteriormente, este campo es específico del contexto. Más adelante en el presente documento se proporciona una descripción adicional.
Campo REX' 310 - este es el resto del campo REX' y es el campo de bits EVEX.V' (EVEX Byte 3, bit [3] - V') que se puede usar para codificar los 16 superiores o los 16 inferiores del conjunto de 32 registros extendido. 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 270 (EVEX byte 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 máscara de escritura para la instrucción en particular (esto puede implementarse de diversas formas, incluido el uso de una máscara de escritura cableada a todos unos o hardware que pasa por alto el hardware de enmascaramiento).
Campo de código de operación real 330 (Byte 4)
Esto también se conoce como el byte de código de operación. Parte del código de operación se especifica en este campo.
MOD R/M campo 340 (Byte 5)
Campo de modificador 246 (MODR/M.MOD, bits [7-6] - campo MOD 342) - Como se describió anteriormente, el contenido del campo MOD 342 distingue entre operaciones de acceso a memoria y operaciones sin acceso a memoria. Este campo se describirá con más detalle más adelante en el presente documento.
Campo MODR/M.reg 344, bits [5-3] - la función del campo ModR/M.reg se puede resumir en dos situaciones: ModR/M.reg codifica el operando de registro de destino o un operando de registro de origen, o ModR/M.reg se trata como una extensión de código de operación y no se usa para codificar ningún operando de instrucción.
MODR/M.r/m campo 346, bits [2-0] - la función del campo ModR/M.r/m puede incluir lo siguiente: ModR/M.r/m codifica el operando de instrucción que hace referencia a una dirección de memoria, o ModR/M.r/m codifica el operando de registro de destino o un operando de registro de origen.
Byte de escala, índice, base (SIB) (Byte 6)
Campo de escala 260 (SIB.SS, bits [7-6] - como se describió anteriormente, el contenido del campo de escala 260 se usa para la generación de direcciones de memoria. Este campo se describirá con más detalle más adelante en el presente documento.
SIB.xxx 354 (bits [5-3] y SIB.bbb 356 (bits [2-0]) - el contenido de estos campos se ha mencionado anteriormente con respecto a los índices de registro Xxxx y Bbbb.
Byte o bytes de desplazamiento (Byte 7 o Bytes 7-10)
Campo de desplazamiento 262A (Bytes 7-10) - cuando el campo MOD 342 contiene 10, los bytes 7-10 son el campo de desplazamiento 262A, y funciona igual que el desplazamiento de 32 bits heredado (disp32) y funciona con granularidad de byte.
Campo de factor de desplazamiento 262B (Byte 7) - cuando el campo MOD 342 contiene 01, el byte 7 es el campo de factor de desplazamiento 262B. 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 262B es una reinterpretación de disp8; cuando se usa el campo de factor de desplazamiento 262B, 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 262B sustituye el desplazamiento de 8 bits del conjunto de instrucciones x86 heredado. Por lo tanto, el campo de factor de desplazamiento 262B 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). Inmediato
El campo inmediato 272 funciona como se ha descrito anteriormente.
Campo de código de operación completo - Figura 3B
La Figura 3B es un diagrama de bloques que ilustra los campos del formato de instrucción compatible con vectores específico 300 que componen el campo de código de operación completo 274 de acuerdo con una realización de la invención. Específicamente, el campo de código de operación completo 274 incluye el campo de formato 240, el campo de operación de base 242 y el campo de anchura de elemento de datos (W) 264. El campo de operación de base 242 incluye el campo de codificación de prefijo 325, el campo de mapa de código de operación 315 y el campo de código de operación real 330.
Campo de índice de registro - Figura 3C
La Figura 3C es un diagrama de bloques que ilustra los campos del formato de instrucción compatible con vectores específico 300 que componen el campo de índice de registro 244 de acuerdo con una realización de la invención. Específicamente, el campo de índice de registro 244 incluye el campo REX 305, el campo REX' 310, el campo MODR/M.reg 344, el campo MODR/M.r/m 346, el campo VVVV 320, el campo xxx 354 y el campo bbb 356.
Campo de operación de aumento - Figura 3D
La Figura 3D es un diagrama de bloques que ilustra los campos del formato de instrucción compatible con vectores específico 300 que componen el campo de operación de aumento 250 de acuerdo con una realización de la invención. Cuando el campo de clase (U) 268 contiene 0 significa EVEX.U0 (clase A 268A); cuando contiene 1 significa EVEX.U1 (clase B 268B). Cuando U=0 y el campo MOD 342 contiene 11 (lo que significa una operación sin acceso a memoria), el campo alfa 252 (EVEX byte 3, bit [7] - EH) se interpreta como el campo de RS 252A. Cuando el campo de RS 252A contiene un 1 (redondeo 252A.1), el campo beta 254 (EVEX byte 3, bits [6:4]-SSS) se interpreta como el campo de control de redondeo 254A. El campo de control de redondeo 254A incluye un campo de SAE de un bit 256 y un campo de operación de redondeo de dos bits 258. Cuando el campo de RS 252A contiene un 0 (transformación de datos 252A), el campo beta 254 (EVEX byte 3, bits [6:4]-SSS) se interpreta como un campo de transformación de datos de tres bits 254B. Cuando U=0 y el campo MOD 342 contiene 00, 01 o 10 (lo que significa una operación de acceso a memoria), el campo alfa 252 (EVEX byte 3, bit [7] - EH) se interpreta como el campo de sugerencia de desalojo (EH) 252B y el campo beta 254 (EVEX byte 3, bits [6:4]-SSS) se interpreta como un campo de manipulación de datos de tres bits 254C.
Cuando U=1, el campo alfa 252 (EVEX byte 3, bit [7] - EH) se interpreta como el campo de control de máscara de escritura (Z) 252C. Cuando U=1 y el campo MOD 342 contiene 11 (lo que significa una operación sin acceso a memoria), parte del campo beta 254 (EVEX byte 3, bit [4]- S0) se interpreta como el campo de RL 257A; cuando contiene un 1 (redondeo 257A.1) el resto del campo beta 254 (EVEX byte 3, bit [6-5]- S2-1) se interpreta como el campo de operación de redondeo 259A, mientras que cuando el campo de RL 257A contiene un 0 (VSIZE 257.A2) el resto del campo beta 254 (EVEX byte 3, bit [6-5]- S2-1) se interpreta como el campo de longitud de vector 259B (EVEX byte 3, bit [6-5]- L1-0). Cuando U=1 y el campo MOD 342 contiene 00, 01 o 10 (lo que significa una operación de acceso a memoria), el campo beta 254 (EVEX byte 3, bits [6:4]- SSS) se interpreta como el campo de longitud de vector 259B (EVEX byte 3, bit [6-5]- L1-0) y el campo de difusión 257B (EVEX byte 3, bit [4]- B).
Algunos puntos adicionales
El formato vectorial extiende el número de registros a 32 (REX').
Codificación de registro de origen no destructiva (aplicable a sintaxis de tres y cuatro operandos): Este es el primer operando de origen en la sintaxis de la instrucción. Está representado por la notación EVEX.vvvv. Este campo se codifica en forma de complemento a 1 (forma invertida), es decir, ZMM0 se codifica como 1111B, ZMM15 se codifica como 0000B. Obsérvese que se necesita un campo de bit adicional en EVEX para extender el origen a 32 registros. EVEX.W define el tamaño de tipo de datos (32 bits o 64 bits) para ciertas de las instrucciones.
Codificación de conjunto de 32 registros extendidos: El prefijo EVEX proporciona un campo de bits adicional para codificar 32 registros por origen con los siguientes campos de bits especializados: EVEX.R' y EVEX.V' (junto con EVEX.X para formatos registro-registro).
Compactación del prefijo de SIMD: Las instrucciones de SSE heredadas usan efectivamente los prefijos de SIMD (66H, F2H, F3H) como un campo de extensión de código de operación. La codificación de prefijo EVEX permite la capacidad funcional de tales instrucciones de SSE heredadas usando una longitud de vector de 512 bits.
Compactación de código de operación de dos bytes y tres bytes: Las instrucciones de SSE heredadas introducidas más recientemente emplean códigos de operación de dos y tres bytes. Los uno o dos bytes principales son: 0FH y 0FH 3AH/0FH 38H. El escape de un byte (0FH) y el escape de dos bytes (0FH 3AH, 0FH 38H) también se pueden interpretar como un campo de extensión de código de operación. El campo EVEX.mmm proporciona compactación para permitir que se codifiquen muchas instrucciones heredadas sin la secuencia de bytes constante, 0FH, 0FH 3AH, 0FH 38H.
Diagrama de flujo ilustrativo que muestra la interrelación de algunos de los campos del formato de instrucción compatible con vectores - Figuras 4A-4E
Las Figuras 4A - 4D ilustran un diagrama de flujo que muestra la interrelación de algunos de los campos del formato de instrucción compatible con vectores de acuerdo con una realización de la invención; mientras que la figura 4E es una vista en despiece de cada uno de los bloques 415A-H de acuerdo con una realización de la invención. En el bloque 400, se determina si el valor del campo inicial indica el formato de instrucción compatible con vectores (por ejemplo, 0x62). Si no, el control pasa al bloque 402 donde la instrucción se maneja de acuerdo con uno de los otros formatos del conjunto de instrucciones. En caso afirmativo, el control pasa al bloque 492.
En el bloque 492, se determina si el contenido del campo de clase (U) indica plantillas de instrucción de clase A o clase B. En el caso de la clase A, el control pasa a dos bloques separados: bloque 404A y 490. De lo contrario, el control pasa a través del círculo B a dos bloques separados en la figura 4C: bloque 404B y bloque 493.
En el bloque 404A, se determina si el contenido del campo de modificador indica una operación sin acceso a memoria o una operación de acceso a memoria. En el caso de una operación sin acceso a memoria (por ejemplo, campo MOD 342 = 11), el control pasa a los bloques 406 y 408. En el caso de una operación de acceso a memoria (por ejemplo, campo MOD 342 = 00, 01 o 10), el control pasa a cada bloque 422, bloque 430 y bloque 440A (en la figura 4B a través de la A dentro de un círculo).
Un cuadro de esquina redondeada etiquetado como campo alfa 252 abarca el bloque 408 y el bloque 422 porque representan las diferentes interpretaciones del campo alfa 252. Específicamente, el bloque 408 representa la interpretación del campo alfa 252 como el campo de RS 252A, mientras que el bloque 422 representa cuando la interpretación del campo alfa 252 es el campo de sugerencia de desalojo 252B.
En el bloque 406, los contenidos del campo de índice de registro 244 se usan como se ilustra en la Figura 6A.
En el bloque 408, se determina si el contenido del campo de RS 252A indica una operación de tipo de redondeo (por ejemplo, campo de RS 252A = 1) o una operación de tipo transformación de datos (por ejemplo, campo de RS 252A = 0). En la primera, el control pasa a cada bloque 410, bloque 412A y bloque 414. En este último caso, el control pasa al bloque 416.
Un cuadro de esquina redondeada etiquetado como campo beta (control de redondeo) 254A abarca el bloque 410 y el bloque 412A. El bloque 410 ilustra una decisión con respecto al contenido del campo 256 SAE (suprimir o no las excepciones de coma flotante), mientras que el bloque 412A ilustra una decisión basada en el contenido del campo de operación de redondeo 258 (distinguiendo una del grupo de posibles operaciones de redondeo). Las decisiones tomadas en los bloques 410 y 412A se ilustran en la Figura 7A.
Los bloques 414, 416, 442, 448, 454, 460, 468 y 474 ilustran todos una decisión con respecto al contenido del campo de anchura (w) de elemento de datos 264. Como se ilustra en la Figura 4, el campo de anchura de elemento de datos 264 es un campo de 1 bit en el formato de instrucción compatible con vectores específico 300 de la Figura 3A. Como tal, estos bloques deciden si la anchura del elemento de datos es de 64 bits (por ejemplo, 1) o de 32 bits (por ejemplo, 0). Con respecto al bloque 414, esta decisión marca el final de esta rama del flujo. Por el contrario, el control pasa del bloque 416 al bloque 418 o al bloque 420 para las anchuras de elemento de datos de 64 bits y 32 bits, respectivamente. Un cuadro de esquina redondeada etiquetado como campo beta (transformación de datos) 254B abarca tanto el bloque 418 como el bloque 420; y, por tanto, representa el caso en el que el campo beta 254 se interpreta como el campo de transformación de datos 254B. En los bloques 418 y 420, el contenido del campo de transformación de datos 254B se usa para distinguir cuál de un número de operaciones de transformación de datos se va a realizar. Los grupos de posibles operaciones de transformación de datos para el bloque 418 y el bloque 420 se muestran respectivamente en la Figura 8A y la Figura 8B.
En el bloque 422, el contenido del campo de sugerencia de desalojo 252B se usa para distinguir cuál del grupo de posibles opciones de sugerencia de desalojo debe usarse. La Figura 4 ilustra el uso de un campo de sugerencia de desalojo de 1 bit 252B del formato de instrucción compatible con vectores específico 300. Específicamente, las opciones de sugerencia de desalojo son no temporal (1) y temporal (0). Esto marca el final de esta rama del diagrama de flujo.
En el bloque 430, los contenidos del campo de índice de registro 244, el campo de escala 260 y el campo de desplazamiento 262A o el campo de factor de desplazamiento 262B se usan como se indica en la Figura 6B. Esto marca el final de esta rama del diagrama de flujo.
En el bloque 440A, el contenido del campo de operación de base 242 se usa para distinguir cuál de un grupo de diferentes operaciones de acceso a memoria se va a realizar. La siguiente tabla ilustra el grupo de operaciones de acceso a memoria soportadas de acuerdo con una realización de la invención, así como el flujo de control del bloque 440A para cada una. Las realizaciones alternativas de la invención pueden soportar más, menos o diferentes operaciones de acceso a memoria.
Figure imgf000019_0001
Como se describió anteriormente, los bloques 442, 448, 454, 460, 468 y 474 determinan el cambio en el flujo de control basándose en la anchura del elemento de datos; el flujo de control se ilustra en la siguiente tabla.
Figure imgf000020_0001
De manera similar, la decisión de los bloques 480, 482 y 484 se ilustra respectivamente en las Figuras 15A, 15B y 15C. Un cuadro de esquina redondeada etiquetado como campo beta (manipulación de datos) 254C abarca los bloques 444A, 446A, 450A, 452A, 456, 458, 462, 464, 470, 472, 476, 478, 480, 482 y 484; ilustrando de esta manera que el contenido del campo de manipulación de datos 254C distingue cuál del grupo de posibles operaciones de manipulación de datos se va a realizar.
En el bloque 490, el contenido del campo de máscara (k) de escritura 270 y el contenido del campo de anchura (w) de elemento de datos 264 se usan para determinar la máscara de escritura que se usará en la operación.
La Figura 4 ilustra la realización en la que hay ocho registros de máscara derecha y el registro 000 indica que no se debe usar ninguna máscara de escritura. Cuando el contenido del campo de la máscara de escritura 270 indica algo distinto de 000, el control pasa a la Figura 16A-D.
En el bloque 404B, se determina si el contenido del campo de modificador indica una operación sin acceso a memoria o una operación de acceso a memoria. En el caso de una operación sin acceso a memoria (por ejemplo, campo MOD 342 = 11), el control pasa a los bloques 406 (en la figura 4A a través de la E dentro de un círculo) y 495. En el caso de una operación de acceso a memoria (por ejemplo, campo MOD 342 = 00, 01 o 10), el control pasa a cada bloque 498, bloque 430 (en la figura 4A a través de la D dentro de un círculo) y bloque 440B (en la figura 4D a través de la C dentro de un círculo).
Un cuadro de esquina redondeada etiquetado como parte del campo beta 254 abarca el bloque 495, el bloque 412B y el bloque 498 porque representan las diferentes interpretaciones de parte del campo beta 254. Específicamente, el bloque 495 representa parte de la interpretación del campo beta 254 como el campo de RL 257A, mientras que un cuadro de esquina redondeada etiquetado como campo de difusión 257B en la figura 4D representa esta parte de la interpretación del campo beta 254 como el campo de difusión 257B.
En el bloque 495, se determina si el contenido del campo de RL 257A indica una operación de tipo de redondeo (por ejemplo, el campo de RL 257A = 1) o una operación de tipo de longitud de vector (por ejemplo, el campo de RL 257A = 0). En la primera, el control pasa a cada uno del bloque 412B y el bloque 415A. En el último caso, el control pasa a cada uno del bloque 498 y el bloque 415B.
El bloque 412B ilustra una decisión basada en el contenido 259B del campo de operación de redondeo (distinguiendo una del grupo de posibles operaciones de redondeo). La decisión realizada en el bloque 412B se ilustra en la Figura 7B.
Todos los bloques 415A-H ilustran una decisión con respecto a la anchura del elemento de datos en el que operar. Como se ilustra, los elementos de datos soportados para la clase B (cuando U=1) son de 64 bits, 32 bits, 16 bits y 8 bits. Las formas ilustrativas de realizar estos bloques se describen más adelante en el presente documento con referencia a la figura 4E. Los bloques 415A-B marcan respectivamente el final de estas ramas del diagrama de flujo. Con respecto a la figura 415A, las líneas de las anchuras del elemento de datos de 16 bits y 8 bits se muestran como discontinuas porque, en una realización de la invención no se soportan; en su lugar, si hay una operación de tipo sin acceso a memoria para la clase B que está operando en elementos de datos de 16 u 8 bits, a continuación, se espera que el contenido del campo de RL 257A sea 0 y, por lo tanto, haga que el control fluya del bloque 495 a los bloques 415B y 498 (en otras palabras, no está disponible el redondeo parcial).
En el bloque 498, el contenido del campo de longitud de vector (LL) 268 se usa para determinar el tamaño del vector en el que se va a operar. La Figura 4 ilustra la realización en la que se soporta lo siguiente: 1) 128 bits (00); 2) 256 bits (01); 512 bits (10); mientras que (11) está reservado. El 11 reservado puede usarse para diferentes propósitos para diferentes tipos de instrucciones o para diferentes realizaciones de la invención. Por ejemplo, 11 podría usarse para los siguientes propósitos ilustrativos: 1) para designar una longitud de vector de 1024 bits; o 2) para designar que debe usarse un registro de longitud de vector dinámico. Diferentes realizaciones pueden implementar el registro o registros de longitud de vector dinámico de manera diferente, incluyendo un registro especial usado para codificar la longitud de vector que los programas pueden leer y escribir. Un registro de longitud de vector dinámico almacena un valor que va a usarse para la longitud de vector de la instrucción. Si bien las diferentes realizaciones pueden soportar un número de longitudes de vector diferentes a través de un registro de longitud de vector dinámico, una realización de la invención soporta un múltiplo de 128 bits (por ejemplo, 128, 256, 512, 1024, 2048...). Cuando hay un conjunto de uno o más registros que funcionan como registros de longitud de vector dinámico, diferentes realizaciones de la invención pueden seleccionar de esos registros usando diferentes técnicas (por ejemplo, basándose en el tipo de instrucción).
En el bloque 440B, el contenido del campo de operación de base 242 se usa para distinguir cuál de un grupo de diferentes operaciones de acceso a memoria se va a realizar. La siguiente tabla ilustra el grupo de operaciones de acceso a memoria soportadas de acuerdo con una realización de la invención, así como el flujo de control del bloque 440B para cada una. Las realizaciones alternativas de la invención pueden soportar más, menos o diferentes operaciones de acceso a memoria.
Figure imgf000021_0001
Como se describió anteriormente, los bloques 415C-H determinan el cambio en el flujo de control basándose en la anchura del elemento de datos; el flujo de control se ilustra en la siguiente tabla.
Figure imgf000021_0002
El cuadro de esquina redondeada etiquetado como campo de difusión 257B abarca los bloques 444B, 446B, 450B y 452B; ilustrando de esta manera que el contenido del campo de difusión 257B distingue si se va a realizar una operación de difusión. Como se ilustra, una realización de la invención permite que el contenido del campo de difusión (b) 257B seleccione si se realiza o no una operación de difusión para las anchuras de elementos de datos de 64 bits y 32 bits, que no es una opción para las anchuras de elemento de datos de 16 bits y 8 bits; en su lugar, si hay una operación de tipo de acceso a memoria para la clase B que está operando en elementos de datos de 16 u 8 bits, a continuación, se espera que el contenido del campo de difusión (B) 257B sea 0.
En el bloque 493, el contenido del campo alfa 252 (campo de control de creación de escritura (Z) 252C), el contenido del campo de máscara de escritura (k) 270 y una determinación de la anchura del elemento de datos se usan para determinar que se realice la operación de creación de escritura (fusión o puesta a cero) y la máscara de escritura que va a usarse en la operación. En algunas realizaciones de la invención, se espera que el campo alfa 252 (control de máscara de escritura (campo Z 252C) sea cero (para enmascaramiento de cero) en las operaciones de acceso a memoria que realizan almacenamientos. La determinación de la anchura del elemento de datos se realiza de la misma manera que el bloque 415. La Figura 4 ilustra la realización en la que hay ocho registros de máscara derecha y el registro 000 indica que no se debe usar ninguna máscara de escritura. Cuando el contenido del campo de la máscara de escritura 270 indica algo distinto de 000, el control pasa a la Figura 16D-E.
La Figura 4E es una vista en despiece de cada uno de los bloques 415A-H de acuerdo con una realización de la invención. Específicamente, se ilustra un solo flujo 415 que representa el flujo para cada uno de los bloques 415A-H. En el bloque 417A, parte o todo el contenido del campo de código de operación real 330 se usa para seleccionar entre dos conjuntos de anchuras de elementos de datos: un primer conjunto 417A.1 (por ejemplo, que incluye 64 bits y 32 bits) y un segundo conjunto 417A.2 (por ejemplo, 16 bits y 8 bits). Mientras que la anchura del elemento de datos se determina para el primer conjunto 417A.1 basándose en el campo de anchura del elemento de datos (w) 264 como se ilustra en el bloque 417B; dentro del segundo conjunto 471A.2, hay dos formas de determinar la anchura del elemento de datos: 417A.2.1 (basándose solo en el campo de código de operación real 330) y 417A.2.2 (basándose en el campo de anchura de elemento de datos (w) 264 como se ilustra en el bloque 417C). Como se ilustra en la Figura 4, el campo de anchura de elemento de datos 264 es un campo de 1 bit en el formato de instrucción compatible con vectores específico 300 de la Figura 3A. Como tal, este bloque 417B decide si la anchura del elemento de datos es de 64 bits (por ejemplo, 1) o de 32 bits (por ejemplo, 0); mientras que el bloque 417C decide si la anchura del elemento de datos es de 16 bits (por ejemplo, 1) u 8 bits (por ejemplo, 0). Mientras que la figura 4E ilustra la implicación del campo de código de operación real 417A en la determinación de la anchura del elemento de datos, se pueden implementar realizaciones alternativas para usar solo el campo w (por ejemplo, tener un campo w de un bit y soportar únicamente dos tamaños de elementos de datos; tener un campo w de dos bits y soportar los cuatro tamaños de elementos de datos).
Si bien se han descrito realizaciones de la invención con referencia a la Figura 4, las realizaciones alternativas pueden usar diferentes flujos. Por ejemplo, como se ilustra con los bloques 480, 482 y 484, las operaciones que soportan únicamente una anchura de elemento de datos no necesitan tener la decisión de anchura de elemento de datos (por ejemplo, el bloque 442A) y no requieren dos decisiones de campo beta (por ejemplo, los bloques 444A y 446A); una realización alternativa únicamente puede soportar una anchura de elemento de datos para todas tales operaciones, soportar ambas anchuras de elementos de datos en todos los tipos de operaciones (lo que requeriría decisiones de anchura de elemento de datos y campo beta adicional en las operaciones de carga de gráficos, carga de gráficos empaquetados y almacenamiento de gráficos), o no soportar diferentes anchuras de elementos de datos en algunas de las otras operaciones (por ejemplo, no soportar diferentes anchuras de elementos de datos para las operaciones de carga/operación). En un contexto similar, la realización alternativa puede no soportar diferentes anchuras de elementos de datos en una o más de la operación de tipo de redondeo sin acceso a memoria y la operación de tipo de transformación de datos sin acceso a memoria (en la primera, los bloques 414 y 415A no estarían presentes; en la última, el bloque 415B no estaría presente, mientras que el bloque 416 no estaría presente y los bloques 418 y 420 estarían fusionados). Como otro ejemplo, diferentes realizaciones de la invención: pueden no incluir el campo de clase (U) 268 y soportar únicamente una de las plantillas de instrucción de clase A o B; pueden incluir el campo de SAE 256 y no el campo de operación de redondeo 258; pueden no incluir el campo de operación de redondeo 259A; pueden no incluir el campo de sugerencia de desalojo 252B; pueden no incluir la operación de tipo de redondeo en una o en ambas plantillas de instrucción de clase A y B; pueden no incluir la operación de tipo de transformación de datos; pueden no incluir el campo de longitud de vector 259B en ninguno o ambos del acceso memoria 205 y sin acceso a memoria 220; soportar únicamente una u otra de las operaciones de carga/operación y carga; pueden no incluir el campo de escritura de máscara 270; pueden no incluir el campo de control de máscara de escritura (Z) 252C; y/o pueden no incluir el campo de longitud de vector 268.
Arquitectura de registro ilustrativa - Figura 5
La Figura 5 es un diagrama de bloques de una arquitectura de registro 500 de acuerdo con una realización de la invención. Los archivos de registro y los registros de la arquitectura de registro se enumeran a continuación:
Archivo de registro de vector 510 - en la realización ilustrada, hay 32 registros de vectores 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 instrucción compatible con vectores específico 300 opera en este archivo de registro superpuesto, como se ilustra en las tablas a continuación.
Figure imgf000022_0001
En otras palabras, el campo de longitud de vector 259B selecciona entre una longitud máxima y una o más longitudes más cortas, donde cada una de dichas longitudes más cortas es la mitad de la longitud de la longitud precedente; y las plantillas de instrucción sin el campo de longitud de vector 259B operan en la longitud de vector máxima. Además, en una realización, las plantillas de instrucción de clase B del formato de instrucción compatible con vectores específico 300 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 zmrnlymm/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 515 - en la realización ilustrada, hay 8 registros de máscara de escritura (k0 a k7), cada uno de 64 bits de tamaño. Como se describió anteriormente, en una realización de la invención, el registro de máscara vectorial k0 no se puede usar como una máscara de escritura; cuando se usa la codificación que normalmente indicaría k0 para una máscara de escritura, selecciona una máscara de escritura cableada de 0xFFFF, deshabilitando de manera efectiva el enmascaramiento de escritura para esa instrucción.
Registro de estado de control de extensiones multimedia (MXCSR) 520 - en la realización ilustrada, este registro de 32 bits proporciona bits de estado y control usados en operaciones de coma flotante.
Registros de propósito general 525 - 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.
Registro de banderas extendidas (EFLAGS) 530 - en la realización ilustrada, este registro de 32 bits se usa para registrar los resultados de muchas instrucciones.
Registro de palabra de control de coma flotante (FCW) 535 y registro de palabra de estado de coma flotante (FSW) 540 - en la realización ilustrada, estos registros son utilizados por extensiones de conjunto de instrucciones x87 para establecer modos de redondeo, máscaras de excepción y banderas en el caso de FCW, y realizar un seguimiento de las excepciones en el caso de FSW.
Archivo de registro de pila de coma flotante escalar (pila x87) 545 en el que se alinea el archivo de registro plano de entero empaquetado de MMX 550 - en la realización ilustrada, la pila x87 es una pila de ocho elementos usada para realizar operaciones de coma flotante escalar 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 en datos enteros empaquetados de 64 bits, así como para mantener operandos para algunas operaciones realizadas entre los registros MMX y XMM.
Registros de segmento 555 - en la realización ilustrada, hay seis registros de 16 bits que se usan para almacenar datos usados para la generación de direcciones segmentadas.
Registro RIP 565 - en la realización ilustrada, este registro de 64 bits que almacena el puntero de instrucción.
Realizaciones alternativas de la invención pueden usar registros más anchos o más estrechos. Además, las realizaciones alternativas de la invención pueden usar más, menos o diferentes registros y archivos de registro. Flujos de campo de índice de registro, campo de escala, campo de desplazamiento y campo de factor de desplazamiento - Figuras 6A-6C
Campo de modificador = acceso sin memoria - Figura 6A
La Figura 6A es un diagrama de flujo para el campo de índice de registro 244 para una operación de tipo sin acceso a memoria de acuerdo con las realizaciones de la invención. La Figura 6A comienza con un óvalo 600 que indica que el direccionamiento de registro a registro se está realizando de acuerdo con el campo mod 342 (= 11). Desde el bloque 600, un control pasa al bloque 605.
En el bloque 605, los bits se seleccionan del campo de índice de registro 244 para direccionar registros. Con respecto al formato de instrucción compatible con vectores específico 300, el conjunto de instrucciones x86 existente con extensiones permite una amplia diversidad de diferentes opciones de direccionamiento de registro basadas en el campo REX 305, el campo reg 344, el campo r/m 346, el campo VVVV 320, el campo xxx 354 y el campo bbb 356. El campo REX' 310 amplía estas opciones. Desde el bloque 605, el control pasa al bloque 610.
En el bloque 610, se selecciona el registro A (por ejemplo, zmm20) y el control pasa al bloque 615. En el bloque 615, se selecciona el registro B (por ejemplo, zmm5) y el control pasa opcionalmente al bloque 620. En el bloque 620, se selecciona el registro C (por ejemplo, zmm7). El registro A puede ser un registro de operando de origen; el registro B puede ser un registro de operando de origen, un registro de operando de destino o un registro de operando de origen/destino; y el registro C puede ser un registro de operando de origen, un registro de operando de destino o un operando de origen/destino.
Campo de modificador = acceso a memoria - Figura 6B
La Figura 6B es un diagrama de flujo que ilustra el uso del campo de índice de registro 244, el campo de escala 260, el campo de desplazamiento 262A y el campo de factor de desplazamiento 262B para una operación de tipo acceso a memoria de acuerdo con las realizaciones de la invención. La Figura 6B comienza con un óvalo 630 que indica el direccionamiento de registro-memoria (campo mod 342 = 00, 01 o 10). Desde 630, el control pasa al bloque 635. En el bloque 635, los bits se seleccionan del campo de índice de registro para direccionar los registros y el control pasa al bloque 640.
En el bloque 640, se selecciona el registro A (por ejemplo, zmm20) y el control pasa al bloque 645. En el bloque 645, se selecciona el registro B (por ejemplo, zmm31) y el control pasa al bloque 650. En caso de que no se use el bloque 645, el control pasa directamente del bloque 640 al bloque 650.
En el bloque 650, el contenido del campo REX 305, el campo REX' 310, el campo mod r/m 340, el byte de SIB 350 y el campo de desplazamiento 262A o el campo de factor de desplazamiento 262B se usan para direccionar la memoria; específicamente, el índice y la base se extraen del campo REX 305 y el byte de SIB 350, mientras que el contenido del campo de escala 260 (campo ss 352) se extrae del byte de SIB 350. Desde el bloque 650, el control pasa al bloque 660.
En el bloque 660, se determina el modo de acceso a memoria (por ejemplo, basándose en el contenido del campo mod 342). Cuando el modo de acceso a memoria es el modo sin desplazamiento (campo mod 342 = 00), el control pasa al bloque 665 donde se genera la dirección de la siguiente manera: 2ss * índice base.
Cuando el modo de acceso a memoria es el modo de desplazamiento sin escalar (campo mod 342 = 10), el control pasa al bloque 670 en el que la dirección se genera de la siguiente manera: 2ss * índice base disp32. En el caso de que el modo de acceso a memoria sea el modo de desplazamiento escalado (campo mod 342 = 01), el control pasa al bloque 675 en el que se genera la dirección de la siguiente manera: 2ss * índice base desplazamiento escalado; donde el desplazamiento escalado (disp8*n) = el contenido del campo de factor de desplazamiento 262B multiplicado por el tamaño de acceso a memoria (N), donde N depende del contenido del campo de código de operación completo 274 (por ejemplo, el campo de operación de base y/ o el campo de anchura de elemento de datos) y el campo de operación de aumento 250 (por ejemplo, el campo de clase 268 y el campo de manipulación de datos 254C, el campo de longitud de vector 259B y/o el campo de difusión 257B).
Desplazamiento escalado - Figura 6C
La Figura 6C es una tabla que ilustra las diferencias entre disp8, disp32 y variaciones del desplazamiento a escala de acuerdo con las realizaciones de la invención. Las columnas de la tabla son: 1) "byte" que indica direcciones incrementadas por bytes; 2) "campo disp8" que es un campo de 1 byte usado para almacenar desde -128 a 127; 3) "campo disp32", que es un campo de 4 bytes usado para almacenar desde - 231 a 231-1; 4) "campo disp32*N", que es un campo de 1 byte usado para almacenar desde -128 a 127, cuya columna tiene subcolumnas con "N=1", "N=2" y "N=64".
Los valores en las filas de la columna "byte" aumentan hacia abajo en la columna. La segunda columna, la tercera columna y cada una de las subcolumnas incluyen un círculo ennegrecido en las filas para la dirección que puede generar ese campo. Cabe destacar que, el campo disp8, el campo disp32 y donde N=1 tienen un punto ennegrecido para cada byte con su rango, lo que significa que estos campos aumentan en la granularidad de un byte. Por el contrario, la columna N=2 se incrementa en dos bytes y, en consecuencia, únicamente tiene un punto ennegrecido para cada byte dentro de su rango; como tal, tiene un rango más amplio pero una granularidad más gruesa en comparación con el campo disp8, mientras que, al mismo tiempo, requiere una cuarta parte de los bytes del campo disp32. La columna N=64 se incrementa en 64 bytes y, en consecuencia, únicamente tiene un punto ennegrecido para cada 64 bytes dentro de su rango; como tal, tiene un rango más amplio pero una granularidad más gruesa en comparación con el campo disp8 y N=2, mientras que, al mismo tiempo, requiere de nuevo una cuarta parte de los bytes del campo disp32.
Tablas de campos de redondeo - Figura 7A-B
La Figura 7A es una tabla que ilustra el grupo de posibles operaciones que puede especificar el campo de control de redondeo 254A de acuerdo con las realizaciones de la invención. La Figura 7A muestra una primera columna que contiene el posible contenido del campo beta 254 (que actúa como el campo de control de redondeo 254A y que se desglosa en el campo de SAE 256 y el campo de operación de redondeo 258).
De manera similar, la Figura 7B es una tabla que ilustra el grupo de posibles operaciones que puede especificar el campo de control de redondeo 259A de acuerdo con las realizaciones de la invención. En el caso de las plantillas de instrucción de clase B, no hay un campo de SAE 256 y la supresión de excepción de coma flotante siempre está activa. Obsérvese que, en una realización en la que algunas instrucciones ya permiten la especificación del modo de redondeo de forma estática a través de bits inmediatos, los bits inmediatos tienen prioridad sobre el campo de operación del modo de redondeo 258 y 259A.
Tipos de datos
La siguiente tabla enumera algunos tipos de datos ilustrativos usados en el presente documento (algunos de los cuales se describen en DirectX® 10 de Microsoft® (véase Microsoft®, DirectX®, reglas de conversión de datos (17 de agosto de 2010)):
Figure imgf000025_0001
UNORM indica un entero normalizado sin signo, lo que significa que para un número de n bits, todos los 0 significan 0.0f y todos los 1 significan 1.0f. Se representa una secuencia de valores de coma flotante uniformemente espaciados de 0.0f a 1.0f, por ejemplo, un UNORM de 2 bits representa 0.0f, 1/3, 2/3 y 1.0f.
SNORM indica un entero normalizado con signo, lo que significa que para un número de complemento a 2 de n bits, el valor máximo significa 1.0f (por ejemplo, el valor de 5 bits 01111 se mapea a 1.0f), y el valor mínimo significa -1.0f (por ejemplo, el valor de 5 bits 10000 se mapea a -1.0f). Además, el segundo número mínimo se mapea a -1.0f (por ejemplo, el valor de 5 bits 10001 se mapea a -1.0f). Por lo tanto, hay dos representaciones de enteros para -1.0f. Hay una única representación para 0.0f y una única representación para 1.0f. Esto da como resultado un conjunto de representaciones de enteros para valores de coma flotante espaciados uniformemente en el rango (-1.0f...0.0f), y también un conjunto complementario de representaciones para números en el rango (0.0f...1.0f).
Como se describió anteriormente, la tecnología SIMD es especialmente adecuada para los procesadores que pueden dividir lógicamente los bits en un registro en una cantidad de elementos de datos de tamaño fijo, cada uno de los cuales representa un valor separado. Este tipo de datos se denomina tipo de datos empaquetados o tipo de datos vectoriales, y los operandos de este tipo de datos se denominan operandos de datos empaquetados u operandos vectoriales. Típicamente, los elementos de datos de un operando vectorial son del mismo tipo de datos; el tipo de datos de un elemento de datos dado se denomina el tipo de datos del elemento de datos. Cuando el tipo de datos del elemento de datos de todos los elementos de datos es el mismo, a continuación, se puede hacer referencia al operando vectorial como si fuera de ese tipo de datos (por ejemplo, cuando todos los elementos de datos de un operando vectorial son del tipo de datos de elemento de datos de coma flotante de 32 bits, a continuación, el operando de vector puede denominarse operando de vector de coma flotante de 32 bits).
Se describen realizaciones de la invención que soportan tipos de datos de elementos de datos de valor único y tipos de datos de elementos de datos de valores múltiples. Los tipos de datos de elementos de datos de valor único almacenan en cada elemento de datos un valor único; ejemplos de tipos de datos de elementos de datos de valor único usados en algunas realizaciones de la invención son coma flotante de 32 bits, coma flotante de 64 bits, entero sin signo de 32 bits, entero sin signo de 64 bits, entero con signo de 32 bits y entero con signo de 64 bits. Los tipos de datos de elementos de datos de valores múltiples almacenan en cada posición de elemento de datos un paquete con múltiples valores contenidos en el mismo; ejemplos de tipos de datos de elementos de datos de valores múltiples usados en algunas realizaciones de la invención son los tipos de datos de elementos de datos de gráficos empaquetados que se describen a continuación:
UNORM10A10B10C2D: Un paquete de 32 bits de tres valores UNORM10 y un valor UNORM2, comienza con el último campo 2b (10b) ubicado en los bits más significativos del campo 32b (por ejemplo, unorm2D [31-30] float 10C [29-20] float 10B [20-10] float 10A [9-0], donde D-A significa la posición de la ranura y los nombres/números anteriores significan el formato).
FLOAT11A11B10C: Un paquete de 32 bits de dos valores FLOAT11 y un valor FLOAT10, comienza el último ubicado en los bits de orden superior (por ejemplo, float 10C [31-22] float 11B [21-11] float 11A [10-0]).
Cabe señalar que, si bien uno de los diferentes valores en un paquete de los tipos de datos de elementos de datos de valores múltiples anteriores está representado por diferentes números de bits, las realizaciones alternativas pueden tener diferentes configuraciones (por ejemplo, más de los valores representados por el diferente número de bits, todos los valores representados por el mismo número de bits).
Si bien se describen realizaciones que soportan tanto un tipo de datos de elementos de datos de valor único como un tipo de datos de elementos de datos de valores múltiples, las realizaciones alternativas pueden soportar uno o el otro. Además, aunque se describen realizaciones de la invención que utilizan ciertos tipos de datos, las realizaciones alternativas de la invención pueden utilizar más, menos o diferentes tipos de datos.
Tablas de campos de transformación de datos - Figuras 8A y 8B
Las Figuras 8A-8B son tablas que ilustran los grupos de posibles operaciones de transformación de datos que pueden especificarse por el campo de transformación de datos de acuerdo con las realizaciones de la invención. La primera columna de ambas tablas ilustra los posibles valores del contenido del campo de transformación de datos 254B; la segunda columna la función y la tercera columna el uso.
Campo de tamaño de elemento de datos = 64 bits - Figura 8A
La Figura 8A es una tabla que ilustra el grupo de posibles operaciones de transformación de datos que pueden especificarse mediante el campo de transformación de datos cuando la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina primitivas de mezcla SwizzUpConv de registro de 64 bits y es una representación del bloque 418. Notación: dcba indica los elementos de 64 bits que forman un bloque de 256 bits en el origen (con 'a' menos significativo y 'd' más significativo), por lo que aaaa significa que el elemento menos significativo del bloque de 256 bits en el origen se replica en los cuatro elementos del mismo bloque de 256 bits en el destino; el patrón representado se repite a continuación para los dos bloques de 256 bits en el origen y el destino. La notación 'hgfe dcba' se usa para indicar un registro de origen completo, donde 'a' es el elemento menos significativo y 'h' es el elemento más significativo. Sin embargo, dado que cada bloque de 256 bits realiza la misma permutación para las mezclas de registro, solo se ilustra el bloque menos significativo.
Campo de tamaño de elemento de datos = 32 bits - Figura 8B
La Figura 8B es una tabla que ilustra el grupo de posibles operaciones de transformación de datos que pueden especificarse mediante el campo de transformación de datos cuando la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina primitivas de mezcla SwizzUpConv de registro de 32 bits y es una representación del bloque 420. Notación: dcba indica los elementos de 32 bits que forman un bloque de 128 bits en el origen (con 'a' menos significativo y 'd' más significativo), por lo que aaaa significa que el elemento menos significativo del bloque de 128 bits en el origen se replica en los cuatro elementos del mismo bloque de 128 bits en el destino; el patrón representado se repite a continuación para los cuatro bloques de 128 bits en el origen y el destino. La sentencia 'ponm lkji hgfe dcba' se usa para indicar un registro de origen, donde 'a' es el elemento menos significativo y 'p' es el elemento más significativo. Sin embargo, dado que cada bloque de 128 bits realiza la misma permutación para las mezclas de registro, solo se muestra el bloque menos significativo.
La Figura 8B menciona dos operaciones ilustrativas para ilustrar mejor el significado de todas las operaciones mostradas en las Figuras 8A-8B: la mezcla de productos cruzados 815 que se ilustra en la Figura 9 y la difusión de un elemento a través de paquetes de 4 elementos 820 ilustrada en la Figura 10A.
Operación de mezcla ilustrativa - Figura 9
La Figura 9 es un diagrama de bloques que ilustra el mezclador de producto cruzado 815 de acuerdo con las realizaciones de la invención. La Figura 9 muestra un operando de origen 900 y un operando de destino 910 que tienen 512 bits de anchura y se descomponen en 128 bloques consecutivos (denominados posiciones de paquete 3-0), donde cada bloque se descompone en cuatro elementos de datos de 32 bits (por ejemplo, el contenido de la posición 0 del paquete en el operando de origen 900 es D0 C0 B0 A0, mientras que el contenido de la posición 0 del paquete en el operando de destino 910 es D0 A0 C0 B0.
Operaciones de difusión ilustrativas - Figuras 10A-10C
La Figura 10A es un diagrama de bloques que ilustra la difusión de un elemento a través de paquetes de 4 elementos 820 de acuerdo con las realizaciones de la invención. La Figura 10A muestra un operando de origen 1000 y un operando de destino 1010 que tienen 512 bits de anchura y se descomponen en 128 bloques consecutivos (denominados posiciones de paquete 3-0), donde cada bloque se descompone en cuatro elementos de datos de 32 bits (por ejemplo, el contenido de la posición 0 del paquete en el operando de origen 1000 es D0 C0 B0 A0, mientras que el contenido de la posición 0 del paquete en el operando de destino 910 es A0 A0 A0 A0; el contenido de la posición 1 del paquete en el operando de origen 1000 es D1 C1 B1 A1, mientras que el contenido de la posición 1 del paquete en el operando de destino 1010 es A1 A1 A1 A1).
Mientras que la Figura 10A es una difusión ilustrativa para una operación sin acceso a memoria, las Figuras 10B-10C son difusiones ilustrativas para operaciones de acceso a memoria. Cuando el operando de memoria de origen contiene menos que el número total de elementos, se puede difundir (repetir) para formar el número total de elementos del operando de origen efectivo (16 para instrucciones de 32 bits, 8 para instrucciones de 64 bits). Se hace referencia a estos tipos de operaciones de difusión en las Figuras 12A-12D. Hay dos granularidades de difusión:
Granularidad de 1 elemento donde el elemento 1 del operando de memoria de origen se transmite 16 veces para formar un operando de origen efectivo de 16 elementos completo (para instrucciones de 32 bits), u 8 veces para formar un operando de origen efectivo de 8 elementos completo (para instrucciones de 64 bits). La Figura 10B es un diagrama de bloques que ilustra la difusión de granularidad de 1 elemento para una anchura de elemento de datos de 32 bits de acuerdo con las realizaciones de la invención. Un ejemplo de la operación está etiquetado 1210 en la Figura 12B. La Figura 10B muestra un operando de origen 1020 procedente de la memoria que tiene un elemento de datos de 32 bits (A0) y un operando de destino 1030 que tiene 512 bits de anchura y contiene dieciséis elementos de datos de 32 bits (todos los elementos de datos son A0 en el operando de destino 1030). Difusiones de 1 elemento útiles para instrucciones que mezclan orígenes vectoriales y escalares, donde uno de los orígenes es común a través de las diferentes operaciones.
Granularidad de 4 elementos donde los 4 elementos del operando de memoria de origen se difunden 4 veces para formar un operando de origen efectivo de 16 elementos completo (para instrucciones de 32 bits), o 2 veces para formar un operando de origen efectivo de 8 elementos completo (para instrucciones de 64 bits). La Figura 10C es un diagrama de bloques que ilustra la difusión de granularidad de 4 elementos para elementos de datos de 32 bits de acuerdo con las realizaciones de la invención. Un ejemplo de la operación está etiquetado 1220 en la Figura 12B. La Figura 10C muestra un operando de origen 1040 procedente de la memoria que tiene cuatro elementos de datos de 32 bits (D0 C0 B0 A0) y un operando de destino 1050 de 512 bits de anchura y descompuesto en 128 bloques consecutivos (denominados posiciones de paquete 3-0), donde cada bloque se descompone en cuatro elementos de datos de 32 bits (por ejemplo, los contenidos en cada una de las posiciones de paquete 3-0 del operando de destino 1050 son D0 C0 B0 A0). De 4 a 16 difusiones son muy útiles para el código de origen de AOS (matriz de estructuras), donde el cálculo se realiza a través de una matriz de valores empaquetados (como componentes de color RGBA); en este caso, de 4 a 16 es ventajoso cuando se usa un paquete común a través de las diferentes operaciones de una instrucción de vector (un vector de 16 elementos se considera una matriz de 4 paquetes de 4 elementos cada uno).
Tablas de campo de operación de base - Figuras 11A y 11B
Campo de mapa de código de operación - Figura 11A
La Figura 11A es una tabla que ilustra el grupo de posibles mapas de código de operación que pueden especificarse mediante el campo de mapa de código de operación de acuerdo con las realizaciones de la invención. La primera columna ilustra los posibles valores del contenido del campo de mapa de código de operación 315; la segunda columna, los bytes de código de operación iniciales implicados, y la tercera columna, si puede estar presente un inmediato. Campo de codificación de prefijo - Figura 11B
La Figura 11B es una tabla que ilustra el grupo de posibles codificaciones de prefijos que pueden especificarse mediante el campo de mapa de código de operación de acuerdo con las realizaciones de la invención. La primera columna ilustra los valores posibles del contenido del campo de codificación de prefijo 325; y la segunda columna el significado de ese prefijo.
Tablas de campo de manipulación de datos - Figuras 12-15
Las Figuras 12-15 son tablas que ilustran los grupos de posibles operaciones de manipulación de datos y operaciones de difusión que pueden especificarse respectivamente por el campo de manipulación de datos 254C y, para las figuras 12A-D, el campo de difusión 257B, de acuerdo con las realizaciones de la invención. La primera columna de las tablas ilustra los posibles valores del contenido del campo de manipulación de datos 254C; la segunda columna la función y la tercera columna el uso.
Tablas de campo de manipulación de datos para carga/operación - Figuras 12A-12D
Las Figuras 12A-12D son tablas que ilustran los grupos de posibles operaciones de manipulación de datos y operaciones de difusión que pueden especificarse respectivamente por el campo de manipulación de datos 254C y el campo de difusión 257B para las instrucciones de carga/operación de acuerdo con las realizaciones de la invención. En el caso del formato de instrucción compatible con vectores específico ilustrativo en las figuras 3A-D, el campo de manipulación de datos 254C es un campo de tres bits y el campo de difusión 257B es un campo de un bit. En las realizaciones ilustradas, el contenido del campo de difusión 257B selecciona entre las dos primeras filas de las tablas encontradas en las figuras 12A-D; en otras palabras, su contenido selecciona entre el equivalente de 000 y 001 en el campo de manipulación de datos 254C. Esto se ilustra en la figura 12A-D usando un corchete que incluye solo las dos primeras filas de las tablas.
Campo de entero de carga/operación y de tamaño de elemento de datos = 64 bits - Figura 12A
La Figura 12A es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C y el campo de difusión 257B para un int de carga/operación donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina primitivas de mezcla/conversión de SwizzUpConv. i 64 (palabra cuádruple) de carga-operación de enteros de 64 bits y es una representación del bloque 444A y el bloque 444B.
Campo de entero de carga/operación y de tamaño de elemento de datos = 32 bits - Figura 12B
La Figura 12B es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C y el campo de difusión 257B para un int de carga/operación donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina primitivas de mezcla/conversión de SwizzUpConv i 32 de carga-operación de enteros de 32 bits y es una representación del bloque 446A y el bloque 446B.
Campo de coma flotante de carga/operación y de tamaño de elemento de datos = 64 bits - Figura 12C
La Figura 12C es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C y el campo de difusión 257B para una fp de carga/operación donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina primitivas de mezcla/conversión de SwizzUpConv f 64 de carga-operación de coma flotante de 64 bits y es una representación del bloque 450A y el bloque 450B.
Campo de coma flotante de carga/operación y de tamaño de elemento de datos = 32 bits - Figura 12D
La Figura 12D es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C y el campo de difusión 257B para una fp de carga/operación donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina primitivas de mezcla/conversión de SwizzUpConv f 32 de carga-operación de coma flotante de 32 bits y es una representación del bloque 452A y el bloque 452B.
Tablas de campo de manipulación de datos para carga - Figuras 13A-13D
Las Figuras 13A-13D son tablas que ilustran los grupos de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos para las instrucciones de carga de acuerdo con las realizaciones de la invención.
Campo de entero de carga y de tamaño de elemento de datos = 64 bits - Figura 13A
La Figura 13A es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para un int de carga donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la UpConvi64 y es una representación del bloque 456.
Campo de entero de carga y de tamaño de elemento de datos = 32 bits - Figura 13B
La Figura 13B es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para un int de carga donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la UpConvi32 y es una representación del bloque 458.
Campo de coma flotante de carga y de tamaño de elemento de datos = 64 bits - Figura 13C
La Figura 13C es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para una fp de carga donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la UpConvf64 y es una representación del bloque 462.
Campo de coma flotante de carga y de tamaño de elemento de datos = 32 bits - Figura 13D
La Figura 13D es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para una fp de carga donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la UpConvf32 y es una representación del bloque 464.
Punto adicional
Los grupos de posibles operaciones de manipulación de datos especificados en cada una de las Figuras 13A-13D (las tablas de carga/operación) son un subconjunto de aquellos en las correspondientes Figuras 12A-12D (las tablas de carga). Específicamente, los subconjuntos no incluyen operaciones de difusión. Esto se hace porque ciertos valores en el campo de código de operación completo 274 (por ejemplo, aquellos que especifican operaciones de recopilación o difusión) no se pueden usar en combinación con las difusiones especificadas en el campo de manipulación de datos 254C y, por lo tanto, tales valores en el campo de código de operación completo 274 pueden usarse únicamente con las cargas de las Figuras 12A-12D (las tablas de carga). A modo de ejemplo más específico, si hay un valor en el campo de código de operación completo 274 que especifica una operación de difusión, el campo de manipulación de datos 254C tampoco puede indicar una operación de difusión. Si bien ciertas realizaciones de la invención incluyen operaciones de carga/operación y carga separadas con tablas de carga/operación y carga separadas, no es necesario que las realizaciones alternativas tengan este mecanismo de cumplimiento (por ejemplo, pueden soportar únicamente carga/operación, pueden soportar únicamente carga, pueden determinar que una difusión en el campo de código de operación completo 274 hace que se ignore una difusión en el campo de manipulación de datos 254C).
Tablas de campo de manipulación de datos para almacenamiento - Figuras 14A-14D
Las Figuras 14A-14D son tablas que ilustran los grupos de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos para las instrucciones de almacenamiento de acuerdo con las realizaciones de la invención.
Campo de entero de almacenamiento y de tamaño de elemento de datos = 64 bits - Figura 14A
La Figura 14A es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para un int de almacenamiento donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la DownConvi64 y es una representación del bloque 470.
Campo de entero de almacenamiento y de tamaño de elemento de datos = 32 bits - Figura 14B
La Figura 14B es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para un int de almacenamiento donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la DownConvi32 y es una representación del bloque 472.
Campo de coma flotante de almacenamiento y de tamaño de elemento de datos = 64 bits - Figura 14C La Figura 14C es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para una fp de almacenamiento donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la DownConvf64 y es una representación del bloque 476.
Campo de coma flotante de almacenamiento y de tamaño de elemento de datos = 32 bits - Figura 14D La Figura 14D es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para una fp de almacenamiento donde la anchura del elemento de datos es de 64 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la DownConvf32 y es una representación del bloque 478.
Tablas de campo de manipulación de datos para el tipo de datos de gráficos- Figuras 15A-15C
Las Figuras 15A-15C son tablas que ilustran los grupos de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos para las instrucciones que operan en los tipos de datos gráficos de acuerdo con las realizaciones de la invención.
Gráficos de carga - Figura 15A
La Figura 15A es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para unos gráficos de carga donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la UpConvg32 y es una representación del bloque 480.
Gráficos empaquetados de carga - Figura 15B
La Figura 15B es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para unos gráficos empaquetados de carga donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la UpConvpg32 y es una representación del bloque 482.
Gráficos de almacenamiento - Figura 15C
La Figura 15C es una tabla que ilustra el grupo de posibles operaciones de manipulación de datos que pueden especificarse mediante el campo de manipulación de datos 254C para unos gráficos de almacenamiento donde la anchura del elemento de datos es de 32 bits de acuerdo con las realizaciones de la invención. Esta tabla se denomina como la UpConvg32 y es una representación del bloque 484.
Campo de máscara de escritura - Figuras 16A-D
Las Figuras 16A-16B ilustran dos operaciones de fusión realizadas con diferentes máscaras de escritura y siendo el segundo origen y destino el mismo de acuerdo con las realizaciones de la invención. La Figura 16A es un diagrama de bloques que ilustra una operación ilustrativa 1600 que fusiona el uso de la máscara de escritura en el registro de máscara de escritura K1 donde la anchura del elemento de datos es de 32 bits y donde el segundo origen y el destino son los mismos de acuerdo con las realizaciones de la invención. La Figura 16A muestra un operando de origen 1605; un operando de origen/destino 1610; el contenido del registro de máscara K11615 (incluyendo los 16 bits inferiores una mezcla de unos y ceros); y el operando de destino 1620. Cada una de las posiciones de 16 bits inferiores en el registro de máscara K1 corresponde a una de las posiciones de elementos de datos (K1 [0] a la posición de elementos de datos 0, K1 [1] a la posición de elementos de datos 1, y así sucesivamente). Para cada posición de elemento de datos en el operando de destino 1620, contiene el contenido de esa posición de elemento de datos en el origen/destino 1610 o el resultado de la operación (ilustrado como una suma) dependiendo de si la posición de bit correspondiente en el registro de máscara K1 es un cero o un 1, respectivamente. En otras realizaciones, el operando de origen/destino 1610 se reemplaza con un segundo operando de origen. En esas realizaciones, el operando de destino 1620 contiene el contenido del operando de destino 1620 desde antes de la operación en aquellas de las posiciones de elementos de datos en las que las posiciones de bit correspondientes del registro de máscara K1 son cero (si las hubiera) y contiene el resultado de la operación en aquellas de las posiciones de elementos de datos en las que las correspondientes posiciones de bit del registro de máscara K1 son 1 (si las hubiera).
Como se describió anteriormente, una realización de la invención usa K0 para indicar que no se debe realizar ningún enmascaramiento. La Figura 16B es un diagrama de bloques que ilustra una operación ilustrativa 1625 que fusiona el uso de la máscara cableada de todos unos (la máscara de escritura cableada se usa en instrucciones que especifican el registro de máscara de escritura k0) donde la anchura del elemento de datos es de 32 bits y donde el segundo origen y el destino son el mismo de acuerdo con las realizaciones de la invención. La Figura 16B es idéntica a la Figura 16A, excepto que K1 1615 se reemplaza con la máscara cableada 1630 y que el operando de destino 1620 se reemplaza con el operando de destino 1635. La máscara cableada 1630 es todos unos y, por lo tanto, el operando de destino 1635 contiene elementos de datos representativos del resultado de la operación.
La Figura 16C es un diagrama de bloques que ilustra la correspondencia de bits en los registros de máscara de escritura con las posiciones de elementos de datos de un vector de 512 bits para las anchuras de elementos de datos de 8, 16, 32 y 64 bits de acuerdo con las realizaciones de la invención. Específicamente, se ilustra un registro de 64 bits KN 1640, donde se usan todos los 64 bits cuando la anchura del elemento de datos es de 8 bits, únicamente se usan los 32 bits menos significativos cuando la anchura del elemento de datos es de 16 bits, únicamente se usan los 16 bits menos significativos cuando la anchura del elemento de datos es 32 bits, y únicamente se usan los 8 bits menos significativos cuando la anchura del elemento de datos es de 64 bits. Para un vector de 256 bits, únicamente se usan los 32 bits menos significativos cuando la anchura del elemento de datos es de 8 bits, únicamente se usan los 16 bits menos significativos cuando la anchura del elemento de datos es de 16 bits, únicamente se usan los 8 bits menos significativos se usan cuando la anchura del elemento de datos es de 32 bits, y únicamente se usan los 4 bits menos significativos cuando la anchura del elemento de datos es de 64 bits. Para un vector de 128 bits, únicamente se usan los 16 bits menos significativos cuando la anchura del elemento de datos es de 8 bits, únicamente se usan los 8 bits menos significativos cuando la anchura del elemento de datos es de 16 bits, únicamente se usan los 2 bits menos significativos se usan cuando la anchura del elemento de datos es de 32 bits, y únicamente se usan los 2 bits menos significativos cuando la anchura del elemento de datos es de 64 bits.
El valor de un registro de máscara dado puede establecerse como resultado directo de una instrucción de comparación de vectores, transferirse desde un registro de GP o calcularse como resultado directo de una operación lógica entre dos máscaras.
La Figura 16D es un diagrama de bloques que ilustra una operación ilustrativa 1660 que fusiona el uso de la máscara de escritura en el registro de máscara de escritura K1 donde la anchura del elemento de datos es de 32 bits y donde el segundo origen y el destino son de acuerdo con las realizaciones de la invención.
La Figura 16E es un diagrama de bloques que ilustra una operación ilustrativa 1666 que pone a cero el uso de la máscara de escritura en el registro de máscara de escritura K1 donde la anchura del elemento de datos es de 32 bits y donde el segundo origen y el destino son diferentes de acuerdo con las realizaciones de la invención. Si bien la operación de puesta a cero se ilustra solo en relación con una operación donde el destino es diferente de los orígenes, la puesta a cero también funciona cuando el segundo origen y el destino son los mismos.
Plantillas e instrucciones ilustrativas - Figuras 17-18
Las siguientes notaciones se proporcionan a modo de introducción a las Figuras 17-18.
Notación de operando
Figure imgf000031_0001
Figure imgf000032_0001
Notación del valor del operando vectorial
Figure imgf000032_0002
Convenciones de las funciones SwizzUpConv, FullUpConv y DownConv
Figure imgf000032_0003
Figure imgf000033_0001
Codificaciones de instrucciones ilustrativas para EVEX.U0 - Figuras 17A-D
La Figura 17A ilustra un subconjunto de campos de un formato de instrucción compatible con vectores específico ilustrativo de acuerdo con las realizaciones de la invención. Específicamente, la Figura 17A muestra un prefijo EVEX 302, un campo de código de operación real 330 y un campo MOD R/M 340. En esta realización, el campo de formato 240 contiene 0x62 para indicar que el formato de instrucción es el formato de instrucción compatible con vectores.
Cada una de las Figuras 17B-17D ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 17A de acuerdo con las realizaciones de la invención. En la descripción de la Figura 17B-17D, se describen los usos específicos de algunos campos para demostrar posibles codificaciones de esos campos para diversas configuraciones ilustrativas de la instrucción VADDPS. En cada una de las Figuras 17B-17D, el campo de formato 240 contiene 0x62 para indicar que la instrucción está codificada en el formato de instrucción compatible con vectores y el campo de código de operación real 330 contiene el código de operación VADDPS. Cada una de las Figuras 17B-17D ilustra una codificación de la instrucción VADDPS en la clase EVEX.U0 de acuerdo con las realizaciones de la invención; Cada una de la Figura 17B y la Figura 17C ilustra una codificación EXEV.U0 de VADDPS en una plantilla de instrucción sin acceso a memoria 205, mientras que la Figura 17D ilustra una codificación EVEX.U0 de VADDPS en una plantilla de instrucción de acceso a memoria 220. La instrucción VADDPS añade valores de coma flotante de previsión sencilla empaquetados desde un primer registro u operando de memoria (por ejemplo, zmm3) a un segundo registro (por ejemplo, zmm2) y almacena el resultado en un tercer registro (por ejemplo, zmm1) de acuerdo con una máscara de escritura (por ejemplo, k1). Esta instrucción permite diversas operaciones de redondeo, operaciones de transformación de datos u operaciones de manipulación de datos de acuerdo con la codificación de la instrucción. Esta instrucción puede describirse por la siguiente instrucción mnemotécnica: EVEX.U0.NDS.512.0F 58 /r VADDPS zmm1 {k1}, zmm2, Sf32(zmm3/mV) {eh}.
La Figura 17B ilustra una codificación de la instrucción VADDPS en la plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 210. El campo de anchura de elemento de datos 264 es 0 para indicar una anchura de elemento de datos de 32 bits. El campo de clase 268 (es decir, EVEX.U) se establece a 0 para indicar la clase EVEX.U0. El campo alfa 252 se interpreta como un campo de RS 252A (es decir, EVEX.rs) y se establece a 1 (es decir, el campo de RS 252A.1) para seleccionar la operación de tipo de control de redondeo. Dado que el campo alfa 252 actúa como campo de RS 252A.1, el campo beta 254 se interpreta como un campo de operación de redondeo 258 (es decir, EVEX.r2-0). En concreto, EVEX.r2 se interpreta como un campo de SAE 256 mientras que EVEX.r1-0 actúa como el campo de control de redondeo 254A. El campo de modificador 246 (es decir, MODR/M.MOD 342) se establece a 11 para indicar que no hay acceso a memoria (es decir, el registro zmm3 es el primer operando de origen en lugar de un operando de memoria).
La Figura 17C ilustra una codificación de la instrucción VADDPS en la plantilla de instrucción de operación de tipo de transformación de datos sin acceso a memoria 215. La codificación de la Figura 17C es idéntica a la de la Figura 17B excepto por el campo alfa 252 y el campo beta 254. El campo alfa 252 se interpreta como un campo de RS 252A (es decir, EVEX.rs) y se establece a 0 (es decir, el campo de RS 252A.2) para seleccionar la operación de tipo de transformación de datos. Dado que el campo alfa 252 actúa como campo de RS 252A.2, el campo beta 254 se interpreta como un campo de transformación de datos 254B (es decir, EVEX.s2-0).
La Figura 17D ilustra una codificación de la instrucción VADDPS en la plantilla de instrucción de acceso a memoria 220. El campo de anchura de elemento de datos 264 es 0 para indicar una anchura de elemento de datos de 32 bits. El campo de clase 268 (es decir, EVEX.U) se establece a 0 para indicar la clase EVEX.U0. El campo alfa 252 se interpreta como un campo de sugerencia de desalojo 252B (es decir, EVEX.EH). El campo beta 254 se interpreta como un campo de manipulación de datos 254C (es decir, EVEX.s2-0). El campo de modificador 246 (es decir, MODR/M.MOD 342) se establece a 00, 01 o 10 para indicar que el primer operando de origen es un operando de memoria; esto se muestra en la Figura 17D como 11 (es decir, cualquier entrada excepto 11).
Codificación de instrucciones ilustrativas para EVEX.U1 - Figuras 18A-18F
La Figura 18A ilustra un subconjunto de campos de un formato de instrucción compatible con vectores específico ilustrativo de acuerdo con las realizaciones de la invención. Específicamente, la Figura 1*A muestra un prefijo EVEX 302, un campo de código de operación real 330 y un campo MOD R/M 340. En esta realización, el campo de formato 240 contiene 0x62 para indicar que el formato de instrucción es el formato de instrucción compatible con vectores.
Cada una de las Figuras 18B-18F ilustra un subconjunto de campos de una instrucción compatible con vectores específica ilustrativa codificada en el formato de instrucción compatible con vectores específicos de la Figura 18A de acuerdo con las realizaciones de la invención. En la descripción de la Figura 18B-18F, se describen los usos específicos de algunos campos para demostrar posibles codificaciones de esos campos para diversas configuraciones ilustrativas de la instrucción VADDPS. En cada una de las Figuras 18B-18F el campo de formato 240 contiene 0x62 para indicar que la instrucción está codificada en el formato de instrucción compatible con vectores y el campo de código de operación real 330 contiene el código de operación VADDPS. Cada una de las Figuras 18B-18F ilustra una codificación de la instrucción VADDPS en la clase EVEX.U1 de acuerdo con las realizaciones de la invención; Cada una de las Figuras 18B-18E ilustra una codificación EXEV.U1 de VADDPS en una plantilla de instrucción sin acceso a memoria 205, mientras que la Figura 18F ilustra una codificación EVEX.U1 de VADDPS en una plantilla de instrucción de acceso a memoria 220.
La Figura 18B ilustra una codificación de la instrucción VADDPS en la plantilla de instrucción de operación de tipo de control de redondeo parcial con control de máscara de escritura y sin acceso a memoria 212. El campo de anchura de elemento de datos 264 es 0 para indicar una anchura de elemento de datos de 32 bits. El campo de clase 268 (es decir, EVEX.U) se establece a 1 para indicar la clase EVEX.U1. El campo alfa 252 se interpreta como un campo de control de máscara de escritura 252C (seleccionando entre una máscara de escritura de fusión o puesta a cero). El bit menos significativo del campo beta 254 se interpreta como un campo de RL 257A y se establece a 1 para indicar una operación de tipo de redondeo parcial (es decir, redondeo 257A.1). Los dos bits más significativos del campo beta 254 se interpretan como un campo de operación de redondeo 259A. El campo de modificador 246 (es decir, MODR/M.MOD 342) se establece a 11 para indicar que no hay acceso a memoria (es decir, el registro zmm3 es el primer operando de origen en lugar de un operando de memoria). En esta codificación, la instrucción VADDPS añade un valor de coma flotante de precisión sencilla empaquetado desde un primer registro (por ejemplo, zmm3) a un segundo registro (por ejemplo, zmm2) y almacena el resultado redondeado en un tercer registro (por ejemplo, zmm1) de acuerdo con una máscara de escritura. (por ejemplo, k1). Esto puede describirse por la siguiente regla mnemotécnica: EVEX.U1.NDS.512.0F.W058 /r VADDPS zmm1 {k1} {z}, zmm2, zmm3 {er} para poner a cero la máscara de escritura y lo mismo sin {z} para fusionar la máscara de escritura. Si bien las otras reglas mnemotécnicas mostradas a continuación en esta sección incluyen {z}, debe entenderse que la misma regla mnemotécnica sin {z} también es posible de manera similar.
Cada una de las Figuras 18C-18E ilustra una codificación de la instrucción VADDPS en la plantilla de instrucción de operación de tipo VSIZE de control de máscara de escritura sin acceso a memoria 217. La codificación de las Figuras 18C-18E es idéntica a la de la Figura 17B excepto por el campo beta. En cada una de las Figuras 18C-18E, el bit menos significativo del campo beta 254 se interpreta como un campo de RL 257A y se establece a 0 para indicar una operación de tipo VSIZE 257A.2. Los dos bits más significativos del campo beta 254 se interpretan como un campo de longitud de vector 259B.
En la Figura 18C, el campo de longitud de vector 259B se establece a 10 para indicar un tamaño de vector de 512 bits. En la Figura 18D, el campo de longitud de vector 259B se establece a 01 para indicar un tamaño de vector de 256 bits. En la Figura 18E, el campo de longitud de vector 259B se establece a 00 para indicar un tamaño de vector de 128 bits. En esta codificación, la instrucción VADDPS añade un valor de coma flotante de precisión sencilla empaquetado desde un primer registro (por ejemplo, zmm3) a un segundo registro (por ejemplo, zmm2) y almacena el resultado en un tercer registro (por ejemplo, zmm1) de acuerdo con una máscara de escritura. (por ejemplo, k1). La Figura 18C puede describirse por la siguiente regla mnemotécnica: EVEX.U1.NDS.512.0F.W0 58 /r VADDPS zmm1 {k1} {z}, zmm2, zmm3. La Figura 18D puede describirse por la siguiente regla mnemotécnica: EVEX.U1.NDS.256.0F.W0 58 /r VADDPS ymm1 {k1} {z}, ymm2, ymm3. La Figura 18E puede describirse por la siguiente regla mnemotécnica: EVEX.U1.NDS.128.0F.W058/r VADDPS xmm1 {k1} {z}, xmm2, xmm3.
La Figura 18F ilustra una codificación de la instrucción VADDPS en la plantilla de instrucción de control de máscara de escritura de acceso a memoria 227. El campo de anchura de elemento de datos 264 es 0 para indicar una anchura de elemento de datos de 32 bits. El campo de clase 268 (es decir, EVEX.U) se establece a 1 para indicar la clase EVEX.U1. El campo alfa 252 se interpreta como un campo de control de máscara de escritura 252C (seleccionando entre una máscara de escritura de fusión o puesta a cero). El bit menos significativo del campo beta 254 se interpreta como un campo de difusión 257B. Los dos bits más significativos del campo beta 254 se interpretan como un campo de longitud de vector 259B. El campo de modificador 246 (es decir, MODR/M.MOD 342) se establece a 00, 01 o 10 para indicar que el primer operando de origen es un operando de memoria; esto se muestra en la Figura 17D como 11 (es decir, cualquier entrada excepto 11). En esta codificación, la instrucción VADDPS añade un valor de coma flotante de precisión sencilla empaquetado desde un operando de memoria, que se puede difundir tras la carga, a un primer registro (por ejemplo, zmm2) y almacena el resultado en un segundo registro (por ejemplo, zmm1) de acuerdo con una máscara de escritura (por ejemplo, k1). Cuando el campo de longitud de vector indica vectores de 512 bits, esto puede describirse mediante la siguiente regla mnemotécnica:
EVEX.U1.NDS.512.0F.W058 /r VADDPS zmm1 {k1} {z}, zmm2, B32(mV). Cuando el campo de longitud de vector indica vectores de 256 bits, esto puede describirse mediante la siguiente regla mnemotécnica:
EVEX.U1.NDS.256.0F.W058 /r VADDPS ymm1 {k1} {z}, ymm2, B32(mV). Cuando el campo de longitud de vector indica vectores de 128 bits, esto puede describirse mediante la siguiente regla mnemotécnica:
EVEX.U1.NDS.128.0F.W058 /r VADDPS xmm1 {k1} {z}, xmm2, B32(mV).
Valores de Displacement8*N ilustrativos
En una realización de la invención, el tamaño de acceso a memoria N se determina basándose en el contenido de dos o más del campo de operación de base, el campo de anchura de elemento de datos y el campo de operación de aumento dependiendo de la plantilla de instrucción que se usa y otros factores como se describe a continuación. En una realización de la invención, con respecto a U=0 (Clase A), las tablas a continuación muestran el tamaño del vector (o elemento) al que se accede en memoria y, análogamente, el factor de desplazamiento para el desplazamiento comprimido (disp8*N). Obsérvese que algunas instrucciones funcionan con granularidad de elemento en lugar de con granularidad de vector completo a nivel de memoria y, por lo tanto, deben usar la columna "nivel de elemento" en las tablas a continuación. La etiqueta de la columna de función (por ejemplo, U/Si64) significa el tipo de acceso a memoria especificado por el campo de operación de base (por ejemplo, U/Si significa load int y load/op int) y la anchura del elemento de datos (por ejemplo, 64 es una anchura de elemento de datos de 64 bits). Los valores en esta columna son los posibles valores del campo de manipulación de datos 254C en la realización de la Figura 3. Haciendo referencia a la Figura 4B, los diversos tipos de acceso a memoria se muestran fluyendo (en algunos casos a través de una decisión de anchura de elemento de datos) a su manipulación de datos, Figuras 12A-15C; las diversas tablas 12A-15C controlan la selección del valor de N y, por lo tanto, se colocan en las columnas 2 y 3 según sea apropiado. A modo de ejemplo, una operación de acceso a memoria de anchura de elemento de datos de 64 bits de int de carga/operación fluye hacia la figura 12A, en la que el contenido del campo de manipulación de datos 254C se usa para seleccionar la operación de manipulación de datos (como se indica en la figura 12A) y el valor de N (como se indica a continuación). A modo de otro ejemplo, una operación de acceso a memoria de anchura de elemento de datos de 64 bits de int de carga (que indica una difusión en el campo de operación de base 242) fluye a la figura 13A, en la que el contenido del campo de manipulación de datos 254C se usa tanto para seleccionar la operación de manipulación de datos (como se indica en la figura 13A, que no incluye transformaciones de datos de difusión) como el valor de N (como se indica a continuación). Por lo tanto, la segunda columna es para instrucciones cuyo campo de operación de base 242 no especifica un acceso de memoria de nivel de elemento o de difusión; la primera subcolumna de la tercera columna es para instrucciones cuyo campo de operación de base 242 especifica una difusión pero no especifica un acceso a memoria de nivel de elemento; y la segunda subcolumna de la tercera columna es para instrucciones cuyo campo de operación de base 242 especifica un acceso de memoria de nivel de elemento o de difusión.
SwizzleUpConvert i 64 y UpConvert i64
Figure imgf000035_0001
SwizzleUpConvert i 32 y UpConvert i 32
Figure imgf000036_0001
SwizzleUpConvert f64 y UpConvert f64
Figure imgf000036_0002
SwizzleUpConvert f 32 y UpConvert f 32
Figure imgf000036_0003
Conversión descendente i 64
Figure imgf000037_0001
Conversión descendente i 32
Figure imgf000037_0002
Conversión descendente f 64
Figure imgf000037_0003
Conversión descendente f 32
Figure imgf000038_0001
UpConvert g 32
Figure imgf000038_0002
UpConvert pg 32
Figure imgf000038_0003
Conversión descendente g 32
Figure imgf000039_0002
En una realización de la invención, con respecto a U=1 (Clase B), diversas instrucciones tienen la capacidad de usar un desplazamiento comprimido usando disp8 junto con un tamaño de acceso a memoria N que se determina basándose en la longitud del vector (determinada por el contenido del campo de longitud de vector 259B), el tipo de operación de vector y si se está realizando la difusión (el valor del campo de operación de base 242 y/o el campo de difusión 257B), y la anchura del elemento de datos (determinada por el contenido del campo de código de operación real 330 y/o el campo de anchura de elemento de datos 264 como se describe en la figura 4E), para diferentes tipos de instrucciones. En general, el tamaño de acceso a memoria N corresponde al número de bytes en la entrada de memoria (por ejemplo, 64 cuando se accede a un vector de memoria de 512 bits completo). En una realización de la invención, la primera tabla a continuación explica algunos de los términos usados en la segunda tabla a continuación, y la segunda tabla a continuación proporciona el valor de N para diversos tipos de instrucciones. Una tupla en las tablas a continuación es una estructura empaquetada de datos en memoria.
Figure imgf000039_0001
Figure imgf000040_0001
Figure imgf000040_0002
Figure imgf000041_0001
Bits de reserva
Además, en algunas realizaciones de la invención, diferentes procesadores o diferentes núcleos dentro de un procesador pueden soportar solo la clase A, solo la clase B o ambas clases. Por ejemplo, un núcleo fuera de orden de propósito general de alto rendimiento destinado a computación de propósito general puede soportar solo 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 independientes 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 en desorden de propósito general de alto rendimiento que soportan solo clase B. Otro procesador que no tiene un núcleo de gráficos separado, puede incluir uno más núcleos dentro o fuera de orden de propósito general 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 de la invención. 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.
Figure imgf000041_0002
Con respecto a las cargas, difusiones e inserciones, una realización de la invención implementa diferentes versiones de difusión con el campo de operación de base y, por lo tanto, no se necesita el campo de difusión 257B. Para operaciones de byte/palabra, una realización de la invención no soporta difusiones con el campo de difusión 257B porque el coste de hardware para soportar esta característica no estaba justificado actualmente. En cuanto a la recopilación (que es un tipo de carga), una realización de la invención implementa diferentes versiones de difusión con el campo de operación de base y, por lo tanto, no se necesita el campo de difusión 257B. Con respecto a la dispersión, las extracciones y los almacenamientos, una realización no soporta difusiones con el campo de difusión 257B porque estos tipos de instrucciones tienen un origen de registro (no un origen de memoria) y un destino de memoria, y la difusión solo tiene sentido cuando la memoria el origen. La máscara de una instrucción de recopilación es una máscara de finalización; y, por lo tanto, una operación de fusión de máscara de escritura es actualmente la operación deseada. Realizar la puesta a cero de una máscara de escritura en un almacenamiento, dispersión o extracción pondría a cero una ubicación en la memoria - una operación para la que típicamente no se usa un almacenamiento, dispersión o extracción de vectores. Para las comparaciones, en una realización de la invención, poner a cero la máscara de escritura no sería natural ya que las comparaciones ya escriben 0 si el resultado de la comparación es negativo (por ejemplo, los dos elementos comparados no son iguales en el caso de la comparación de igualdad) y, por lo tanto, podría interferir con cómo se interpreta el resultado de la comparación.
Canalizaciones ilustrativas - Figuras 19-22
Las Figuras 19 a 22 son diagramas de bloques que ilustran qué campos de las plantillas de instrucción de la figura 2A se utilizan en diferentes etapas de cuatro canalizaciones de procesador ilustrativas de acuerdo con las realizaciones de la invención. Cabe señalar que, al nivel de comprensión requerido, las etapas de canalización ilustradas y su función son bien conocidas. Cada una de las figuras 19-22 incluye una figura A, B y C que ilustran respectivamente la plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 210; la plantilla de instrucción de operación de tipo de transformación de datos sin acceso a memoria 215; y las plantillas de instrucción de acceso a memoria 225/230. Mientras que cada una de las Figuras 19-22 muestra una canalización ilustrativa diferente, se muestra la misma canalización en cada una de las figuras A-C para cada número de figura. Por ejemplo, la Figura 19A muestra la plantilla de instrucción de operación de tipo de control de redondeo completo sin acceso a memoria 210 y una primera canalización de instrucción ilustrativa; la Figura 19B muestra la operación de tipo de transformación de datos sin acceso a memoria 215 y la misma canalización ilustrativa que en la Figura 19A; mientras que la Figura 20A muestra la plantilla de instrucción de operación de control de tipo de redondeo completo sin acceso a memoria 210 y la segunda canalización de procesador ilustrativa.
Las Figuras 19-22 ilustran respectivamente la canalización de procesador 1900, la canalización de procesador 2000, la canalización de procesador 2100 y la canalización de procesador 2200. Cuando el nombre de la etapa de la canalización es el mismo en las diferentes canalizaciones ilustrativas, se usó el mismo número de referencia para facilitar la comprensión; sin embargo, esto no implica que las etapas de canalización del mismo nombre en las diferentes canalizaciones ilustrativas sean las mismas, solo que realizan una operación similar (aunque puede incluir más o menos suboperaciones).
Canalización genérica ilustrativa - Figura 19
La canalización de procesador 1900 representa una canalización de procesador genérica y, por lo tanto, incluye una etapa de obtención 1910, una etapa de decodificación 1920, una etapa de lectura de registro/lectura de memoria 1930, una etapa de transformación de datos 1940, una etapa de ejecución 1950 y una etapa de reescritura/escritura de memoria 1960.
Los corchetes y las líneas con flechas desde las plantillas de instrucción hasta las etapas de canalización de procesador ilustran los campos que utilizan las diferentes etapas de la canalización. Por ejemplo, en la Figura 19A, todos los campos se utilizan por la etapa de decodificación 1920; el campo de índice de registro 244 se utiliza por la etapa de lectura de registro/lectura de memoria 1930; el campo de rs 252A (redondeo 252A.1), el campo de SAE 256, el campo de operación de redondeo 258 y el campo de anchura de elemento de datos 264 se utilizan por la etapa de ejecución 1950; el campo de anchura de elemento de datos 264 también se utiliza por la etapa de memoria de reescritura/escritura 1960; y el campo de máscara de escritura 268 se usa por la etapa de ejecución 1950 o la etapa de reescritura/escritura en memoria 1960 (El uso del campo de máscara de escritura 270 opcionalmente en dos etapas diferentes representa que el campo de máscara de escritura podría deshabilitar la ejecución de la operación en los elementos de datos enmascarados en la etapa de ejecución 1950 (evitando de esta manera que esas posiciones de elementos de datos se actualicen en la etapa de reescritura/escritura en memoria 1960), o la etapa de ejecución 1950 podría realizar la operación y la máscara de escritura se aplicaría durante la etapa de reescritura/escritura en memoria 1960 para evitar la actualización de las posiciones de elementos de datos enmascarados).
Cabe señalar que, las líneas con flechas no representan necesariamente la única etapa o etapas utilizadas por los diferentes campos, sino que representan dónde ese campo probablemente tendrá el mayor impacto. Entre las figuras A y B, se observará que la principal diferencia es que el campo de operación de aumento 250 se utiliza por la etapa de ejecución 1950 para la operación de redondeo; el campo de operación de aumento 250 se utiliza por la etapa de transformación de datos 1940 para la operación de tipo de transformación de datos; y la línea desde el campo de anchura de elemento de datos 264 hasta la etapa de ejecución 1950 se mueve a la etapa de transformación de datos 1940. La Figura 19C muestra el campo de operación de base 242 yendo en su lugar a la etapa de lectura de registro/lectura de memoria 1930; utilizándose el campo de EH 252B del campo de operación de aumento 250 por la etapa de lectura de registro/lectura de memoria 1930; utilizándose opcionalmente el campo de escala 260, el campo de desplazamiento 262A/campo de factor de desplazamiento 262B, el campo de máscara de escritura 270 y el campo de anchura de elemento de datos 264 por la etapa de lectura de registro/lectura de memoria 1930 o la etapa de reescritura/escritura en memoria 1960 dependiendo de si es una operación de lectura o escritura de memoria. Dado que es bien conocido que las etapas de canalización utilizarían el campo de inmediato 272, no se representa un mapeo para ese campo para no oscurecer la invención.
Canalización en orden ilustrativa - Figura 20
La canalización de procesador 2000 representa una canalización de procesador en orden y tiene las mismas etapas de canalización con nombre que la canalización de procesador 2000, pero tiene una etapa de decodificación de longitud 2012 insertada entre la etapa de obtención 1910 y la etapa de decodificación 1920.
Los mapeos de las Figuras 20A-20C son esencialmente idénticos a los de las Figuras 19A-19C.
Primera canalización fuera de orden ilustrativa - Figura 21
La canalización de procesador 2100 representa una primera canalización fuera de orden ilustrativa que tiene las mismas etapas de canalización nombradas que la canalización de procesador 2000, pero también tiene lo siguiente: 1) una etapa de asignación 2122, una etapa de cambio de nombre 2124 y una etapa de planificación 2126 insertadas entre la etapa de decodificación 1920 y la etapa de lectura de registro/lectura de memoria 1930; y 2) una etapa de lectura de memoria intermedia de reorden (rob) 2162, una etapa de manejo de excepciones 2164 y una etapa de confirmación 2166 añadida después de la etapa de respaldo correcto/memoria correcta 1960.
En las Figuras 21A-21C, los mapeos son generalmente los mismos que los mapeos en las Figuras 20A-20C, con las siguientes excepciones: 1) que el campo de índice de registro 244 y el campo de modificador 246 se utilizan por la etapa de cambio de nombre 2142; 2) solo en la figura 21A, el campo de máscara de escritura 270 también se usa opcionalmente por la etapa de manejo de excepciones 2164 para suprimir excepciones en posiciones de elementos de datos enmascarados; y 3) solo en la figura 21A, el campo de SAE 256 se usa opcionalmente por la etapa de ejecución 1950 y la etapa de manejo de excepciones 2164 dependiendo de dónde se suprimirán las excepciones de coma flotante.
Segunda canalización fuera de orden ilustrativa - figura 22
La canalización de procesador 2200 representa una segunda canalización fuera de orden ilustrativa que tiene las mismas etapas de canalización de procesador nombradas que la canalización de procesador 2100, con la excepción de que las etapas de transformación y ejecución de datos se han fusionado para formar y una etapa de ejecución/transformación de datos 2245.
Los mapeos en las Figuras 22A-22C son esencialmente los mismos que las de las Figuras 21A-21C, con la excepción de que los mapeos que fueron por separado a la etapa de transformación de datos 1940 y la etapa de ejecución 1950, en su lugar, van a la etapa de ejecución/transformación de datos 2245.
Plantillas de instrucción de clase B en las canalizaciones ilustrativas
La siguiente tabla ilustra cómo modificar las figuras 19 a 22 para adaptar los campos de las plantillas de instrucción en la figura 2B de acuerdo con las realizaciones de la invención.
Figure imgf000043_0001
Figure imgf000044_0001
Etapas de decodificación 1920
En las etapas de decodificación 1920 podría usarse una diversidad de diferentes unidades de decodificación bien conocidas. Por ejemplo, la unidad de decodificación puede decodificar cada macroinstrucción en una sola microinstrucción amplia. Como otro ejemplo, la unidad de decodificación puede decodificar algunas macroinstrucciones en microinstrucciones amplias únicas, pero otras en microinstrucciones amplias múltiples. Como otro ejemplo especialmente adecuado para canalizaciones de procesador fuera de orden, la unidad de decodificación puede decodificar cada macroinstrucción en una o más microoperaciones, donde cada una de las microoperaciones puede emitirse y ejecutarse fuera de orden.
También cabe señalarse que, una unidad de decodificación puede implementarse con uno o más decodificadores y cada decodificador puede implementarse como una matriz lógica programable (PLA), como es bien conocido en la técnica. A modo de ejemplo, una unidad de decodificación dada puede: 1) tener lógica de dirección para dirigir diferentes macroinstrucciones a diferentes decodificadores; 2) un primer decodificador que puede decodificar un subconjunto del conjunto de instrucciones (pero más que el primer, segundo, tercer y cuarto decodificadores) y generar dos microoperaciones a la vez; 3) un segundo, tercer y cuarto decodificadores que pueden decodificar cada uno únicamente un subconjunto del conjunto completo de instrucciones y generar únicamente una microoperación a la vez; 4) una ROM de microsecuenciador que puede decodificar únicamente un subconjunto del conjunto completo de instrucciones y generar cuatro microoperaciones a la vez; y 5) multiplexar lógica alimentada por los decodificadores y la ROM del microsecuenciador que determina qué salida se proporciona a una cola de microoperación. Otras realizaciones de la unidad de decodificador pueden tener más o menos decodificadores que decodifican más o menos instrucciones y subconjuntos de instrucciones. Por ejemplo, una realización puede tener un segundo, tercer y cuarto decodificador que pueden generar cada uno dos microoperaciones a la vez; y puede incluir una ROM de microsecuenciador que genera ocho microoperaciones a la vez.
Arquitecturas de procesador ilustrativas - Figuras 23-24
Arquitectura de procesador en orden ilustrativa - Figuras 23A-23B
Las Figuras 23A-B ilustran un diagrama de bloques de una arquitectura de procesador en orden ilustrativa. Esta realización ilustrativa está diseñada en torno a múltiples instancias de un núcleo de CPU en orden que se aumenta con un procesador de vector amplio (VPU). Los núcleos se comunican a través de una red de interconexión de alto ancho de banda 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 exacta. Por ejemplo, una implementación de esta realización como una GPU independiente normalmente incluiría un bus PCIe.
La Figura 23A es un diagrama de bloques de un único núcleo de CPU, junto con su conexión a la red de interconexión en chip 2302 y con su subconjunto local de la caché de nivel 2 (L2) 2304, de acuerdo con las realizaciones de la invención. Un decodificador de instrucciones 2300 soporta el conjunto de instrucciones x86 con una extensión que incluye el formato de instrucción de vector específico 300. Mientras que en una realización de la invención (para simplificar el diseño) una unidad escalar 2308 y una unidad vectorial 2310 usan conjuntos de registros separados (respectivamente, los registros escalares 2312 y los registros vectoriales 2314) 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) 2306, las realizaciones alternativas de la invención pueden usar un enfoque diferente (por ejemplo, usar un único conjunto de registros o incluir una ruta de comunicación que permita que se transfieran datos entre los dos archivos de registro sin escribirlos ni leerlos).
La memoria caché L1 2306 permite accesos de baja latencia a la memoria caché en las unidades escalares y vectoriales. Junto con las instrucciones de carga-operación en el formato de instrucción compatible con vectores, esto significa que la memoria caché L12306 puede tratarse de alguna manera como un archivo de registro extendido. Esto mejora significativamente el rendimiento de muchos algoritmos, especialmente con el campo de sugerencia de desalojo 252B.
El subconjunto local del caché L2 2304 es parte de una caché L2 global que se divide en subconjuntos locales separados, uno por núcleo de CPU. Cada CPU tiene una ruta de acceso directo a su propio subconjunto local de la caché L22304. Los datos leídos por un núcleo de CPU se almacenan en su subconjunto de caché L22304 y se puede acceder a ellos rápidamente, en paralelo con otras CPU que acceden a sus propios subconjuntos de caché L2 local.
Los datos escritos por un núcleo de CPU se almacenan en su propio subconjunto de memoria caché L22304 y se vacían de otros subconjuntos, si fuera necesario. La red en anillo garantiza la coherencia de los datos compartidos. La Figura 23B es una vista en despiece de parte del núcleo de la CPU de la figura 23A de acuerdo con las realizaciones de la invención. La Figura 23B incluye una caché de datos L12306A parte de la caché L12304, así como más detalles con respecto a la unidad de vector 2310 y los registros de vector 2314. Específicamente, la unidad de vector 2310 es una unidad de procesamiento de vector (VPU) de 16 de anchura (véase la ALU 2328 de 16 de anchura), que ejecuta instrucciones de entero, flotante de precisión sencilla y flotante de precisión doble. La VPU soporta el mezclado de las entradas de registro con la unidad de mezcla 2320, la conversión numérica con las unidades de conversión numérica 2322A-B y la replicación con la unidad de replicación 2324 en la entrada de memoria. Los registros de máscara de escritura 2326 permiten predicar las escrituras de vector resultantes.
Los datos de registro pueden mezclarse en una diversidad de maneras, por ejemplo, para soportar la multiplicación de matrices. Los datos de la memoria se pueden replicar a través de los carriles de VPU. Esta es una operación común tanto en el procesamiento de datos en paralelo con gráficos como sin gráficos, lo que aumenta significativamente la eficiencia de la caché.
La red en anillo es bidireccional para permitir que agentes tales como núcleos de CPU, cachés L2 y otros bloques lógicos se comuniquen entre sí dentro del chip. Cada ruta de datos del anillo tiene 512 bits de anchura por dirección.
Arquitectura fuera de orden ilustrativa - Figura 24
La Figura 24 es un diagrama de bloques que ilustra una arquitectura en desorden ilustrativa de acuerdo con las realizaciones de la invención. Específicamente, la Figura 24 ilustra una arquitectura fuera de orden ilustrativa bien conocida que se ha modificado para incorporar el formato de instrucción compatible con vectores y la ejecución del mismo. En la Figura 24, las flechas indican un acoplamiento entre dos o más unidades y la dirección de la flecha indica una dirección del flujo de datos entre esas unidades. La Figura 24 incluye una unidad de extremo frontal 2405 acoplada a una unidad de motor de ejecución 2410 y una unidad de memoria 2415; la unidad de motor de ejecución 2410 está además acoplada a la unidad de memoria 2415.
La unidad de extremo frontal 2405 incluye una unidad de predicción de rama de nivel 1 (L1) 2420 acoplada a una unidad de predicción de rama de nivel 2 (L2) 2422. Las unidades de predicción de rama L1 y L22420 y 2422 están acopladas a una unidad de caché de instrucciones L1 2424. La unidad de caché de instrucciones L1 2424 está acoplada a una memoria intermedia de anticipación de traducción de instrucciones (TLB) 2426 que está acoplada además a una unidad de obtención y predecodificación de instrucciones 2428. La unidad de obtención y predecodificación de instrucciones 2428 está acoplada a una unidad de cola de instrucciones 2430 que está acoplada además a una unidad de decodificación 2432. La unidad de decodificación 2432 comprende una unidad decodificadora compleja 2434 y tres unidades de decodificador sencillo 2436, 2438 y 2440. La unidad de decodificación 2432 incluye una unidad de ROM de microcódigo 2442. La unidad de decodificación 2432 puede operar como se ha descrito anteriormente en la sección de la etapa de decodificación. La unidad de caché de instrucciones L12424 está además acoplada a una unidad de caché L22448 en la unidad de memoria 2415. La unidad de TLB de instrucciones 2426 está además acoplada a una unidad de TLB de segundo nivel 2446 en la unidad de memoria 2415. Cada una de la unidad de decodificación 2432, la unidad de ROM de microcódigo 2442 y una unidad detectora de flujo de bucle 2444 está acoplada a una unidad de cambio de nombre/asignación 2456 en la unidad de motor de ejecución 2410.
La unidad de motor de ejecución 2410 incluye la unidad de cambio de nombre/asignación 2456 que está acoplada a una unidad de retiro 2474 y a una unidad de planificación unificada 2458. La unidad de retiro 2474 está además acoplada a las unidades de ejecución 2460 e incluye una unidad de memoria intermedia de reorden 2478. La unidad de planificación unificada 2458 está acoplada además a una unidad de archivos de registros físicos 2476 que está acoplada a las unidades de ejecución 2460. La unidad de archivos de registros físicos 2476 comprende una unidad de registros vectoriales 2477A, una unidad de registros de máscara de escritura 2477B y una unidad de registros escalares 2477C; estas unidades de registro pueden proporcionar los registros de vector 510, los registros de máscara de vector 515 y los registros de propósito general 525; y la unidad de archivos de registros físicos 2476 puede incluir archivos de registro adicionales no mostrados (por ejemplo, el archivo de registro de pila de coma flotante escalar 545 que se alinea en el archivo de registro plano de entero empaquetado de MMX 550). Las unidades de ejecución 2460 incluyen tres unidades escalares y vectoriales mixtas 2462, 2464 y 2472; una unidad de carga 2466; una unidad de dirección de almacenamiento 2468; una unidad de datos de almacenamiento 2470. Además, cada una de la unidad de carga 2466, la unidad de dirección de almacenamiento 2468 y la unidad de datos de almacenamiento 2470 está acoplada a una unidad de TLB de datos 2452 en la unidad de memoria 2415.
La unidad de memoria 2415 incluye la unidad de TLB de segundo nivel 2446 que está acoplada a la unidad de TLB de datos 2452. La unidad de TLB de datos 2452 está acoplada a una unidad de caché de datos L12454. La unidad de caché de datos L12454 está además acoplada a una unidad de caché L22448. En algunas realizaciones, la unidad de caché L22448 está además acoplada a las unidades de caché L3 y superiores 2450 dentro y/o fuera de la unidad de memoria 2415.
A modo de ejemplo, la arquitectura fuera de orden ilustrativa puede implementar la canalización de proceso 2200 de la siguiente manera: 1) la unidad de obtención y predecodificación de instrucciones 2428 realiza las etapas de obtención y decodificación de longitud 1910 y 2012; 2) la unidad de decodificación 2432 realiza la etapa de decodificación 1920; 3) la unidad de cambio de nombre/asignación 2456 realiza la etapa de asignación 2122 y la etapa de cambio de nombre 2124; 4) el planificador unificado 2458 realiza la etapa de planificación 2126; 5) la unidad de archivos de registros físicos 2476, la unidad de memoria intermedia de reorden 2478 y la unidad de memoria 2415 realizan la etapa de lectura de registro/lectura de memoria 1930; las unidades de ejecución 2460 realizan la etapa de ejecución/transformación de datos 2245; 6) la unidad de memoria 2415 y la unidad de memoria intermedia de reorden 2478 realizan la etapa de reescritura/escritura en memoria 1960; 7) la unidad de retiro 2474 realiza la etapa de lectura de ROB 2162; 8) diversas unidades pueden estar implicadas en la etapa de manejo de excepciones 2164; y 9) la unidad de retiro 2474 y la unidad de archivos de registros físicos 2476 realizan la etapa de confirmación 2166. Procesadores de un solo núcleo y de múltiples núcleos ilustrativos- Figura 29
La Figura 29 es un diagrama de bloques de un procesador de un único núcleo y un procesador de múltiples núcleos 2900 con controlador de memoria y gráficos integrados de acuerdo con las realizaciones de la invención. Los recuadros con líneas continuas en la Figura 29 ilustran un procesador 2900 con un único núcleo 2902A, un agente de sistema 2910, un conjunto de una o más unidades de controlador de bus 2916, mientras que, la adición opcional de los recuadros con líneas discontinuas ilustra un procesador alternativo 2900 con múltiples núcleos 2902A-N, un conjunto de una o más unidad o unidades de controlador de memoria integrado 2914 en la unidad de agente de sistema 2910 y una lógica de gráficos integrados 2908.
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 2906 y memoria externa (no mostrada) acoplada al conjunto de unidades de controlador de memoria integrado 2914. El conjunto de unidades de caché compartida 2906 puede incluir una o más cachés de nivel medio, tales como de nivel 2 (L2), nivel 3 (L3), nivel 4 (L4) u otros niveles de caché, una caché de último nivel (LLC) y/o combinaciones de las mismas. Mientras que en una realización una unidad de interconexión basada en anillo 2912 interconecta la lógica de gráficos integrados 2908, el conjunto de unidades de caché compartidas 2906 y la unidad de agente de sistema 2910, realizaciones alternativas pueden usar cualquier número de técnicas bien conocidas para interconectar tales unidades.
En algunas realizaciones, uno o más de los núcleos 2902A-N son aptos para múltiples subprocesos. El agente de sistema 2910 incluye aquellos componentes que coordinan y operan los núcleos 2902A-N. La unidad de agente de sistema 2910 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 2902A-N y la lógica de gráficos integrados 2908. La unidad de visualización es para controlar una o más pantallas conectadas externamente.
Los núcleos 2902A-N pueden ser homogéneos o heterogéneos en términos de arquitectura y/o conjunto de instrucciones. Por ejemplo, algunos de los núcleos 2902A-N pueden estar en orden (por ejemplo, como el mostrado en las figuras 23A y 23B) mientras que otros están fuera de orden (por ejemplo, como el mostrado en la figura 24). Como otro ejemplo, dos o más de los núcleos 2902A-N pueden ser aptos para ejecutar el mismo conjunto de instrucciones, mientras que otros pueden ser aptos para ejecutar únicamente un subconjunto de ese conjunto de instrucciones o un conjunto de instrucciones diferente. Al menos uno de los núcleos puede ejecutar el formato de instrucción compatible con vectores descrito en el presente documento.
El procesador puede ser un procesador de propósito general, tal como un procesador Corei3, i5, i7, 2 Duo y Quad, Xeon, o Itanium, que están disponibles a partir de Intel Corporation, de Santa Clara, California. Como alternativa, el procesador puede ser de otra empresa. El procesador puede ser un procesador de propósito especial, tal como, por ejemplo, un procesador de red o de comunicación, un motor de compresión, un procesador de gráficos, un coprocesador, un procesador integrado o similar. El procesador puede implementarse en uno o más chips. El procesador 2900 puede ser parte y/o puede implementarse en uno o más sustratos usando cualquiera de un número de tecnologías de proceso, tales como, por ejemplo, BiCMOS, CMOS o NMOS.
Sistemas y procesadores informáticos ilustrativos - Figuras 25-28
Las Figuras 25-27 son sistemas ilustrativos adecuados para incluir el procesador 2900, mientras que la Figura 28 es un sistema en un chip (SoC) ilustrativo que puede incluir uno o más de los núcleos 2902. 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 desvela en el presente documento.
Haciendo referencia ahora a la Figura 25, se muestra un diagrama de bloques de un sistema 2500 de acuerdo con una realización de la invención. El sistema 2500 puede incluir uno o más procesadores 2510, 2515, que están acoplados al concentrador de controlador de memoria de gráficos (GMCH) 2520. La naturaleza opcional de los procesadores adicionales 2515 se indica en la Figura 25 con líneas discontinuas.
Cada procesador 2510, 2515 puede ser alguna versión del procesador 2900. Sin embargo, cabe señalar que es poco probable que existan unidades de control de memoria integrada y de lógica de gráficos integradas en los procesadores 2510, 2515.
La Figura 25 ilustra que el GMCH 2520 puede acoplarse a una memoria 2540 que puede ser, por ejemplo, una memoria dinámica de acceso aleatorio (DRAM). La DRAM puede, para al menos una realización, estar asociada con una caché no volátil.
El GMCH 2520 puede ser un conjunto de chips o una porción de un conjunto de chips. El GMCH 2520 puede comunicarse con el procesador o procesadores 2510, 2515 y controlar la interacción entre el procesador o procesadores 2510, 2515 y la memoria 2540. El GMCH 2520 también puede actuar como una interfaz de bus acelerada entre el procesador o procesadores 2510, 2515 y otros elementos del sistema 2500. Para al menos una realización, el GMCH 2520 se comunica con el procesador o procesadores 2510, 2515 a través de un bus multipunto, tal como un bus frontal (FSB) 2595.
Además, el GMCH 2520 está acoplado a una pantalla 2545 (tal como una pantalla de panel plano). El GMCH 2520 puede incluir un acelerador de gráficos integrado. El GMCH 2520 está además acoplado a un concentrador de controlador (ICH) de entrada/salida (E/S) 2550, que puede usarse para acoplar diversos dispositivos periféricos al sistema 2500. En la realización de la Figura 25 se muestra, por ejemplo, un dispositivo de gráficos externo 2560, que puede ser un dispositivo de gráficos discreto acoplado al ICH 2550, junto con otro dispositivo periférico 2570.
Como alternativa, también pueden estar presentes en el sistema 2500 procesadores adicionales o diferentes. Por ejemplo, el procesador o procesadores adicionales 2515 pueden incluir procesador o procesadores adicionales que son iguales al procesador 2510, procesador o procesadores adicionales que son heterogéneos o asimétricos al procesador 2510, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP)), matrices de puertas programables en campo o cualquier otro procesador. Puede haber una diversidad de diferencias entre los recursos físicos 2510, 2515 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. Estas diferencias pueden manifestarse efectivamente como asimetría y heterogeneidad entre los elementos de procesamiento 2510, 2515. Para al menos una realización, los diversos elementos de procesamiento 2510, 2515 pueden residir en el mismo paquete de chip.
Con referencia ahora a la Figura 26, se muestra un diagrama de bloques de un segundo sistema 2600 de acuerdo con una realización de la presente invención. Como se muestra en la Figura 26, el sistema multiprocesador 2600 es un sistema de interconexión punto a punto e incluye un primer procesador 2670 y un segundo procesador 2680 acoplados a través de una interconexión punto a punto 2650. Como se muestra en la Figura 26, cada uno de los procesadores 2670 y 2680 puede ser alguna versión del procesador 2900.
Como alternativa, uno o más de los procesadores 2670, 2680 pueden ser un elemento distinto de un procesador, tal como un acelerador o una matriz de puertas programables en campo.
Aunque se muestra con únicamente dos procesadores 2670, 2680, debe entenderse que el alcance de la presente invención no está así limitado. En otras realizaciones, uno o más elementos de procesamiento adicionales pueden estar presentes en un procesador dado.
El procesador 2670 puede incluir además un concentrador de controlador de memoria integrado (IMC) 2672 e interfaces de punto a punto (P-P) 2676 y 2678. De manera similar, el segundo procesador 2680 puede incluir un IMC 2682 y las interfaces P-P 2686 y 2688. Los procesadores 2670, 2680 pueden intercambiar datos a través de una interfaz de punto a punto (PtP) 2650 usando los circuitos de interfaz PtP 2678, 2688. Como se muestra en la Figura 26, los IMC 2672 y 2682 acoplan los procesadores a las respectivas memorias, en concreto, una memoria 2642 y una memoria 2644, que pueden ser porciones de la memoria principal conectadas localmente a los respectivos procesadores.
Cada uno de los procesadores 2670, 2680 puede intercambiar datos con un conjunto de chips 2690 a través de interfaces P-P individuales 2652, 2654 usando circuitos de interfaz de punto a punto 2676, 2694, 2686, 2698. El conjunto de chips 2690 también puede intercambiar datos con un circuito de gráficos de alto rendimiento 2638 a través de una interfaz de gráficos de alto rendimiento 2639.
Se puede incluir una memoria caché compartida (no mostrada) en cualquier procesador fuera de ambos procesadores, pero conectada con los procesadores a través de una interconexión P-P, de modo que la información de caché local de cualquiera o ambos procesadores se puede almacenar en la caché compartida si se coloca un procesador en un modo de bajo consumo.
El conjunto de chips 2690 se puede acoplar a un primer bus 2616 a través de una interfaz 2696. En una realización, el primer bus 2616 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 26, diversos dispositivos de E/S 2614 pueden acoplarse al primer bus 2616, junto con un puente de bus 2618 que acopla el primer bus 2616 a un segundo bus 2620. En una realización, el segundo bus 2620 puede ser un bus de bajo número de pines (LPC). Se pueden acoplar diversos dispositivos al segundo bus 2620 que incluyen, por ejemplo, un teclado/ratón 2622, dispositivos de comunicación 2626 y una unidad de almacenamiento de datos 2628, tal como una unidad de disco u otro dispositivo de almacenamiento masivo que puede incluir el código 2630, en una realización. Además, una E/S de audio 2624 puede acoplarse al segundo bus 2620. Obsérvese que son posibles otras arquitecturas. Por ejemplo, en lugar de la arquitectura de punto a punto de la Figura 26, un sistema puede implementar un bus multipunto u otra arquitectura de este tipo.
Con referencia ahora a la Figura 27, se muestra un diagrama de bloques de un tercer sistema 2700 de acuerdo con una realización de la presente invención. Elementos similares en las Figuras 26 y 27 llevan números de referencia similares; y ciertos aspectos de la Figura 26 se han omitido de la Figura 27 para evitar oscurecer otros aspectos de la Figura 27.
La Figura 27 ilustra que los elementos de procesamiento 2670, 2680 pueden incluir memoria integrada y lógica de control de E/S ("CL") 2672 y 2682, respectivamente. Para al menos una realización, la CL 2672, 2682 puede incluir lógica de concentrador de controlador de memoria (IMC) como la descrita anteriormente en relación con las Figuras 29 y 26. Además, la CL 2672, 2682 también puede incluir lógica de control de E/S. La Figura 27 ilustra que no solo las memorias 2642, 2644 están acopladas a la CL 2672, 2682, sino que también los dispositivos de E/S 2714 también están acoplados a la lógica de control 2672, 2682. Los dispositivos de E/S heredados 2715 están acoplados al conjunto de chips 2690.
Con referencia ahora a la Figura 28, se muestra un diagrama de bloques de un SoC 2800 de acuerdo con una realización de la presente invención. Elementos similares en la Figura 29 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 28, una unidad o unidades de interconexión 2802 están acopladas a: un procesador de aplicaciones 2810 que incluye un conjunto de uno o más núcleos 2902A-N y una unidad o unidades de caché compartida 2906; una unidad de agente de sistema 2910; una unidad o unidades de controlador de bus 2916; una unidad o unidades de controlador de memoria integrado 2914; un conjunto o uno o más procesadores de medios 2820 que pueden incluir una lógica de gráficos integrada 2908, un procesador de imágenes 2824 para proporcionar funcionalidad de cámara fija y/o de vídeo, un procesador de audio 2826 para proporcionar aceleración de audio de hardware y un procesador de vídeo 2828 para proporcionar aceleración de codificación/decodificación de vídeo; una unidad de memoria de acceso aleatorio estática (SRAM) 2830; una unidad de acceso directo a memoria (DMA) 2832; y una unidad de visualización 2840 para acoplar a una o más pantallas externas.
Las realizaciones de los mecanismos desvelados en el presente documento pueden implementarse en hardware, software, firmware o una combinación de tales enfoques de implementación. Las realizaciones de la invención pueden implementarse como programas informáticos o código de programa que se ejecuta en sistemas programables que comprenden al menos un procesador, un sistema de almacenamiento (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 2630 ilustrado en la Figura 26, se puede aplicar a los datos 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 particular. 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 legible por máquina tangible y suministrarse a diversos clientes o instalaciones de fabricación para cargarlas en las máquinas de fabricación que realmente hacen la lógica o el procesador.
Tales medios de almacenamiento legibles por máquina pueden incluir, sin limitación, disposiciones tangibles no transitorias de artículos fabricados o formados por una máquina o dispositivo, 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 regrabables (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), tarjetas magnéticas u ópticas, o cualquier otro tipo de medio adecuado para almacenamiento de instrucciones electrónicas.
En consecuencia, las realizaciones de la invención también incluyen medios legibles por máquina, tangibles y no transitorios que contienen instrucciones en un formato de instrucción compatible con vectores o que contienen datos de diseño, tal como el lenguaje de descripción de hardware (HDL), que define estructuras, circuitos, aparatos, procesadores y/o características de sistema descritas en el presente documento. Tales realizaciones también pueden denominarse productos de programa.
En algunos casos, se puede usar un convertidor de instrucciones para convertir una instrucción de un conjunto de instrucciones de origen a un conjunto de instrucciones de destino. Por ejemplo, el convertidor de instrucciones puede traducir (por ejemplo, usando traducción binaria estática, traducción binaria dinámica que incluye compilación dinámica), transformar, emular o convertir de otro modo una instrucción en una o más instrucciones 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 30 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 en instrucciones binarias en un conjunto de instrucciones objetivo de acuerdo con las realizaciones de la invención. En la realización ilustrada, el convertidor de instrucciones es un convertidor de instrucciones de software, aunque, como alternativa, el convertidor de instrucciones puede implementarse en software, firmware, hardware o diversas combinaciones de los mismos. La Figura 30 muestra un programa en un lenguaje de alto nivel 3002 que se puede compilar usando un compilador x863004 para generar un código binario x86 3006 que puede ejecutarse de forma nativa por un procesador con al menos un núcleo de conjunto de instrucciones x863016 (se supone que algunas de las instrucciones que se compilaron están en el formato de instrucción compatible con vectores). El procesador con al menos un núcleo de conjunto de instrucciones x863016 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 x863004 representa un compilador que puede funcionar para generar código binario x863006 (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 x863016. De manera similar, la Figura 30 muestra que el programa en el lenguaje de alto nivel 3002 puede compilarse usando un compilador de conjunto de instrucciones alternativo 3008 para generar un código binario de conjunto de instrucciones alternativo 3010 que puede ejecutarse de forma nativa por un procesador sin al menos un núcleo de conjunto de instrucciones x863014 (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 3012 se usa para convertir el código binario x86 3006 en un código que el procesador puede ejecutar de forma nativa sin un núcleo de conjunto de instrucciones x86 3014. No es probable que este código convertido sea el mismo que el código binario del conjunto de instrucciones alternativo 3010 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 lo tanto, el convertidor de instrucciones 3012 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 x863006.
Ciertas operaciones de la instrucción o instrucciones en el formato de instrucción compatible con vectores desvelado en este documento pueden realizarse por componentes de hardware y pueden incorporarse en instrucciones ejecutables por máquina que se usan para provocar, o al menos dar como resultado, un circuito u otro componente de hardware programado con las instrucciones que realizan las operaciones. El circuito puede incluir un procesador de propósito general o de propósito especial, o un circuito lógico, por nombrar solo algunos ejemplos. Las operaciones también se pueden realizar opcionalmente mediante una combinación de hardware y software. La lógica de ejecución y/o un procesador pueden incluir circuitería específica o particular u otra lógica que responda a una instrucción de máquina o una o más señales de control derivadas de la instrucción de máquina para almacenar un operando de resultado especificado por instrucción. Por ejemplo, las realizaciones de la instrucción o instrucciones desveladas en el presente documento pueden ejecutarse en uno o más de los sistemas de las Figuras 25 a 28 y las realizaciones de la instrucción o instrucciones en el formato de instrucción compatible con vectores pueden almacenarse en código de programa para ejecutarse en los sistemas. Además, los elementos de procesamiento de estas figuras pueden utilizar una de las canalizaciones y/o arquitecturas detalladas (por ejemplo, las arquitecturas en orden y fuera de orden) detalladas en el presente documento. Por ejemplo, la unidad de decodificación de la arquitectura en orden puede decodificar la instrucción o instrucciones, pasar la instrucción decodificada a una unidad vectorial o escalar, etc. La descripción anterior pretende ilustrar realizaciones preferidas de la presente invención. A partir del análisis anterior también debería resultar evidente que, especialmente en un área de la tecnología de este tipo, donde el crecimiento es rápido y no se prevén fácilmente nuevos avances, los expertos en la materia pueden modificar la disposición y los detalles de la invención sin apartarse de la principios de la presente invención dentro del alcance de las reivindicaciones adjuntas y sus equivalentes. Por ejemplo, una o más operaciones de un método pueden combinarse o descomponerse aún más.
Ejemplos alternativos
Si bien se han descrito realizaciones que ejecutarían de forma nativa el formato de instrucción compatible con vectores, los ejemplos alternativos de la invención pueden ejecutar el formato de instrucción compatible con vectores a través de una capa de emulación que se ejecuta en un conjunto de instrucciones diferente (por ejemplo, un procesador que ejecuta el conjunto de instrucciones MIPS de MIPS Technologies de Sunnyvale, CA, un procesador que ejecuta el conjunto de instrucciones ARM de ARM Holdings de Sunnyvale, CA). Además, mientras que los diagramas de flujo en las figuras muestran un orden particular de operaciones realizadas por ciertas realizaciones de la invención, debe entenderse que tal orden es ilustrativo (por ejemplo, realizaciones alternativas pueden realizar las operaciones en un orden diferente, combinar ciertas operaciones, superponer ciertas operaciones, etc.).
En la descripción anterior, con fines explicativos, se han expuesto numerosos detalles específicos para proporcionar una comprensión completa de las realizaciones de la invención. Será evidente, sin embargo, para un experto en la materia, que se pueden practicar una o más realizaciones sin algunos de estos detalles específicos. Las realizaciones particulares descritas no se proporcionan para limitar la invención sino para ilustrar realizaciones de la invención. El alcance de la invención no está determinado por los ejemplos específicos proporcionados anteriormente, sino únicamente por las reivindicaciones siguientes.

Claims (15)

REIVINDICACIONES
1. Un aparato informático que comprende:
un procesador configurado para ejecutar instrucciones en un formato de instrucción,
en donde el formato de instrucción incluye una pluralidad de campos que incluyen un campo de anchura de elemento de datos (W), un campo de longitud de vector y un campo de máscara de escritura, en donde el formato de instrucción soporta la especificación de una pluralidad de diferentes operaciones de vector, en donde cada una de la pluralidad de operaciones de vector requiere que una operación se realice de forma independiente en cada una de una pluralidad de diferentes posiciones de elementos de datos de al menos un operando de vector de origen para generar al menos un operando de vector de destino, en donde el formato de instrucción soporta a través de diferentes valores en la especificación de campo de anchura de elemento de datos de diferentes anchuras de elementos de datos, en donde el formato de instrucción soporta a través de diferentes valores en el campo de longitud de vector la especificación de una pluralidad de diferentes longitudes de vector, en donde el formato de instrucción soporta a través de diferentes valores en la especificación de campo de máscara de escritura de diferentes máscaras de escritura, en donde únicamente uno de los diferentes valores se puede colocar en cada uno del campo de anchura de elemento de datos y el campo de máscara de escritura en cada ocurrencia de una instrucción en el formato de instrucción, y en donde la anchura del elemento de datos y la longitud del vector para la ocurrencia distinguen qué posiciones de elementos de datos corresponden con qué bits de la máscara de escritura de la ocurrencia, y en donde la máscara de escritura para la ocurrencia especifica basándose en la posición del elemento de datos si los resultados de la operación del vector de la ocurrencia se reflejarán o no en las posiciones de elementos de datos correspondientes del operando de vector de destino.
2. El aparato informático de la reivindicación 1, en donde la pluralidad de diferentes longitudes de vector incluye 128, 256 y 512 bits.
3. El aparato informático de una cualquiera de las reivindicaciones 1 y 2, en donde las diferentes anchuras de elementos de datos incluyen una cualquiera de las anchuras de elementos de datos de 8 bits, 16 bits, 32 bits y 64 bits.
4. El aparato informático de las reivindicaciones 1 a 3, en donde el formato de instrucción soporta una operación de enmascaramiento escribiendo ceros en el al menos un operando de vector de destino.
5. El aparato informático de las reivindicaciones 1 a 4, en donde uno de los diferentes valores que se puede colocar en el campo de máscara de escritura se reserva para indicar que todos los resultados de la operación del vector de ocurrencia van a reflejarse en las posiciones de elementos de datos correspondientes del operando de vector de destino.
6. El aparato informático de las reivindicaciones 1 a 5, en donde otros de los diferentes valores que pueden colocarse en el campo de máscara de escritura distinguen diferentes registros de máscara de escritura que almacenan máscaras de escritura configurables.
7. El aparato informático de la reivindicación 1, en donde el formato de instrucción soporta operaciones en dos operandos de vector de origen y el operando de vector de destino no sobrescribe ninguno de los dos operandos de vector de origen.
8. El aparato informático de la reivindicación 1, en donde el formato de instrucción soporta operaciones en dos operandos de vector de origen y el operando de vector de destino sobrescribe uno de los dos operandos de vector de origen.
9. Un método para ejecutar instrucciones de vector en un formato de instrucción compatible con vectores, que comprende:
obtener instrucciones de un conjunto de instrucciones para su ejecución, en donde el conjunto de instrucciones incluye un
formato de instrucción,
en donde el formato de instrucción incluye una pluralidad de campos que incluyen un campo de anchura de elemento de datos (W), un campo de longitud de vector y un campo de máscara de escritura, en donde el formato de instrucción soporta la especificación de una pluralidad de diferentes operaciones de vector, en donde cada una de la pluralidad de operaciones de vector requiere que una operación se realice de forma independiente en cada una de una pluralidad de diferentes posiciones de elementos de datos de al menos un operando de vector de origen para generar al menos un operando de vector de destino, en donde el formato de instrucción soporta a través de diferentes valores en la especificación de campo de anchura de elemento de datos de diferentes anchuras de elementos de datos, en donde el formato de instrucción soporta a través de diferentes valores en el campo de longitud de vector la especificación de una pluralidad de diferentes longitudes de vector, en donde el formato de instrucción soporta a través de diferentes valores en la especificación de campo de máscara de escritura de diferentes máscaras de escritura, en donde únicamente uno de los diferentes valores se puede colocar en cada uno del campo de anchura de elemento de datos y el campo de máscara de escritura en cada ocurrencia de una instrucción en el formato de instrucción, y en donde la anchura del elemento de datos y la longitud del vector para la ocurrencia distinguen qué posiciones de elementos de datos corresponden con qué bits de la máscara de escritura de la ocurrencia, y en donde la máscara de escritura para la ocurrencia especifica basándose en la posición del elemento de datos si los resultados de la operación del vector de la ocurrencia se reflejarán o no en las posiciones de elementos de datos correspondientes del operando de vector de destino; y
realizar las operaciones especificadas por las instrucciones obtenidas de la siguiente manera:
distinguir, para cada una de las ocurrencias, cuál de las diferentes operaciones de vector realizar basándose en el contenido del campo de operación de base;
distinguir, para cada una de las ocurrencias, cuál de las anchuras de elemento de datos usar basándose en el contenido del campo de anchura de elemento de datos;
distinguir, para cada una de las ocurrencias, cuál de las longitudes de vector usar basándose en el contenido del campo de longitud de vector; y
distinguir, para cada una de las ocurrencias, cuál de las diferentes máscaras de escritura usar basándose en el contenido del campo de máscara de escritura, en donde la anchura del elemento de datos y la longitud del vector para la ocurrencia distinguen qué posiciones de elementos de datos corresponden con qué bits de la máscara de escritura de la ocurrencia, y en donde la máscara de escritura para la ocurrencia especifica basándose en la posición del elemento de datos si los resultados de la operación del vector de la ocurrencia se reflejarán o no en las posiciones de elementos de datos correspondientes del operando de vector de destino.
10. El método de la reivindicación 9, en donde la pluralidad de diferentes longitudes de vector incluye 128, 256 y 512 bits, y en donde las diferentes anchuras de elementos de datos incluyen una cualquiera de las anchuras de elementos de datos de 8 bits, 16 bits, 32 bits y 64 bits.
11. El método de las reivindicaciones 9 a 10, en donde el formato de instrucción soporta una operación de enmascaramiento escribiendo ceros en el al menos un operando de vector de destino.
12. El método de las reivindicaciones 9 a 11, en donde uno de los diferentes valores que se puede colocar en el campo de máscara de escritura se reserva para indicar que todos los resultados de la operación del vector de ocurrencia se reflejarán en las posiciones de elementos de datos correspondientes del operando de vector de destino.
13. El método de las reivindicaciones 9 a 12, en donde otros de los diferentes valores que pueden colocarse en el campo de máscara de escritura distinguen diferentes registros de máscara de escritura que almacenan máscaras de escritura configurables.
14. El método de las reivindicaciones 9 a 13, en donde el formato de instrucción soporta operaciones en dos operandos de vector de origen y el operando de vector de destino no sobrescribe ninguno de los dos operandos de vector de origen.
15. El método de las reivindicaciones 9 a 13, en donde el formato de instrucción soporta operaciones en dos operandos de vector de origen y el operando de vector de destino sobrescribe uno de los dos operandos de vector de origen.
ES18177235T 2011-04-01 2011-09-30 Formato de instrucción compatible con vectores y ejecución del mismo Active ES2943248T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US201161471043P 2011-04-01 2011-04-01

Publications (1)

Publication Number Publication Date
ES2943248T3 true ES2943248T3 (es) 2023-06-12

Family

ID=46931820

Family Applications (1)

Application Number Title Priority Date Filing Date
ES18177235T Active ES2943248T3 (es) 2011-04-01 2011-09-30 Formato de instrucción compatible con vectores y ejecución del mismo

Country Status (11)

Country Link
US (7) US20130305020A1 (es)
EP (4) EP3805921B1 (es)
JP (3) JP5739055B2 (es)
KR (1) KR101595637B1 (es)
CN (5) CN103502935B (es)
DE (1) DE102020102331A1 (es)
ES (1) ES2943248T3 (es)
GB (1) GB2502936A (es)
PL (1) PL3422178T3 (es)
TW (2) TWI467477B (es)
WO (1) WO2012134532A1 (es)

Families Citing this family (93)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103502935B (zh) 2011-04-01 2016-10-12 英特尔公司 向量友好指令格式及其执行
WO2013095552A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Vector instruction for presenting complex conjugates of respective complex numbers
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
WO2013095620A1 (en) 2011-12-23 2013-06-27 Intel Corporation Apparatus and method of improved insert instructions
CN104126167B (zh) * 2011-12-23 2018-05-11 英特尔公司 用于从通用寄存器向向量寄存器进行广播的装置和方法
CN107220029B (zh) * 2011-12-23 2020-10-27 英特尔公司 掩码置换指令的装置和方法
CN104067224B (zh) 2011-12-23 2017-05-17 英特尔公司 在不同的粒度水平下对数据值进行广播和掩码的指令执行
US9411739B2 (en) * 2012-11-30 2016-08-09 Intel Corporation System, method and apparatus for improving transactional memory (TM) throughput using TM region indicators
US9189236B2 (en) * 2012-12-21 2015-11-17 Intel Corporation Speculative non-faulting loads and gathers
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9207942B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses,and methods for zeroing of bits in a data element
US9817663B2 (en) * 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US9645820B2 (en) * 2013-06-27 2017-05-09 Intel Corporation Apparatus and method to reserve and permute bits in a mask register
US9405539B2 (en) * 2013-07-31 2016-08-02 Intel Corporation Providing vector sub-byte decompression functionality
CN104346285B (zh) 2013-08-06 2018-05-11 华为技术有限公司 内存访问处理方法、装置及系统
US20150052330A1 (en) * 2013-08-14 2015-02-19 Qualcomm Incorporated Vector arithmetic reduction
US10296334B2 (en) * 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit gather
US10296489B2 (en) 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit shuffle
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
GB2540944B (en) * 2015-07-31 2018-02-21 Advanced Risc Mach Ltd Vector operand bitsize control
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
WO2017074377A1 (en) * 2015-10-29 2017-05-04 Intel Corporation Boosting local memory performance in processor graphics
US10691453B2 (en) 2015-11-13 2020-06-23 International Business Machines Corporation Vector load with instruction-specified byte count less than a vector size for big and little endian processing
US10691456B2 (en) 2015-11-13 2020-06-23 International Business Machines Corporation Vector store instruction having instruction-specified byte count to be stored supporting big and little endian processing
US9990317B2 (en) * 2015-11-24 2018-06-05 Qualcomm Incorporated Full-mask partial-bit-field (FM-PBF) technique for latency sensitive masked-write
US10180829B2 (en) * 2015-12-15 2019-01-15 Nxp Usa, Inc. System and method for modulo addressing vectorization with invariant code motion
US10338920B2 (en) * 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
US20170185402A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Instructions and logic for bit field address and insertion
US10019264B2 (en) * 2016-02-24 2018-07-10 Intel Corporation System and method for contextual vectorization of instructions at runtime
GB2548602B (en) * 2016-03-23 2019-10-23 Advanced Risc Mach Ltd Program loop control
CN111651205B (zh) * 2016-04-26 2023-11-17 中科寒武纪科技股份有限公司 一种用于执行向量内积运算的装置和方法
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US10282204B2 (en) * 2016-07-02 2019-05-07 Intel Corporation Systems, apparatuses, and methods for strided load
US10176110B2 (en) 2016-07-18 2019-01-08 International Business Machines Corporation Marking storage keys to indicate memory used to back address translation structures
US10761849B2 (en) 2016-09-22 2020-09-01 Intel Corporation Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction
US10268580B2 (en) * 2016-09-30 2019-04-23 Intel Corporation Processors and methods for managing cache tiering with gather-scatter vector semantics
US11023231B2 (en) * 2016-10-01 2021-06-01 Intel Corporation Systems and methods for executing a fused multiply-add instruction for complex numbers
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
US10657126B2 (en) * 2016-12-23 2020-05-19 Cadreon LLC Meta-join and meta-group-by indexes for big data
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
US11327752B2 (en) 2017-02-23 2022-05-10 Arm Limited Element by vector operations in a data processing apparatus
CN118034781A (zh) 2017-03-20 2024-05-14 英特尔公司 用于矩阵加法、减法和乘法的系统、方法和装置
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
CN108986022A (zh) 2017-10-30 2018-12-11 上海寒武纪信息科技有限公司 图像美化方法及相关产品
US11360930B2 (en) * 2017-12-19 2022-06-14 Samsung Electronics Co., Ltd. Neural processing accelerator
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
CN108388446A (zh) * 2018-02-05 2018-08-10 上海寒武纪信息科技有限公司 运算模块以及方法
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11990137B2 (en) 2018-09-13 2024-05-21 Shanghai Cambricon Information Technology Co., Ltd. Image retouching method and terminal device
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11366663B2 (en) * 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11886875B2 (en) * 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US11099848B1 (en) * 2020-01-30 2021-08-24 Arm Limited Overlapped-immediate/register-field-specifying instruction
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
KR20220018776A (ko) * 2020-08-07 2022-02-15 삼성전자주식회사 반도체 메모리 장치
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US11379390B1 (en) * 2020-12-14 2022-07-05 International Business Machines Corporation In-line data packet transformations
US20220336456A1 (en) * 2021-04-19 2022-10-20 Samsung Electronics Co., Ltd. Integrated circuit devices including stacked gate structures with different dimensions
US20230068484A1 (en) * 2021-08-25 2023-03-02 International Business Machines Corporation Independent gate length tunability for stacked transistors

Family Cites Families (83)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3189094A (en) * 1963-01-03 1965-06-15 Halliburton Co Firing apparatus for gun perforators
JPS57209570A (en) 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
JP2539357B2 (ja) * 1985-03-15 1996-10-02 株式会社日立製作所 デ−タ処理装置
US4945479A (en) * 1985-07-31 1990-07-31 Unisys Corporation Tightly coupled scientific processing system
US4873630A (en) 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
JPH0724013B2 (ja) 1986-09-10 1995-03-15 株式会社日立製作所 ベクトルプロセツサ
JPH04156613A (ja) * 1990-10-20 1992-05-29 Fujitsu Ltd 命令バッファ装置
JP2956707B2 (ja) * 1990-10-29 1999-10-04 富士通株式会社 情報処理装置
US5207132A (en) 1991-10-16 1993-05-04 Textron Inc. Elliptical lobed drive system
US5418973A (en) * 1992-06-22 1995-05-23 Digital Equipment Corporation Digital computer system with cache controller coordinating both vector and scalar operations
WO1994003860A1 (en) * 1992-08-07 1994-02-17 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
JP3248992B2 (ja) * 1993-07-13 2002-01-21 富士通株式会社 マルチプロセッサ
US5446912A (en) 1993-09-30 1995-08-29 Intel Corporation Partial width stalls within register alias table
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US5903769A (en) 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US6505290B1 (en) 1997-09-05 2003-01-07 Motorola, Inc. Method and apparatus for interfacing a processor to a coprocessor
US6189094B1 (en) * 1998-05-27 2001-02-13 Arm Limited Recirculating register file
US6185670B1 (en) * 1998-10-12 2001-02-06 Intel Corporation System for reducing number of opcodes required in a processor using an instruction format including operation class code and operation selector code fields
US7529907B2 (en) * 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
JP2002536712A (ja) * 1999-01-28 2002-10-29 エーティーアイ インターナショナル エスアールエル 第2のアーキテクチャのコンピュータにおける第1のコンピュータアーキテクチャ用プログラムの実行
US8127121B2 (en) * 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US6625724B1 (en) 2000-03-28 2003-09-23 Intel Corporation Method and apparatus to support an expanded register set
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6788303B2 (en) * 2001-02-27 2004-09-07 3Dlabs Inc., Ltd Vector instruction set
US6986025B2 (en) * 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
US7529912B2 (en) * 2002-02-12 2009-05-05 Via Technologies, Inc. Apparatus and method for instruction-level specification of floating point format
US7941651B1 (en) * 2002-06-27 2011-05-10 Intel Corporation Method and apparatus for combining micro-operations to process immediate data
US6986023B2 (en) * 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
AU2003256870A1 (en) * 2002-08-09 2004-02-25 Intel Corporation Multimedia coprocessor control mechanism including alignment or broadcast instructions
US7917734B2 (en) 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
US7734748B1 (en) * 2003-10-03 2010-06-08 Nortel Networks Limited Method and apparatus for intelligent management of a network element
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US7302627B1 (en) * 2004-04-05 2007-11-27 Mimar Tibet Apparatus for efficient LFSR calculation in a SIMD processor
US7052968B1 (en) * 2004-04-07 2006-05-30 Advanced Micro Devices, Inc. Method and system for aligning IC die to package substrate
US7493474B1 (en) * 2004-11-10 2009-02-17 Altera Corporation Methods and apparatus for transforming, loading, and executing super-set instructions
US7430207B2 (en) 2005-02-07 2008-09-30 Reti Corporation Preemptive weighted round robin scheduler
US7747088B2 (en) 2005-09-28 2010-06-29 Arc International (Uk) Limited System and methods for performing deblocking in microprocessor-based video codec applications
US7457938B2 (en) * 2005-09-30 2008-11-25 Intel Corporation Staggered execution stack for vector processing
US7627735B2 (en) 2005-10-21 2009-12-01 Intel Corporation Implementing vector memory operations
US20070157030A1 (en) * 2005-12-30 2007-07-05 Feghali Wajdi K Cryptographic system component
US7725682B2 (en) * 2006-01-10 2010-05-25 International Business Machines Corporation Method and apparatus for sharing storage and execution resources between architectural units in a microprocessor using a polymorphic function unit
US9710269B2 (en) * 2006-01-20 2017-07-18 Qualcomm Incorporated Early conditional selection of an operand
US8010953B2 (en) * 2006-04-04 2011-08-30 International Business Machines Corporation Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine
US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
KR100813533B1 (ko) * 2006-09-13 2008-03-17 주식회사 하이닉스반도체 반도체 메모리 장치 및 그 데이터 마스크 방법
US9223751B2 (en) * 2006-09-22 2015-12-29 Intel Corporation Performing rounding operations responsive to an instruction
US8572354B2 (en) * 2006-09-28 2013-10-29 3Dlabs Inc., Ltd. Programmable logic unit and method for translating and processing instructions using interpretation registers
US20080100628A1 (en) 2006-10-31 2008-05-01 International Business Machines Corporation Single Precision Vector Permute Immediate with "Word" Vector Write Mask
US7836278B2 (en) * 2007-07-25 2010-11-16 Advanced Micro Devices, Inc. Three operand instruction extension for X86 architecture
TWI351179B (en) 2007-08-20 2011-10-21 Lite On Technology Corp Data processing method and computer system medium thereof
US8561037B2 (en) * 2007-08-29 2013-10-15 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
EP2602710A1 (en) 2007-11-05 2013-06-12 Aspen Acquisition Corporation Method of encoding register instruction fields
US20090172348A1 (en) 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
US8667250B2 (en) 2007-12-26 2014-03-04 Intel Corporation Methods, apparatus, and instructions for converting vector data
US9529592B2 (en) 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US8281109B2 (en) 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
US8108614B2 (en) 2007-12-31 2012-01-31 Eric Sprangle Mechanism for effectively caching streaming and non-streaming data patterns
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US8681173B2 (en) 2007-12-31 2014-03-25 Intel Corporation Device, system, and method for improving processing efficiency by collectively applying operations
GB2456775B (en) 2008-01-22 2012-10-31 Advanced Risc Mach Ltd Apparatus and method for performing permutation operations on data
US8046400B2 (en) * 2008-04-10 2011-10-25 Via Technologies, Inc. Apparatus and method for optimizing the performance of x87 floating point addition instructions in a microprocessor
US20100024183A1 (en) * 2008-06-30 2010-02-04 Cuprys Lawrence M Removable tool for a display assembly
JP5357475B2 (ja) * 2008-09-09 2013-12-04 ルネサスエレクトロニクス株式会社 データプロセッサ
US8326904B2 (en) * 2009-01-27 2012-12-04 International Business Machines Corporation Trigonometric summation vector execution unit
US8473726B2 (en) * 2009-05-19 2013-06-25 Via Technologies, Inc. Bad branch prediction detection, marking, and accumulation for faster instruction stream processing
US8533438B2 (en) * 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US8627042B2 (en) 2009-12-30 2014-01-07 International Business Machines Corporation Data parallel function call for determining if called routine is data parallel
US9141386B2 (en) 2010-09-24 2015-09-22 Intel Corporation Vector logical reduction operation implemented using swizzling on a semiconductor chip
US8667042B2 (en) 2010-09-24 2014-03-04 Intel Corporation Functional unit for vector integer multiply add instruction
US9092213B2 (en) 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
US8972698B2 (en) 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
US20120185670A1 (en) 2011-01-14 2012-07-19 Toll Bret L Scalar integer instructions capable of execution with three registers
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
US20120254589A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
CN103502935B (zh) 2011-04-01 2016-10-12 英特尔公司 向量友好指令格式及其执行
US20120254593A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for jumps using a mask register
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US10037205B2 (en) 2011-12-23 2018-07-31 Intel Corporation Instruction and logic to provide vector blend and permute functionality
US9236476B2 (en) 2011-12-28 2016-01-12 Intel Corporation Techniques and configuration for stacking transistors of an integrated circuit device
US9590089B2 (en) * 2011-12-30 2017-03-07 Intel Corporation Variable gate width for gate all-around transistors

Also Published As

Publication number Publication date
US20220129274A1 (en) 2022-04-28
TWI467477B (zh) 2015-01-01
US20130305020A1 (en) 2013-11-14
US20240061683A1 (en) 2024-02-22
EP3422178A2 (en) 2019-01-02
JP2014509764A (ja) 2014-04-21
DE102020102331A1 (de) 2020-09-03
EP2695054A4 (en) 2017-05-31
US9513917B2 (en) 2016-12-06
KR101595637B1 (ko) 2016-02-18
CN107608716B (zh) 2020-12-15
WO2012134532A1 (en) 2012-10-04
KR20130137700A (ko) 2013-12-17
US20140149724A1 (en) 2014-05-29
US20190196830A1 (en) 2019-06-27
TWI506546B (zh) 2015-11-01
CN106406817B (zh) 2019-06-14
JP2015158940A (ja) 2015-09-03
TW201243715A (en) 2012-11-01
JP6339164B2 (ja) 2018-06-06
CN104951277B (zh) 2017-11-21
CN107608716A (zh) 2018-01-19
US11573798B2 (en) 2023-02-07
EP3422178A3 (en) 2019-04-10
CN104951277A (zh) 2015-09-30
CN112463219A (zh) 2021-03-09
US20190227800A1 (en) 2019-07-25
EP3805921A2 (en) 2021-04-14
EP2695054B1 (en) 2018-08-15
GB201317902D0 (en) 2013-11-27
EP3422178B1 (en) 2023-02-15
US20200394042A1 (en) 2020-12-17
GB2502936A (en) 2013-12-11
US11740904B2 (en) 2023-08-29
JP2017079078A (ja) 2017-04-27
US11210096B2 (en) 2021-12-28
EP3805921B1 (en) 2023-09-06
JP5739055B2 (ja) 2015-06-24
EP2695054A1 (en) 2014-02-12
EP4250101A2 (en) 2023-09-27
EP4250101A3 (en) 2024-01-03
CN106406817A (zh) 2017-02-15
US10795680B2 (en) 2020-10-06
PL3422178T3 (pl) 2023-06-26
EP3805921A3 (en) 2021-06-30
JP6058732B2 (ja) 2017-01-11
CN103502935B (zh) 2016-10-12
TW201520890A (zh) 2015-06-01
CN103502935A (zh) 2014-01-08

Similar Documents

Publication Publication Date Title
ES2943248T3 (es) Formato de instrucción compatible con vectores y ejecución del mismo
CN109471659B (zh) 使用写掩码将两个源操作数混合进单个目的地的系统、装置和方法
CN107273095B (zh) 用于对齐寄存器的系统、装置和方法
CN107220029B (zh) 掩码置换指令的装置和方法
CN103562856A (zh) 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法
ES2820126T3 (es) Método y equipo para realizar una reorganización de bits de un vector
TWI760341B (zh) 用於跨步載入的系統、設備及方法
CN107193537B (zh) 经改进的插入指令的装置和方法
TW201741868A (zh) 將來源緊縮資料劃分為巷道的處理器、方法、系統及指令
TWI539374B (zh) 映射源運算元至不同範圍的系統及其處理器
KR20170098806A (ko) 벡터 비트 수집을 수행하기 위한 방법 및 장치
CN111831334B (zh) 经改进的插入指令的装置和方法