ES2886348T3 - Procedimiento y aparato para procesar un algoritmo de hashing seguro SHA-2 - Google Patents

Procedimiento y aparato para procesar un algoritmo de hashing seguro SHA-2 Download PDF

Info

Publication number
ES2886348T3
ES2886348T3 ES19205541T ES19205541T ES2886348T3 ES 2886348 T3 ES2886348 T3 ES 2886348T3 ES 19205541 T ES19205541 T ES 19205541T ES 19205541 T ES19205541 T ES 19205541T ES 2886348 T3 ES2886348 T3 ES 2886348T3
Authority
ES
Spain
Prior art keywords
bits
data item
bit
instruction
bit 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
ES19205541T
Other languages
English (en)
Inventor
Kirk S Yap
Gilbert M Wolrich
James D Guilford
Vinodh Gopal
Erdinc Ozturk
Sean M Gulley
Wajdi K Feghali
Martin G Dixon
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 ES2886348T3 publication Critical patent/ES2886348T3/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • 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/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • 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
    • 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch 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/30098Register arrangements
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • H04L2209/125Parallelization or pipelining, e.g. for accelerating processing of cryptographic operations

Abstract

Un aparato, que comprende: una pluralidad de registros de propósito general de 64 bits; una pluralidad de registros de tipo "única instrucción, múltiples datos" (SIMD) de 128 bits; una memoria caché de datos; una memoria caché de instrucciones; una memoria caché de nivel 2 (L2) acoplada a la memoria caché de datos y acoplada a la memoria caché de instrucciones; una unidad de predicción de rama; una memoria intermedia de traducción anticipada de instrucciones (TLB) acoplada a la memoria caché de instrucciones; una unidad de extracción de instrucciones; una unidad de decodificación acoplada a la unidad de extracción de instrucciones, donde la unidad de decodificación decodifica instrucciones, incluida una instrucción de planificación de algoritmo hash seguro (SHA) 256, teniendo la instrucción de planificación de SHA 256 un primer campo para especificar un primer registro de origen SIMD de 128 bits de los registros SIMD de 128 bits, donde el primer registro de origen SIMD de 128 bits almacena un primer operando que va a incluir un primer elemento de datos de 32 bits en bits [31:0], un segundo elemento de datos de 32 bits en bits [63:32], un tercer elemento de datos de 32 bits en bits [95:64], y un cuarto elemento de datos de 32 bits en bits [127:96], teniendo la instrucción de planificación de SHA 256 un segundo campo para especificar un segundo registro de origen SIMD de 128 bits de los registros SIMD de 128 bits, donde el segundo registro de origen SIMD de 128 bits almacena un segundo operando que va a incluir un quinto elemento de datos de 32 bits en bits [31:0], un sexto elemento de datos de 32 bits en bits [63:32], un séptimo elemento de datos de 32 bits en bits [95:64], y un octavo elemento de datos de 32 bits en bits [127:96]; y una unidad de ejecución acoplada a la unidad de decodificación y acoplada a los registros SIMD de 128 bits, donde la unidad de ejecución ejecuta la instrucción de planificación SHA 256 y produce un resultado que debe incluir: un primer elemento de datos de resultado de 32 bits en bits [31:0] que debe ser igual a una suma de a) el primer elemento de datos de 32 bits del primer operando y b) un valor igual al segundo elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el segundo elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el segundo elemento de datos de 32 bits desplazado a la derecha tres bits; un segundo elemento de datos de resultado de 32 bits en bits [63:32] que debe ser igual a una suma de a) el segundo elemento de datos de 32 bits del primer operando y b) un valor igual al tercer elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el tercer elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el tercer elemento de datos de 32 bits desplazado a la derecha tres bits; un tercer elemento de datos de resultado de 32 bits en bits [95:64] que debe ser igual a una suma de a) el tercer elemento de datos de 32 bits del primer operando y b) un valor igual al cuarto elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el cuarto elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el cuarto elemento de datos de 32 bits desplazado a la derecha tres bits; y un cuarto elemento de datos de resultado de 32 bits en bits [127:96] que debe ser igual a una suma de a) el cuarto elemento de datos de 32 bits del primer operando y b) un valor igual al quinto elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el quinto elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el quinto elemento de datos de 32 bits desplazado a la derecha tres bits.

Description

DESCRIPCIÓN
Procedimiento y aparato para procesar un algoritmo de hashing seguro SHA-2
CAMPO TÉCNICO
Las formas de realización de la presente invención se refieren, en general, a aparatos de procesamiento de instrucciones. Más en particular, las formas de realización de la invención se refieren a un aparato de procesamiento de instrucciones para procesar algoritmos de hashing seguros SHA-2.
TÉCNICA ANTERIOR
SHA son las iniciales en inglés de Algoritmo Hash Seguro. Consiste en cinco funciones hash diseñadas por la Agencia Nacional de Seguridad (NSA) y publicadas por el Instituto Nacional de Normas y Tecnología (NIST). Una de ellas es SHA-2. SHA-2 es un conjunto de funciones hash seguras que incluyen SHA 224, SHA 256, SHA 384 y SHA 512, desarrolladas por la NSA con la intención de proporcionar un mayor nivel de seguridad que el algoritmo SHA-1. SHA 224 y SHA 256 son algoritmos similares basados en una longitud de palabra de 32 bits que producen compendios de 224 y 256 bits. SHA 384 y SHA 512 se basan en palabras de 64 bits y producen compendios de 384 y 512 bits.
El algoritmo SHA-2 es computacionalmente más complejo que el SHA-1, basándose en sumas de propagación de acarreo, así como en operaciones lógicas y rotaciones. Una ruta crítica para una ronda de operaciones de SHA-2 consiste en cuatro sumas de propagación consecutivas con entradas de sumadores determinadas por funciones lógicas y de rotación complejas. La Figura 1 representa detalles del algoritmo SHA-2. A, B, C, D, E, F, G y H representan las 8 palabras de estado (32 bits para SHA 224/256 y 64 bits para SHA 384/512). Se realizan las siguientes operaciones para cada iteración:
üh(& , Í \ (¿} \ h A £'} (;¡) \pB A C*,l
Figure imgf000002_0001
La rotación a nivel de bit usa diferentes constantes para SHA-512. En este ejemplo, los números dados son para SHA-256. La suma de la constante K más la entrada del mensaje Wi se puede realizar antes de la ruta crítica de la ronda. La función de planificación de mensajes para el algoritmo SHA-2 también es más compleja que la del SHA-1, basándose en copias rotadas de entradas de mensajes anteriores para formar entradas de mensaje:
para i de 16 a 63
sO := (w[i-15] ROTR 7) XOR (w[i-15] ROTR 18) XOR (w[i-15] SHR 3)
si := (w[i-2] ROTR 17) XOR (w[i-2] ROTR 19) XOR (w[i-2] SHR 10)
w[i] := w[i-16] sO w[i-7] si
donde ROTR (también utilizado como ">>>") denota un operador de rotación a la derecha a nivel de bit; SHR denota un operador de desplazamiento a la derecha a nivel de bit; y XOR denota un operador de OR-exclusiva a nivel de bit.
Para SHA-256, cada iteración se realiza de la siguiente manera:
Figure imgf000002_0002
Figure imgf000003_0001
Figure imgf000003_0002
e := d ti
d c
c b
b := a
a 114-12
La entrada de mensaje w[i] para las rondas 1 a 16 es el bloque de datos de 32 bits x 16 =512 bits. Debe obtenerse w[i] para las rondas 17 a 64. La constante K se especifica para cada ronda; el valor W[i] K[i] para cada ronda se puede calcular antes de la iteración de una ronda concreta. Se puede encontrar información más detallada acerca de la especificación SHA-2 en la Norma de Hash Segura publicada por la Publicación de Normas Federales de Procesamiento de Información (FIPS PUB 180-3, publicada en octubre de 2008).
Las soluciones de software convencionales que utilizan instrucciones estándar requieren una instrucción diferente para cada una de las instrucciones de adición y de desplazamiento/rotación lógicas necesarias para implementar las funciones de rondas y planificación del SHA-2, tales como el algoritmo SHA-256. Los datos de referencia actuales de la industria para SHA256 están en el rango de 15 ciclos por octeto. El límite para una implementación de instrucciones estándar de SHA256 se acerca potencialmente al rango de 9 ciclos por octeto. No se han desarrollado maneras eficientes de realizar las operaciones anteriores.
Se hace referencia al documento US 2010/0250966, que divulga un procesador que incluye soporte de instrucciones para implementar algoritmos hash, que puede emitir, para su ejecución, instrucciones hash seleccionables por el programador a partir de una arquitectura de conjunto de instrucciones (ISA) definida. El procesador puede incluir una unidad criptográfica que puede recibir instrucciones para su ejecución. Las instrucciones incluyen instrucciones hash definidas en la ISA. Además, la unidad criptográfica puede ejecutar las instrucciones hash para implementar una función hash que cumpla con una o más especificaciones de algoritmo hash respectivas. En respuesta a la recepción de una instrucción hash particular definida dentro de la ISA, la unidad criptográfica puede recuperar un conjunto de bloques de datos de entrada a partir de un conjunto predeterminado de registros de arquitectura del procesador, y generar un valor hash del conjunto de bloques de datos de entrada de acuerdo con un algoritmo hash que corresponde a la instrucción hash particular.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Las formas de realización de la invención se ilustran a modo de ejemplo y no de limitación en las figuras de los dibujos adjuntos, en los que las referencias similares indican elementos similares.
La Figura 1 representa detalles del algoritmo SHA-2.
La Figura 2 es un diagrama de bloques de una cadena de ejecución de un procesador o núcleo de procesador de acuerdo con una forma de realización de la invención.
La Figura 3 es un diagrama de bloques que ilustra una operación de SHA-2 de acuerdo con una forma de realización.
La Figura 4 es un diagrama de bloques que ilustra un proceso para operaciones de una ronda de SHA-256 de acuerdo con una forma de realización.
La Figura 5 es un diagrama de flujo que ilustra un procedimiento para realizar operaciones de una ronda de SHA-2 de acuerdo con una forma de realización.
La Figura 6 es un diagrama de flujo que ilustra un procedimiento para realizar operaciones de planificación de mensajes de SHA-2 de acuerdo con una forma de realización.
La Figura 7 es un diagrama de flujo que ilustra un procedimiento para realizar operaciones de planificación de mensajes de SHA-2 de acuerdo con otra forma de realización.
Las Figuras 8A-8C son un pseudocódigo que ilustra un proceso de operaciones de una ronda de SHA-256 de acuerdo con una forma de realización.
La Figura 9A ilustra un ejemplo de formato de instrucción de extensiones vectoriales avanzadas (AVX) de acuerdo con una forma de realización de la invención.
La Figura 9B ilustra un ejemplo de formato de instrucción de extensiones vectoriales avanzadas (AVX) de acuerdo con otra forma de realización de la invención.
La Figura 9C ilustra un ejemplo de formato de instrucción de extensiones vectoriales avanzadas (AVX) de acuerdo con otra forma de realización de la invención.
La Figura 10A es un diagrama de bloques que ilustra un formato de instrucción genérico compatible con vectores, así como plantillas de instrucción de clase A del mismo de acuerdo con formas de realización de la invención.
La Figura 10B es un diagrama de bloques que ilustra el formato de instrucción genérico compatible con vectores, así como plantillas de instrucción de clase B del mismo de acuerdo con formas de realización de la invención.
La Figura 11A es un diagrama de bloques que ilustra un ejemplo de formato de instrucción específico compatible con vectores de acuerdo con una forma de realización de la invención.
La Figura 11B es un diagrama de bloques que ilustra un formato de instrucción genérico compatible con vectores de acuerdo con otra forma de realización de la invención.
La Figura 11C es un diagrama de bloques que ilustra un formato de instrucción genérico compatible con vectores de acuerdo con otra forma de realización de la invención.
La Figura 11D es un diagrama de bloques que ilustra un formato de instrucción genérico compatible con vectores de acuerdo con otra forma de realización de la invención.
La Figura 12 es un diagrama de bloques de arquitectura de registros de acuerdo con una forma de realización de la invención.
La Figura 13A es un diagrama de bloques que ilustra tanto una cadena de procesamiento en orden ejemplar como una cadena de emisión/ejecución fuera de orden de cambio de nombre de registros ejemplar de acuerdo con formas de realización de la invención.
La Figura 13B es un diagrama de bloques que ilustra tanto una forma de realización ejemplar de un núcleo de arquitectura en orden como un núcleo de arquitectura de emisión/ejecución fuera de orden de cambio de nombre de registros ejemplar que se incluirá en un procesador de acuerdo con formas de realización de la invención.
La Figura 14A es un diagrama de bloques de un núcleo de procesador de acuerdo con una forma de realización de la invención.
La Figura 14B es un diagrama de bloques de un núcleo de procesador de acuerdo con otra forma de realización de la invención.
La Figura 15 es un diagrama de bloques de un procesador de acuerdo con formas de realización de la invención. La Figura 16 es un diagrama de bloques de un sistema de acuerdo con una forma de realización de la invención. La Figura 17 es un diagrama de bloques de un sistema ejemplar más específico de acuerdo con una forma de realización de la invención.
La Figura 18 es un diagrama de bloques de un sistema ejemplar más específico de acuerdo con otra forma de realización de la invención.
La Figura 19 es un diagrama de bloques de un SoC de acuerdo con una forma de realización de la invención. La Figura 20 es un diagrama de bloques que contrasta el uso de un convertidor de instrucciones de software para convertir instrucciones binarias de un conjunto de instrucciones fuente en instrucciones binarias de un conjunto de instrucciones objetivo de acuerdo con formas de realización de la invención.
DESCRIPCIÓN DE LAS FORMAS DE REALIZACIÓN
Se describirán diversas formas de realización y aspectos de la invención con referencia a los detalles descritos más adelante, y los dibujos adjuntos ilustrarán las diversas formas de realización. La siguiente descripción y dibujos son ilustrativos de la invención y no deben interpretarse como limitantes de la invención. Se describen numerosos detalles específicos para proporcionar un entendimiento exhaustivo de diversas formas de realización de la presente invención. Sin embargo, en determinados casos, detalles ampliamente conocidos o convencionales no se describen con el fin de proporcionar un análisis conciso de las formas de realización de la presente invención.
La referencia en la memoria descriptiva a "una forma de realización" significa que una propiedad, estructura o característica particular descrita junto con la forma de realización se puede incluir en al menos una forma de realización de la invención. Las apariciones de la expresión "en una forma de realización" en diversas partes de la memoria descriptiva no se refieren necesariamente a la misma forma de realización.
De acuerdo con algunas formas de realización, se utiliza una nueva arquitectura de conjunto de instrucciones (ISA) para realizar una o más rondas de operaciones de SHA-2 descritas anteriormente en respuesta a una única instrucción (por ejemplo, "una única instrucción, múltiples datos" o instrucción SIMD) para mejorar la eficacia del cálculo de SHA-2. Un sistema convencional tiene que utilizar múltiples instrucciones para realizar una ronda de operaciones de ronda de SHA-2. El rendimiento se puede optimizar reduciendo el tiempo requerido para realizar la función de ronda de SHA-2 mientras se obtienen las entradas de mensaje para rondas posteriores mediante una cadena de procesamiento, de modo que la velocidad de ejecución del algoritmo SHA-2 está principalmente sujeta al cálculo de las rondas. En una forma de realización, para realizar operaciones de ronda de 256 bits (por ejemplo, SHA-256), se utilizan registros que tienen al menos 256 bits para almacenar variables de estado de SHA-2 (por ejemplo, variables de estado A, B, C, D, E, F, G y H) y múltiples entradas de mensaje (por ejemplo, al menos cuatro entradas de mensaje), de modo que se pueden realizar una o más rondas de operaciones hash de ronda de SHA-2 en paralelo por un procesador, tal como un procesador de capacidad vectorial en respuesta a una única instrucción. Además, registros que tienen al menos 128 bits se utilizan para preparar múltiples entradas de mensaje para el siguiente ciclo o iteración (por ejemplo, las siguientes una o más rondas) en función de las entradas de mensaje anteriores.
La Figura 2 es un diagrama de bloques de una cadena de ejecución de un procesador o núcleo de procesador de acuerdo con una forma de realización de la invención. Con referencia a la Figura 2, el procesador 100 puede representar cualquier tipo de aparatos de procesamiento de instrucciones. Por ejemplo, el procesador 100 puede ser un procesador de propósito general. El procesador 100 puede ser cualquiera de varios procesadores de computación de conjuntos de instrucciones complejas (CISC), varios procesadores de computación de conjuntos de instrucciones reducidas (RISC), varios procesadores de palabras de instrucciones muy largas (VLIW), varios híbridos de los mismos u otros tipos diferentes de procesadores. El procesador 100 también puede representar uno o más núcleos de procesador.
Los núcleos de procesador se pueden implementar de diferentes maneras, para diferentes propósitos y en diferentes procesadores. Por ejemplo, las implementaciones de dichos núcleos pueden incluir: 1) un núcleo en orden de propósito general destinado a la computación de propósito general; 2) un núcleo fuera de orden de propósito general de alto rendimiento destinado a la computación de propósito general; 3) un núcleo de propósito especial destinado principalmente a la computación gráfica y/o científica (capacidad de proceso). Las implementaciones de diferentes procesadores pueden incluir: 1) una unidad central de procesamiento (CPU) que incluye uno o más núcleos en orden de propósito general destinados a la computación de propósito general y/o uno o más núcleos fuera de orden de propósito general destinados a la computación de propósito general; y 2) un coprocesador que incluye uno o más núcleos de propósito especial destinados principalmente a la computación gráfica y/o científica (capacidad de proceso). Dichos diferentes procesadores dan lugar a diferentes arquitecturas de sistemas informáticos, que pueden incluir: 1) el coprocesador en un chip separado de la CPU; 2) el coprocesador en una pastilla separada en el mismo encapsulado que una CPU; 3) el coprocesador en la misma pastilla que una CPU (en cuyo caso, dicho coprocesador se denomina a veces lógica de propósito especial, tal como lógica integrada de gráficos y/o científica (capacidad de proceso), o como núcleos de propósito especial); y 4) un sistema en un chip que puede incluir en la misma pastilla la CPU descrita (lo que se denomina a veces núcleo(s) de aplicación o procesador(es) de aplicación), el coprocesador descrito anteriormente y funcionalidad adicional. A continuación se describen arquitecturas de núcleo ejemplares, seguidas de descripciones de procesadores y arquitecturas informáticas ejemplares.
En una forma de realización, el procesador 100 incluye, pero no se limita a, un decodificador de instrucciones 101 y una o más unidades de ejecución 102. El decodificador de instrucciones 101 recibirá y decodificará instrucciones 103 de una unidad de extracción de instrucciones (no mostrada). El decodificador de instrucciones 102 puede generar y proporcionar una o más microoperaciones, microcódigos, puntos de entrada, microinstrucciones, otras instrucciones u otras señales de control, que reflejan, o se obtiene de, las instrucciones. El decodificador de instrucciones 102 se puede implementar usando varios mecanismos diferentes. Ejemplos de mecanismos adecuados incluyen, pero sin limitarse a, memorias de solo lectura (ROM) de microcódigo, tablas de consulta, implementaciones en hardware, matrices lógicas programables (PLA) y similares.
Las unidades de ejecución 102 pueden incluir una unidad lógica aritmética u otro tipo de unidad lógica capaz de realizar operaciones basadas en instrucciones. Como resultado de que el decodificador de instrucciones 102 decodifique las instrucciones, la unidad de ejecución 102 puede recibir una o más microoperaciones, puntos de entrada de microcódigo, microinstrucciones, otras instrucciones u otras señales de control, que reflejan, o se obtienen de, las instrucciones. La unidad de ejecución 102 puede hacerse funcionar como resultado de instrucciones que indican uno o más operandos de origen (SRC) y para almacenar un resultado en uno o más operandos de destino (DEST) de un conjunto de registros indicado por las instrucciones. La unidad de ejecución 102 puede incluir circuitos u otra lógica de ejecución (por ejemplo, software combinado con hardware y/o firmware) que puede hacerse funcionar para ejecutar instrucciones u otras señales de control obtenidas a partir de las instrucciones y realizar una operación en consecuencia. La unidad de ejecución 102 puede representar cualquier tipo de unidades de ejecución tales como unidades lógicas, unidades lógicas aritméticas (ALU), unidades aritméticas, unidades de enteros, etc.
Algunos o todos los operandos de origen y de destino pueden almacenarse en registros de un conjunto de registros o memoria. El conjunto de registros puede ser parte de un archivo de registros, junto con, posiblemente, otros registros, tales como registros de estados, registros de banderas, etc. Un registro puede ser una ubicación o dispositivo de almacenamiento que se puede utilizar para almacenar datos. Con frecuencia, el conjunto de registros puede estar ubicado físicamente en una pastilla con la(s) unidad(es) de ejecución. Los registros pueden ser visibles desde el exterior del procesador o desde la perspectiva de un programador. Por ejemplo, las instrucciones pueden especificar operandos almacenados en los registros. Varios tipos diferentes de registros son adecuados, siempre que sean capaces de almacenar y proporcionar datos como se describe en el presente documento. Los registros pueden renombrarse o no. Ejemplos de registros adecuados incluyen, pero sin limitarse a, registros físicos dedicados, registros físicos asignados dinámicamente usando el cambio de nombre de registros, combinaciones de registros físicos dedicados y asignados dinámicamente, etc. De forma alternativa, uno o más de los operandos de origen y de destino pueden almacenarse en una ubicación de almacenamiento que no sea un registro, tal como, por ejemplo, una ubicación en memoria de sistema.
Con referencia a la Figura 2, de acuerdo con una forma de realización, la unidad de ejecución 102 incluye una o más unidades de SHA-2 106 para, en respuesta a una primera instrucción recibida y proporcionada por el decodificador de instrucciones 101, realizar una o más rondas de operaciones de ronda de SHA-2 usando datos 110 tales como estados A a H de SHA-2, entradas de mensaje (w) y constantes correspondientes Wt y Kt almacenadas en uno o más registros 104. La una o más rondas de operaciones de ronda de SHA-2 se realizan en respuesta a una única instrucción como una instrucción de tipo "única instrucción, múltiples datos" (SIMD). El número de rondas de operaciones de ronda de SHA-2 depende del diseño o configuración específicos (por ejemplo, requisito de latencia de cadena de procesamiento) de la cadena de procesamiento de procesador, que se puede configurar a un número apropiado que optimizará el rendimiento general de la cadena de procesamiento de procesador. A efectos ilustrativos, se supone que dos rondas de operaciones de ronda de SHA-2 se realizan en un solo ciclo de SIMD. Se apreciará que también se pueden realizar más o menos rondas de operaciones de ronda de SHA-2 en un solo ciclo de SIMD, siempre que estén disponibles los recursos necesarios, tales como registros o memoria con tamaños adecuados.
De acuerdo con una forma de realización, la una o más rondas de operaciones de ronda de SHA-2 se realizan en respuesta a una única instrucción como una instrucción de tipo "única instrucción, múltiples datos" (SIMD). En una forma de realización, la primera instrucción incluye dos operandos. El primer operando representa un registro de origen/destino para almacenar un estado actual de SHA-2 como entrada y un estado siguiente de SHA-2 como resultado de la una o más operaciones de ronda de SHA-2. El segundo operando representa un registro/memoria para almacenar múltiples entradas de mensaje y constantes rellenadas para las operaciones de ronda. Después de que se hayan realizado las operaciones de ronda de SHA-2, los estados de SHA-2 se actualizan y se almacenan de nuevo en el registro especificado por el primer operando. En una forma de realización, una o más rondas de operaciones de ronda de SHA-2 se realizan en respuesta a una única instrucción de SIMD, donde los registros involucrados tienen al menos 256 bits para almacenar las variables de estado de SHA-2 y entradas de mensaje para operaciones de ronda de SHA-256 (y 512 bits para operaciones de ronda de SHA-512).
De acuerdo con otra forma de realización, en respuesta a una segunda instrucción, la unidad de SHA-2 106 está configurada para realizar operaciones de planificación de mensajes de SHA-2 para producir múltiples entradas de mensajes para el siguiente ciclo (por ejemplo, una o más rondas de operaciones de ronda de SHA-2 en un siguiente ciclo de instrucciones SIMD). En una forma de realización, puede haber dos instrucciones necesarias para preparar las entradas de mensaje para el siguiente ciclo de SIMD dependiendo del diseño o configuración específicos de la cadena de procesamiento de procesador. Al soportar al menos dos rondas de operaciones de ronda de SHA-2 en un solo ciclo de SIMD, la primera instrucción incluye tres operandos para almacenar al menos 8 entradas de mensaje anteriores y, después de que se ejecute la primera instrucción, se genera un resultado intermedio y se devuelve en un registro especificado en uno de los operandos. La segunda instrucción toma el resultado intermedio generado a partir de la primera instrucción como entrada en un operando. Otro operando de la segunda instrucción especifica al menos otras 8 entradas de mensaje anteriores (por ejemplo, un total de 16 entradas de mensaje combinadas). El resultado final representa 4 entradas de mensaje para el siguiente ciclo de SIMD. En una forma de realización, los registros involucrados en las operaciones de planificación de mensajes tienen al menos 128 bits.
De acuerdo con algunas formas de realización, las formas de realización de la invención incluyen una nueva ruta de instrucciones y datos que utiliza un registro SIMD YMM, que tiene 256 bits y es compatible con un procesador AVX de Intel Corporation de Santa Clara, California, como un operando de origen/destino para los 256 bits de estado de SHA-256. Se pueden utilizar registros más amplios (por ejemplo, registros de 512 bits o más amplios) para realizar operaciones de ronda de SHA-2 de más bits, tales como operaciones de ronda de SHA-512. A lo largo de esta solicitud, SHA-256 de la norma SHA-2 se describe a efectos ilustrativos; sin embargo, también se pueden aplicar otras operaciones, tales como SHA-512 de la norma SHA-2.
De acuerdo con una forma de realización, las operaciones de SHA224/256 se pueden mejorar usando una nueva instrucción que calcula dos rondas con latencia de 3 ciclos (por ejemplo, cadena de procesamiento de 3 ciclos). Las ocho variables de estado de 32 bits A a H se almacenan en un registro de 256 bits, tal como un registro YMM del procesador Intel AVX. Una nueva instrucción para realizar al menos dos rondas de operaciones de ronda de SHA-256 en un único ciclo de SIMD se denomina en el presente documento instrucción SHA256RNDS2 (por ejemplo, 2 rondas SHA-256). La instrucción SHA256RNDS2 utiliza un primer registro de 256 bits (por ejemplo, primer registro YMM) para contener las variables de estado (por ejemplo, estados A a H de SHA-2) como un registro de origen/destino, más un segundo registro de 256 bits (por ejemplo, segundo registro YMM) que contiene dos entradas de mensaje precalculadas más valores constantes de ronda. Con el fin de obtener entradas de mensaje y añadir las constantes de ronda antes de las iteraciones de ronda de SHA-256, de acuerdo con una forma de realización, se implementan dos instrucciones de planificación de mensajes, denominadas en el presente documento instrucciones MSG1SHA256 y MSG2SHA256, para acelerar la función de planificación compleja que consiste en rotaciones, desplazamientos, XOR y tres sumas de propagación de acarreo de 32 bits.
En una forma de realización, la instrucción SHA256RNDS2 requiere 3 ciclos para leer las entradas de estado y de mensaje K de los registros YMM para realizar 2 rondas de SHA-256 y para escribir el estado actualizado en el registro YMM de origen/destino. Con una latencia de 3 ciclos para 2 rondas de SHA 256, la tasa de rendimiento es de 2/3 de una ronda por ciclo, o 96 ciclos para cada bloque de 512 bits que requiere 64 rondas de procesamiento. Las entradas de mensaje w[i] para las rondas 1 a 16 se suministran desde 4 particiones de octetos del bloque de datos de 64 octetos al que se aplica una función hash. W[i] para las rondas 17 a 64 se obtiene de los 64 octetos/16 palabras de datos de entrada con un planificador de mensajes complejo que requiere 4 rotaciones, 2 desplazamientos, 4 XOR y 4 sumas de propagación de acarreo para cada ronda. Las operaciones se pueden definir de la siguiente manera:
para
Figure imgf000007_0001
donde la función s0 se puede definir como:
sO(x) - (x ROTR 7) XOR (x ROTR 18) XOR (x SHR 3)
y donde la función s1 se puede definir como:
sl(x) = (x ROTR 17) XOR (x ROTR 19) XOR (x SHR 10)
En una forma de realización, el formato de la instrucción SHA256RNDS2 se puede definir de la siguiente manera:
SHA256RNDS2, YMM1, YMM2/m256
donde YMM1 es el registro de origen/destino para almacenar variables de estado A, B, C, D, E, F, G y H de SHA-256. La instrucción SHA256RNDS2 actualiza el registro YMM1 de destino con el nuevo estado resultante después de 2 rondas de iteraciones de SHA256. YMM2 es un registro de origen con 2 nuevas entradas de mensaje y constantes de ronda sumadas previamente. La entrada kw0 para la ronda 0 se almacena en el registro YMM2[31:00] y la entrada kw1 para la ronda 1 se almacena en el registro YMM2[63:32], como se muestra en la Figura 3. Cabe señalar que con referencia a la Figura 3, en este ejemplo, la unidad de SHA-2 106 calcula dos rondas de operaciones de ronda de SHA-256 en estados de SHA-2 301 y una de las KW almacenadas en el registro 302, que genera siguientes estados de SHA-2 303. Los siguientes estados de SHA-2303 pueden almacenarse en el registro de origen/destino 301. Dado que el registro 302, en este ejemplo, que tiene al menos 128 bits, puede almacenar más KW, también se puede realizar una ronda adicional de operaciones de ronda de SHA-2. Asimismo, si el registro 302 tiene 256 bits o 512 bits, se pueden realizar más rondas, siempre que se pueda satisfacer la latencia de cadena de procesamiento.
En una forma de realización, el registro YMM1 se puede definir de la siguiente manera:
A= YMM[255:224]
B= YMM[223:192]
C= YMM[191: 160]
D= YMM[159:128]
E= YMM[127: 96]
F= YMM[95: 64]
G= YMM[63: 32]
H= YMM[31: 00]
donde las variables de estado A, B, C, D, E, F, G y H (para la ronda n) ^ variables de estado A, B, C, D, E, F, G y H (para la ronda n-2) escalonadas para 2 rondas de SHA-256.
Para mantener el ritmo con la instrucción SHA256RNDS2, de acuerdo con una forma de realización, se proporcionan dos instrucciones especializadas que realizan la planificación de mensajes de SHA-256, denominadas en el presente documento instrucciones MSG1SHA256 y MSG2SHA256. En una forma de realización, para una ronda actual i de operaciones de ronda de SHA-256, la instrucción MSG1SHA256 es calcular cuatro mensajes intermedios en función de mensajes calculados anteriores de la siguiente manera:
WordO - s0(w[i-15]) w[i-16]
Wordl - s0(w[i-14]) w[i-15]
Word2 = s0(w[i-13])+w[i-14]
Word3 - s0(w[i-12]) w[i-13]
En una forma de realización, para una ronda actual i de operaciones de ronda SHA-256, la instrucción MSG2SHA256 calcula cuatro mensajes para la siguiente iteración en función de los mensajes calculados anteriores y los mensajes intermedios producidos por la instrucción MSG2SHA256 de la siguiente manera:
w[i] = WordOMsgl sl(w[i-2]) w[i-7]
w[i+l] = W ordlMsgl sl(w[i-l]) w[i-6]
w[i+2] = Word2Msgl sl(w[i]) w[i-5]
w[i+3] = Word3Msgl sl(w[i+l]) w[i-4]
donde Word0Msg1, Word1Msg1, Word2Msg1 y Word3Msg1 se producen mediante la instrucción MSG1SHA256 (por ejemplo, correspondiente a Word0, Word1, Word2 y Word 3 anteriores), por ejemplo, en otra fase de cadena de procesamiento.
Cabe señalar que w[i+2] y w[i+3] se calculan en función de w[i] y w[i+1] mediante la instrucción MSG2SHA256. Por lo tanto, w[i+2] y w[i+3] no se pueden calcular antes de completar el cálculo de w[i] y w[i+1]. Si esto hace que el tiempo total requerido para calcular w[i+2] y w[i+3] exceda el tiempo asignado para una cadena de procesamiento con una única instrucción SIMD, entonces las instrucciones MSG2SHA256 se pueden dividir en dos instrucciones distintas, es decir, MSG2ASHA256 y MSG2BSHA256. La instrucción MSG2ASHA256 calculará w[i] y w[i+1], mientras que MSG2BSHA256 calculará w[i+2] y w[i+3].
En una forma de realización, la instrucción MSG1SHA256 se puede definir de la siguiente manera:
MSG1SHA256 XMMO, XMM1, XMM2
donde los registros XMMO, XMM1 y XMM2 representan registros que tienen al menos 128 bits, tales como los registros XMM disponibles gracias a la familia de procesadores Intel AVX. La instrucción MSG1SHA256 realiza un cálculo intermedio para las siguientes cuatro entradas de mensaje SHA256. El SHA-256 planifica la entrada de mensaje w para las rondas 16 a 63 de la siguiente manera:
w[i] := w[i-16] sO(w[i-15]) w[i-7] sl(w[i-2])
En una forma de realización, la entrada XMM2 representa los mensajes w(i-13), w(i-14), w(i-15) y w(i-16). Una forma de realización del formato de XMM2 se puede definir de la siguiente manera:
XMM2[ 127:96] =w(i-13)
XMM2[ 95:64] =w(i-14)
XMM2[ 63:32] =w(i-15)
XMM2[ 31:00] =w(i-16)
La entrada XMM1 representa los mensajes w(i-9), w(i-10), w(i-11) y w(i-12). Una forma de realización del formato de XMM2 se puede definir de la siguiente manera:
XMM1 [127:96] =w(i-9)
XMM 1[ 95:64] = w(i-10)
XMM1[ 63:32] = w(i-ll)
XMM1[ 31:00] =w(i-12)
La salida XMM0 representa w(i-13) s0(w(i-12)), w(i-14) s0(w(i-13)), w(i-15) s0(w(i-14)) y w(i-16) s0(w(i-15)). Una forma de realización del formato de XMM0 se puede definir de la siguiente manera:
XMM0[127:96] = w(i-13) s0(w[i-12])
XMM0[ 95:64] = w(¡-14) s0(w[i-13])
XMM0[ 63:32] = w(¡-15) s0(w[i-14])
XMM0[ 31:00] = w(i-16) s0(w[i-15])
donde XMM0[127:96] representa Msg 1 (i-13) para determinar w(i+3); XMM0[95:64] representa Msg 1 (i-14) para determinar w(i+2); XMM0[63:32] representa Msg1 (i-15) para determinar w(i+1); y XMM0[31:00] representa Msg1 (i-16) para determinar w(i).
En una forma de realización, la instrucción MSG2SHA256 se puede definir de la siguiente manera:
MSG2SHA256 XMMO, XMM1, XMM2
donde los registros XMMO, XMM1 y XMM2 representan registros que tienen al menos 128 bits, tales como los registros XMM disponibles gracias a la familia de procesadores Intel AVX. La instrucción MSG2SHA256 realiza el cálculo para las cuatro siguientes entradas de mensaje de SHA-256 usando el registro de resultados XMM de la instrucción MSG1SHA256 calculada previamente que contiene los valores msg1 para w(i-13) a w(i-16), el registro XMM que contiene las entradas de mensaje w(i-5) a w(i-8) y el registro XMM que contiene las entradas de mensaje w(i-1) a w(-4).
En una forma de realización, SHA-256 planifica la entrada de mensaje w para las rondas 16 a 63 de la siguiente manera:
w[i] :=w[i-16] s0(w[i-15]) w[i-7] sl(w[i-2])
w[Í+l] := msgl[i-15]+ w[i-6] sl(w (i-l))
donde el resultado intermedio msg[i-15] se produjo mediante la instrucción MSG1SHA256, por ejemplo, en otra fase de cadena de procesamiento. Los mensajes w(i) y w(i+1) se utilizan para completar el cálculo de w(i+2) y w(i+3), por ejemplo, con un retardo intermedio, de la siguiente manera:
w[i+3] := msgl[i-13]+ w[i-4] sl(w(i+l))
w[i+2] := msgi[i-14]+ w[i-5] sl(w(i))
donde los resultados intermedios msg[i-13] y msg[i-14] se produjeron mediante la instrucción MSG1SHA256, por ejemplo, en otra fase de cadena de procesamiento.
En una forma de realización, las entradas de la instrucción MSG2SHA256 incluyen tres registros con al menos 128 bits, tales como registros XMM de la familia de procesadores Intel AVX. En una forma de realización, para una ronda actual i de operaciones de ronda de SHA-256, la entrada XMM2 representa los mensajes w(i-5), w(i-6), w(i-7) y w(i-8) de la siguiente manera:
XMM2[ 127:96] =w(i-5)
XMM2[ 95:64] =w(i-6)
XMM2[ 63:32] =w(i-7)
XMM2[ 31:00] =w(i-8)
En una forma de realización, para una ronda actual i de operaciones de ronda de SHA-256, la entrada XMM1 representa los mensajes w(i-1), w(i-2), w(i-3) y w(i-4) de la siguiente manera:
XMMl [127:96] =wfi-l)
XMM1[ 95:64] =w(i-2)
XMMl [63:32] =w(i-3)
XMMl [31:00] =w(i-4)
En una forma de realización, para una ronda actual i de operaciones de ronda de SHA-256, la entrada XMM0 representa los mensajes intermedios Msg1 (i-13), Msg 1 (i-14), Msg1 (i-15) y Msg 1 (i-16), producidos por la instrucción MSG1SHA256, de la siguiente manera:
XMM0[ 127:96] = wfi-13) AND s0(wi-12)
XMM0[ 95:64] =w(i-14)AND s0(wi-13)
XMM0[ 63:32] = w(i-15)AND s0(wi-14)
XMM0[ 31:00] =w(i-16) AND s0(wi-15)
En una forma de realización, para una ronda actual i de operaciones de ronda de SHA-256, la salida XMM0 representa los mensajes w(i+3), w(i+2), w(i+1) y w de la siguiente manera:
XMM0[127;96] =w(i+3)
XMM0[ 95:64] =w(i+2)
XMM0[ 63:32] =w(i+l)
XMM0[ 31:00] =w(i)
La Figura 4 es un diagrama de bloques que ilustra un proceso para operaciones de una ronda de SHA-256 de acuerdo con una forma de realización. Con referencia a la Figura 4, una forma de realización del proceso se puede definir con al menos tres fases de cadena de procesamiento 401-403 de un procesador o núcleo de procesador. Cabe señalar que las fases de proceso de canalización 401-403 pueden ser, o no, fases consecutivas de cadena de procesamiento dependiendo del diseño o configuración específicos del procesador. El microcódigo MSG1SHA256404, el microcódigo MSG2SHA256 405 y el microcódigo SHA256RNDS2 406 se pueden implementar como parte de la unidad de SHA-2 106 de la Figura 1.
De acuerdo con una forma de realización, en respuesta a la instrucción MSG1SHA256, el microcódigo MSG1SHA256 404 debe realizar una primera parte de las operaciones de planificación de mensajes de SHA-256 descritas anteriormente. Para una ronda dada i de operaciones de ronda de SHA-256, durante la fase de cadena de procesamiento 401, el microcódigo MSG1SHA256 404 debe realizar la primera parte de las operaciones de planificación de mensajes en mensajes 407-408 generados previamente y generar el mensaje intermedio 409.
De acuerdo con una forma de realización, en respuesta a la instrucción MSG2SHA256, el microcódigo MSG2SHA256 405 debe realizar una segunda parte de las operaciones de planificación de mensajes SHA-256 descritas anteriormente. Para una ronda dada i de operaciones de ronda de SHA-256, durante la fase de cadena de procesamiento 402, el microcódigo MSG2SHA256 405 debe realizar la segunda parte de las operaciones de planificación de mensajes en mensajes 410-411 generados previamente y el mensaje intermedio 409, y generar el mensaje 412.
De acuerdo con una forma de realización, en respuesta a la instrucción SHA256RNDS2, el microcódigo SHA256RNDS2406 debe realizar una ronda de operaciones de ronda de SHA-256 descritas anteriormente. Para una ronda dada i de operaciones de ronda de SHA-256, durante la fase de cadena de procesamiento 403, el microcódigo SHA256RNDS2 406 debe realizar una operación de ronda en mensajes 412 y estados de SHA-256 actuales 413, y generar estados de SHA-256414 para la siguiente ronda o iteración. Cabe señalar que, en este ejemplo, cada uno de w(i+3), w(i+2), w(i+1) y w(i) almacenados en el registro 412 tiene 32 bits. Se puede utilizar para realizar al menos dos rondas de operaciones de ronda SHA-256. Si el registro 412 puede almacenar más entradas de mensajes, también se pueden realizar más rondas de operaciones de ronda de SHA-256, siempre que se pueda satisfacer el requisito de latencia de cadena de procesamiento.
La Figura 5 es un diagrama de flujo que ilustra un procedimiento para realizar operaciones de una ronda de SHA-2 de acuerdo con una forma de realización. El procedimiento 500 se puede realizar mediante la unidad de SHA-2 106 de la Figura 1. Con referencia a la Figura 5, en el bloque 501, se recibe una instrucción (por ejemplo, SHA256RNDS2), donde la instrucción incluye un primer operando (por ejemplo, YMM1) y un segundo operando (por ejemplo, YMM2). En el bloque 502, se extraen estados de SHA-2 (por ejemplo, estados A a H) del primer operando y se extrae al menos una entrada de mensaje (por ejemplo, al menos una KW) del segundo operando. En el bloque 503, se realiza al menos una ronda de operaciones de ronda de SHA-2 (por ejemplo, ronda de SHA-256) en los estados de SHA-2 y la entrada de mensaje de acuerdo con la especificación de SHA-2. En el bloque 504, los estados de SHA-2 se actualizan en un registro especificado por el primer operando en base a un resultado de la al menos una ronda de operaciones de ronda de SHA-2.
La Figura 6 es un diagrama de flujo que ilustra un procedimiento para realizar operaciones de planificación de mensajes de SHA-2 de acuerdo con una forma de realización. El procedimiento 600 se puede realizar mediante la unidad de SHA-2 106 de la Figura 1 como una primera parte de las operaciones de planificación de mensajes de SHA-2. Con referencia a la Figura 6, en el bloque 601, se recibe una instrucción (por ejemplo, MSG1SHA256), donde la instrucción incluye tres operandos (por ejemplo, XMMO, XMM1, XMM2), donde cada uno identifica un registro con al menos 128 bits. En el bloque 602, se extraen múltiples entradas de mensaje (por ejemplo, 8 entradas) del segundo y tercer operandos (por ejemplo, XMM1 y XMM2). En el bloque 603, se realiza una primera parte de las operaciones de planificación de mensajes de SHA-2 en función de las entradas de mensaje. En el bloque 604, se genera un resultado intermedio y se almacena en un registro asociado al primer operando (por ejemplo, XMMO).
La Figura 7 es un diagrama de flujo que ilustra un procedimiento para realizar operaciones de planificación de mensajes de SHA-2 de acuerdo con una forma de realización. El procedimiento 700 se puede realizar mediante la unidad de SHA-2 106 de la Figura 1 como una segunda parte de las operaciones de planificación de mensajes. Con referencia a la Figura 7, en el bloque 701, se recibe una instrucción (por ejemplo, MSG2SHA256), donde la instrucción incluye tres operandos (por ejemplo, XMMO, XMM1, XMM2), donde cada uno identifica un registro con al menos 128 bits. En el bloque 702, se obtiene un resultado intermedio de una primera parte de las operaciones de planificación de SHA-2 a partir del primer operando (por ejemplo, XMMO) y se obtienen múltiples entradas de mensaje a partir del segundo y tercer operandos (por ejemplo, XMM1 y XMM2). En el bloque 703, se realiza una segunda parte de las operaciones de planificación de mensajes de SHA-2 en función del resultado intermedio y las entradas de mensaje. En el bloque 704, se genera un resultado final de las operaciones de planificación de mensajes de SHA-2 y se almacena en un registro asociado al primer operando (por ejemplo, XMMO).
Las Figuras 8A-8C son un pseudocódigo que ilustra un proceso de operaciones de una ronda de SHA-256 de acuerdo con una forma de realización. Con referencia a las Figuras 8A-8C, en este ejemplo, se utilizan registros YMM que tienen 256 bits para almacenar las entradas de mensaje, donde cada entrada de mensaje incluye 32 bits. Un registro YMM puede almacenar al menos cuatro (hasta ocho) entradas de mensaje, donde cada entrada de mensaje tiene 32 bits. Como resultado, para cada iteración, se pueden realizar al menos cuatro rondas de SHA-256 mediante dos instrucciones SHA256RNDS2, por ejemplo, como se muestra en las líneas 801 y 802 de la Figura 8A. Cabe destacar que los registros XMM funcionan para calcular cuatro términos de mensaje en paralelo. Si los registros YMM se utilizan para 4 términos a la vez, los 128 bits superiores no se utilizan. Para calcular 8 términos de mensaje, MSG1 con un registro YMM funciona bien, pero MSG2 puede dividirse en 2 o 4 instrucciones. Tal como se describió anteriormente, también se pueden realizar un número mayor o menor de rondas en cada iteración, dependiendo de la configuración específica del procesador o núcleo de procesador.
Un ejemplo de formas de realización de la invención incluye un procesador que tiene un decodificador de instrucciones para recibir una primera instrucción para procesar un algoritmo hash seguro 2 (SHA-2), donde la primera instrucción tiene un primer operando para almacenar un estado de SHA-2 y un segundo operando para almacenar una pluralidad de mensajes y constantes de ronda; y una unidad de ejecución acoplada al decodificador de instrucciones, en respuesta a la primera instrucción, para realizar una o más rondas del algoritmo hash SHA-2 en el estado de SHA-2 especificado en el primer operando y la pluralidad de mensajes y constantes de ronda especificadas en el segundo operando. El primer operando especifica un primer registro que tiene al menos 256 bits o 512 bits para almacenar datos de variables de estado de SHA-2 para realizar operaciones de ronda de SHA-256 u operaciones de ronda de SHA-512, respectivamente. El segundo operando especifica un segundo registro o una ubicación de memoria que tiene al menos 64 bits o 128 bits para almacenar al menos dos mensajes y constantes de ronda para las operaciones de ronda de SHA-256 u operaciones de ronda de SHA-512, respectivamente. Al menos dos rondas del algoritmo SHA-2 se realizan en respuesta a la primera instrucción como una instrucción de tipo "única instrucción, múltiples datos" (SIMD). El decodificador de instrucciones recibe una segunda instrucción, y en donde en respuesta a la segunda instrucción, la unidad de ejecución está configurada para realizar una primera parte de las operaciones de planificación de mensajes en función de una pluralidad de primeros mensajes previos especificados por la segunda instrucción, generando un resultado intermedio. La segunda instrucción incluye un tercer operando, un cuarto operando y un quinto operando. Para una ronda actual i de operaciones de ronda de SHA-2, el tercer operando especifica un registro para almacenar mensajes w(i-13), w(i-14), w(i-15) y w(i-16). El cuarto operando especifica un registro para almacenar mensajes w(i-9), w(i-10), w(i-11) y w(i-12). El resultado intermedio se almacena en un registro especificado por el quinto operando. El resultado intermedio comprende w(i-3) s0(w(i-12)), w(i-14) s0(w(i-13)), w(i-15) s0(w(i-14)), w(i-16) s0(w(i-15)), donde la función s0(x) está representada por s0(x) = (x Ro TR 7) XOR (x Ro Tr 18) XOR (x ROTR 3). El decodificador de instrucciones recibe una tercera instrucción, donde en respuesta a la tercera instrucción, la unidad de ejecución está configurada para realizar una segunda parte de las operaciones de planificación de mensajes en segundos mensajes anteriores y el resultado intermedio especificado en la tercera instrucción, generando siguientes mensajes de entrada para una o más operaciones de ronda del algoritmo SHA-2 que se realizarán durante una siguiente iteración de una o más rondas del algoritmo SHA-2. La tercera instrucción incluye un sexto operando, un séptimo operando y un octavo operando, donde para una ronda actual i de operaciones de ronda de SHA-2, el sexto operando especifica un registro para almacenar mensajes w(i-5), w(i-6), w(i-7) y w(i-8). El séptimo operando especifica un registro para almacenar mensajes w(i-1), w(i-2), w(i-3) y w(i-4). Los siguientes mensajes de entrada comprenden w(i), w(i+1), w(i+2) y w(i+3), que se almacenarán en un registro especificado por el octavo operando.
Un ejemplo de formas de realización de la invención incluye un procedimiento, que incluye recibir, en un decodificador de instrucciones, una primera instrucción para procesar un algoritmo hash seguro 2 (SHA-2), donde la primera instrucción tiene un primer operando para almacenar un estado de SHA-2 y un segundo operando para almacenar una pluralidad de mensajes y constantes de ronda; y realizar, mediante una unidad de ejecución acoplada al decodificador de instrucciones en respuesta a la primera instrucción, una o más rondas del algoritmo hash SHA-2 en el estado de SHA-2 especificado en el primer operando y la pluralidad de mensajes y constantes de ronda especificadas en el segundo operando. El primer operando especifica un primer registro que tiene al menos 256 bits o 512 bits para almacenar datos de variables de estado de SHA-2 para realizar operaciones de ronda de SHA-256 u operaciones de ronda de SHA-512, respectivamente. El segundo operando especifica un segundo registro o una ubicación de memoria que tiene al menos 64 bits o 128 bits para almacenar al menos dos mensajes y constantes de ronda para las operaciones de ronda de SHA-256 u operaciones de ronda de SHA-512, respectivamente. Al menos dos rondas del algoritmo SHA-2 se realizan en respuesta a la primera instrucción como una instrucción de tipo "única instrucción, múltiples datos" (SIMD). El procedimiento incluye además recibir, mediante el decodificador de instrucciones, una segunda instrucción que tiene un tercer operando, un cuarto operando y un quinto operando; en respuesta a la segunda instrucción, realizar, mediante la unidad de ejecución, una primera parte de operaciones de planificación de mensajes en función de una pluralidad de primeros mensajes anteriores especificados por la segunda instrucción; y generar un resultado intermedio. Para una ronda actual i de operaciones de ronda de SHA-2, el tercer operando especifica un registro para almacenar mensajes w(i-13), w(i-14), w(i-15) y w(i-16), donde el cuarto operando especifica un registro para almacenar mensajes w(i-9), w(i-10), w(i-11) y w(i-12), y donde el resultado intermedio se almacena en un registro especificado por el quinto operando. El resultado intermedio comprende w(i-3) s0(w(i-12)), w(i-14) s0(w(i-13)), w(i-15) s0(w(i-14)), w(i-16) s0(w(i-15)), donde la función s0(x) está representada por s0(x) = (x ROTR 7) XOR (x ROTR 18) x Or (x Ro t R 3). El procedimiento incluye además recibir, mediante el decodificador de instrucciones, una tercera instrucción que tiene un sexto operando, un séptimo operando y un octavo operando; en respuesta a la tercera instrucción, realizar, mediante la ejecución, una segunda parte de las operaciones de planificación de mensajes en segundos mensajes anteriores y el resultado intermedio especificado en la tercera instrucción; y generar siguientes mensajes de entrada para una o más operaciones de ronda del algoritmo SHA-2 que se realizarán durante una siguiente iteración de una o más rondas del algoritmo SHA-2. Para una ronda actual i de operaciones de ronda de SHA-2, el sexto operando especifica un registro para almacenar mensajes w(i-5), w(i-6), w(i-7) y w(i-8), donde el séptimo operando especifica un registro para almacenar mensajes w(i-1), w(i-2), w(i-3) y w(i-4), y donde los siguientes mensajes de entrada comprenden w(i), w(i+1), w(i+2) y w(i+3), que se almacenan en un registro especificado por el octavo operando. Un ejemplo de formas de realización de la invención incluye además un sistema de procesamiento de datos que tiene una interconexión, un procesador acoplado a la interconexión para realizar un procedimiento establecido anteriormente y una memoria de acceso aleatorio dinámica (DRAM) acoplada a la interconexión.
Un conjunto de instrucciones, o arquitectura de conjunto de instrucciones (ISA), es la parte de la arquitectura informática relacionada con la programación, y puede incluir los tipos de datos nativos, instrucciones, arquitectura de registro, modos de direccionamiento, arquitectura de memoria, manejo de interrupciones y excepciones, y entrada y salida (E/S) externas. En el presente documento, el término "instrucción" se refiere, en general, a macroinstrucciones, es decir, instrucciones que se proporcionan al procesador (o convertidor de instrucciones que traduce (por ejemplo, mediante el uso de traducción binaria estática, traducción binaria dinámica que incluye compilación dinámica), transforma, emula o convierte de otro modo una instrucción en una o más instrucciones adicionales para ser procesadas por el procesador) para su ejecución, en oposición a microinstrucciones o microoperaciones (micro-ops), que es el resultado de un decodificador del procesador que decodificado macroinstrucciones.
La ISA es diferente de la microarquitectura, que es el diseño interno del procesador que implementa 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 de 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 recientes), pero tienen diferentes diseños internos. Por ejemplo, la misma arquitectura de registro de la ISA se puede implementar de diferentes maneras en diferentes microarquitecturas usando técnicas ampliamente conocidas, que incluyen registros físicos dedicados, uno o más registros físicos asignados dinámicamente usando un mecanismo de cambio de nombre de registros (por ejemplo, el uso de una tabla de alias de registro (RAT), una memoria intermedia de reordenamiento (ROB) y un archivo de registros de retirada, el uso de múltiples mapas y un conjunto de registros), etc. A menos que se especifique lo contrario, la arquitectura de registro de expresiones, el archivo de registros y el registro se utilizan en el presente documento para hacer referencia a lo que es visible para el software/programador y a la manera en que las instrucciones especifican los registros. Cuando se desea una especificidad, el adjetivo lógico, de arquitectura o visible para el software se utilizará para indicar registros/archivos en la arquitectura de registros, mientras que se utilizarán diferentes adjetivos para designar registros en una microarquitectura dada (por ejemplo, registro físico, memoria intermedia de reordenamiento, registro de retirada, grupo de registros).
Un conjunto de instrucciones incluye uno o más formatos de instrucciones. Un formato de instrucción dado define varios campos (número de bits, ubicación de bits) para especificar, entre otras cosas, la operación a realizar (opcode) y el/los operando(s) en el/los que se debe realizar esa operación. Algunos formatos de instrucciones se desglosan aún más a través de la definición de plantillas de instrucciones (o subformatos). Por ejemplo, las plantillas de instrucciones de un formato de instrucción dado se pueden definir para que tengan diferentes subconjuntos de los campos del formato de instrucción (los campos incluidos generalmente están en el mismo orden, pero al menos algunos tienen diferentes posiciones de bits porque hay menos campos incluidos) y/o se definen para que un campo dado se interprete de manera diferente. Por lo tanto, cada instrucción de una ISA se expresa utilizando un formato de instrucción dado (y, si está definida, en una plantilla dada de las plantillas de instrucciones de ese formato de instrucción) e incluye campos para especificar la operación y los operandos. Por ejemplo, una instrucción ADD ejemplar tiene un opcode específico y un formato de instrucción que incluye un campo de opcode para especificar ese opcode y campos de operando para seleccionar operandos (fuente 1/destino y fuente 2); y una aparición de esta instrucción ADD en un flujo de instrucciones tendrá contenido específico en los campos de operando que seleccionan operandos específicos.
Las aplicaciones científicas, financieras, de propósito general autovectorizado, RMS (reconocimiento, minería y síntesis) y 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 un gran número de elementos de datos (lo que se denomina "paralelismo de datos"). La expresión "única instrucción, múltiples datos (SIMD)" se refiere a un tipo de instrucción que hace que un procesador realice una operación en múltiples elementos de datos. La tecnología SIMD es especialmente adecuada para procesadores que pueden dividir de forma lógica los bits de un registro en una pluralidad de elementos de datos de tamaño fijo, cada uno de los cuales representa un valor diferente. Por ejemplo, los bits en un registro de 256 bits se pueden especificar como un operando de origen que se operará como cuatro elementos distintos de datos empaquetados de 64 bits (elementos de datos con un tamaño de cuatro palabras (Q)), ocho elementos distintos de datos empaquetados de 32 bits (elementos de datos con un tamaño de palabra doble (D)), dieciséis elementos distintos de datos empaquetados de 16 bits (elementos de datos con un tamaño de palabra (W)), o treinta y dos elementos distintos de datos de 8 bits (elementos de datos con un tamaño de octeto (B)). Este tipo de datos se denomina tipo de datos empaquetado o tipo de datos vectorial, y los operandos de este tipo de datos se denominan operandos de datos empaquetados u operandos vectoriales. En otras palabras, un elemento de datos empaquetados o vector se refiere a una secuencia de elementos de datos empaquetados, y un operando de datos empaquetados o un operando vectorial es un operando de origen o de destino de una instrucción SIMD (también conocida como instrucción de datos empaquetados o instrucción vectorial).
A modo de ejemplo, un tipo de instrucción SIMD especifica una única operación vectorial que se realizará en dos operandos vectoriales de origen de forma vertical para generar un operando vectorial de destino (también denominado operando vectorial 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 vectoriales de origen se denominan elementos de datos de origen, mientras que los elementos de datos en el operando vectorial de destino se denominan elementos de datos de destino o de resultado. Estos operandos vectoriales de origen son del mismo tamaño y contienen elementos de datos del mismo ancho y, por lo tanto, contienen el mismo número de elementos de datos. Los elementos de datos de origen en las mismas posiciones de bits en los dos operandos vectoriales de origen forman pares de elementos de datos (también denominados elementos de datos correspondientes; es decir, el elemento de datos en la posición de elemento de datos 0 de cada operando de origen se corresponde, el elemento de datos en la posición de elemento de datos 1 de cada operando de origen se corresponde, y así sucesivamente). La operación especificada por esa instrucción 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 dado que el operando vectorial de resultado es del 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 vectoriales de origen, donde los elementos de datos de resultado se encuentran en las mismas posiciones de bits del operando vectorial de resultado que su par correspondiente de elementos de datos de origen en los operandos vectoriales de origen. Además de este tipo ejemplar de instrucción SIMD, hay una variedad de otros tipos de instrucciones SIMD (por ejemplo, que tienen uno o tienen más de dos operandos vectoriales de origen, que operan de forma horizontal, que generan un operando vectorial de resultado que tiene un tamaño diferente, que tienen elementos de datos de diferente tamaño y/o que tienen un orden de elementos de datos diferente). Debe entenderse que el término "operando vectorial de destino" (u operando de destino) se define como el resultado directo de realizar la operación especificada por una instrucción, incluyendo 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 se pueda acceder al mismo como un operando de origen por otra instrucción (por especificación de esa misma ubicación por la otra instrucción).
La tecnología SIMD, como la empleada por los procesadores Intel® Core™ que tienen un conjunto de instrucciones que incluye instrucciones x86, MMX™, extensiones SIMD de transmisión continua (SSE), s Se2, SSE3, SSE4.1 y SSE4.2, ha permitido una mejora significativa en el rendimiento de las aplicaciones. Se ha lanzado y/o publicado un conjunto adicional de extensiones SIMD, denominado extensiones vectoriales avanzadas (AVX) (AVX1 y AVX2) y que usa el esquema de codificación extensiones vectoriales (VEX) (por ejemplo, véase el manual para desarrolladores de software de arquitecturas Intel® 64 e IA-32, octubre de 2011; y véase la referencia de programación de extensiones vectoriales avanzadas de Intel®, junio de 2011).
Las formas de realización de la(s) instrucción(es) descrita(s) en el presente documento se pueden realizar en diferentes formatos. Además, a continuación se detallan sistemas, arquitecturas y cadenas de procesamiento ejemplares. Las formas de realización de la(s) instrucción(es) pueden ejecutarse en dichos sistemas, arquitecturas y cadenas de procesamiento, pero no se limitan a las detalladas.
La codificación VEX permite que las instrucciones tengan más de dos operandos, y permite que los registros vectoriales SIMD tengan más de 128 bits. El uso de un prefijo VEX proporciona una sintaxis de tres operandos (o más). Por ejemplo, las instrucciones anteriores de dos operandos realizaron operaciones tales como A = A B, que sobrescribe un operando de origen. El uso de un prefijo VEX permite a los operandos realizar operaciones no destructivas tales como A = B C.
La Figura 9A ilustra un formato de instrucción AVX ejemplar que incluye un prefijo VEX 2102, campo de opcode real 2130, un octeto Mod R/M 2140, un octeto SIB 2150, un campo de desplazamiento 2162 e IMM8 2172. La Figura 9B ilustra qué campos de la Figura 9A conforman un campo de opcode completo 2174 y un campo de operación base 2142. La Figura 9C ilustra qué campos de la Figura 9A conforman un campo de índice de registro 2144.
El prefijo VEX (octetos 0-2) 2102 se codifica en forma de tres octetos. El primer octeto es el campo de formato 2140 (octeto 0 de VEX, bits [7:0]), que contiene un valor explícito de octeto C4 (el valor único utilizado para distinguir el formato de instrucción C4). Los segundo y tercer octetos (octetos 1 -2 de VEX) incluyen una pluralidad de campos de bits que proporcionan una capacidad específica. Específicamente, el campo REX 2105 (octeto 1 de VEX, bits [7-5]) consiste en un campo de bits VEX.R (octeto 1 de VEX, bit [7] - R), un campo de bits VEX.X (octeto 1 de VEX, bit [6] -X) y un campo de bits VEX.B (octeto 1 de VEX, bit[5] - B). Otros campos de las instrucciones codifican los tres bits inferiores de los índices de registro como se conoce en la técnica (rrr, xxx y bbb), de modo que Rrrr, Xxxx y Bbbb se pueden formar mediante la adición de VEX.R, VEX.X y VEX.B. El campo de mapa de opcode 2115 (octeto 1 de VEX, bits [4:0] - mmmmm) incluye contenido para codificar un octeto de opcode principal implícito. El campo W 2164 (octeto 2 de VEX, bit [7] - W), está representado mediante la notación VEX.W, y proporciona diferentes funciones dependiendo de la instrucción. La función de VEX.vvvv 2120 (octeto 2 de VEX, bits [6:3]-vvvv) puede incluir lo siguiente: 1) VEX.vvvv codifica el primer operando de registro de origen, especificado en forma invertida (complemento 1s) y es válido para instrucciones con 2 o más operandos de origen; 2) VEX.vvvv codifica el operando de registro de destino, especificado en forma de complemento 1s para determinados desplazamientos vectoriales; o 3) VEX.vvvv no codifica ningún operando, el campo está reservado y debe contener 1111b. Si el campo de tamaño VEX.L 2168 (octeto 2 de VEX, bit [2]-L) = 0, indica un vector de 128 bits; si VEX.L = 1, indica un vector de 256 bits. El campo de codificación de prefijos 2125 (octeto 2 de VEX, bits [1:0]-pp) proporciona bits adicionales para el campo de operación base.
El campo Opcode Real 2130 (octeto 3) también se conoce como octeto de opcode. Parte del opcode se especifica en este campo. El campo MOD R/M 2140 (octeto 4) incluye el campo MOD 2142 (bits [7-6]), el campo Reg 2144 (bits [5­ 3]) y el campo R/M 2146 (bits [2-0]). La función del campo Reg 2144 puede incluir lo siguiente: codificar el operando de registro de destino o un operando de registro de origen (el rrr de Rrrr), o tratarse como una extensión de opcode y no utilizarse para codificar ningún operando de instrucción. La función del campo R/M 2146 puede incluir lo siguiente: codificar el operando de instrucción que hace referencia a una dirección de memoria, o codificar ya sea el operando de registro de destino o un operando de registro de origen.
Escala, índice, Base (SIB) - El contenido del campo de escala 2150 (octeto 5) incluye SS2152 (bits [7-6]), que se utiliza para la generación de direcciones de memoria. El contenido de SIB.xxx 2154 (bits [5-3]) y de SIB.bbb 2156 (bits [2-0]) se ha mencionado anteriormente con respecto a los índices de registro Xxxx y Bbbb. El campo de desplazamiento 2162 y el campo de inmediato (IMM8) 2172 contienen datos de dirección.
Un formato de instrucción compatible con vectores es un formato de instrucción que es adecuado para instrucciones vectoriales (por ejemplo, hay determinados campos específicos para operaciones vectoriales). Si bien se describen formas de realización en las que tanto las operaciones vectoriales como escalares se admiten a través del formato de instrucción compatible con vectores, las formas de realización alternativas solo utilizan operaciones vectoriales en el formato de instrucción compatible con vectores.
La Figura 10A, la Figura 10B y la Figura 10C son diagramas de bloques que ilustran un formato de instrucción genérico compatible con vectores y plantillas de instrucciones del mismo de acuerdo con formas de realización de la invención. La Figura 10A es un diagrama de bloques que ilustra un formato de instrucción genérico compatible con vectores y plantillas de instrucciones de clase A del mismo de acuerdo con formas de realización de la invención; mientras que la Figura 10B es un diagrama de bloques que ilustra el formato de instrucción genérico compatible con vectores y plantillas de instrucción de clase B del mismo de acuerdo con formas de realización de la invención. Específicamente, un formato de instrucción genérico compatible con vectores 2200 para el cual se definen plantillas de instrucciones de clase A y clase B, las cuales incluyen plantillas de instrucciones de no acceso a memoria 2205 y plantillas de instrucciones de acceso a memoria 2220. El término "genérico" en el contexto del formato de instrucción compatible con vectores se refiere a un formato de instrucción que no está vinculado a ningún conjunto de instrucciones específico.
Si bien se describirán formas de realización de la invención en las que el formato de instrucción compatible con vectores admite lo siguiente: una longitud (o tamaño) de operando vectorial de 64 octetos con anchos (o tamaños) de elemento de datos de 32 bits (4 octetos) o 64 bits (8 octetos) (y, por lo tanto, un vector de 64 octetos consiste en 16 elementos de tamaño de palabra doble o, de forma alternativa, 8 elementos de tamaño de palabra cuádruple); una longitud (o tamaño) de operando de vector de 64 octetos con anchos (o tamaños) de elemento de datos de 16 bits (2 octetos) u 8 bits (1 octeto); una longitud (o tamaño) de operando vectorial de 32 octetos con anchos (o tamaños) de elemento de datos de 32 bits (4 octetos), 64 bits (8 octetos), 16 bits (2 octetos) u 8 bits (1 octeto); y una longitud (o tamaño) de operando vectorial de 16 octetos con anchos (o tamaños) de elemento de datos de 32 bits (4 octetos), 64 bits (8 octetos), 16 bits (2 octetos) u 8 bits (1 octeto); formas de realización alternativas pueden admitir tamaños mayores, menores y/o diferentes de operando vectorial (por ejemplo, operandos vectoriales de 256 octetos), con anchos mayores, menores o diferentes de elemento de datos (por ejemplo, anchos de elemento de datos de 128 bits (16 octetos)).
Las plantillas de instrucciones de clase A en la Figura 10A incluyen: 1) dentro de las plantillas de instrucciones de no acceso a memoria 2205 se muestra una plantilla de instrucción de operación de tipo de control de ronda completa de no acceso a memoria 2210 y una plantilla de instrucción de operación de tipo de transformada de datos de no acceso a memoria 2215; y 2) dentro de las plantillas de instrucciones de acceso a memoria 2220 se muestra una plantilla de instrucción temporal de acceso a memoria 2225 y una plantilla de instrucción no temporal de acceso a memoria 2230. Las plantillas de instrucciones de clase B en la Figura 10B incluyen: 1) dentro de las plantillas de instrucciones de no acceso a memoria 2205 se muestra una plantilla de instrucción de operación de tipo de control de ronda parcial, control de máscara de escritura, de no acceso a memoria 2212 y una plantilla de instrucción de operación de tipo VSIZE, control de máscara de escritura, de no acceso a memoria 2217; y 2) dentro de las plantillas de instrucciones de acceso a memoria 2220 se muestra una plantilla de instrucción de control de máscara de escritura de acceso a memoria 2227.
El formato de instrucción genérico compatible con vectores 2200 incluye los siguientes campos enumerados a continuación en el orden ilustrado en la Figura 10A y la Figura 10B. Campo de formato 2240 - 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 apariciones de instrucciones en el formato de instrucción compatible con vectores en flujos de instrucciones. De este modo, 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 genérico compatible con vectores. Campo de operación base 2242 - su contenido distingue diferentes operaciones base.
Campo de índice de registro 2244 - su contenido, directamente o a través de la generación de direcciones, especifica las ubicaciones de los operandos de origen y de destino, ya sea en registros o en memoria. Estos incluyen un número suficiente de bits para seleccionar N registros de un archivo de registros PxQ (por ejemplo, 32x512, 16x128, 32x1024, 64x1024). Si bien en una forma de realización N puede ser hasta tres fuentes y un registro de destino, formas de realización alternativas pueden admitir más o menos fuentes y registros de destino (por ejemplo, pueden admitir hasta dos fuentes donde una de estas fuentes también actúa como destino, pueden admitir hasta tres fuentes donde una de estas fuentes también actúa como destino, pueden admitir hasta dos fuentes y un destino).
Campo de modificador 2246 - su contenido distingue apariciones de instrucciones en el formato genérico de instrucción vectorial que especifican el acceso a la memoria con respecto a las que no lo hacen; es decir, entre plantillas de instrucciones de no acceso a la memoria 2205 y plantillas de instrucciones de acceso a memoria 2220. Las operaciones de acceso a memoria leen y/o escriben en la jerarquía de memoria (en algunos casos, especifican las direcciones de origen y/o de destino usando valores en registros), mientras que las operaciones de no acceso a memoria no lo hacen (por ejemplo, el origen y los destinos son registros). Si bien en una forma de realización este campo también selecciona entre tres maneras diferentes de realizar cálculos de direcciones de memoria, formas de realización alternativas pueden admitir más, menos o diferentes formas de realizar cálculos de direcciones de memoria.
Campo de operación de aumento 2250 - su contenido distingue cuál de una variedad de diferentes operaciones se realizarán además de la operación base. Este campo es específico del contexto. En una forma de realización de la invención, este campo se divide en un campo de clase 2268, un campo alfa 2252 y un campo beta 2254. El campo de operación de aumento 2250 permite que se realicen grupos comunes de operaciones en una sola instrucción en lugar de 2, 3 o 4 instrucciones. Campo de escala 2260 - su contenido permite escalar el contenido del campo de índice para la generación de direcciones de memoria (por ejemplo, para la generación de direcciones que utiliza 2escala * índice base).
Campo de desplazamiento 2262A - su contenido se utiliza como parte de la generación de direcciones de memoria (por ejemplo, para la generación de direcciones que utiliza 2escala * índice base desplazamiento). Campo de factor de desplazamiento 2262B (cabe señalar que la yuxtaposición del campo de desplazamiento 2262A directamente sobre el campo de factor de desplazamiento 2262B indica que se utiliza uno u otro) - su contenido se utiliza como parte de la generación de direcciones; especifica un factor de desplazamiento que se escalará por el tamaño de un acceso a memoria (N) - donde N es el número de octetos en el acceso a memoria (por ejemplo, para la generación de direcciones que utiliza 2escala * índice base desplazamiento escalado). Los bits redundantes de bajo orden se ignoran y, por lo tanto, el contenido del campo de factor de desplazamiento se multiplica por el tamaño total de los operandos de memoria (N) para generar el desplazamiento final que se utilizará en el cálculo de una dirección efectiva. El valor de N está determinado por el hardware de procesador en tiempo de ejecución en función del campo de opcode completo 2274 (descrito más adelante en el presente documento) y el campo de manipulación de datos 2254C. El campo de desplazamiento 2262A y el campo de factor de desplazamiento 2262B son opcionales en el sentido de que no se utilizan para las plantillas de instrucciones de no acceso a memoria 2205 y/o diferentes formas de realización pueden implementar solo uno o ninguno de los dos.
Campo de ancho de elemento de datos 2264 - su contenido distingue cuál de una pluralidad de anchos de elemento de datos se va a utilizar (en algunas formas de realización para todas las instrucciones; en otras formas de realización solo para algunas de las instrucciones). Este campo es opcional en el sentido de que no es necesario si solo se admite un ancho de elemento de datos y/o se admiten anchos de elemento de datos utilizando algún aspecto de los opcodes.
Campo de máscara de escritura 2270 - su contenido controla, en función de la posición del elemento de datos, si esa posición del elemento de datos en el operando vectorial de destino refleja el resultado de la operación base y la operación de aumento. Las plantillas de instrucciones de clase A admiten el enmascaramiento de escritura mediante combinación, mientras que las plantillas de instrucciones de clase B admiten el enmascaramiento de escritura mediante combinación y mediante puesta a cero. Cuando se combinan, las máscaras vectoriales permiten que cualquier conjunto de elementos en el destino se proteja de actualizaciones durante la ejecución de cualquier operación (especificada por la operación base y la operación de aumento); en otra forma de realización se preserva el valor antiguo de cada elemento del destino donde el bit de máscara correspondiente tiene un 0. Por el contrario, poner a cero las máscaras vectoriales permite que cualquier conjunto de elementos en el destino se ponga a cero durante la ejecución de cualquier operación (especificada por la operación base y la operación de aumento); en una forma de realización, un elemento del destino se establece en 0 cuando el bit de máscara correspondiente tiene un valor 0. Un subconjunto de esta funcionalidad es la capacidad de controlar la longitud vectorial de la operación que se está realizando (es decir, el tramo de elementos que se está modificando, del primero al último); sin embargo, no es necesario que los elementos que se modifican sean consecutivos. Por lo tanto, el campo de máscara de escritura 2270 permite operaciones vectoriales parciales, incluidas cargas, almacenamientos, aritmética, lógica, etc. Si bien se describen formas de realización de la invención en las que el contenido del campo de máscara de escritura 2270 selecciona uno de una pluralidad de registros de máscara de escritura que contienen la máscara de escritura que se va a utilizar (y, por lo tanto, el contenido del campo de máscara de escritura 2270 identifica indirectamente que se va a realizar el enmascaramiento), formas de realización alternativas permiten, en cambio o de manera adicional, que el contenido del campo de escritura de máscara 2270 especifique directamente el enmascaramiento que se va a realizar.
Campo de inmediato 2272 - su contenido permite la especificación de un inmediato. Este campo es opcional en el sentido de que no está presente en una implementación del formato genérico compatible con vectores que no admite inmediato y no está presente en instrucciones que no utilizan un inmediato. Campo de clase 2268 - su contenido distingue entre diferentes clases de instrucciones. Con referencia a la Figura 10A y la Figura 10B, el contenido de este campo selecciona entre instrucciones de clase A y de clase B. En la Figura 10A y la Figura 10B se utilizan cuadrados de esquina redondeada para indicar que un valor específico está presente en un campo (por ejemplo, clase A 2268A y clase B 2268B para el campo de clase 2268, respectivamente, en la Figura 10A y la Figura 10B).
En el caso de las plantillas de instrucciones de no acceso a memoria 2205 de clase A, el campo alfa 2252 se interpreta como un campo RS 2252A, cuyo contenido distingue cuál de los diferentes tipos de operación de aumento va a realizarse (por ejemplo, la ronda 2252A.1 y la transformada de datos 2252A.2 se especifican, respectivamente, para las plantillas de instrucciones de operación de tipo ronda de no acceso a memoria 2210 y de operación de tipo de transformada de datos de no acceso a memoria 2215), mientras que el campo beta 2254 distingue cuál de las operaciones del tipo especificado va a realizarse. En las plantillas de instrucciones de no acceso a memoria 2205, el campo de escala 2260, el campo de desplazamiento 2262A y el campo de escala de desplazamiento 2262B no están presentes.
En la plantilla de instrucciones de operación de tipo de control de ronda completa de no acceso a memoria 2210, el campo beta 2254 se interpreta como un campo de control de ronda 2254A, cuyo contenido proporciona un establecimiento estático de rondas. Si bien en las formas de realización descritas de la invención el campo de control de ronda 2254A incluye un campo de supresión de todas las excepciones de coma flotante (SAE) 2256 y un campo de control de operación de ronda 2258, formas de realización alternativas pueden admitir la codificación de ambos conceptos en el mismo campo o solo tener uno u otro de estos conceptos/campos (por ejemplo, pueden tener solo el campo de control de operación de ronda 2258).
Campo SAE 2256 - su contenido distingue si se inhabilita o no la notificación de eventos de excepción; cuando el contenido del campo SAE 2256 indica que la supresión está habilitada, una instrucción dada no notifica ningún tipo de bandera de excepción de coma flotante y no activa ningún manejador de excepciones de coma flotante.
Campo de control de operación de ronda 2258 - su contenido distingue cuál de un grupo de operaciones de establecimiento de rondas realizar (por ejemplo, establecimiento de rondas ascendente, establecimiento de rondas descendente, establecimiento de rondas hacia cero y establecimiento de rondas al valor más cercano). Por lo tanto, el campo de control de operación de ronda 2258 permite el cambio del modo de establecimiento de rondas según las instrucciones. En una forma de realización de la invención donde un procesador incluye un registro de control para especificar modos de establecimiento de rondas, el contenido del campo de control de operación de ronda 2250 anula ese valor de registro.
En la plantilla de instrucciones de operación de tipo de transformada de datos de no acceso a memoria 2215, el campo beta 2254 se interpreta como un campo de transformada de datos 2254B, cuyo contenido distingue cuál de una pluralidad de transformadas de datos se va a realizar (por ejemplo, no hay transformada de datos, combinación arbitraria (swizzle), difusión).
En el caso de una plantilla de instrucciones de acceso a memoria 2220 de clase A, el campo alfa 2252 se interpreta como un campo de sugerencia de expulsión 2252B, cuyo contenido distingue cuál de las sugerencias de expulsión se va a utilizar (en la Figura 10A, se especifican temporal 2252B.1 y no temporal 2252B.2, respectivamente, para la plantilla de instrucciones temporal de acceso a memoria 2225 y la plantilla de instrucciones no temporal de acceso a memoria 2230), mientras que el campo beta 2254 se interpreta como un campo de manipulación de datos 2254C, cuyo contenido distingue cuál de una pluralidad de operaciones de manipulación de datos (también conocidas como primitivas) se va a realizar (por ejemplo, ninguna manipulación, difusión, conversión ascendente de una fuente y conversión descendente de un destino). Las plantillas de instrucciones de acceso a memoria 2220 incluyen el campo de escala 2260 y, opcionalmente, el campo de desplazamiento 2262A o el campo de escala de desplazamiento 2262B.
Las instrucciones de memoria vectoriales realizan cargas vectoriales desde y almacenamiento vectorial en memoria, con soporte de conversión. Al igual que con las instrucciones vectoriales regulares, las instrucciones de memoria vectoriales transfieren datos de/a la memoria a nivel de elemento de datos, donde los elementos que se transfieren realmente están dictaminados por el contenido de la máscara vectorial que se selecciona como la máscara de escritura.
Los datos temporales son datos que probablemente se reutilizarán lo suficientemente pronto como para beneficiarse del almacenamiento en memoria caché. Esto es, sin embargo, una sugerencia, y diferentes procesadores pueden implementarlo de diferentes maneras, incluyendo ignorar la sugerencia por completo. Es poco probable que los datos no temporales se reutilicen lo suficientemente pronto como para beneficiarse del almacenamiento en memoria caché de primer nivel y se les debe dar prioridad para su expulsión. Esto es, sin embargo, una sugerencia, y diferentes procesadores pueden implementarlo de diferentes maneras, incluyendo ignorar la sugerencia por completo.
En el caso de las plantillas de instrucciones de clase B, el campo alfa 2252 se interpreta como un campo de control de máscara de escritura (Z) 2252C, cuyo contenido distingue si el enmascaramiento de escritura controlado por el campo de máscara de escritura 2270 debe ser una combinación o una puesta a cero.
En el caso de las plantillas de instrucciones de no acceso a memoria 2205 de clase B, parte del campo beta 2254 se interpreta como un campo RL 2257A, cuyo contenido distingue cuál de los diferentes tipos de operación de aumento va a realizarse (por ejemplo, la ronda 2257A.1 y la longitud vectorial (VSIZE) 2257A.2 se especifican, respectivamente, para la plantilla de instrucciones de operación de tipo de control de ronda parcial, de control de máscara de escritura, de no acceso a memoria 2212 y la plantilla de instrucciones de operación de tipo VSIZE, de control de máscara de escritura, de no acceso a memoria 2217), mientras que el resto del campo beta 2254 distingue cuál de las operaciones del tipo especificado va a realizarse. En las plantillas de instrucciones de no acceso a memoria 2205, el campo de escala 2260, el campo de desplazamiento 2262A y el campo de escala de desplazamiento 2262B no están presentes.
En la plantilla de instrucciones de operación de tipo de control de ronda parcial, de control de máscara de escritura, de no acceso a memoria 2210, el resto del campo beta 2254 se interpreta como un campo de operación de ronda 2259A y se inhabilita la notificación de eventos de excepción (una instrucción dada no notifica ningún tipo de bandera de excepción de coma flotante y no activa ningún manejador de excepciones de coma flotante).
Campo de control de operación de ronda 2259A - al igual que el campo de control de operación de ronda 2258, su contenido distingue cuál de un grupo de operaciones de establecimiento de rondas realizar (por ejemplo, establecimiento de rondas ascendente, establecimiento de rondas descendente, establecimiento de rondas hacia cero y establecimiento de rondas al valor más cercano). Por lo tanto, el campo de control de operación de ronda 2259A permite el cambio del modo de establecimiento de rondas según las instrucciones. En una forma de realización de la invención donde un procesador incluye un registro de control para especificar modos de establecimiento de rondas, el contenido del campo de control de operación de ronda 2250 anula ese valor de registro.
En la plantilla de instrucciones de operación de tipo VSIZE, de control de máscara de escritura, de no acceso a memoria 2217, el resto del campo beta 2254 se interpreta como un campo de longitud vectorial 2259B, cuyo contenido distingue en cuál de una pluralidad de longitudes vectoriales de datos se va a operar (por ejemplo, 128, 256 o 512 octetos).
En el caso de una plantilla de instrucciones de acceso a memoria 2220 de clase B, parte del campo beta 2254 se interpreta como un campo de difusión 2257B, cuyo contenido distingue si se va a realizar o no la operación de manipulación de datos de tipo de difusión, mientras que el resto del campo beta 2254 se interpreta como el campo de longitud vectorial 2259B. Las plantillas de instrucciones de acceso a memoria 2220 incluyen el campo de escala 2260 y, opcionalmente, el campo de desplazamiento 2262A o el campo de escala de desplazamiento 2262B.
Con respecto al formato de instrucción genérico compatible con vectores 2200, se muestra un campo de opcode completo 2274 que incluye el campo de formato 2240, el campo de operación base 2242 y el campo de ancho de elemento de datos 2264. Si bien se muestra una forma de realización donde el campo de opcode completo 2274 incluye todos estos campos, el campo de opcode completo 2274 no incluye todos estos campos en formas de realización que no admiten todos ellos. El campo de opcode completo 2274 proporciona el código de operación (opcode).
El campo de operación de aumento 2250, el campo de ancho de elemento de datos 2264 y el campo de máscara de escritura 2270 permiten que estas características se especifiquen según las instrucciones en el formato de instrucción genérico compatible con vectores. La combinación de campo de máscara de escritura y campo de ancho de elemento de datos crea instrucciones con tipo en el sentido de que permiten que la máscara se aplique en función de diferentes anchos de elemento de datos.
Las diversas plantillas de instrucciones que se encuentran dentro de la clase A y la clase B son beneficiosas en diferentes situaciones. En algunas formas de realización de la invención, diferentes procesadores o diferentes núcleos dentro de un procesador pueden admitir solo la clase A, solo la clase B o ambas clases. Por ejemplo, un núcleo fuera de orden de propósito general de alto rendimiento destinado a computación de propósito general solo puede admitir la clase B, un núcleo destinado principalmente a la computación gráfica y/o científica (capacidad de proceso) solo puede admitir la clase A, y un núcleo destinado a ambos tipos de computación puede admitir ambas clases (evidentemente, un núcleo que tenga alguna mezcla de plantillas e instrucciones de ambas clases pero no todas las plantillas e instrucciones de ambas clases está dentro del alcance de la invención). Además, un único procesador puede incluir múltiples núcleos, todos los cuales admiten la misma clase o en donde diferentes núcleos admiten diferentes clases. Por ejemplo, en un procesador con diferentes núcleos de propósito general y de gráficos, uno de los núcleos de gráficos destinados principalmente a la computación gráfica y/o científica solo puede admitir 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 registros destinados a la computación de propósito general que solo admiten la clase B. Otro procesador que no tiene un núcleo de gráficos aparte puede incluir uno o más núcleos en orden o fuera de orden de propósito general que admiten tanto la clase A como la clase B. Evidentemente, las características de una clase también pueden implementarse en la otra clase en diferentes formas de realización 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 variedad de formas ejecutables diferentes, que incluyen: 1) una forma que solo tiene instrucciones de la(s) clase(s) admitida(s) 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 en función de las instrucciones admitidas por el procesador que está ejecutando actualmente el código.
La Figura 11 es un diagrama de bloques que ilustra un ejemplo de formato de instrucción específico compatible con vectores de acuerdo con formas de realización de la invención. La Figura 11 muestra un formato de instrucción específico compatible con vectores 2300 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 específico compatible con vectores 2300 se puede utilizar para extender el conjunto de instrucciones x86 y, por lo tanto, algunos de los campos son similares o iguales a los utilizados en el conjunto de instrucciones x86 existente y extensiones del mismo (por ejemplo, AVX). Este formato sigue siendo coherente con el campo de codificación de prefijos, el campo de octetos de opcode real, el campo MOD R/M, el campo SIB, el campo de desplazamiento y los campos de inmediato del conjunto de instrucciones x86 existente con extensiones. Se ilustran los campos de la Figura 10 con los que se correlacionan los campos de la Figura 11.
Debe entenderse que, aunque las formas de realización de la invención se describen con referencia al formato de instrucción específico compatible con vectores 2300 en el contexto del formato de instrucción genérico compatible con vectores 2200 con fines ilustrativos, la invención no se limita al formato de instrucción específico compatible con vectores 2300, excepto donde se reivindica. Por ejemplo, el formato de instrucción genérico compatible con vectores 2200 contempla una variedad de tamaños posibles para los diversos campos, mientras que el formato de instrucción específico compatible con vectores 2300 se muestra con campos de tamaños específicos. A modo de ejemplo específico, mientras que el campo de ancho de elemento de datos 2264 se ilustra como un campo de un bit en el formato de instrucción específico compatible con vectores 2300, la invención no se limita a esto (es decir, el formato de instrucción genérico compatible con vectores 2200 contempla otros tamaños del campo de ancho de elemento de datos 2264).
El formato de instrucción genérico compatible con vectores 2200 incluye los siguientes campos enumerados a continuación en el orden ilustrado en la Figura 11A. Prefijo EVEX (octetos 0-3) 2302 - se codifica en forma de cuatro octetos. Campo de formato 2240 (octeto 0 de EVEX, bits [7:0]) - el primer octeto (octeto 0 de EVEX) es el campo de formato 2240 y contiene 0x62 (el valor único utilizado para distinguir el formato de instrucción compatible con vectores en una forma de realización de la invención). Los segundo y cuarto octetos (octetos 1-3 de EVEX) incluyen una pluralidad de campos de bits que proporcionan una capacidad específica.
Campo REX 2305 (octeto 1 de EVEX, bits [7-5]) - consiste en un campo de bits EVEX.R (octeto 1 de EVEX, bit [7] -R), un campo de bits EVEX.X (octeto 1 de Ev Ex , bit [6] - X) y un octeto 1 de 2257BEX, bit [5] - B). Los campos de bits EVEX.R, EVEX.X y EVEX.B proporcionan la misma funcionalidad que los campos de bits VEX correspondientes, y se codifican utilizando la forma de complemento 1s, es decir, ZMMO se codifica como 1111B, ZMM15 se codifica como 0000B. Otros campos de las instrucciones codifican los tres bits inferiores de los índices de registro como se conoce en la técnica (rrr, xxx y bbb), de modo que Rrrr, Xxxx y Bbbb se pueden formar mediante la adición de EVEX.R, EVEX.X y EVEX.B.
Campo REX' 2210 - esta es la primera parte del campo REX' 2210 y es el campo de bits EVEX.R' (octeto 1 de EVEX, bit [4] - R') que se utiliza para codificar los 16 registros superiores o los 16 inferiores del conjunto extendido de 32 registros. En una forma de realización de la invención, este bit, junto con otros como se indica a continuación, se almacena en formato invertido de bits para distinguirse (en el modo de 32 bits de x86 ampliamente conocido) de la instrucción BOUND, cuyo octeto de opcode real es 62, pero no acepta en el campo MOD R/M (descrito a continuación) el valor de 11 en el campo MOD; formas de realización alternativas de la invención no almacenan esto ni los otros bits indicados a continuación en el formato invertido. Se utiliza un valor de 1 para codificar los 16 registros inferiores. En otras palabras, R'Rrrr se forma combinando EVEX.R', EVEX.R y el otro RRR de otros campos.
Campo de mapa de opcode 2315 (octeto 1 de EVEX, bits [3:0] - mmmm) - su contenido codifica un octeto de opcode principal implícito (OF, OF 38, u OF 3). Campo de ancho de elemento de datos 2264 (octeto 2 de EVEX, bit [7] - W) -está representado mediante la notación EVEX.W. EVEX.W se utiliza para definir la granularidad (tamaño) del tipo de datos (ya sea elementos de datos de 32 bits o elementos de datos de 64 bits). EVEX.vvvv 2320 (octeto 2 de EVEX, bits [6:3]-vvvv) - la función de EVEX.vvvv puede incluir lo siguiente: 1) EVEX.vvvv codifica el primer operando de registro de origen, especificado en forma invertida (complemento 1s) 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 1s para determinados desplazamientos vectoriales; o 3) EVEX.vvvv no codifica ningún operando, el campo está reservado y debe contener 1111b. Por lo tanto, el campo EVEX.vvvv 2320 codifica los 4 bits de orden bajo del primer especificador de registro de origen almacenado en forma invertida (complemento 1s). Dependiendo de la instrucción, se utiliza un campo de bits EVEX adicional diferente para extender el tamaño del especificador a 32 registros. Campo de clase EVEX.U 2268 (octeto 2 de EVEX, bit [2]-U) - Si EVEX.U = 0, indica clase A o EVEX.UO; si EVEX.U = 1, indica clase B o EVEX.U1.
Campo de codificación de prefijos 2325 (octeto 2 de EVEX, bits [1:0]-pp) - proporciona bits adicionales para el campo de operación base. Además de proporcionar soporte para las instrucciones SSE heredadas en el formato de prefijo EVEX, esto también tiene la ventaja de compactar el prefijo SIMD (en lugar de necesitar un octeto para expresar el prefijo SIMD, el prefijo EVEX solo necesita 2 bits). En una forma de realización, para admitir instrucciones SSE heredadas que utilizan un prefijo SIMD (66H, F2H, F3H) tanto en el formato heredado como en el formato de prefijo EVEX, estos prefijos SIMD heredados se codifican en el campo de codificación de prefijo SIMD; y en tiempo de ejecución se expanden en el prefijo SIMD heredado antes de proporcionarse a la PLA del decodificador (de modo que la PLA puede ejecutar tanto el formato EVEX como el heredado de estas instrucciones heredadas sin modificación). Aunque las instrucciones más recientes podrían utilizar el contenido del campo de codificación de prefijo EVEX directamente como una extensión de opcode, determinadas formas de realización se expanden de manera similar para mayor coherencia, pero permiten que estos prefijos SIMD heredados especifiquen diferentes significados. Una forma de realización alternativa puede rediseñar la PLA para admitir las codificaciones de prefijos SIMD de 2 bits y, por lo tanto, no requerir la expansión.
Campo alfa 2252 (octeto 3 de EVEX, bit [7] - EH; también conocido como EVEX.EH, EVEX.rs, EVEX.RL, control de máscara EVEX.write y EVEX.N; también ilustrado con a) - como se describió anteriormente, este campo es específico del contexto. Campo beta 2254 (octeto 3 de EVEX, bits [6:4] - SSS, también conocido como EVEX.s 2-0 , EVEX.r 2-0 , EVEX.rr1, EVEX.LL0, EVEX.LLB; también ilustrado con ppp) - como se describió anteriormente, este campo es específico del contexto.
Campo REX' 2210 - es el resto del campo REX' y es el campo de bits EVEX.V' (octeto 3 de EVEX, bit [3] - V') que se puede utilizar para codificar los 16 registros superiores o los 16 inferiores del conjunto extendido de 32 registros. Este bit se almacena en formato invertido de bits. Se utiliza 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 2270 (octeto 3 de EVEX, 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 forma de realización de la invención, el valor específico EVEX.kkk=000 tiene un comportamiento especial que implica que no se utiliza ninguna máscara de escritura para la instrucción particular (esto se puede implementar de diversas maneras, incluido el uso de una máscara de escritura establecida en todo unos o hardware que evita el hardware de enmascaramiento).
El campo Opcode Real 2330 (octeto 4) también se conoce como octeto de opcode. Parte del opcode se especifica en este campo. El campo MOD R/M 2340 (octeto 5) incluye el campo MOD 2342, el campo Reg 2344 y el campo R/M 2346. Como se ha descrito anteriormente, el contenido del campo MOD 2342 distingue entre operaciones de acceso a memoria y de no acceso a memoria. La función del campo Reg 2344 puede resumirse a dos situaciones: codificar el operando de registro de destino o un operando de registro de origen, o tratarse como una extensión de opcode y no utilizarse para codificar ningún operando de instrucción. La función del campo R/M 2346 puede incluir lo siguiente: codificar el operando de instrucción que hace referencia a una dirección de memoria, o codificar ya sea el operando de registro de destino o un operando de registro de origen.
Octeto de escala, índice, base (SIB) (octeto 6) - Como se describió anteriormente, el contenido del campo de escala 2250 se utiliza para la generación de direcciones de memoria. SIB.xxx 2354 y SIB.bbb 2356 - el contenido de estos campos se ha mencionado anteriormente con respecto a los índices de registro Xxxx y Bbbb. Campo de desplazamiento 2262A (Octetos 7-10) - cuando el campo MOD 2342 contiene 10, los octetos 7-10 son el campo de desplazamiento 2262A, y funciona igual que el desplazamiento de 32 bits heredado (disp32) y funciona con granularidad de octetos.
Campo de factor de desplazamiento 2262B (octeto 7) - cuando el campo MOD 2342 contiene 01, el octeto 7 es el campo de factor de desplazamiento 2262B. La ubicación de este campo es la misma que la del desplazamiento de 8 bits (disp8) de conjunto de instrucciones de x86 heredado, que funciona con granularidad de octetos. Dado que disp8 es un signo extendido, solo puede abordar desfases entre octetos -128 y 127; en términos de líneas de memoria caché de 64 octetos, disp8 utiliza 8 bits que pueden establecerse en solo cuatro valores realmente útiles -128, -64, 0 y 64; dado que a menudo se necesita un mayor rango, se utiliza disp32; sin embargo, disp32 requiere 4 octetos. En contraste con disp8 y disp32, el campo de factor de desplazamiento 2262B es una reinterpretación de disp8; cuando se utiliza el campo de factor de desplazamiento 2262B, el desplazamiento real se determina por el contenido del campo de factor de desplazamiento multiplicado por el tamaño del acceso al operando de memoria (N). Este tipo de desplazamiento se denomina disp8*N. Esto reduce la longitud de instrucción promedio (un solo octeto usado para el desplazamiento pero con un rango mucho mayor). Dicho desplazamiento comprimido se basa en el supuesto de que el desplazamiento efectivo es múltiplo de la granularidad del acceso a memoria y, por lo tanto, los bits de orden bajo redundantes del desfase de direcciones no necesitan codificarse. En otras palabras, el campo de factor de desplazamiento 2262B sustituye al desplazamiento de 8 bits de conjunto de instrucciones x86 heredado. Por lo tanto, el campo de factor de desplazamiento 2262B se codifica de la misma manera que un desplazamiento de 8 bits de conjunto de instrucciones x86 (por lo que no hay cambios en las reglas de codificación ModRM/SIB) con la única excepción de que disp8 se sobrecarga a disp8*N. En otras palabras, no hay cambios en las reglas de codificación o longitudes de codificación, sino solo en la interpretación del valor de desplazamiento por hardware (que necesita escalar el desplazamiento por el tamaño del operando de memoria para obtener un desfase de direcciones a nivel de octeto). El campo de inmediato 2272 funciona como se describió anteriormente.
La Figura 11B es un diagrama de bloques que ilustra los campos del formato de instrucción específico compatible con vectores 2300 que conforman el campo de opcode completo 2274 de acuerdo con una forma de realización de la invención. Específicamente, el campo de opcode completo 2274 incluye el campo de formato 2240, el campo de operación base 2242 y el campo de ancho de elemento de datos (W) 2264. El campo de operación base 2242 incluye el campo de codificación de prefijos 2325, el campo de mapa de opcode 2315 y el campo de opcode real 2330.
La Figura 11C es un diagrama de bloques que ilustra los campos del formato de instrucción específico compatible con vectores 2300 que conforman el campo de índice de registro 2244 de acuerdo con una forma de realización de la invención. Específicamente, el campo de índice de registro 2244 incluye el campo REX 2305, el campo REX' 2310, el campo MODR/M.reg 2344, el campo MODR/M.r/m 2346, el campo VVVV 2320, el campo xxx 2354 y el campo bbb 2356.
La Figura 11D es un diagrama de bloques que ilustra los campos del formato de instrucción específico compatible con vectores 2300 que conforman el campo de operación de aumento 2250 de acuerdo con una forma de realización de la invención. Cuando el campo de clase (U) 2268 contiene 0, significa EVEX.UO (clase A 2268A); cuando contiene 1, significa EVEX.U1 (clase B 2268B). Cuando U=0 y el campo MOD 2342 contiene 11 (lo que significa una operación de no acceso a memoria), el campo alfa 2252 (octeto 3 de EVEX, bit [7] - EH) se interpreta como el campo rs 2252A. Cuando el campo rs 2252A contiene un 1 (ronda 2252A.1), el campo beta 2254 (octeto 3 de EVEX, bits [6:4] - SSS) se interpreta como el campo de control de ronda 2254A. El campo de control de ronda 2254A incluye un campo SAE 2256 de un bit y un campo de operación de ronda 2258 de dos bits. Cuando el campo rs 2252A contiene un 0 (transformada de datos 2252A.2), el campo beta 2254 (octeto 3 de EVEX, bits [6:4] - SSS) se interpreta como un campo de transformada de datos de tres bits 2254B. Cuando U=0 y el campo MOD 2342 contiene 00, 01 o 10 (lo que significa una operación de acceso a memoria), el campo alfa 2252 (octeto 3 de EVEX, bit [7] - EH) se interpreta como el campo de sugerencia de expulsión (EH) 2252B y el campo beta 2254 (octeto 3 de EVEX, bits [6:4]- SSS) se interpreta como un campo de manipulación de datos de tres bits 2254C.
Cuando U=1, el campo alfa 2252 (octeto 3 de EVEX, bit [7] - EH) se interpreta como el campo de control de máscara de escritura (Z) 2252C. Cuando U=1 y el campo MOD 2342 contiene 11 (lo que significa una operación de no acceso a memoria), parte del campo beta 2254 (octeto 3 de EVEX, bit [4] -S0) se interpreta como el campo RL 2257A; cuando contiene un 1 (ronda 2257A. 1) el resto del campo beta 2254 (octeto 3 de EVEX, bit [6-5] - S2-1) se interpreta como el campo de operación de ronda 2259A, mientras que cuando el campo RL 2257A contiene un 0 (VSIZE 2257.A2) el resto del campo beta 2254 (octeto 3 de EVEX, bit [6-5] - S2-1) se interpreta como el campo de longitud vectorial 2259B (octeto 3 de EVEX, bit [6-5] - L1-0). Cuando U=1 y el campo MOD 2342 contiene 00, 01 o 10 (lo que significa una operación de acceso a memoria), el campo beta 2254 (octeto 3 de EVEX, bits [6:4] - SSS) se interpreta como el campo de longitud vectorial 2259B (octeto 3 de EVEX, bit [6-5] - L1-0) y el campo de difusión 2257B (octeto 3 de EVEX, bit [4] - B).
La Figura 12 es un diagrama de bloques de una arquitectura de registros 2400 de acuerdo con una forma de realización de la invención. En la forma de realización ilustrada, hay 32 registros vectoriales 2410 que tienen un ancho de 512 bits; estos registros se referencian de zmm0 a zmm31. Los 256 bits de orden inferior de los 16 registros inferiores zmm se superponen en los registros ymm0-16. Los 128 bits de orden inferior de los 16 registros inferiores zmm (los 128 bits de orden inferior de los registros ymm) se superponen en los registros xmm0-15. El formato de instrucción específico compatible con vectores 2300 funciona en este archivo de registros superpuestos como se ilustra en las siguientes tablas.
Figure imgf000021_0001
En otras palabras, el campo de longitud vectorial 2259B 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 anterior; y las plantillas de instrucciones sin el campo de longitud vectorial 2259B operan en la longitud vectorial máxima. Además, en una forma de realización, las plantillas de instrucciones de clase B del formato de instrucción específico compatible con vectores 2300 operan en datos de coma flotante empaquetados o escalares de precisión simple/doble y en datos enteros empaquetados o escalares. Las operaciones escalares son operaciones realizadas en la posición de elemento de datos de orden más bajo en un registro zmm/ymm/xmm; las posiciones de elemento de datos de orden más alto se dejan igual que antes de la instrucción o se ponen a cero dependiendo de la forma de realización.
Registros de máscara de escritura 2415 - en la forma de realización ilustrada, hay 8 registros de máscara de escritura (k0 a k7), cada uno con un tamaño de 64 bits. En una forma de realización alternativa, los registros de máscara de escritura 2415 tienen un tamaño de 16 bits. Como se describió anteriormente, en una forma de realización de la invención, el registro de máscara vectorial k0 no se puede utilizar como máscara de escritura; cuando la codificación que normalmente indicaría k0 se utiliza para una máscara de escritura, selecciona una máscara de escritura establecida en OxFFF, lo que inhabilita el enmascaramiento de escritura para esa instrucción.
Registros de propósito general 2425 - en la forma de realización ilustrada hay dieciséis registros de propósito general de 64 bits que se utilizan junto con los modos de direccionamiento de x86 existentes para direccionar operandos de memoria. Estos registros están referenciados por los nombres RAX, RBX, RCX, RdX, RBP, RSI, RDI, RSP y R8 a R15.
Archivo de registros de pila de coma flotante escalar (pila x87) 2445, en el que se solapa el archivo de registros plano de enteros empaquetados MMX 2450 - en la forma de realización ilustrada, la pila x87 es una pila de ocho elementos utilizada para realizar operaciones de coma flotante escalar en datos de coma flotante de 32/64/80 bits usando la extensión de conjunto de instrucciones de x87, mientras que los registros MMX se utilizan para realizar operaciones en datos enteros empaquetados de 64 bits, así como para guardar operandos para algunas operaciones realizadas entre los registros MMX y XMM.
Formas de realización alternativas de la invención pueden utilizar registros más amplios o más estrechos. Además, formas de realización alternativas de la invención pueden utilizar más, menos o diferentes registros y archivos de registros.
Los núcleos de procesador se pueden implementar de diferentes maneras, para diferentes propósitos y en diferentes procesadores. Por ejemplo, las implementaciones de dichos núcleos pueden incluir: 1) un núcleo en orden de propósito general destinado a la computación de propósito general; 2) un núcleo fuera de orden de propósito general de alto rendimiento destinado a la computación de propósito general; 3) un núcleo de propósito especial destinado principalmente a la computación gráfica y/o científica (capacidad de proceso). Las implementaciones de diferentes procesadores pueden incluir: 1) una CPU que incluye uno o más núcleos en orden de propósito general destinados a la computación de propósito general y/o uno o más núcleos fuera de orden de propósito general destinados a la computación de propósito general; y 2) un coprocesador que incluye uno o más núcleos de propósito especial destinados principalmente a la computación gráfica y/o científica (capacidad de proceso). Dichos diferentes procesadores dan lugar a diferentes arquitecturas de sistemas informáticos, que pueden incluir: 1) el coprocesador en un chip separado de la CPU; 2) el coprocesador en una pastilla separada en el mismo encapsulado que una CPU; 3) el coprocesador en la misma pastilla que una CPU (en cuyo caso, dicho coprocesador se denomina a veces lógica de propósito especial, tal como lógica integrada de gráficos y/o científica (capacidad de proceso), o como núcleos de propósito especial); y 4) un sistema en un chip que puede incluir en la misma pastilla la CPU descrita (lo que se denomina a veces núcleo(s) de aplicación o procesador(es) de aplicación), el coprocesador descrito anteriormente y funcionalidad adicional. A continuación se describen arquitecturas de núcleo ejemplares, seguidas de descripciones de procesadores y arquitecturas informáticas ejemplares.
La Figura 13A es un diagrama de bloques que ilustra tanto una cadena de procesamiento en orden ejemplar como una cadena de emisión/ejecución fuera de orden de cambio de nombre de registros ejemplar de acuerdo con formas de realización de la invención. La Figura 13B es un diagrama de bloques que ilustra tanto una forma de realización ejemplar de un núcleo de arquitectura en orden como un núcleo de arquitectura de emisión/ejecución fuera de orden de cambio de nombre de registros ejemplar que se incluirá en un procesador de acuerdo con formas de realización de la invención. Las cajas de líneas continuas ilustran la cadena de procesamiento en orden y el núcleo en orden, mientras que la adición opcional de las cajas de líneas discontinuas ilustra la cadena de procesamiento y el núcleo de emisión/ejecución fuera de orden y de cambio de nombre de registros. Dado que el aspecto en orden es un subconjunto del aspecto fuera de orden, se describirá el aspecto fuera de orden.
En la Figura 13A, una cadena de procesamiento de procesador 2500 incluye una fase de extracción 2502, una fase de decodificación de longitud 2504, una fase de decodificación 2506, una fase de asignación 2508, una fase de cambio de nombre 2510, una fase de planificación (también conocida como envío o emisión) 2512, una fase de lectura de registro/de lectura de memoria 2514, una fase de ejecución 2516, una fase de escritura en memoria/reescritura 2518, una fase de manejo de excepciones 2522 y una fase de confirmación 2524.
La Figura 13B muestra un núcleo del procesador 2590 que incluye una unidad de sección de entrada (front-end) 2530 acoplada a una unidad de motor de ejecución 2550, y ambas están acopladas a una unidad de memoria 2570. El núcleo 2590 puede ser un núcleo de computación de conjunto de instrucciones reducidas (RISC), un núcleo de computación de conjunto de instrucciones complejas (CISC), un núcleo de palabras de instrucciones muy largas (VLIW) o un tipo de núcleo híbrido o alternativo. Como otra opción adicional, el núcleo 2590 puede ser un núcleo de propósito especial, tal como, por ejemplo, un núcleo de red o de comunicación, un motor de compresión, un núcleo de coprocesador, un núcleo de unidad de procesamiento de gráficos de cómputo de propósito general (GPGPU), un núcleo de gráficos o similares.
La unidad de sección de entrada 2530 incluye una unidad de predicción de rama 2532 acoplada a una unidad de memoria caché de instrucciones 2534, que está acoplada a una memoria intermedia de traducción anticipada de instrucciones (TLB) 2536, que está acoplada a una unidad de extracción de instrucciones 2538, que está acoplada a una unidad de decodificación 2540. La unidad de decodificación 2540 (o decodificador) puede decodificar instrucciones y generar como salida una o más microoperaciones, puntos de entrada de microcódigo, microinstrucciones, otras instrucciones u otras señales de control, que se decodifican, o que de otro modo reflejan, o se obtienen de, las instrucciones originales. La unidad de decodificación 2540 se puede implementar usando varios mecanismos diferentes. Ejemplos de mecanismos adecuados incluyen, pero sin limitarse a, tablas de consulta, implementaciones de hardware, matrices lógicas programables (PLA), memorias de solo lectura (ROM) de microcódigo, etc. En una forma de realización, el núcleo 2590 incluye una ROM de microcódigo u otro medio que almacena microcódigo para determinadas macroinstrucciones (por ejemplo, en la unidad de decodificación 2540 o de otro modo dentro de la unidad de sección de entrada 2530). La unidad de decodificación 2540 está acoplada a una unidad de cambio de nombre/de asignación 2552 en la unidad de motor de ejecución 2550.
La unidad de motor de ejecución 2550 incluye la unidad de cambio de nombre/de asignación 2552 acoplada a una unidad de retirada 2554 y un conjunto de una o más unidades de planificación 2556. La(s) unidad(es) de planificación 2556 representa(n) cualquier número de planificadores diferentes, incluidas estaciones de reservas, ventana de instrucciones centrales, etc. La(s) unidad(es) de planificación 2556 está(n) acoplada(s) a la(s) unidad(es) de archivo(s) de registros físicos 2558. Cada una de las unidades de archivo(s) de registros físicos 2558 representa uno o más archivos de registros físicos, donde diferentes unidades almacenan uno o más tipos de datos diferentes, tales como entero escalar, coma flotante escalar, entero empaquetado, coma flotante empaquetada, entero vectorial, coma flotante vectorial, estado (por ejemplo, un puntero de instrucción que es la dirección de la siguiente instrucción que se va a ejecutar), etc.
En una forma de realización, la unidad de archivo(s) de registros físicos 2558 comprende una unidad de registros vectoriales, una unidad de registros de máscara de escritura y una unidad de registros escalares. Estas unidades de registros pueden proporcionar registros vectoriales de arquitectura, registros de máscaras vectoriales y registros de propósito general. La(s) unidad(es) de archivo(s) de registros físicos 2558 está(n) superpuesta(s) a la unidad de retirada 2554 para ilustrar diversas maneras en las que se pueden implementar el cambio de nombre de registros y la ejecución fuera de orden (por ejemplo, usando una o más memorias intermedias de reordenamiento y uno o más archivos de registros de retirada; usando uno o más archivos futuros, una o más memorias intermedias de historial y uno o más archivos de registros de retirada; usando mapas de registros y un grupo de registros; etc.). La unidad de retirada 2554 y la(s) unidad(es) de archivo(s) de registros físicos 2558 están acopladas al/a los grupo(s) de ejecución 2560.
El/los grupo(s) de ejecución 2560 incluye(n) un conjunto de una o más unidades de ejecución 2562 y un conjunto de una o más unidades de acceso a memoria 2564. Las unidades de ejecución 2562 pueden realizar diversas operaciones (por ejemplo, desplazamientos, suma, resta, multiplicación) y en diversos tipos de datos (por ejemplo, coma flotante escalar, número entero empaquetado, coma flotante empaquetada, número entero vectorial, coma flotante vectorial). Si bien algunas formas de realización pueden incluir una pluralidad de unidades de ejecución dedicadas a funciones o conjuntos de funciones específicas, otras formas de realización pueden incluir solamente una unidad de ejecución o múltiples unidades de ejecución que realizan todas las funciones.
La(s) unidad(es) de planificación 2556, la(s) unidad(es) de archivo(s) de registros físicos 2558 y el/los grupos de ejecución 2560 se muestran opcionalmente en plural porque determinadas formas de realización crean diferentes cadenas de procesamiento para determinados tipos de datos/operaciones (por ejemplo, una cadena de procesamiento de números enteros escalares, una cadena de procesamiento de coma flotante escalar/números enteros empaquetados/coma flotante empaquetada/números enteros vectoriales/coma flotante vectorial y/o una cadena de procesamiento de acceso a memoria, donde cada una tiene su propia unidad de planificación, unidad de archivo(s) de registros físicos y/o grupo de ejecución; y en el caso de una cadena de procesamiento de acceso a memoria diferente, se implementan determinadas formas de realización en las que solo el grupo de ejecución de esta cadena de procesamiento tiene la(s) unidad(es) de acceso a memoria 2564). También debe entenderse que cuando se utilizan diferentes cadenas de procesamiento, una o más de estas cadenas de procesamiento pueden ser de emisión/ejecución fuera de orden y el resto en orden.
El conjunto de unidades de acceso a memoria 2564 está acoplado a la unidad de memoria 2570, que incluye una unidad de TLB de datos 2572 acoplada a una unidad de memoria caché de datos 2574 acoplada a una unidad de memoria caché de nivel 2 (L2) 2576. En una forma de realización ejemplar, las unidades de acceso a memoria 2564 pueden incluir una unidad de carga, una unidad de dirección de almacenamiento y una unidad de datos de almacenamiento, cada una de las cuales está acoplada a la unidad de TLB de datos 2572 en la unidad de memoria 2570. La unidad de memoria caché de instrucciones 2534 está acoplada además a una unidad de memoria caché de nivel 2 (L2) 2576 en la unidad de memoria 2570. La unidad de memoria caché L2 2576 está acoplada a uno o más niveles de memoria caché y, finalmente, a una memoria principal.
A modo de ejemplo, la arquitectura de núcleo de emisión/ejecución fuera de orden de cambio de nombre de registros ejemplar puede implementar la cadena de procesamiento 2500 de la siguiente manera: 1) la unidad de extracción de instrucciones 2538 realiza las fases de extracción y de decodificación de longitud 2502 y 2504; 2) la unidad de decodificación 2540 realiza la fase de decodificación 2506; 3) la unidad de cambio de nombre/asignación 2552 realiza la fase de asignación 2508 y la fase de cambio de nombre 2510; 4) la(s) unidad(es) de planificación 2556 realiza(n) la etapa de planificación 2512; 5) la(s) unidad(es) de archivo(s) de registros físicos 2558 y la unidad de memoria 2570 realizan la fase de lectura de registros/lectura de memoria 2514; el grupo de ejecución 2560 realiza la fase de ejecución 2516; 6) la unidad de memoria 2570 y la(s) unidad(es) de archivo(s) de registros físicos 2558 realizan la fase de escritura de memoria/reescritura 2518; 7) varias unidades pueden estar involucradas en la fase de manejo de excepciones 2522; y 8) la unidad de retirada 2554 y la(s) unidad(es) de archivo(s) de registros físicos 2558 realizan la fase de confirmación 2524.
El núcleo 2590 puede admitir uno o más conjuntos de instrucciones (por ejemplo, el conjunto de instrucciones x86 (con algunas extensiones que se han añadido con versiones más recientes); el conjunto de instrucciones MIPS de MIPS Technologies de Sunnyvale, CA; el conjunto de instrucciones ARM (con extensiones adicionales opcionales tales como NEON) de ARM Holdings de Sunnyvale, CA), incluida(s) la(s) instrucción(es) descrita(s) en el presente documento. En una forma de realización, el núcleo 2590 incluye lógica para admitir una extensión de conjunto de instrucciones de datos empaquetados (por ejemplo, AVX1, AVX2 y/o alguna forma del formato de instrucción genérico compatible con vectores (U=0 y/o U=1) descrito anteriormente), permitiendo así que las operaciones utilizadas por muchas aplicaciones multimedia se realicen usando datos empaquetados.
Debe entenderse que el núcleo puede admitir múltiples hilos (ejecutar dos o más conjuntos paralelos de operaciones o hilos), y puede hacerlo de una variedad de maneras, que incluyen múltiples hilos seccionados en tramos de tiempo, múltiples hilos simultáneos (donde un único núcleo físico proporciona un núcleo lógico para cada uno de los hilos que el núcleo físico está tratando simultáneamente), o una combinación de lo anterior (por ejemplo, extracción y decodificación seccionadas en tramos de tiempo y, posteriormente, múltiples hilos simultáneos, tal como en la tecnología Intel® Hyperthreading).
Si bien el cambio de nombre de registros se describe en el contexto de la ejecución fuera de orden, debe entenderse que el cambio de nombre de registros puede usarse en una arquitectura en orden. Si bien la forma de realización ilustrada del procesador también incluye diferentes unidades de memoria caché de datos e instrucciones 2534/2574 y una unidad de memoria caché L2 compartida 2576, formas de realización alternativas pueden tener una única memoria caché interna tanto para instrucciones como para datos, tal como, por ejemplo, una caché interna de nivel 1 (L1) o múltiples niveles de memoria caché interna. En algunas formas de realización, el sistema puede incluir una combinación de una memoria caché interna y una memoria caché externa que es externa al núcleo y/o al procesador. De forma alternativa, toda la memoria caché puede ser externa al núcleo y/o al procesador.
La Figura 14A y la Figura 14B ilustran un diagrama de bloques de una arquitectura de núcleo en orden ejemplar más específica, cuyo núcleo sería uno de varios bloques lógicos (incluidos otros núcleos del mismo tipo y/o tipos diferentes) en un chip. Los bloques lógicos se comunican a través de una red de interconexión de alto ancho de banda (por ejemplo, una red de anillo) con alguna lógica de función fija, interfaces de E/S de memoria y otra lógica de E/S necesaria, dependiendo de la aplicación.
La Figura 14A es un diagrama de bloques de un único núcleo de procesador, junto con su conexión a la red de interconexión en pastilla 2602 y con su subconjunto local de la memoria caché de nivel 2 (L2) 2604, de acuerdo con formas de realización de la invención. En una forma de realización, un decodificador de instrucciones 2600 admite el conjunto de instrucciones x86 con una extensión de conjunto de instrucciones de datos empaquetados. Una memoria caché L1 2606 permite accesos de baja latencia a la memoria caché en las unidades escalares y vectoriales. Mientras que en una forma de realización (para simplificar el diseño), una unidad escalar 2608 y una unidad vectorial 2610 utilizan diferentes conjuntos de registros (respectivamente, registros escalares 2612 y registros vectoriales 2614) y los datos transferidos entre ellos se escriben en la memoria y luego se leen de nuevo desde una memoria caché de nivel 1 (L1) 2606, formas de realización alternativas de la invención pueden utilizar un enfoque diferente (por ejemplo, utilizar un único conjunto de registros o incluir una ruta de comunicación que permita transferir datos entre los dos archivos de registros sin ser escritos y leídos de nuevo).
El subconjunto local de la memoria caché L2 2604 es parte de una memoria caché global L2 que está dividida en diferentes subconjuntos locales, uno por núcleo de procesador. Cada núcleo de procesador tiene una ruta de acceso directa a su propio subconjunto local de la memoria caché L22604. Los datos leídos por un núcleo de procesador se almacenan en su subconjunto de memoria caché L22604 y se puede acceder a los mismos rápidamente, en paralelo con otros núcleos de procesador que acceden a sus propios subconjuntos de memoria caché locales L2. Los datos escritos por un núcleo de procesador se almacenan en su propio subconjunto de memoria caché L22604 y se eliminan de otros subconjuntos, si es necesario. La red de anillo garantiza la coherencia de los datos compartidos. La red de anillo es bidireccional para permitir que agentes tales como núcleos de procesador, memorias caché L2 y otros bloques lógicos se comuniquen entre sí dentro del chip. Cada ruta de datos en anillo tiene 1012 bits de ancho por dirección.
La Figura 14B es una vista expandida de parte del núcleo de procesador en la Figura 14A de acuerdo con formas de realización de la invención. La Figura 14B incluye una parte de memoria caché de datos L1 2606A de la memoria caché L1 2604, así como más detalles con respecto a la unidad vectorial 2610 y los registros vectoriales 2614. Específicamente, la unidad vectorial 2610 es una unidad de procesamiento vectorial (VPU) con un ancho de 16 (véase la ALU 2628 con un ancho de 16), que ejecuta una o más de las instrucciones de números enteros, de coma flotante de precisión simple y de coma flotante de doble precisión. La VPU admite la combinación arbitraria (swizzling) de las entradas de registro con la unidad de combinación arbitraria 2620, la conversión numérica con las unidades de conversión numérica 2622A-B y la replicación con la unidad de replicación 2624 en la entrada de memoria. Los registros de máscara de escritura 2626 permiten predecir las escrituras vectoriales resultantes.
La Figura 15 es un diagrama de bloques de un procesador 2700 que puede tener más de un núcleo, puede tener un controlador de memoria integrado y puede tener gráficos integrados de acuerdo con formas de realización de la invención. Las cajas de líneas continuas en la Figura 15 ilustran un procesador 2700 con un único núcleo 2702A, un agente de sistema 2710, un conjunto de una o más unidades de controlador de bus 2716, mientras que la adición opcional de las cajas de líneas discontinuas ilustra un procesador alternativo 2700 con múltiples núcleos 2702A-N, un conjunto de una o más unidades de controlador de memoria integrada 2714 en la unidad de agente de sistema 2710 y lógica de propósito especial 2708.
Por lo tanto, diferentes implementaciones del procesador 2700 pueden incluir: 1) una CPU con lógica de propósito especial 2708, que es lógica de gráficos y/o científica (capacidad de proceso) integrada (que puede incluir uno o más núcleos), y donde los núcleos 2702A-N son uno o más núcleos de propósito general (por ejemplo, núcleos en orden de propósito general, núcleos fuera de orden de propósito general, una combinación de los dos); 2) un coprocesador donde los núcleos 2702A-N son un gran número de núcleos de propósito especial destinados principalmente a los gráficos y/o la ciencia (capacidad de proceso); y 3) un coprocesador donde los núcleos 2702A-N son un gran número de núcleos en orden de propósito general. Por lo tanto, el procesador 2700 puede ser un procesador de propósito general, un coprocesador o un procesador de propósito especial, tal como, por ejemplo, un procesador de red o de comunicación, un motor de compresión, un procesador de gráficos, GPGPU (unidad de procesamiento de gráficos de propósito general), un coprocesador de muchos núcleos integrados (MIC) de alto rendimiento (que incluye 30 núcleos o más), un procesador integrado o similares. El procesador se puede implementar en uno o más chips. El procesador 2700 puede ser una parte de y/o puede implementarse en uno o más sustratos usando cualquiera de una pluralidad de tecnologías de proceso, tal como, por ejemplo, BiCMOS, CMOS o NMOS.
La jerarquía de memoria incluye uno o más niveles de caché dentro de los núcleos, un conjunto o una o más unidades de memoria caché compartidas 2706, y memoria externa (no mostrada) acoplada al conjunto de unidades de controlador de memoria integrada 2714. El conjunto de unidades de memoria caché compartidas 2706 puede incluir una o más memoria caché de nivel medio, tal como nivel 2 (L2), nivel 3 (L3), nivel 4 (L4) u otros niveles de memoria caché, una memoria caché de último nivel (LLC) y/o combinaciones de las mismas. Si bien en una forma de realización una unidad de interconexión basada en anillo 2712 interconecta la lógica de gráficos integrada 2708, el conjunto de unidades de memoria caché compartidas 2706 y la unidad de agente de sistema 2710/unidad(es) de controlador de memoria integrada 2714, formas de realización alternativas pueden utilizar cualquier cantidad de técnicas ampliamente conocidas para interconectar dichas unidades. En una forma de realización, la coherencia se mantiene entre una o más unidades de memoria caché 2706 y los núcleos 2702-A-N.
En algunas formas de realización, uno o más de los núcleos 2702A-N admiten múltiples hilos. El agente de sistema 2710 incluye esos componentes que coordinan y hacen funcionar núcleos 2702A-N. La unidad de agente de sistema 2710 puede incluir, por ejemplo, una unidad de control de energía (PCU) y una unidad de visualización. La PCU puede ser o incluir lógica y componentes necesarios para regular el estado de energía de los núcleos 2702A-N y la lógica de gráficos integrada 2708. La unidad de visualización es para activar uno o más dispositivos de visualización conectados externamente.
Los núcleos 2702A-N pueden ser homogéneos o heterogéneos en términos de conjunto de instrucciones de arquitectura; es decir, dos o más de los núcleos 2702A-N pueden ser capaces de ejecutar el mismo conjunto de instrucciones, mientras que otros pueden ser capaces de ejecutar solo un subconjunto de ese conjunto de instrucciones o un conjunto de instrucciones diferente.
La Figuras 16 a 20 son diagramas de bloques de arquitecturas informáticas ejemplares. También son adecuados otros diseños y configuraciones de sistema conocidos en la técnica para ordenadores portátiles, ordenadores de escritorio, PC de mano, asistentes digitales personales, estaciones de trabajo de ingeniería, servidores, dispositivos de red, concentradores de red, conmutadores, procesadores integrados, procesadores de señales digitales (DSP), dispositivos gráficos, dispositivos de videojuegos, decodificadores, microcontroladores, teléfonos celulares, reproductores multimedia portátiles, dispositivos portátiles y otros diversos dispositivos electrónicos. En general, una gran variedad de sistemas o dispositivos electrónicos capaces de incorporar un procesador y/u otra lógica de ejecución tal como se describe en el presente documento son, por lo general, adecuados.
Haciendo referencia a continuación a la Figura 16, se muestra un diagrama de bloques de un sistema 2800 de acuerdo con una forma de realización de la presente invención. El sistema 2800 puede incluir uno o más procesadores 2810, 2815, que están acoplados a un concentrador de control 2820. En una forma de realización, el concentrador de controlador 2820 incluye un concentrador de controlador de memoria gráfica (GMCH) 2890 y un concentrador de entrada/salida (IOH) 2850 (que pueden estar en chips diferentes); el GMCH 2890 incluye controladores de memoria y de gráficos a los cuales están acoplados una memoria 2840 y un coprocesador 2845; el IOH 2850 acopla dispositivos de entrada/salida (E/S) 2860 al GMCH 2890. De forma alternativa, uno o ambos de los controladores de memoria y gráficos están integrados dentro del procesador (como se describe en el presente documento), la memoria 2840 y el coprocesador 2845 están acoplados directamente al procesador 2810, y el concentrador de controlador 2820 en un solo chip con el IOH 2850.
La naturaleza opcional de los procesadores adicionales 2815 se denota en la Figura 16 con líneas discontinuas. Cada procesador 2810, 2815 puede incluir uno o más de los núcleos de procesamiento descritos en el presente documento y puede ser alguna versión del procesador 2700.
La memoria 2840 puede ser, por ejemplo, una memoria de acceso aleatorio dinámica (DRAM), una memoria de cambio de fase (PCM) o una combinación de ambas. Para al menos una forma de realización, el concentrador de controlador 2820 se comunica con el/los procesador(es) 2810, 2815 a través de un bus multipunto, tal como un bus frontal (FSB), una interfaz de punto a punto, tal como QuickPath Interconnect (QPI), o una conexión similar 2895.
En una forma de realización, el coprocesador 2845 es un procesador de propósito especial, tal como, por ejemplo, un procesador MIC de alto rendimiento, un procesador de red o de comunicación, un motor de compresión, un procesador de gráficos, GPGPU, un procesador integrado o similares. En una forma de realización, el concentrador de controlador 2820 puede incluir un acelerador de gráficos integrado.
Puede haber una variedad de diferencias entre los recursos físicos 2810, 2815 en términos de un espectro de métricas de mérito que incluyen características arquitectónicas, microarquitectónicas, térmicas, de consumo de energía y similares.
En una forma de realización, el procesador 2810 ejecuta instrucciones que controlan las operaciones de procesamiento de datos de un tipo general. Las instrucciones pueden incluir instrucciones de coprocesador. El procesador 2810 reconoce que estas instrucciones de coprocesador son de un tipo que debería ser ejecutado por el coprocesador asociado 2845. Por consiguiente, el procesador 2810 emite estas instrucciones de coprocesador (o señales de control que representan instrucciones de coprocesador) en un bus de coprocesador u otra interconexión, al coprocesador 2845. El/los coprocesador(es) 2845 aceptan y ejecutan las instrucciones de coprocesador recibidas.
Haciendo referencia a continuación a la Figura 17, se muestra un diagrama de bloques de un primer sistema 2900 ejemplar más específico de acuerdo con una forma de realización de la presente invención. Tal como se muestra en la Figura 17, el sistema multiprocesador 2900 es un sistema de interconexión punto a punto, e incluye un primer procesador 2970 y un segundo procesador 2980 acoplados mediante una interconexión punto a punto 2950. Cada uno de los procesadores 2970 y 2980 puede ser alguna versión del procesador 2700. En una forma de realización de la invención, los procesadores 2970 y 2980 son, respectivamente, los procesadores 2810 y 2815, mientras que el coprocesador 2938 es el coprocesador 2845. En otra forma de realización, los procesadores 2970 y 2980 son, respectivamente, el procesador 2810 y el coprocesador 2845.
Se muestran procesadores 2970 y 2980 que incluyen unidades de controlador de memoria integrada (IMC) 2972 y 2982, respectivamente. El procesador 2970 también incluye como parte de sus unidades de controlador de bus interfaces punto a punto (P-P) 2976 y 2978; asimismo, el segundo procesador 2980 incluye interfaces P-P 2986 y 2988. Los procesadores 2970, 2980 pueden intercambiar información mediante una interfaz punto a punto (P-P) 2950 usando circuitos de interfaz P-P 2978, 2988. Tal como se muestra en la Figura 17, los IMC 2972 y 2982 acoplan los procesadores a memorias respectivas, a saber, una memoria 2932 y una memoria 2934, que pueden ser partes de memoria principal unidas localmente a los procesadores respectivos.
Cada uno de los procesadores 2970, 2980 puede intercambiar información con un conjunto de chips 2990 a través de interfaces P-P individuales 2952, 2954 usando circuitos de interfaz punto a punto 2976, 2994, 2986, 2998. El conjunto de chips 2990 puede intercambiar opcionalmente información con el coprocesador 2938 a través de una interfaz de alto rendimiento 2939. En una forma de realización, el coprocesador 2938 es un procesador de propósito especial, tal como, por ejemplo, un procesador MIC de alto rendimiento, un procesador de red o de comunicación, un motor de compresión, un procesador de gráficos, GPGPU, un procesador integrado o similares.
Una memoria caché compartida (no mostrada) puede estar incluida en cualquiera de los procesadores o fuera de ambos procesadores, pero conectada a los procesadores a través de una interconexión P-P, de modo que la información de memoria caché local de uno o ambos procesadores puede almacenarse en la memoria caché compartida si un procesador pasa a un modo de baja energía. El conjunto de chips 2990 puede estar acoplado a un primer bus 2916 a través de una interfaz 2996. En una forma de realización, el primer bus 2916 puede ser un bus de interconexión de componentes periféricos (PCI), o un bus tal como un bus PCI Express u otro bus de interconexión de E/S de tercera generación, aunque el alcance de la presente invención no está limitado a esto.
Tal como se muestra en la Figura 17, varios dispositivos de E/S 2914 pueden estar acoplados al primer autobús 2916, junto con un puente de bus 2918 que acopla el primer bus 2916 a un segundo bus 2920. En una forma de realización, uno o más procesadores 2915 adicionales, tales como coprocesadores, procesadores MIC de alto rendimiento, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP)), matrices de puertas programables de campo o cualquier otro procesador, están acoplados al primer bus 2916. En una forma de realización, el segundo bus 2920 puede ser un bus de bajo recuento de patillas (LPC). Varios dispositivos se pueden acoplar a un segundo bus 2920, incluidos, por ejemplo, un teclado y/o un ratón 2922, dispositivos de comunicación 2927 y una unidad de almacenamiento 2928, tal como una unidad de disco u otro dispositivo de almacenamiento masivo que puede incluir instrucciones/código y datos 2930, en una forma de realización. Además, una E/S de audio 2924 puede estar acoplada al segundo bus 2920. Cabe señalar que otras arquitecturas son posibles. Por ejemplo, en lugar de la arquitectura punto a punto de la Figura 17, un sistema puede implementar un bus multipunto u otra arquitectura similar.
Haciendo referencia a continuación a la Figura 18, se muestra un diagrama de bloques de un segundo sistema 3000 ejemplar más específico de acuerdo con una forma de realización de la presente invención. Los elementos similares de la Figura 18 y la Figura 19 tienen números de referencia similares, y determinados aspectos de la Figura 17 se han omitido de la Figura 18 para no ocultar otros aspectos de la Figura 18. La Figura 18 ilustra que los procesadores 2970, 2980 pueden incluir memoria integrada y lógica de control ("CL") de E/S 2972 y 2982, respectivamente. Por lo tanto, la CL 2972, 2982 incluye unidades de controlador de memoria integrada e incluye lógica de control de E/S. La Figura 18 ilustra que no solo las memorias 2932, 2934 están acopladas a la CL 2972, 2982, sino también que los dispositivos de E/S 3014 también están acoplados a la lógica de control 2972, 2982. Dispositivos de E/S heredados 3015 están acoplados al conjunto de chips 2990.
Haciendo referencia a continuación a la Figura 19, se muestra un diagrama de bloques de un SoC 3100 de acuerdo con una forma de realización de la presente invención. Los elementos similares de la Figura 15 tienen números de referencia similares. Además, las cajas con líneas discontinuas son características opcionales en SoC más avanzados. En la Figura 19, una o más unidades de interconexión 3102 están acopladas a: un procesador de aplicaciones 3110 que incluye un conjunto de uno o más núcleos 202A-N y una o más unidades de memoria caché compartida 2706; una unidad de agente de sistema 2710; una o más unidades de controlador de bus 2716; una o más unidades de controlador de memoria integrada 2714; un conjunto o uno o más coprocesadores 3120 que pueden incluir lógica de gráficos integrada, un procesador de imágenes, un procesador de audio y un procesador de vídeo; una unidad de memoria estática de acceso aleatorio (SRAM) 3130; una unidad de acceso directo a memoria (DMA) 3132; y una unidad de visualización 3140 que está acoplada a uno o más dispositivos de visualización externos. En una forma de realización, el/los coprocesador(es) 3120 incluye(n) un procesador de propósito especial, tal como, por ejemplo, un procesador de red o de comunicación, un motor de compresión, una GPGPU, un procesador MIC de alto rendimiento, un procesador integrado o similares.
Las formas de realización de los mecanismos divulgados en el presente documento se pueden implementar en hardware, software, firmware o una combinación de dichos enfoques de implementación. Las formas de realización 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 elementos de almacenamiento y/o memoria volátiles y no volátiles), al menos un dispositivo de entrada y al menos un dispositivo de salida.
Código de programa, tal como el código 2930 ilustrado en la Figura 17, se puede aplicar a instrucciones de entrada para realizar las funciones descritas en el presente documento y generar información de salida. La información de salida se puede aplicar a uno o más dispositivos de salida, de manera conocida. A los efectos 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 específico de la aplicación (ASIC) o un microprocesador.
El código de programa se puede implementar en un lenguaje de programación orientado a objetos o de procedimiento de alto nivel para comunicarse con un sistema de procesamiento. El código de 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 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 forma de realización se pueden implementar mediante instrucciones representativas almacenadas en un medio legible por máquina que representa lógica diversa dentro del procesador, que cuando son leídas por una máquina hace que la máquina genera lógica para realizar las técnicas descritas en el presente documento. Dichas representaciones, conocidas como "núcleos IP" pueden almacenarse en un medio tangible y legible por máquina y suministrarse a varios clientes o instalaciones de fabricación para su carga en las máquinas de fabricación que realmente generan la lógica o fabrican el procesador.
Dichos medios de almacenamiento legibles por máquina pueden incluir, sin limitación, disposiciones tangibles no transitorias de artículos fabricados o formados por una máquina o dispositivo, incluidos medios de almacenamiento tales como discos duros, cualquier otro tipo de disco que incluye discos flexibles, discos ópticos, memorias de solo lectura en disco compacto (CD-ROM), discos compactos regrabables (CD-RW) y discos magneto-ópticos, dispositivos semiconductores tales como memorias de solo lectura (ROM), memorias de acceso aleatorio (RAM) tales como memorias de acceso aleatorio dinámicas (DRAM), memorias de acceso aleatorio estáticas (SRAM), memorias de solo lectura programables y borrables (EPROM), memorias flash, memorias de solo lectura programables y borrables eléctricamente (EEPROM), memoria de cambio de fase (PCM), tarjetas magnéticas u ópticas o cualquier otro tipo de medio adecuado para almacenar instrucciones electrónicas.
Por consiguiente, las formas de realización de la invención también incluyen medios tangibles legibles por máquina no transitorios que contienen instrucciones o que contienen datos de diseño, tales como lenguaje de descripción de hardware (HDL), que define estructuras, circuitos, aparatos, procesadores y/o características de sistema descritas en el presente documento. Dichas formas de realización también pueden denominarse productos de programa.
En algunos casos, se puede utilizar un convertidor de instrucciones para convertir una instrucción de un conjunto de instrucciones fuente en un conjunto de instrucciones objetivo. Por ejemplo, el convertidor de instrucciones puede traducir (por ejemplo, mediante el uso de 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 adicionales para ser procesadas por el núcleo. El convertidor de instrucciones se puede implementar en software, hardware, firmware o una combinación de los mismos. El convertidor de instrucciones puede estar en un procesador, fuera del procesador o estar parte en y parte fuera del procesador.
La Figura 20 es un diagrama de bloques que contrasta el uso de un convertidor de instrucciones de software para convertir instrucciones binarias de un conjunto de instrucciones fuente en instrucciones binarias de un conjunto de instrucciones objetivo de acuerdo con formas de realización de la invención. En la forma de realización ilustrada, el convertidor de instrucciones es un convertidor de instrucciones de software, aunque, de forma alterna, el convertidor de instrucciones se puede implementar en software, firmware, hardware o varias combinaciones de los mismos. La Figura 20 muestra un programa en un lenguaje de alto nivel 3202 que se puede compilar usando un compilador x86 3204 para generar código binario x86 3206 que se puede ejecutar de forma nativa mediante un procesador con al menos un núcleo de conjunto de instrucciones x86 3216. El procesador con al menos un núcleo de conjunto de instrucciones x86 3216 representa cualquier procesador que pueda 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 (1) una parte sustancial del conjunto de instrucciones del núcleo de conjunto de instrucciones Intel x86 o (2) versiones de código de objeto de aplicaciones u otro software destinado a ejecutarse en un procesador Intel con al menos un núcleo de conjunto de instrucciones x86, con el fin de lograr sustancialmente el mismo resultado que un procesador Intel con al menos un núcleo de conjunto de instrucciones x86. El compilador x863204 representa un compilador que puede hacerse funcionar para generar código binario x863206 (por ejemplo, código de objeto) que puede, con o sin procesamiento de vinculación adicional, ejecutarse en el procesador con al menos un núcleo de conjunto de instrucciones x86 3216. De manera similar, la Figura 20 muestra el programa en el lenguaje de alto nivel 3202 que se puede compilar usando un compilador de conjunto de instrucciones alternativo 3208 para generar código binario de conjunto de instrucciones alternativo 3210 que se puede ejecutar de forma nativa mediante un procesador sin al menos un núcleo de conjunto de instrucciones x863214 (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 3212 se utiliza para convertir el código binario x86 3206 en código que se puede ejecutar de forma nativa mediante el procesador sin un núcleo de conjunto de instrucciones x863214. No es probable que este código convertido sea el mismo que el código binario de conjunto de instrucciones alternativo 3210 porque un convertidor de instrucciones capaz de esto es difícil de realizar; sin embargo, el código convertido llevará a cabo la operación general y estará compuesto por instrucciones del conjunto de instrucciones alternativo. Por lo tanto, el convertidor de instrucciones 3212 representa software, firmware, hardware o una combinación de los mismos que, a través de emulación, simulación o cualquier otro proceso, permite que un procesador u otro dispositivo electrónico que no tiene un procesador o núcleo de conjunto de instrucciones x86 ejecute el código binario x86 3206.
Algunas partes de las descripciones detalladas anteriores se han presentado en términos de algoritmos y representaciones simbólicas de operaciones en bits de datos dentro de una memoria informática. Estas descripciones y representaciones algorítmicas son las maneras utilizadas por los expertos en las técnicas de procesamiento de datos para transmitir de manera más eficaz la esencia de su trabajo a otros expertos en la técnica. Un algoritmo se concibe aquí, y en general, como una secuencia autoconsistente de operaciones que dan lugar a un resultado deseado. Las operaciones son aquellas que requieren manipulaciones físicas de cantidades físicas.
Sin embargo, debe tenerse en cuenta que todos estos términos y otros similares deben asociarse a las cantidades físicas apropiadas y son meramente etiquetas convenientes aplicadas a estas cantidades. A menos que se indique específicamente lo contrario como resulta evidente a partir del análisis anterior, se aprecia que a lo largo de la descripción, los análisis que utilizan términos tales como los establecidos en las siguientes reivindicaciones se refieren a la acción y los procesos de un sistema informático, o dispositivo informático electrónico similar, que manipula y transforma datos representados como cantidades físicas (electrónicas) dentro de los registros y memorias del sistema informático en otros datos representados de manera similar como cantidades físicas dentro de las memorias o registros de sistema informático u otros dispositivos de almacenamiento, transmisión o visualización de información.
Las técnicas mostradas en las figuras se pueden implementar usando código y datos almacenados y ejecutados en uno o más dispositivos electrónicos. Dichos dispositivos electrónicos almacenan y comunican (internamente y/o con otros dispositivos electrónicos a través de una red) código y datos utilizando medios legibles por ordenador, tales como medios de almacenamiento no transitorios legibles por ordenador (por ejemplo, discos magnéticos, discos ópticos, memoria de acceso aleatorio, memoria de solo lectura, dispositivos de memoria flash, memoria de cambio de fase) y medios de transmisión transitorios legibles por ordenador (por ejemplo, señales eléctricas, ópticas, acústicas u otra forma de señales propagadas, tales como ondas portadoras, señales infrarrojas, señales digitales).
Los procesos o procedimientos representados en las figuras anteriores se pueden realizar mediante lógica de procesamiento que comprende hardware (por ejemplo, circuitos, lógica dedicada, etc.), firmware, software (por ejemplo, incorporado en un medio no transitorio legible por ordenador) o una combinación de ambos. Aunque los procesos o procedimientos se describen anteriormente en términos de algunas operaciones secuenciales, debe apreciarse que algunas de las operaciones descritas pueden realizarse en un orden diferente. Además, algunas operaciones se pueden realizar en paralelo en lugar de secuencialmente.
En la memoria descriptiva que antecede, se han descrito formas de realización de la invención con referencia a formas de realización ejemplares específicas de la misma. Será evidente que se pueden realizar diversas modificaciones en las mismas sin apartarse del alcance de la invención tal como se establece en las siguientes cláusulas. Por consiguiente, los dibujos de la memoria descriptiva deben considerarse en un sentido ilustrativo en lugar de un sentido restrictivo.

Claims (11)

REIVINDICACIONES
1. Un aparato, que comprende:
una pluralidad de registros de propósito general de 64 bits;
una pluralidad de registros de tipo "única instrucción, múltiples datos" (SIMD) de 128 bits;
una memoria caché de datos;
una memoria caché de instrucciones;
una memoria caché de nivel 2 (L2) acoplada a la memoria caché de datos y acoplada a la memoria caché de instrucciones;
una unidad de predicción de rama;
una memoria intermedia de traducción anticipada de instrucciones (TLB) acoplada a la memoria caché de instrucciones;
una unidad de extracción de instrucciones;
una unidad de decodificación acoplada a la unidad de extracción de instrucciones, donde la unidad de decodificación decodifica instrucciones, incluida una instrucción de planificación de algoritmo hash seguro (SHA) 256, teniendo la instrucción de planificación de SHA 256 un primer campo para especificar un primer registro de origen SIMD de 128 bits de los registros SIMD de 128 bits, donde el primer registro de origen SIMD de 128 bits almacena un primer operando que va a incluir un primer elemento de datos de 32 bits en bits [31:0], un segundo elemento de datos de 32 bits en bits [63:32], un tercer elemento de datos de 32 bits en bits [95:64], y un cuarto elemento de datos de 32 bits en bits [127:96], teniendo la instrucción de planificación de SHA 256 un segundo campo para especificar un segundo registro de origen SIMD de 128 bits de los registros SIMD de 128 bits, donde el segundo registro de origen SIMD de 128 bits almacena un segundo operando que va a incluir un quinto elemento de datos de 32 bits en bits [31:0], un sexto elemento de datos de 32 bits en bits [63:32], un séptimo elemento de datos de 32 bits en bits [95:64], y un octavo elemento de datos de 32 bits en bits [127:96]; y
una unidad de ejecución acoplada a la unidad de decodificación y acoplada a los registros SIMD de 128 bits, donde la unidad de ejecución ejecuta la instrucción de planificación SHA 256 y produce un resultado que debe incluir:
un primer elemento de datos de resultado de 32 bits en bits [31:0] que debe ser igual a una suma de a) el primer elemento de datos de 32 bits del primer operando y b) un valor igual al segundo elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el segundo elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el segundo elemento de datos de 32 bits desplazado a la derecha tres bits;
un segundo elemento de datos de resultado de 32 bits en bits [63:32] que debe ser igual a una suma de a) el segundo elemento de datos de 32 bits del primer operando y b) un valor igual al tercer elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el tercer elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el tercer elemento de datos de 32 bits desplazado a la derecha tres bits;
un tercer elemento de datos de resultado de 32 bits en bits [95:64] que debe ser igual a una suma de a) el tercer elemento de datos de 32 bits del primer operando y b) un valor igual al cuarto elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el cuarto elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el cuarto elemento de datos de 32 bits desplazado a la derecha tres bits; y
un cuarto elemento de datos de resultado de 32 bits en bits [127:96] que debe ser igual a una suma de a) el cuarto elemento de datos de 32 bits del primer operando y b) un valor igual al quinto elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el quinto elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el quinto elemento de datos de 32 bits desplazado a la derecha tres bits.
2. El aparato de la reivindicación 1, en el que la unidad de decodificación debe decodificar una segunda instrucción de planificación de SHA 256 que se utilizará para realizar otra parte de la planificación de SHA 256.
3. El aparato de cualquiera de las reivindicaciones 1-2, en el que uno de los primero y segundo registros de origen SIMD de 128 bits también se va a utilizar como destino para almacenar el resultado.
4. El aparato de cualquiera de las reivindicaciones 1-3, en el que el procesador es un procesador de computación de conjunto de instrucciones reducidas (RISC).
5. El aparato de cualquiera de las reivindicaciones 1-4, que comprende además una memoria intermedia de reordenamiento.
6. El aparato de cualquiera de las reivindicaciones 1-5, que comprende además lógica de cambio de nombre de registros.
7. El aparato de cualquiera de las reivindicaciones 1 -6, que comprende además una unidad de controlador de memoria integrada.
8. Un procedimiento, que comprende:
decodificar una instrucción de planificación de algoritmo hash seguro (SHA) 256, teniendo la instrucción de planificación de SHA 256 un primer campo que especifica un primer registro de origen SIMD de 128 bits, donde el primer registro de origen SIMD de 128 bits almacena un primer operando que incluye un primer elemento de datos de 32 bits en bits [31:0], un segundo elemento de datos de 32 bits en bits [63:32], un tercer elemento de datos de 32 bits en bits [95:64], y un cuarto elemento de datos de 32 bits en bits [127:96], teniendo la instrucción de planificación de SHA 256 un segundo campo que especifica un segundo registro de origen SIMD de 128 bits, donde el segundo registro de origen SIMD de 128 bits almacena un segundo operando que incluye un quinto elemento de datos de 32 bits en bits [31:0], un sexto elemento de datos de 32 bits en bits [63:32], un séptimo elemento de datos de 32 bits en bits [95:64], y un octavo elemento de datos de 32 bits en bits [127:96]; y
ejecutar la instrucción de planificación de SHA 256 para producir un resultado que incluye:
un primer elemento de datos de resultado de 32 bits en bits [31:0] que es igual a una suma de a) el primer elemento de datos de 32 bits del primer operando y b) un valor igual al segundo elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el segundo elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el segundo elemento de datos de 32 bits desplazado a la derecha tres bits;
un segundo elemento de datos de resultado de 32 bits en bits [63:32] que es igual a una suma de a) el segundo elemento de datos de 32 bits del primer operando y b) un valor igual al tercer elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el tercer elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el tercer elemento de datos de 32 bits desplazado a la derecha tres bits;
un tercer elemento de datos de resultado de 32 bits en bits [95:64] que es igual a una suma de a) el tercer elemento de datos de 32 bits del primer operando y b) un valor igual al cuarto elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el cuarto elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el cuarto elemento de datos de 32 bits desplazado a la derecha tres bits; y
un cuarto elemento de datos de resultado de 32 bits en bits [127:96] que es igual a una suma de a) el cuarto elemento de datos de 32 bits del primer operando y b) un valor igual al quinto elemento de datos de 32 bits rotado a la derecha siete bits, y sometido a una operación OR-exclusiva con el quinto elemento de datos de 32 bits rotado a la derecha dieciocho bits, y sometido a una operación OR-exclusiva con el quinto elemento de datos de 32 bits desplazado a la derecha tres bits.
9. El procedimiento de la reivindicación 8, que comprende además:
decodificar una segunda instrucción de planificación de SHA 256; y
ejecutar la segunda instrucción de planificación de SHA 256 para realizar otra parte de la planificación de SHA 256.
10. El procedimiento de cualquiera de las reivindicaciones 8-9, que comprende además usar uno de los primero y segundo registros de origen SIMD de 128 bits como destino para almacenar el resultado.
11. El procedimiento de cualquiera de las reivindicaciones 8-10, que comprende además realizar un cambio de nombre de registros.
ES19205541T 2012-03-30 2012-03-30 Procedimiento y aparato para procesar un algoritmo de hashing seguro SHA-2 Active ES2886348T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP19205541.6A EP3627764B1 (en) 2012-03-30 2012-03-30 Method and apparatus to process sha-2 secure hashing algorithm
PCT/US2012/031632 WO2013147877A1 (en) 2012-03-30 2012-03-30 Method and apparatus to process sha-2 secure hashing algorithm

Publications (1)

Publication Number Publication Date
ES2886348T3 true ES2886348T3 (es) 2021-12-17

Family

ID=49260931

Family Applications (1)

Application Number Title Priority Date Filing Date
ES19205541T Active ES2886348T3 (es) 2012-03-30 2012-03-30 Procedimiento y aparato para procesar un algoritmo de hashing seguro SHA-2

Country Status (6)

Country Link
US (2) US9632782B2 (es)
EP (3) EP3627764B1 (es)
CN (5) CN104509026B (es)
ES (1) ES2886348T3 (es)
PL (1) PL3627764T3 (es)
WO (1) WO2013147877A1 (es)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10515567B2 (en) 2010-06-01 2019-12-24 Ternarylogic Llc Cryptographic machines with N-state lab-transformed switching devices
US10650373B2 (en) 2010-06-01 2020-05-12 Ternarylogic Llc Method and apparatus for validating a transaction between a plurality of machines
US11336425B1 (en) 2010-06-01 2022-05-17 Ternarylogic Llc Cryptographic machines characterized by a Finite Lab-Transform (FLT)
CN104012032B (zh) * 2011-12-22 2017-04-19 英特尔公司 处理sha‑1安全散列算法的方法和设备
US20140095845A1 (en) 2012-09-28 2014-04-03 Vinodh Gopal Apparatus and method for efficiently executing boolean functions
US9251377B2 (en) 2012-12-28 2016-02-02 Intel Corporation Instructions processors, methods, and systems to process secure hash algorithms
US8924741B2 (en) 2012-12-29 2014-12-30 Intel Corporation Instruction and logic to provide SIMD secure hashing round slice functionality
US10038550B2 (en) 2013-08-08 2018-07-31 Intel Corporation Instruction and logic to provide a secure cipher hash round functionality
US9425953B2 (en) * 2013-10-09 2016-08-23 Intel Corporation Generating multiple secure hashes from a single data buffer
US10503510B2 (en) * 2013-12-27 2019-12-10 Intel Corporation SM3 hash function message expansion processors, methods, systems, and instructions
US9912481B2 (en) 2014-03-27 2018-03-06 Intel Corporation Method and apparatus for efficiently executing hash operations
US9513913B2 (en) 2014-07-22 2016-12-06 Intel Corporation SM4 acceleration processors, methods, systems, and instructions
US9317719B2 (en) 2014-09-04 2016-04-19 Intel Corporation SM3 hash algorithm acceleration processors, methods, systems, and instructions
US9467279B2 (en) 2014-09-26 2016-10-11 Intel Corporation Instructions and logic to provide SIMD SM4 cryptographic block cipher functionality
US9658854B2 (en) * 2014-09-26 2017-05-23 Intel Corporation Instructions and logic to provide SIMD SM3 cryptographic hashing functionality
US10454670B2 (en) 2016-06-10 2019-10-22 Cryptography Research, Inc. Memory optimization for nested hash operations
CN106452769B (zh) * 2016-09-13 2019-11-29 杭州华为数字技术有限公司 一种数据处理方法、数据处理装置以及处理器
US10755242B2 (en) * 2016-09-23 2020-08-25 Intel Corporation Bitcoin mining hardware accelerator with optimized message digest and message scheduler datapath
US10637648B2 (en) * 2017-03-24 2020-04-28 Micron Technology, Inc. Storage device hash production
CN107276745B (zh) * 2017-06-23 2020-08-04 上海兆芯集成电路有限公司 实施安全哈希算法的处理器以及数字信号处理方法
CN108959125B (zh) * 2018-07-03 2021-08-06 中国人民解放军国防科技大学 一种支持数据快速获取的存储访问方法和装置
US10824428B2 (en) * 2019-03-29 2020-11-03 Intel Corporation Apparatuses, methods, and systems for hashing instructions
US11537523B2 (en) * 2019-07-31 2022-12-27 Red Hat, Inc. Command result caching for building application container images
CN110515591B (zh) * 2019-08-05 2023-04-11 湖南天河国云科技有限公司 基于区块链的随机数生成方法及装置
WO2021038281A1 (en) * 2019-08-30 2021-03-04 Telefonaktiebolaget Lm Ericsson (Publ) A round-free cryptographic hashing device for secure and low-latency communications
CN113794552B (zh) * 2021-09-14 2023-07-07 山东省计算中心(国家超级计算济南中心) 一种基于simd的sm3并行数据加密运算方法及系统

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5357617A (en) * 1991-11-22 1994-10-18 International Business Machines Corporation Method and apparatus for substantially concurrent multiple instruction thread processing by a single pipeline processor
DE19737658C2 (de) * 1996-10-18 1999-10-14 Nat Semiconductor Corp Befehlsdecoder für einen Mikroprozessor
US6286134B1 (en) * 1999-04-23 2001-09-04 Sun Microsystems, Inc. Instruction selection in a multi-platform environment
US6829355B2 (en) * 2001-03-05 2004-12-07 The United States Of America As Represented By The National Security Agency Device for and method of one-way cryptographic hashing
US7640153B2 (en) * 2001-06-04 2009-12-29 Hewlett-Packard Development Company, L.P. Networked client-server architecture for transparently transforming and executing applications
US7921300B2 (en) * 2003-10-10 2011-04-05 Via Technologies, Inc. Apparatus and method for secure hash algorithm
US7627735B2 (en) * 2005-10-21 2009-12-01 Intel Corporation Implementing vector memory operations
US8788841B2 (en) * 2008-10-23 2014-07-22 Samsung Electronics Co., Ltd. Representation and verification of data for safe computing environments and systems
US20100115233A1 (en) * 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
CN101741560B (zh) * 2008-11-14 2014-07-02 北京石油化工学院 基于整数非线性映射的散列函数构造方法
CN101819519B (zh) * 2009-02-26 2014-04-02 航天信息股份有限公司 多功能数字签名电路
US8832464B2 (en) * 2009-03-31 2014-09-09 Oracle America, Inc. Processor and method for implementing instruction support for hash algorithms
US9680637B2 (en) * 2009-05-01 2017-06-13 Harris Corporation Secure hashing device using multiple different SHA variants and related methods
CN101888294A (zh) * 2009-05-12 2010-11-17 姚锡根 杂凑函数diha256及diha512
CN101997834B (zh) * 2009-08-10 2015-01-07 北京多思科技发展有限公司 支持高性能安全协议的装置
US9851969B2 (en) * 2010-06-24 2017-12-26 International Business Machines Corporation Function virtualization facility for function query of a processor
CN101894229A (zh) * 2010-06-30 2010-11-24 华南理工大学 一种兼容三种sha标准的装置及其实现方法
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
CN102156637A (zh) * 2011-05-04 2011-08-17 中国人民解放军国防科学技术大学 向量交叉多线程处理方法及向量交叉多线程微处理器
CN107133018B (zh) * 2011-12-22 2020-12-22 英特尔公司 执行groestl散列的指令
KR101511972B1 (ko) * 2011-12-23 2015-04-15 인텔 코포레이션 계층적 캐싱 설계에서 캐시들 간 효율적 통신을 위한 방법 및 장치

Also Published As

Publication number Publication date
PL3627764T3 (pl) 2022-01-03
CN104509026B (zh) 2018-04-24
US9632782B2 (en) 2017-04-25
CN108959123B (zh) 2024-02-20
US20170147340A1 (en) 2017-05-25
US10152326B2 (en) 2018-12-11
CN106878021B (zh) 2020-04-10
CN104509026A (zh) 2015-04-08
EP3627764B1 (en) 2021-07-28
CN111464316B (zh) 2023-10-27
EP2832036A1 (en) 2015-02-04
CN106878021A (zh) 2017-06-20
CN106802788A (zh) 2017-06-06
CN106802788B (zh) 2019-11-08
US20140195782A1 (en) 2014-07-10
EP3902200A1 (en) 2021-10-27
EP3627764A1 (en) 2020-03-25
CN108959123A (zh) 2018-12-07
CN111464316A (zh) 2020-07-28
WO2013147877A1 (en) 2013-10-03
EP2832036A4 (en) 2015-11-25

Similar Documents

Publication Publication Date Title
ES2886348T3 (es) Procedimiento y aparato para procesar un algoritmo de hashing seguro SHA-2
JP6449349B2 (ja) 複数の128ビットデータパスにおけるsha1ラウンド処理のための命令セット
KR101692914B1 (ko) Sha256 알고리즘의 메시지 스케줄링을 위한 명령어 세트
US10725779B2 (en) Method and apparatus to process SHA-2 secure hashing algorithm
WO2014105011A1 (en) Coalescing adjacent gather/scatter operations
WO2014051747A1 (en) Instruction set for skein256 sha3 algorithm on a 128-bit processor