ES2895266T3 - Aparatos y métodos para una arquitectura de procesador - Google Patents

Aparatos y métodos para una arquitectura de procesador Download PDF

Info

Publication number
ES2895266T3
ES2895266T3 ES16923787T ES16923787T ES2895266T3 ES 2895266 T3 ES2895266 T3 ES 2895266T3 ES 16923787 T ES16923787 T ES 16923787T ES 16923787 T ES16923787 T ES 16923787T ES 2895266 T3 ES2895266 T3 ES 2895266T3
Authority
ES
Spain
Prior art keywords
cache
instruction
cache line
zeros
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES16923787T
Other languages
English (en)
Inventor
Jason W Brandt
Robert S Chappell
Jesus Corbal
Edward T Grochowski
Stephen H Gunther
Buford M Guy
Thomas R Huff
Christopher J Hughes
Elmoustapha Ould-Ahmed-Vall
Ronak Singhal
Seyed Yahya Sotoudeh
Bret L Toll
Lihu Rappoport
David Papworth
James D Allen
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 ES2895266T3 publication Critical patent/ES2895266T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Un procesador que comprende: un descodificador (140, 314) para descodificar una instrucción para configurar una línea de memoria caché para indicar todo ceros; una unidad de ejecución (162), acoplada al descodificador y en respuesta a la descodificación de la instrucción, para emitir una orden de escritura para iniciar una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria; una memoria caché coherente (3904), acoplada a la unidad de ejecución, para recibir la orden de escritura, para determinar si hay un acierto en la memoria caché coherente en respuesta a la orden de escritura, para determinar si un estado de protocolo de coherencia de memoria caché (4065) de la línea de memoria caché (4070) acertada es un estado modificado o un estado exclusivo, para configurar una línea de memoria caché para indicar todo ceros cuando el estado de protocolo de coherencia de memoria caché es el estado modificado o el estado exclusivo, y para emitir la orden de escritura hacia una interconexión (3920) cuando hay una recepción de respuesta a fallo a la orden de escritura; el procesador comprende además la interconexión, en donde la interconexión, en respuesta a la recepción de la orden de escritura, está configurada para emitir un sondeo a cada una de una pluralidad de otras memorias caché coherentes para las que se ha de determinar si hay un acierto, en donde la interconexión, o la unidad de ejecución en respuesta a un mensaje desde la interconexión, está configurada para hacer que una línea de memoria caché en una de las memorias caché coherentes indique todo ceros cuando la orden de escritura y el sondeo no hicieron que se realizara la escritura de ceros de tamaño de línea de memoria caché.

Description

DESCRIPCIÓN
Aparatos y métodos para una arquitectura de procesador
CAMPO DE LA INVENCIÓN
El campo de la invención se refiere en general a ordenadores y, más específicamente, a arquitecturas de procesador. ANTECEDENTES
Los procesadores incluyen muchas estructuras y circuitos interconectados que funcionan conjuntamente para ejecutar instrucciones y procesar información. Estos circuitos y estructuras y las características que los mismos proporcionan se pueden incluir en un procesador en muchas configuraciones y combinaciones diferentes.
El documento US 7454577 B2 divulga un sistema de procesamiento de datos coherente de memoria caché que incluye al menos un primer y un segundo dominios de coherencia, incluyendo cada uno al menos una unidad de procesamiento. El primer dominio de coherencia incluye una primera memoria caché y una segunda memoria caché, y el segundo dominio de coherencia incluye una memoria caché coherente remota. La primera memoria caché incluye un controlador de memoria caché, una matriz de datos que incluye una ubicación de almacenamiento de datos para almacenar en memoria caché un bloque de memoria y un directorio de memoria caché. El directorio de memoria caché incluye un campo de etiqueta para almacenar una etiqueta de dirección en asociación con el bloque de memoria y un campo de estado de coherencia asociado con el campo de etiqueta y la ubicación de almacenamiento de datos. El campo de estado de coherencia tiene una pluralidad de estados posibles que incluyen un estado que indica que el bloque de memoria se comparte posiblemente con la segunda memoria caché en el primer dominio de coherencia y se almacena en memoria caché solo dentro del primer dominio de coherencia.
La presente invención proporciona una materia objeto de acuerdo con las reivindicaciones independientes, definiéndose realizaciones de la misma en las reivindicaciones dependientes.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
La presente invención se ilustra a modo de ejemplo, y no de limitación, en las figuras de los dibujos adjuntos, en las que referencias semejantes indican elementos similares, y en las que:
la figura 1A es un diagrama de bloques que ilustra tanto una canalización en orden como una canalización de cambio de nombre de registro y de emisión / ejecución fuera de orden ilustrativa de acuerdo con realizaciones de la invención; la figura 1B es un diagrama de bloques que ilustra tanto una realización ilustrativa de un núcleo de arquitectura en orden como un núcleo de arquitectura de cambio de nombre de registro y de emisión / ejecución fuera de orden ilustrativo a incluir en un procesador de acuerdo con realizaciones de la invención;
las figuras 2A - B ilustran un diagrama de bloques de una arquitectura de núcleo ilustrativa más específica, núcleo que sería uno de varios bloques lógicos (incluyendo otros núcleos del mismo tipo y / o de diferentes tipos) en un chip; la figura 2A 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 202 y con su subconjunto local de la memoria caché de Nivel 2 (L2) 204, de acuerdo con realizaciones de la invención;
la figura 2B es una vista ampliada de parte del núcleo de procesador en la figura 2A de acuerdo con realizaciones de la invención;
la figura 3 es un diagrama de bloques de un núcleo de procesador de emisión / ejecución fuera de orden ilustrativo que se puede incluir en un procesador de acuerdo con realizaciones de la invención;
la figura 4 es un diagrama de bloques de una unidad de recuperación ilustrativa que se puede incluir en un núcleo de procesador, tal como el de la figura 3, y / o un procesador de acuerdo con realizaciones de la invención;
la figura 5 es un diagrama de bloques de una unidad de descodificación ilustrativa que se puede incluir en un núcleo de procesador, tal como el de la figura 3, y / o un procesador de acuerdo con realizaciones de la invención;
la figura 6 es un diagrama de bloques de una unidad de ejecución de números enteros ilustrativa que se puede incluir en un núcleo de procesador, tal como el de la figura 3, y / o un procesador de acuerdo con realizaciones de la invención; la figura 7 es un diagrama de bloques de una unidad de ejecución de punto flotante (FP) ilustrativa que se puede incluir en un núcleo de procesador, tal como el de la figura 3, o un procesador de acuerdo con realizaciones de la invención; la figura 8 es un diagrama de bloques de una unidad de carga / almacenamiento ilustrativa que se puede incluir en un núcleo de procesador, tal como el de la figura 3, o un procesador de acuerdo con realizaciones de la invención; la figura 9 es un diagrama de bloques de un núcleo de procesador de emisión / ejecución fuera de orden ilustrativo, tal como el de la figura 3, que soporta múltiples subprocesos simultáneos (SMT) en un procesador de acuerdo con realizaciones de la invención;
la figura 10 es un diagrama de bloques que ilustra una característica de subdivisión estática de SMT que se puede incluir en un procesador de acuerdo con algunas realizaciones;
la figura 11 es un diagrama de flujo que ilustra un método para una característica de subdivisión estática de SMT que puede ser realizado por un procesador de acuerdo con algunas realizaciones;
la figura 12 es un diagrama de bloques que ilustra un asignador de recursos que se puede incluir en un procesador de acuerdo con algunas realizaciones;
la figura 13 es un diagrama de bloques que ilustra una característica de SMT algorítmica que se puede incluir en un procesador 1300 de acuerdo con realizaciones;
la figura 14 es un diagrama de flujo que ilustra un método para una característica de SMT algorítmica que puede ser realizado por un procesador de acuerdo con realizaciones;
la figura 15 es un diagrama de bloques que ilustra una característica de SMT algorítmica que se puede incluir en un procesador de acuerdo con realizaciones;
la figura 16 muestra un diagrama de bloques que implementa un algoritmo de prioridad de predictor de ramificaciones de acuerdo con una realización ilustrativa;
la figura 17 es un diagrama de bloques que ilustra un circuito de arbitraje para una característica de conmutación de subprocesos de SMT que se puede incluir en un procesador de acuerdo con realizaciones;
la figura 18 es un diagrama de bloques que ilustra un hardware de evitación de interbloqueos 1800 que se puede incluir en un procesador de acuerdo con realizaciones;
la figura 19 es un diagrama que muestra una carga de 256 bits en un archivo de registro de 256 bits usando un par de gops de 128 bits, de acuerdo con algunas realizaciones;
la figura 20 es un diagrama que ilustra un proceso para cargar 256 bits en un archivo de registro de 256 bits usando un par de gops de 128 bits, de acuerdo con algunas realizaciones;
la figura 21 es un diagrama que muestra un almacenamiento de 256 bits a partir de un archivo de registro de 256 bits usando gops de 128 bits, de acuerdo con algunas realizaciones.
La figura 22 es un diagrama que ilustra un proceso para almacenar 256 bits a partir de un archivo de registro de 256 bits usando un par de gops de 128 bits, de acuerdo con algunas realizaciones
la figura 23 es un diagrama de bloques que ilustra una característica para permitir operaciones aritméticas de 256 bits usando microoperaciones de 128 bits de acuerdo con algunas realizaciones;
la figura 24 es un diagrama de bloques que ilustra operaciones de cruce de carril usando un área de almacenamiento temporal para almacenar resultados parciales de acuerdo con algunas realizaciones;
la figura 25 es un diagrama de bloques que ilustra una característica de memoria caché de microoperaciones que se puede incluir en un procesador de acuerdo con realizaciones;
la figura 26 es un diagrama de flujo que ilustra un método para una característica de memoria caché de microoperaciones que puede ser realizado por un procesador de acuerdo con realizaciones;
la figura 27 es un diagrama de bloques que ilustra una característica de memoria caché de microoperaciones que se puede incluir en un procesador de acuerdo con una realización;
la figura 28 es un diagrama de bloques que ilustra una característica de memoria caché de microoperaciones que se puede incluir en un procesador de acuerdo con realizaciones;
la figura 29 es un diagrama de bloques que ilustra un esquema de cambio de nombre de registro y de seguimiento de dependencia que implica una tabla de alias de registro (RAT) de acuerdo con realizaciones;
la figura 30 es un diagrama de bloques que ilustra una RAT ampliada para incluir modismos con cero, ampliación de signo y ampliación de cero de acuerdo con realizaciones;
la figura 31 es un diagrama de bloques que ilustra la lectura de bits de RAT ampliados durante el cambio de nombre de registro y el paso de los mismos por la canalización con la microoperación que lee el registro de acuerdo con realizaciones;
la figura 32 es un diagrama de bloques que ilustra una característica de cambio de nombre de registro virtual que se puede incluir en un procesador de acuerdo con realizaciones;
la figura 33 es un diagrama de flujo que ilustra un método para una característica de cambio de nombre de registro virtual que puede ser realizado por un procesador de acuerdo con realizaciones;
la figura 34 es un diagrama de bloques que ilustra una canalización de emisión / ejecución que se puede implementar en un núcleo de procesador que soporta una característica de fisión / fusión de multiplicación - suma fusionada (FMA) de acuerdo con realizaciones de la invención;
la figura 35 es un diagrama de flujo que ilustra un método para la fisión / fusión de FMA que puede ser realizado por un procesador de acuerdo con realizaciones de la invención;
la figura 36 es un diagrama de bloques de un procesador que puede tener más de un núcleo, puede tener un controlador de memoria integrado y puede tener gráficos integrados de acuerdo con realizaciones de la invención; la figura 37 es un diagrama de bloques de un complejo de unidad central de procesamiento (CPU) ilustrativo que se puede incluir en un procesador de acuerdo con realizaciones de la invención;
la figura 38 es un diagrama de bloques de una jerarquía de memoria caché ilustrativa que se puede incluir en un procesador de acuerdo con realizaciones de la invención;
la figura 39 es un diagrama de bloques que ilustra una jerarquía de memoria dentro de la cual se puede implementar una instrucción de puesta a cero de línea de memoria caché de acuerdo con realizaciones;
la figura 40 es un diagrama de bloques que ilustra una memoria caché en un procesador que implementa una instrucción de puesta a cero de línea de memoria caché de acuerdo con realizaciones;
la figura 41 es un diagrama de flujo que ilustra realizaciones de la invención que, en primer lugar, intentan escribir en una memoria caché del agente de emisión antes de usar sondeos;
la figura 42 es un diagrama de flujo que ilustra realizaciones de la invención que se basan en sondeos de las memorias caché coherentes;
la figura 43 es un diagrama de flujo que ilustra realizaciones de la invención que usan sondeos de escritura -actualización para implementar el proceso de sondeo;
la figura 44 es un diagrama de flujo que ilustra realizaciones de la invención que usan sondeos de escritura -invalidación para implementar el proceso de sondeo.
la figura 45 es un diagrama de flujo que ilustra realizaciones de la invención que usan sondeos que invalidan y escriben en diferido para implementar el proceso de sondeo;
la figura 46 es un diagrama de flujo que ilustra las realizaciones de la invención que usan sondeos que escriben cualquier línea de memoria caché que acierta pero no envían los datos de vuelta al primer agente y no dan como resultado que los datos se lean desde la memoria de aguas abajo para implementar el proceso de sondeo;
la figura 47 es un diagrama que ilustra una característica de fusión de páginas que se puede incluir en un procesador de acuerdo con algunas realizaciones;
la figura 48 es un diagrama de flujo que ilustra un método para fusionar entradas de tabla de páginas para dar una única página efectiva de acuerdo con algunas realizaciones;
las figuras 49 - 52 son diagramas de bloques de arquitecturas de ordenador ilustrativas;
la figura 49 muestra un diagrama de bloques de un sistema de acuerdo con una realización de la presente invención; la figura 50 es un diagrama de bloques de un primer sistema ilustrativo más específico de acuerdo con una realización de la presente invención;
la figura 51 es un diagrama de bloques de un segundo sistema ilustrativo más específico de acuerdo con una realización de la presente invención;
la figura 52 es un diagrama de bloques de un sistema en chip (SoC) de acuerdo con una realización de la presente invención;
las figuras 53A - 53B son diagramas de bloques que ilustran un formato de instrucción apto para vectores genérico y plantillas de instrucción del mismo de acuerdo con realizaciones de la invención;
la figura 53A es un diagrama de bloques que ilustra un formato de instrucción apto para vectores genérico y plantillas de instrucción de clase A del mismo de acuerdo con realizaciones de la invención;
la figura 53B es un diagrama de bloques que ilustra el formato de instrucción apto para vectores genérico y plantillas de instrucción de clase B del mismo de acuerdo con realizaciones de la invención;
la figura 54A es un diagrama de bloques que ilustra un formato de instrucción apto para vectores específico ilustrativo de acuerdo con realizaciones de la invención;
la figura 54B es un diagrama de bloques que ilustra los campos de un formato de instrucción apto para vectores específico que conforma el campo de código de operación completo de acuerdo con una realización de la invención;
la figura 54C es un diagrama de bloques que ilustra los campos de un formato de instrucción apto para vectores específico que conforma el campo de índice de registro de acuerdo con una realización de la invención;
la figura 54D es un diagrama de bloques que ilustra los campos de un formato de instrucción apto para vectores específico que conforma el campo de operación de amplificación de acuerdo con una realización de la invención;
la figura 55 es un diagrama de bloques de una arquitectura de registro de acuerdo con una realización de la invención; y
La figura 56 es un diagrama de bloques que contrasta el uso de un convertidor de instrucciones de software para convertir instrucciones binarias en un conjunto de instrucciones de origen en instrucciones binarias en un conjunto de instrucciones de destino de acuerdo con realizaciones de la invención.
Las figuras 57 - 66 son ilustraciones de realizaciones de la invención en sistemas.
DESCRIPCIÓN DETALLADA
En la siguiente descripción, se exponen numerosos detalles específicos. Sin embargo, se entiende que se pueden poner en práctica realizaciones de la invención sin estos detalles específicos. En otros casos, circuitos, estructuras y técnicas bien conocidos no se han mostrado con detalle con el fin de no obstaculizar el entendimiento de esta descripción.
Referencias en la memoria descriptiva a "una sola realización", "una realización", "una realización de ejemplo", etc., indican que la realización descrita puede incluir un rasgo, estructura o característica particular, pero no es necesario que cada realización incluya el rasgo, estructura o característica particular. Además, tales expresiones no están necesariamente haciendo referencia a la misma realización. Además, cuando un rasgo, estructura o característica particular se describe en conexión con una realización, se sostiene que está dentro del conocimiento de un experto en la materia afectar a tal rasgo, estructura o característica en conexión con otras realizaciones, ya se describa, o no, de forma explícita.
Un aparato, tal como un ordenador, para procesar información puede incluir uno o más núcleos de procesador. Cada núcleo de procesador puede incluir una diversidad de circuitería, hardware, estructuras y otras características, en donde cada uno de los mismos por sí solo o cualquier número conjuntamente en combinación, se puede denominar característica. Las características se pueden implementar y / u organizar de diversas maneras, emplear diversas técnicas y verse implicadas en realizar diversos métodos para intentar lograr niveles deseados, en diversas combinaciones, de desempeño, consumo de energía y / u otras características (por ejemplo, aumentar el desempeño, disminuir el consumo de energía e implementar características de ahorro de energía, y mejorar la equidad, garantías de desempeño mínimo, capacidad de proceso, instrucciones por reloj (IPC), instrucciones por unidad de tiempo, calidad de servicio, eficiencia de memoria y / o tiempo, por enumerar solo algunos de los criterios aplicables). Realizaciones de la invención pueden incluir una o más de las características descritas en esta memoria descriptiva. En las figuras y en la descripción en esta memoria descriptiva se proporcionan algunos ejemplos de arquitecturas y sistemas en los que se puede materializar la invención.
Los núcleos de procesador en los que se puede materializar la invención se pueden implementar de diferentes formas, para diferentes fines y en diferentes procesadores. Por ejemplo, las implementaciones de tales núcleos pueden incluir: 1) un núcleo en orden de propósito general previsto para informática de propósito general; 2) un núcleo fuera de orden de propósito general de desempeño alto previsto para informática de propósito general; 3) un núcleo de propósito especial previsto principalmente para informática (de capacidad de proceso) científica y / o de gráficos. 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 previstos para informática de propósito general y / o uno o más núcleos fuera de orden de propósito general previstos para informática de propósito general; y 2) un coprocesador que incluye uno o más núcleos de propósito especial previstos principalmente para informática (de capacidad de proceso) científica y / o de gráficos. Estos procesadores diferentes conducen a arquitecturas de sistemas informáticos diferentes, que pueden incluir: 1) el coprocesador en un chip separado de la CPU; 2) el coprocesador en una pastilla separada en el mismo paquete que una CPU; 3) el coprocesador en la misma pastilla que una CPU (caso en el cual, un coprocesador de este tipo se denomina a veces lógica de propósito especial, como lógica (de capacidad de proceso) científica y / o de gráficos integrada, o como núcleos de propósito especial); y 4) un sistema en un chip (SoC) que puede incluir, en la misma pastilla, la CPU descrita (denominada a veces núcleo o núcleos de aplicación o procesador o procesadores de aplicación), el coprocesador descrito anteriormente, y funcionalidad adicional.
A continuación se describen arquitecturas de núcleo ilustrativas, seguidas de descripciones de procesadores y arquitecturas de ordenador ilustrativas. Cada procesador puede incluir uno o más núcleos, en donde cada núcleo y / o combinación de núcleos se puede estructurar y diseñar para ejecutar uno o más subprocesos, procesos u otras secuencias de instrucciones en diversos momentos. Las arquitecturas de núcleo y las técnicas de diseño pueden prever y / o soportar la ejecución concurrente de múltiples subprocesos, de acuerdo con cualquiera de un tipo de enfoques conocidos tales como múltiples subprocesos simultáneos (o simétricos) (SMT) o cualquier otro enfoque. En consecuencia, los núcleos de procesador en los que se puede materializar la invención, incluyendo los descritos como ejemplos a continuación, pueden incluir diversas características novedosas estructuradas y diseñadas para soportar SMT y / o diversas características conocidas modificadas de diversas formas novedosas para soportar SMT, como se puede describir a continuación. Para facilitar la descripción, el significado del término SMT en esta memoria descriptiva puede incluir SMT en combinación con cualquier otro enfoque de múltiples subprocesos (por ejemplo, segmentación de tiempo).
Como se ha mencionado anteriormente y se explica con más detalle a continuación, realizaciones de la presente divulgación pueden ser deseables por una diversidad de razones, que incluyen, por ejemplo, aumentar el desempeño, disminuir el consumo de energía e implementar características de ahorro de energía, y mejorar la equidad, garantías de desempeño mínimo, capacidad de proceso, instrucciones por reloj (IPC), instrucciones por unidad de tiempo, calidad de servicio, eficiencia de memoria y / o tiempo, por enumerar solo algunos de los criterios aplicables. Los criterios deseables enumerados anteriormente y descritos en el presente documento son ilustrativos; como se explica en el presente documento, la presente divulgación puede ser deseable por cualquiera de las razones enumeradas anteriormente, individualmente o en combinación, y puede además ser deseable por razones adicionales no enumeradas de forma específica anteriormente.
Además, como se ha mencionado anteriormente y se explica con más detalle a continuación, realizaciones de la presente divulgación se pueden aplicar a cualquier tipo de procesador o elemento de procesamiento, incluyendo procesadores de propósito general, procesadores de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores (por ejemplo, coprocesadores de seguridad), procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP), aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes o aceleradores de visión por ordenador), matrices de puertas programables en campo o cualquier otro procesador o dispositivo de procesamiento. El procesador o procesadores se pueden implementar en uno o más chips. El procesador o procesadores 3600 pueden ser parte de y / o se pueden implementar en uno o más sustratos usando cualquiera de un número de tecnologías de proceso, tales como, por ejemplo, BiCMOS, CMOS o NMOS. Los procesadores y dispositivos de procesamiento enumerados anteriormente y descritos en el presente documento son ilustrativos; como se explica en el presente documento, la presente divulgación es aplicable a cualquier procesador o dispositivo de procesamiento.
Además, como se ha mencionado anteriormente y se explica con más detalle a continuación, una realización de la presente divulgación se puede aplicar a procesadores o elementos de procesamiento que usan una amplia diversidad de conjuntos de instrucciones y arquitecturas de conjunto de instrucciones, incluyendo, por ejemplo, el conjunto de instrucciones de x86 (incluyendo, opcionalmente, ampliaciones que se han añadido con versiones más nuevas); el conjunto de instrucciones de MIPS, de MIPS Technologies de Sunnyvale, CA; el conjunto de instrucciones de ARM (con ampliaciones adicionales opcionales tales como NEON), de a Rm Holdings de Sunnyvale, CA; El conjunto de instrucciones "Power" de IBM, o cualquier otro conjunto de instrucciones, incluyendo los conjuntos de instrucciones de RISC y de CISC. Los conjuntos de instrucciones y las arquitecturas de conjunto de instrucciones enumerados anteriormente y descritos en el presente documento son ilustrativos; como se explica en el presente documento, la presente divulgación es aplicable a cualquier conjunto de instrucciones o arquitectura de conjunto de instrucciones.
Arquitecturas de núcleo ilustrativas
Diagrama de bloques de núcleo en orden y fuera de orden
La figura 1A es un diagrama de bloques que ilustra tanto una canalización en orden como una canalización de cambio de nombre de registro y de emisión / ejecución fuera de orden ilustrativa de acuerdo con realizaciones de la invención. La figura 1B es un diagrama de bloques que ilustra tanto una realización ilustrativa de un núcleo de arquitectura en orden como un núcleo de arquitectura de cambio de nombre de registro y de emisión / ejecución fuera de orden ilustrativo a incluir en un procesador de acuerdo con realizaciones de la invención. Los recuadros con líneas de trazo continuo en las figuras 1A - B ilustran la canalización en orden y el núcleo en orden, mientras que la adición opcional de los recuadros con líneas de trazo discontinuo ilustra la canalización y el núcleo de cambio de nombre de registro y de emisión / ejecución fuera de orden. Debido a que el aspecto en orden es un subconjunto del aspecto fuera de orden, se describirá el aspecto fuera de orden.
En la figura 1A, una canalización de procesador 100 incluye una fase de recuperación 102, una fase de descodificación de longitud 104, una fase de descodificación 106, una fase de asignación 108, una fase de cambio de nombre 110, una fase de programación (también conocida como despacho o emisión) 112, una fase de lectura de registro / lectura de memoria 114, una fase de ejecución 116, una fase de escritura en diferido / escritura en memoria 118, una fase de manejo de excepciones 122 y una fase de consignación 124.
La figura 1B muestra el núcleo de procesador 190 que incluye una unidad de extremo frontal 130 acoplada a una unidad de motor de ejecución 150, y ambas están acopladas a una unidad de memoria 170. El núcleo 190 puede ser un núcleo de informática de conjunto de instrucciones reducido (RISC), un núcleo de informática de conjunto de instrucciones complejo (CISC), un núcleo de palabra de instrucción muy larga (VLIW) o un núcleo de tipo híbrido o alternativo. Como otra opción más, el núcleo 190 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 informáticos de propósito general (GPGPU), un núcleo de gráficos o similares. Por ejemplo, como se ha explicado anteriormente, el núcleo 190 puede ser cualquier miembro de un conjunto que contiene: procesadores de propósito general, procesadores de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores (por ejemplo, coprocesadores de seguridad), procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP), aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes o aceleradores de visión por ordenador), matrices de puertas programables en campo o cualquier otro procesador o dispositivo de procesamiento.
La unidad de extremo frontal 130 incluye una unidad de predicción de ramificaciones 132 acoplada a una memoria caché de microoperaciones 133 y una unidad de memoria caché de instrucciones 134, que está acoplada a una memoria temporal de traducción adelantada de instrucciones (TLB) 136, que está acoplada a una unidad de recuperación de instrucciones 138, que está acoplada a una unidad de descodificación 140. La unidad de descodificación 140 (o descodificador) puede descodificar instrucciones y generar como una salida una o más microoperaciones, puntos de entrada de microcódigo, microinstrucciones, otras instrucciones u otras señales de control, que se descodifican a partir de, o que de otro modo reflejan, o se derivan de, las instrucciones originales. Las microoperaciones, puntos de entrada de microcódigo, microinstrucciones, etc., se pueden almacenar en al menos la memoria caché de microoperaciones 133. La unidad de descodificación 140 se puede implementar usando diversos mecanismos diferentes. Los ejemplos de mecanismos adecuados incluyen, pero no se limitan a, tablas de consulta, implementaciones de hardware, matrices lógicas programables (PLA), memorias de solo lectura (ROM) de microcódigo, etc. En una realización, el núcleo 190 incluye una ROM de microcódigo u otro medio que almacena microcódigo para ciertas macroinstrucciones (por ejemplo, en la unidad de descodificación 140 o de otro modo dentro de la unidad de extremo frontal 130). La memoria caché de microoperaciones 133 y la unidad de descodificación 140 están acopladas a una unidad de cambio de nombre / asignación 152 en la unidad de motor de ejecución 150. En diversas realizaciones, una memoria caché de microoperaciones, tal como 133 se puede denominar también, o en su lugar, memoria caché de operaciones, memoria caché de u-op, memoria caché de uop o memoria caché de gop; y las microoperaciones se pueden denominar micro-op, u-op, uop y gop.
La unidad de motor de ejecución 150 incluye la unidad de cambio de nombre / asignación 152 acoplada a una unidad de retirada 154 y un conjunto de una o más unidad o unidades de programación 156. La unidad o unidades de programación 156 representa cualquier número de programadores diferentes, incluyendo estaciones de reservas, ventana central de instrucciones, etc. La unidad o unidades de programación 156 está acoplada a la unidad o unidades de archivo o archivos de registro físico 158. Cada una de las unidades de archivo o archivos de registro físico 158 representa uno o más archivos de registro físico, y archivos diferentes de entre los mismos almacenan uno o más tipos de datos diferentes, tales como entero escalar, punto flotante escalar, entero apilado, punto flotante apilado, entero vectorial, punto flotante vectorial, estado (por ejemplo, un puntero de instrucción que es la dirección de la instrucción siguiente a ejecutar), etc. En una realización, la unidad de archivo o archivos de registro físico 158 comprende una unidad de registros de vector, una unidad de registros de máscara de escritura y una unidad de registros de escalar. Estas unidades de registro pueden proporcionar registros de vector arquitectónicos, registros de máscara de vector y registros de propósito general. La unidad o unidades de archivo o archivos de registro físico 158 se superpone con la unidad de retirada 154 para ilustrar diversas formas en las que se pueden implementar el cambio de nombre de registro y la ejecución fuera de orden (por ejemplo, usando una memoria temporal o memorias temporales de reordenación y un archivo o archivos de registro de retirada; usando un archivo o archivos futuros, una memoria temporal o memorias temporales de histórico y un archivo o archivos de registro de retirada; usando correlaciones de registros y una agrupación de registros; etc.). La unidad de retirada 154 y la unidad o unidades de archivo o archivos de registro físico 158 están acopladas a la agrupación o agrupaciones de ejecución 160. La agrupación o agrupaciones de ejecución 160 incluye un conjunto de una o más unidades de ejecución 162 y un conjunto de una o más unidades de acceso a memoria 164. Las unidades de ejecución 162 pueden realizar diversas operaciones (por ejemplo, desplazamientos, suma, resta, multiplicación) y sobre diversos tipos de datos (por ejemplo, punto flotante escalar, entero apilado, punto flotante apilado, entero vectorial, punto flotante vectorial). Aunque algunas realizaciones pueden incluir un número de unidades de ejecución dedicadas a funciones o conjuntos de funciones específicos, otras realizaciones pueden incluir solo una unidad de ejecución o múltiples unidades de ejecución que realizan, todas ellas, todas las funciones. La unidad o unidades de programación 156, la unidad o unidades de archivo o archivos de registro físico 158 y la agrupación o agrupaciones de ejecución 160 se muestran como posiblemente una pluralidad debido a que ciertas realizaciones crean canalizaciones separadas para ciertos tipos de datos / operaciones (por ejemplo, una canalización de números enteros escalares, una canalización de punto flotante escalar / número entero apilado / punto flotante apilado / número entero vectorial / punto flotante vectorial y / o una canalización de acceso a memoria que tienen, cada una, su propia unidad de programación, unidad de archivo o archivos de registro físico y / o agrupación de ejecución - y, en el caso de una canalización de acceso a memoria separada, se implementan ciertas realizaciones en las que solo la agrupación de ejecución de esta canalización tiene la unidad o unidades de acceso a memoria (164). También se debería entender que, cuando se usan canalizaciones separadas, una o más de estas canalizaciones pueden ser de emisión / ejecución fuera de orden y, el resto, en orden.
El conjunto de unidades de acceso a memoria 164 está acoplado a la unidad de memoria 170, que incluye una unidad de TLB de datos 172 acoplada a una unidad de memoria caché de datos 174 acoplada a una unidad de memoria caché de nivel 2 (L2) 176. En una realización ilustrativa, las unidades de acceso a memoria 164 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 172 en la unidad de memoria 170. La unidad de memoria caché de instrucciones 134 está acoplada adicionalmente a una unidad de memoria caché de nivel 2 (L2) 176 en la unidad de memoria 170. La unidad de memoria caché de L2176 está acoplada a otros uno o más niveles de memoria caché y, en última instancia, a una memoria principal.
A modo de ejemplo, la arquitectura de núcleo de cambio de nombre de registro y de emisión / ejecución fuera de orden ilustrativa puede implementar la canalización 100 como sigue: 1) la recuperación de instrucciones 138 realiza las fases de recuperación y de descodificación de longitud 102 y 104; 2) la unidad de descodificación 140 realiza la fase de descodificación 106; 3) la unidad de cambio de nombre / asignación 152 realiza la fase de asignación 108 y la fase de cambio de nombre 110; 4) la unidad o unidades de programación 156 realiza la fase de programación 112; 5) la unidad o unidades de archivo o archivos de registro físico 158 y la unidad de memoria 170 realizan la fase de lectura de registro / lectura de memoria 114; la agrupación de ejecución 160 realiza la fase de ejecución 116; 6) la unidad de memoria 170 y la unidad o unidades de archivo o archivos de registro físico 158 realizan la fase de escritura en diferido / escritura en memoria 118; 7) diversas unidades pueden estar implicadas en la fase de manejo de excepciones 122; y 8) la unidad de retirada 154 y la unidad o unidades de archivo o archivos de registro físico 158 realizan la fase de consignación 124.
El núcleo 190 puede soportar uno o más conjuntos de instrucciones (por ejemplo, el conjunto de instrucciones de x86 (con algunas ampliaciones que se han añadido con versiones más nuevas); el conjunto de instrucciones de MIPS, de MIPS Technologies de Sunnyvale, CA; el conjunto de instrucciones de ARM (con ampliaciones adicionales opcionales tales como NEON), de ARM Holdings de Sunnyvale, CA, el conjunto de instrucciones "Power" de IBM o cualquier otro conjunto de instrucciones, incluyendo los conjuntos de instrucciones tanto de RISC como de CISC), incluyendo la instrucción o instrucciones descritas en el presente documento. En una realización, el núcleo 190 incluye lógica para soportar una ampliación de conjunto de instrucciones de datos apilados (por ejemplo, AVX, AVX2, AVX-512), permitiendo de ese modo que las operaciones usadas por muchas aplicaciones multimedia se realicen usando datos apilados.
Se debería entender que el núcleo puede soportar subprocesos múltiples (ejecutando dos o más conjuntos de operaciones o subprocesos paralelos), y puede hacer esto de una diversidad de formas, incluyendo múltiples subprocesos segmentados en tiempo, SMT (por ejemplo, un único núcleo físico proporciona un núcleo lógico para cada uno de los subprocesos que el núcleo físico es simultáneamente de múltiples subprocesos), o una combinación de los mismos (por ejemplo, recuperación y descodificación segmentada en tiempo, y SMT a partir de entonces, tal como en la tecnología Hyperthreading de Intel®).
Aunque el cambio de nombre de registro se describe en el contexto de la ejecución fuera de orden, se debería entender que el cambio de nombre de registro se puede usar en una arquitectura en orden. Aunque la realización ilustrada del procesador también incluye unidades de memoria caché de instrucciones y de datos 134 / 174 separadas y una unidad de memoria caché de L2 176 compartida, realizaciones alternativas pueden tener una única memoria caché interna tanto para instrucciones como para datos, tales como, por ejemplo, una memoria caché interna de nivel 1 (L1) o múltiples niveles de memoria caché interna. En algunas realizaciones, el sistema puede incluir una combinación de una memoria caché interna y una memoria caché externa que es externa al núcleo y / o al procesador. Como alternativa, la totalidad de la memoria caché o memorias caché pueden ser externas al núcleo y / o al procesador.
Arquitectura de núcleo ilustrativa específica
Las figuras 2A - B ilustran un diagrama de bloques de una arquitectura de núcleo ilustrativa más específica, núcleo que sería uno de varios bloques lógicos (incluyendo otros núcleos del mismo tipo y / o de diferentes tipos) en un chip. Los bloques lógicos se comunican a través de una red de interconexión de ancho de banda alto (por ejemplo, una red en anillo) con alguna lógica de función, interfaces de E / S de memoria y otra lógica de E / S necesaria fijas, dependiendo de la aplicación.
La figura 2A 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 202 y con su subconjunto local de la memoria caché de Nivel 2 (L2) 204, de acuerdo con realizaciones de la invención. En una realización, un descodificador de instrucciones 200 soporta el conjunto de instrucciones de x86 con una ampliación de conjunto de instrucciones de datos apilados. Una memoria caché de L1 206 permite accesos de latencia baja a memoria caché a las unidades de escalares y de vectores. Mientras que, en una realización (para simplificar el diseño), una unidad de escalares 208 y una unidad de vectores 210 usan conjuntos de registros separados (respectivamente, los registros de escalar 212 y los registros de vector 214) y los datos transferidos entre los mismos se escriben en memoria y, entonces, se recuperan por lectura a partir de una memoria caché de nivel 1 (L1) 206, realizaciones alternativas de la invención pueden usar un enfoque diferente (por ejemplo, usar un único conjunto de registros o incluir una trayectoria de comunicación que permite que se transfieran datos entre los dos archivos de registro sin escribirse y recuperarse por lectura).
El subconjunto local de la memoria caché de L2204 es parte de una memoria caché de L2 global que se divide en subconjuntos locales separados, uno por núcleo de procesador. Cada núcleo de procesador tiene una trayectoria de acceso directo a su propio subconjunto local de la memoria caché de L2 204. Los datos leídos por un núcleo de procesador se almacenan en su subconjunto de memoria caché de L2 204 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é de L2 locales. Los datos escritos por un núcleo de procesador se almacenan en su propio subconjunto de memoria caché de L2204 y se purgan de otros subconjuntos, si es necesario. La red de anillo asegura la coherencia para datos compartidos. La red en anillo es bidireccional para permitir que agentes tales como núcleos de procesador, memorias caché de L2 y otros bloques lógicos se comuniquen entre sí dentro del chip. Cada trayectoria de datos de anillo tiene un ancho de 1012 bits por dirección.
La figura 2B es una vista ampliada de parte del núcleo de procesador en la figura 2A de acuerdo con realizaciones de la invención. La figura 2B incluye una parte de memoria caché de datos de L1 206A de la memoria caché de L1 204, así como más detalles con respecto a la unidad de vector 210 y los registros de vector 214. Específicamente, la unidad de vector 210 es una unidad de procesamiento de vectores (VPU) de anchura 16 (véase la ALU de anchura 16228), que ejecuta una o más de instrucciones de tipo entero, flotante de precisión simple y flotante de precisión doble. La VPU soporta la agitación de las entradas de registro con la unidad de agitación 220, la conversión numérica con las unidades de conversión numérica 222A - B y la replicación con la unidad de replicación 224 sobre la entrada de memoria. Los registros de máscara de escritura 226 permiten declarar escrituras de vector resultantes.
Arquitectura de núcleo fuera de orden ilustrativa específica
La figura 3 es un diagrama de bloques de un núcleo de procesador de emisión / ejecución fuera de orden ilustrativo que se puede incluir en un procesador de acuerdo con realizaciones de la invención. En la figura 3, el núcleo de procesador 300 incluye la unidad de extremo frontal 310, la unidad de números enteros 320, la unidad de FP 330, la unidad de carga - almacenamiento 340 y la unidad de memoria caché de nivel 2 (L2) 350. La figura 3 se proporciona para fines ilustrativos y, en este sentido, muestra diversas unidades dispuestas y nombradas de acuerdo con uno de muchos enfoques que son posibles de acuerdo con realizaciones de la presente invención. Cualesquiera una o más realizaciones se pueden ilustrar de una o más formas. Cada unidad mostrada en la figura 3 puede incluir circuitería y / o estructuras que se pueden incluir en otras unidades en otras representaciones de realizaciones. Por ejemplo, la unidad de extremo frontal 310 se puede ilustrar y describir, adicionalmente o como alternativa, como que incluye una unidad de recuperación, tal como la unidad de recuperación 400 en la figura 4, y una unidad de descodificación, tal como la unidad de descodificación 500 en la figura 5; cualquiera o la totalidad de la unidad de números enteros 320, la unidad de FP 330 y la unidad de carga - almacenamiento 340 se pueden ilustrar y describir, adicionalmente o como alternativa, por separado o de forma colectiva, como una o más unidades de ejecución; y así sucesivamente. Además, diversas unidades dentro del núcleo 300 se pueden acoplar de diversas formas; por lo tanto, por conveniencia, diferentes figuras pueden mostrar unidades dentro de diferentes unidades más grandes; por ejemplo, una unidad particular se puede mostrar dentro de una primera unidad más grande en una primera figura y dentro de una segunda unidad más grande en una segunda figura.
En la figura 3, la unidad de extremo frontal 310 incluye la unidad de predicción de ramificaciones 311, la unidad de memoria caché de microoperaciones (memoria caché de operaciones) 312, la unidad de memoria caché de instrucciones (memoria caché i) 313, la unidad de descodificación 314 y la unidad de cola de microoperaciones (microop) 315. La unidad de predicción de ramificaciones 311 incluye circuitería de predicción de ramificaciones, tal como una memoria temporal de destino de ramificaciones (BTB), para reducir el retardo de ramificación promedio y está acoplada a la unidad de memoria caché de operaciones 312 y a la unidad de memoria caché i 313. La unidad de memoria caché de operaciones 312 incluye una memoria caché de operaciones en la que almacenar en memoria caché microoperaciones asociadas con instrucciones. La unidad de memoria caché i 313 incluye una memoria caché i que, en una realización, puede ser una memoria caché i de cuatro vías de 64 K, en la que almacenar en memoria caché instrucciones. La unidad de memoria caché i 313 está acoplada a la unidad de descodificación 314 para proporcionar instrucciones almacenadas en memoria caché que se han de descodificar. La unidad de descodificación 314 incluye una circuitería de descodificación, tal como un descodificador de instrucciones, para descodificar instrucciones. En una realización, la unidad de extremo frontal 310 puede recuperar, y la unidad de descodificación 314 puede descodificar, hasta cuatro instrucciones por ciclo de reloj. La unidad de memoria caché de operaciones 312 y la unidad de descodificación 314 están acopladas, cada una, a la unidad de cola de microoperaciones 315 para proporcionar dos trayectorias para cargar microoperaciones en la unidad de cola de microoperaciones 315. La unidad de cola de microoperaciones 315 incluye una cola de microoperaciones que, en una realización, puede despachar seis microoperaciones por ciclo a una o más unidades de ejecución.
También en la figura 3, la unidad de números enteros 320 incluye la unidad de cambio de nombre de número entero 321; las unidades de programación de números enteros 322A, 322B, 322C, 322D, 322E y 322F (de forma colectiva, las unidades de programación de números enteros 322); el archivo de registro físico de números enteros 323; las unidades aritmético-lógicas (ALU) 324A, 324B, 324C y 324D (de forma colectiva, las ALU 324); y las unidades de generación de direcciones (AGU) 325A y 325B (de forma colectiva, las AGU 325). La unidad de cambio de nombre de número entero 321 está acoplada a la unidad de cola de microoperaciones 315 para recibir una o más microoperaciones a ejecutar, en su totalidad o en parte, por una o más de las ALU 324 y / o las AGU 325. La unidad de cambio de nombre de número entero 321 incluye circuitería de cambio de nombre de registro y también está acoplada a unidades de programación de números enteros 322 que, a su vez, están acopladas al archivo de registro físico de números enteros 323, para prever un cambio de nombre de registro de números enteros. Las unidades de programación de números enteros 322 incluyen circuitería de programación para programar microoperaciones a ejecutar, en su totalidad o en parte, por una o más de las ALU 324 y / o las AGU 325. El archivo de registro físico de números enteros 323 incluye un archivo de registros de números enteros físicos que, en una realización, puede incluir 168 registros de números enteros físicos. Cada una de las ALU 324 y las AGU 325 están acopladas al archivo de registro físico 323 para recibir valores a usar como entradas en la ejecución de microoperaciones y / o para proporcionar valores como salidas de la ejecución de microoperaciones.
También en la figura 3, la unidad de FP 330 incluye la unidad de cambio de nombre de FP 331, la unidad de programación de FP 332, el archivo de registro de FP 333, los multiplicadores de FP 334A y 334B (de forma colectiva, los multiplicadores de FP 334) y los sumadores de FP 335A y 335B (de forma colectiva, los sumadores de FP 335). La unidad de cambio de nombre de FP 331 está acoplada a la unidad de cola de microoperaciones 315 para recibir una o más microoperaciones a ejecutar, en su totalidad o en parte, por uno o más de los multiplicadores de FP 334 y / o los sumadores de FP 335. La unidad de cambio de nombre de FP 331 incluye circuitería de cambio de nombre de registro y también está acoplada a la unidad de programación de FP 332 que, a su vez, está acoplada al archivo de registro físico de FP 333, para prever un cambio de nombre de registro de FP. La unidad de programación de FP 332 incluye circuitería de programación para programar microoperaciones a ejecutar, en su totalidad o en parte, por uno o más de los multiplicadores de FP 334 y / o los sumadores de FP 335. Cada uno de los multiplicadores 334 y los sumadores 335 están acoplados al archivo de registro de FP 333 para recibir valores a usar como entradas en la ejecución de microoperaciones y / o para proporcionar valores como salidas de la ejecución de microoperaciones.
También en la figura 3, la unidad de carga - almacenamiento 340 incluye la unidad de cola de carga - almacenamiento 341 y la unidad de memoria caché de datos (memoria caché d) 342. La unidad de cola de carga - almacenamiento 341 puede incluir cualquier número de colas de carga y / o de almacenamiento, en una realización que prevé dos cargas y un almacenamiento por ciclo de reloj, acopladas a las AGU 325 para recibir direcciones de memoria para operaciones de carga y / o de almacenamiento. La unidad de memoria caché D 342 incluye una memoria caché d que, en una realización, puede ser una memoria caché d de nivel 1 (L1) de ocho vías de 32 K, en la que almacenar en memoria caché datos, acoplada al archivo de registro físico de números enteros 323, al archivo de registro de FP 333 y a la unidad de cola de carga - almacenamiento 341 para recibir y proporcionar datos generados por y a usar en la ejecución de microoperaciones.
También en la figura 3, la unidad de memoria caché de L2 350 incluye una memoria caché de L2 que, en una realización, puede ser una memoria caché de ocho vías de 512 K, en la que almacenar en memoria caché instrucciones y datos.
La figura 4 es un diagrama de bloques de una unidad de recuperación ilustrativa que se puede incluir en un núcleo de procesador, tal como el núcleo 300 de la figura 3, y / o un procesador de acuerdo con realizaciones de la invención. En la figura 4, la unidad de recuperación 400 incluye la unidad de recuento de programa (PC) siguiente 410, la unidad de memoria temporal de traducción adelantada (TLB) 420, la unidad de perceptrón de troceo 430, la unidad de matriz de destino indirecto (ITA) de pila de retorno de BTB 440, la unidad de cola de solicitud física 450, la unidad de microetiqueta 460 y la unidad de memoria caché i 470.
La figura 5 es un diagrama de bloques de una unidad de descodificación ilustrativa que se puede incluir en un núcleo de procesador, tal como el núcleo 300 de la figura 3, y / o un procesador de acuerdo con realizaciones de la invención. En la figura 5, la unidad de descodificación 500 incluye la unidad de memoria temporal de bytes de instrucciones 510, la unidad de selección 520, la unidad de descodificación 530, la unidad de memoria caché de operaciones 540, la unidad de cola de microoperaciones 550, la unidad de memoria de solo lectura (ROM) de microcódigo 560, la unidad de archivo de memoria de motor de pila (archivo de memoria) 570 y la unidad de despacho 580.
La figura 6 es un diagrama de bloques de una unidad de ejecución de números enteros ilustrativa que se puede incluir en un núcleo de procesador, tal como el núcleo 300 de la figura 3, o un procesador de acuerdo con realizaciones de la invención. En la figura 6, la unidad de ejecución de números enteros 600 incluye la unidad de correlación 610; la unidad de cola de retirada 620; las unidades de cola aritmético-lógica (ALQ) 630a , 630B, 630C y 630D (de forma colectiva, las ALQ 630); las unidades de cola de generación de direcciones (AGQ) 640A y 640B (de forma colectiva, las AGQ 640); la unidad de archivo de registro físico 650, la unidad de multiplexor (mux) de reenvío 660; las ALU 670A, 670B, 670C y 670D (de forma colectiva, las ALU 670); las AGU 680A y 680B (de forma colectiva, las AGU 680); y la unidad de carga - almacenamiento 690.
La figura 7 es un diagrama de bloques de una unidad de ejecución de FP ilustrativa que se puede incluir en un núcleo de procesador, tal como el núcleo 300 de la figura 3, o un procesador de acuerdo con realizaciones de la invención. En la figura 7, la unidad de ejecución de FP 700 incluye la unidad de cola de microoperaciones no programable 710, la unidad de cola de microoperaciones programable 720, la unidad de cola de retirada 730, la unidad de conversión de FP 740, el archivo de registro físico de FP 750, la unidad de mux de reenvío 760, los multiplicadores de FP 770A y 770B (de forma colectiva, los multiplicadores de FP 770) y los sumadores de FP 780A y 780B (de forma colectiva, los sumadores de FP 780).
La figura 8 es un diagrama de bloques de una unidad de carga / almacenamiento ilustrativa que se puede incluir en un núcleo de procesador, tal como el núcleo 300 de la figura 3, o un procesador de acuerdo con realizaciones de la invención. En la figura 8, la unidad de carga / almacenamiento 800 incluye la unidad de cola de carga 810, las unidades de selección de canalización de carga 811A y 811B (de forma colectiva, las unidades de selección de carga 811), las unidades de TLB 812A y 812B (de forma colectiva, las unidades de TLB 812), las unidades de canalización de datos 813A y 813B (de forma colectiva, las unidades de canalización de datos 813), la unidad de cola de almacenamiento 820, la unidad de recuperación previa 821, las unidades de selección de canalización de almacenamiento 822), la unidad de canalización de almacenamiento 823, la unidad de consignación de almacenamiento 824, la TLB de L1 / L2 y matriz de etiquetas de memoria caché de datos 830, la memoria caché de datos de L1 840, la memoria temporal de direcciones de memoria 850 y la memoria temporal de combinación de escritura 860.
La figura 9 es un diagrama de bloques de un núcleo de procesador de emisión / ejecución fuera de orden ilustrativo, tal como el núcleo 300 de la figura 3, que soporta SMT en un procesador de acuerdo con realizaciones de la invención. En la figura 9, el núcleo de procesador 900 incluye la unidad de extremo frontal 910, la unidad de números enteros 920, la unidad de FP 930, la unidad de carga - almacenamiento 940, la unidad de memoria caché de L2950 y la unidad de retirada 960. La unidad de extremo frontal 910 incluye la unidad de predicción de ramificaciones 911, la unidad de memoria caché de operaciones 912, la unidad de memoria caché i 913, la unidad de descodificación 914, la unidad de cola de microoperaciones 915 y la unidad de TLB de instrucciones 916. La unidad de números enteros 920 incluye la unidad de cambio de nombre de número entero 921, la unidad de programación de números enteros 922, el archivo de registro físico de números enteros 923, las ALU 924 y las AGU 925. La unidad de FP 930 incluye la unidad de cambio de nombre de FP 931, la unidad de programación de FP 932, el archivo de registro de FP 933, los multiplicadores de FP 934A y 934B (de forma colectiva, los multiplicadores de FP 934) y los sumadores de FP 935A y 935B (de forma colectiva, los sumadores de FP 935). La unidad de carga - almacenamiento 940 incluye la unidad de cola de carga 941A y la unidad de cola de almacenamiento 941B (de forma colectiva, la unidad de cola de carga -almacenamiento 941), la unidad de memoria caché de datos (memoria caché d) 942 y la unidad de TLB 943. La unidad de retirada 960 incluye una cola de retirada.
Características de SMT
Los núcleos de procesador de acuerdo con realizaciones de la invención pueden incluir diversas características para soportar SMT. Un número de tales características se describen por separado usando ejemplos no limitantes a continuación, pero las realizaciones pueden incluir cualquier combinación de tales características.
Subdivisión estática de recursos
Un núcleo de procesador puede soportar una característica de subdivisión estática de SMT de acuerdo con algunas realizaciones ilustrativas. Se pueden asignar subprocesos a recursos disponibles que se comparten de forma estática en una canalización de subprocesos múltiples simultáneos. En algunas realizaciones, los subprocesos se pueden asignar a recursos disponibles usando técnicas tales como un algoritmo basado en patrones para mejorar el desempeño y la eficiencia. En algunas realizaciones, esta característica puede mejorar sistemas informáticos proporcionando una compartición de recursos más eficiente entre subprocesos para recursos compartidos de forma estática. Esta también puede usar recursos disponibles que, de otro modo, habrían quedado sin usar debido a la subdivisión estática de SMT.
Por ejemplo, los recursos en una canalización se pueden compartir de forma estática, por ejemplo, 50 % - 50 %, entre dos subprocesos para proporcionar recursos iguales a ambos subprocesos. En algunas realizaciones, se pueden asignar diferentes porcentajes de recursos disponibles a cada subproceso, por ejemplo, basándose en patrones de carga de trabajo. Por ejemplo, si un subproceso se está estancando durante más tiempo que el otro subproceso y hay entradas vacías disponibles para el otro subproceso, las entradas disponibles se pueden asignar al subproceso estancado en lugar de mantener las mismas vacías en un recurso compartido de forma estática.
En algunas realizaciones, podría haber más de un subproceso con un patrón similar. En tales casos, se puede usar un esquema de prioridad para asignar recursos en el caso de un empate entre subprocesos. La rotura de empates se puede realizar, por ejemplo, mediante selección aleatoria, seleccionando el subproceso con el número inferior, seleccionando el subproceso con el número superior y / o seleccionando subprocesos alternos.
La figura 10 es un diagrama de bloques que ilustra una característica de subdivisión estática de SMT que se puede incluir en un procesador de acuerdo con algunas realizaciones. La característica de subdivisión estática de SMT puede incluir un Bloque de Detección de Patrones 1001 de acuerdo con una realización ilustrativa. El primer y el segundo recursos se pueden asignar de forma estática a los subprocesos TO y T1. Una tabla de base de patrón de consulta puede determinar que el subproceso T1 tiene un tiempo de estancamiento largo. El Bloque de Detección de Patrones puede ajustar entonces los recursos asignados de forma estática basándose en la entrada de patrones. Por ejemplo, el segundo recurso, que se asignó de forma estática a T1, se puede asignar a TO.
En algunas realizaciones, la subdivisión dinámica se puede aplicar a otros recursos subdivididos de forma estática, tales como una memoria temporal de traducción automática de instrucciones (ITLB).
La figura 11 es un diagrama de flujo que ilustra un método para una característica de subdivisión estática de SMT que puede ser realizado por un procesador de acuerdo con algunas realizaciones. En algunas realizaciones, el método puede comprender detectar patrones tales como estancamientos de subproceso para un recurso compartido de forma estática en la canalización, como se ilustra en el recuadro CQB01. El método puede comprender además ajustar la compartición (por ejemplo, una compartición al 50 - 50), como se ilustra en el recuadro CQB02. El ajuste de método se puede basar, por ejemplo, en la duración de los estancamientos o en algunos otros sucesos similares.
Sumario de algunas realizaciones
Una realización puede incluir un procesador configurado para detectar un patrón para al menos uno de un primer y un segundo recurso subdividido de forma estática; y ajustar una asignación de al menos uno del primer y el segundo recurso subdividido de forma estática.
En algunas realizaciones, son de aplicación uno o más de los siguientes. El primer y el segundo recurso subdividido de forma estática de una canalización pueden ser recursos de una canalización de subprocesos múltiples simultáneos. El primer y el segundo recursos subdivididos de forma estática se pueden asignar entre un primer y un segundo subproceso. El procesador se puede configurar además para asignar el primer y el segundo recursos basándose en un algoritmo basado en patrones. El procesador se puede configurar además para asignar al menos uno del primer y el segundo recursos basándose en uno o más patrones de carga de trabajo. El procesador se puede configurar además para asignar al menos uno del primer y el segundo recursos basándose en una determinación de si al menos uno del primer y el segundo subprocesos se ha estancado durante un período de tiempo más largo que el otro. El procesador se puede configurar además para asignar al menos uno del primer y el segundo recursos basándose en una determinación de si hay entradas vacías asociadas con al menos uno del primer y el segundo recursos que están disponibles y asignar al menos uno del primer y el segundo subprocesos al al menos uno del primer y el segundo recursos que están disponibles. El procesador se puede configurar además para asignar al menos uno del primer y el segundo recursos basándose en un esquema de prioridad. El procesador se puede configurar además para determinar si ha tenido lugar un estancamiento basándose en una tabla de base de patrón de consulta. El primer y el segundo recursos subdivididos de forma estática pueden ser recursos de una memoria temporal de traducción adelantada de instrucciones (ITLB).
Una realización puede incluir un método que comprende detectar al menos uno de un patrón para un primer y un segundo recurso subdividido de forma estática; y ajustar una asignación de al menos uno del primer y el segundo recurso subdividido de forma estática.
En algunas realizaciones, son de aplicación uno o más de los siguientes. El primer y el segundo recurso subdividido de forma estática pueden ser recursos de una canalización de subprocesos múltiples simultáneos. El primer y el segundo recursos subdivididos de forma estática se pueden asignar entre un primer y un segundo subproceso. El método puede comprender además asignar el primer y el segundo recursos basándose en un algoritmo basándose en patrones. El método puede comprender además asignar al menos uno del primer y el segundo recursos basándose en uno o más patrones de carga de trabajo. El método puede comprender además asignar al menos uno del primer y el segundo recursos basándose en una determinación de si al menos uno del primer y el segundo subprocesos se ha estancado durante un período de tiempo más largo que el otro. El método puede comprender además asignar al menos uno del primer y el segundo recursos basándose en una determinación de si hay entradas vacías asociadas con al menos uno del primer y el segundo recursos que están disponibles y asignar al menos uno del primer y el segundo subprocesos al al menos uno del primer y el segundo recursos que están disponibles. El método puede comprender además asignar al menos uno del primer y el segundo recursos basándose en un esquema de prioridad. El método puede comprender además determinar si ha tenido lugar un estancamiento basándose en una tabla de base de patrón de consulta. El primer y el segundo recursos subdivididos de forma estática pueden ser recursos de una memoria temporal de traducción adelantada de instrucciones (ITLB).
Una realización puede incluir un medio legible por máquina no transitorio que almacena al menos una instrucción que, cuando es ejecutada por un procesador, hace que el procesador realice un método, comprendiendo el método detectar al menos uno de un patrón para un primer y un segundo recurso subdividido de forma estática; y ajustar una asignación de al menos uno del primer y el segundo recurso subdividido de forma estática.
En algunas realizaciones, son de aplicación uno o más de los siguientes. El primer y el segundo recurso subdividido de forma estática pueden ser recursos de una canalización de subprocesos múltiples simultáneos. El primer y el segundo recursos subdivididos de forma estática se pueden asignar entre un primer y un segundo subproceso. El método puede comprender además asignar el primer y el segundo recursos basándose en un algoritmo basándose en patrones. El método puede comprender además asignar al menos uno del primer y el segundo recursos basándose en uno o más patrones de carga de trabajo. El método puede comprender además asignar al menos uno del primer y el segundo recursos basándose en una determinación de si al menos uno del primer y el segundo subprocesos se ha estancado durante un período de tiempo más largo que el otro. El método puede comprender además asignar al menos uno del primer y el segundo recursos basándose en una determinación de si hay entradas vacías asociadas con al menos uno del primer y el segundo recursos que están disponibles y asignar al menos uno del primer y el segundo subprocesos al al menos uno del primer y el segundo recursos que están disponibles. El método puede comprender además asignar al menos uno del primer y el segundo recursos basándose en un esquema de prioridad. El método puede comprender además determinar si ha tenido lugar un estancamiento basándose en una tabla de base de patrón de consulta. El primer y el segundo recursos subdivididos de forma estática pueden ser recursos de una memoria temporal de traducción adelantada de instrucciones (ITLB).
Una realización puede incluir un sistema que incluye una memoria y un procesador, el procesador configurado para detectar un patrón para al menos uno de un primer y un segundo recurso subdividido de forma estática; y ajustar una asignación de al menos uno del primer y el segundo recurso subdividido de forma estática.
En algunas realizaciones, son de aplicación uno o más de los siguientes. El primer y el segundo recurso subdividido de forma estática pueden ser recursos de una canalización de subprocesos múltiples simultáneos. El primer y el segundo recursos subdivididos de forma estática se pueden asignar entre un primer y un segundo subproceso. El procesador se puede configurar además para asignar el primer y el segundo recursos basándose en un algoritmo basado en patrones. El procesador se puede configurar además para asignar al menos uno del primer y el segundo recursos basándose en uno o más patrones de carga de trabajo. El procesador se puede configurar además para asignar al menos uno del primer y el segundo recursos basándose en una determinación de si al menos uno del primer y el segundo subprocesos se ha estancado durante un período de tiempo más largo que el otro. El procesador se puede configurar además para asignar al menos uno del primer y el segundo recursos basándose en una determinación de si hay entradas vacías asociadas con al menos uno del primer y el segundo recursos que están disponibles y asignar al menos uno del primer y el segundo subprocesos al al menos uno del primer y el segundo recursos que están disponibles. El procesador se puede configurar además para asignar al menos uno del primer y el segundo recursos basándose en un esquema de prioridad. El procesador se puede configurar además para determinar si ha tenido lugar un estancamiento basándose en una tabla de base de patrón de consulta. El primer y el segundo recursos subdivididos de forma estática pueden ser recursos de una memoria temporal de traducción adelantada de instrucciones (ITLB).
Compartición competitiva de recursos
Un núcleo de procesador puede soportar SMT con compartición competitiva de recursos de acuerdo con realizaciones de la invención. Un circuito, estructura u otro recurso en el núcleo puede ser compartido por múltiples subprocesos basándose en una directiva en la que subprocesos compiten por la prioridad. En la realización de la figura 9, cada uno de los siguientes recursos se puede compartir entre subprocesos basándose en una directiva competitiva: la unidad de predicción de ramificaciones 911, la unidad de memoria caché de operaciones 912, la unidad de memoria caché i 913, la unidad de descodificación 914, la unidad de TLB de instrucciones 916, la unidad de cambio de nombre de número entero 921, la unidad de programación de números enteros 922, el archivo de registro físico de números enteros 923, las ALU 924, las AGU 925, la unidad de cambio de nombre de FP 931, la unidad de programación de FP 932, el archivo de registro de FP 933, los multiplicadores de FP 934A y 934B, los sumadores de FP 935A y 935B, la unidad de cola de carga 941A, la unidad de memoria caché d 942 y la unidad TLB 943.
Algunos de estos recursos, tales como una memoria temporal en la unidad de cambio de nombre de número entero 921, la unidad de programación de números enteros 922, la unidad de cambio de nombre de FP 931, la unidad de programación de FP 932 o la unidad de cola de carga 941A, pueden tener entradas, subunidades u otras partes que se pueden asignar por separado a un subproceso. Por conveniencia, este tipo de recurso se puede denominar recurso divisible y este tipo de asignación se puede denominar asignación en parte. Otros, tales como cada ALU individual de las ALU 924, cada AGU individual de las AGU 925, el multiplicador de FP 934A, el multiplicador de FP 934B, el sumador de FP 935A o el sumador de FP 935B, solo se pueden asignar de forma completa para un ciclo de reloj o un conjunto de ciclos de reloj particular para completar una operación, u otro período de tiempo o duración de la operación. Por conveniencia, este tipo de recurso se puede denominar recurso indivisible y este tipo de asignación se puede denominar asignación de forma completa.
La figura 12 es un diagrama de bloques que ilustra un asignador de recursos 1200 que se puede incluir en un procesador de acuerdo con realizaciones de la invención. El asignador de recursos 1200 puede incluir circuitería, estructuras y / o hardware para asignar un circuito, estructura, unidad o recurso de núcleo, o cualquier porción del mismo, a un subproceso particular. En realizaciones, el asignador de recursos 1200 se puede implementar para asignar un único recurso y / o múltiples recursos. En uno u otro caso, un procesador o núcleo de procesador puede incluir múltiples instancias de una o más realizaciones del asignador de recursos 1200, cada una para asignar cualesquiera uno o más recursos, cada uno incluyendo cualesquiera uno o más de los bloques mostrados en la figura 12, y cada una para implementar cualesquiera una o más directivas de asignación de recursos o combinaciones de directivas de asignación de recursos.
El asignador de recursos 1200 puede incluir el circuito de seguimiento 1210, el circuito de directivas 1220, el circuito de decisión 1230 y el circuito de asignación 1240. El circuito de seguimiento puede incluir uno o más del circuito de historial de desempeño 1212, el circuito de historial de uso 1214 y el circuito de estado de subproceso 1216. El circuito de directivas 1220 puede incluir uno o más del circuito de directivas de energía 1222, el circuito de directivas de equidad 1224, el circuito de directivas de garantía de desempeño 1226 y el circuito de directivas de capacidad de proceso 1228. Las realizaciones pueden incluir, combinar y / o implementar cada uno de estos circuitos de diversas formas de acuerdo con los tipos y el número de recursos a asignar y las directivas deseadas.
El circuito de historial de desempeño 1212 puede incluir circuitería, estructuras y / o hardware para supervisar, realizar un seguimiento de, registrar y / o notificar el desempeño de subprocesos de una o más formas. En una realización, el circuito de historial de desempeño 1212 puede incluir uno o más contadores de hardware 1212A por subproceso para contar una o más medidas de desempeño por subproceso, tales como instrucciones retiradas por alguna medida de tiempo o duración. Por ejemplo, la medida de tiempo o duración puede ser una ventana de ciclos de reloj, en donde el tamaño de la ventana (por ejemplo, representado por la letra 'N') puede ser fijo (por ejemplo, cableado), configurable (por ejemplo, por hardware o firmware) y / o programable (por ejemplo, por software). En una realización, N puede ser 1024.
El circuito de historial de desempeño 1212 también puede incluir uno o más comparadores de hardware 1212B para comparar el desempeño, como es medido por los contadores 1212A, de un subproceso con otros uno o más subprocesos. Por ejemplo, al final de cada ventana de N ciclos de reloj, los comparadores de hardware 1212B pueden comparar el número de instrucciones retiradas durante la ventana por un primer subproceso con el de un segundo subproceso, y los contadores 1212A se pueden reiniciar para la siguiente ventana. Durante la siguiente ventana, el resultado de la comparación a partir de la ventana previa puede ser usado por el circuito de directivas 1220 y / o el circuito de decisión 1230 como se describe a continuación. En realizaciones, el resultado de comparación puede ser una clasificación de subprocesos (por ejemplo, qué subproceso retiró más instrucciones), el resultado de comparación puede ser una relación (por ejemplo, un cálculo o cálculo aproximado de la relación del número de instrucciones retiradas por un primer subproceso con respecto al número de instrucciones retiradas por el segundo subproceso), y / o cualquier otra medición o cálculo.
Las realizaciones pueden incluir más de un contador por subproceso. Por ejemplo, se pueden proporcionar dos contadores separados por subproceso: un primer contador para realizar un seguimiento de instrucciones identificadas como "de consumo de energía elevado" (por ejemplo, cuya ejecución consume habitualmente más energía que otras instrucciones) y un segundo contador para contar otras instrucciones (es decir, que no son de consumo de energía elevado). Por ejemplo, las instrucciones de FMA AVX-512 (como se define a continuación) se pueden identificar como de consumo de energía elevado y realizarse un seguimiento de las mismas (posiblemente junto con otras instrucciones de consumo de energía elevado) usando un contador separado,
El circuito de historial de uso 1214 puede incluir circuitería, estructuras y / o hardware para supervisar, realizar un seguimiento de, registrar y / o notificar el uso de recursos por subprocesos. En una realización, el circuito de historial de uso 1214 puede incluir uno o más contadores de hardware 1214A para contar el uso de un recurso por subproceso, y uno o más comparadores de hardware 1214B para comparar el uso de un recurso entre subprocesos. Uno o más resultados desde de los contadores 1214A y / o los comparadores 1214B pueden ser usados por el circuito de directivas 1220 y / o el circuito de decisión 1230 como se describe a continuación.
Por ejemplo, para un recurso divisible como una memoria temporal, un contador puede contar el número de entradas ocupadas por un subproceso. El recuento a usar para cálculos y / o decisiones de asignación adicionales puede ser un recuento actual, notificado o usado directamente en cualquier instante en el tiempo, y / o puede ser un recuento promedio, promediado a lo largo de una ventana (por ejemplo, una ventana de tamaño N como se ha descrito anteriormente). Para un recurso indivisible, el recuento a usar para cálculos y / o decisiones de asignación adicionales puede ser un recuento promediado en el tiempo o ponderado en el tiempo (por ejemplo, el número de veces que un subproceso ha usado un recurso dentro de una ventana de tiempo, en donde el recuento se restablece al final de cada ventana de tiempo, o en donde el recuento se desplaza a la derecha (para dividir el mismo por una potencia de dos) al final de cada ventana de tiempo). Resultados basándose en cualquiera de estos recuentos pueden ser los recuentos en sí, clasificaciones por subproceso de recuentos y / o relaciones de subproceso a subproceso de recuentos.
El circuito de estado de subproceso 1216 puede incluir circuitería, estructuras y / o hardware para supervisar, realizar un seguimiento de, registrar y / o notificar el estado de un subproceso. Por ejemplo, el circuito de estado de subproceso 1216 puede notificar si un subproceso está estancado actualmente, tal como debido a una latencia larga L2 / L3 u otro fallo de memoria caché.
La información histórica y actual notificada por el circuito de seguimiento 1210 se puede usar en cálculos y decisiones de asignación de recursos de acuerdo con directivas especificadas por el circuito de directivas 1220. Estas directivas pueden incluir cualquier tipo de directivas, con cualquier prioridad, en cualquier combinación, incluyendo consideraciones de consumo de energía, equidad, garantías de desempeño mínimo y capacidad de proceso.
El circuito de directivas de energía 1222 puede incluir circuitería, estructuras y / o hardware para implementar una o más directivas de energía y / o favorecer o seleccionar un subproceso basándose en la directiva o directivas. Estas directivas pueden incluir cualquier tipo de directivas de energía, con cualquier prioridad, en cualquier combinación. Por ejemplo, se puede favorecer o seleccionar un subproceso que usa menos instrucciones de consumo de energía elevado o un subproceso que está realizando un progreso más lento.
El circuito de directivas de equidad 1224 puede incluir circuitería, estructuras y / o hardware para implementar una o más directivas de equidad y / o favorecer o seleccionar un subproceso basándose en la directiva o directivas. Por ejemplo, se puede favorecer o seleccionar un subproceso que tiene un desempeño reciente inferior, una ocupación inferior de un recurso divisible y / o un uso reciente inferior de un recurso indivisible.
El circuito de directivas de garantía de desempeño 1226 puede incluir circuitería, estructuras y / o hardware para implementar una o más directivas de garantía de desempeño mínimo y / o favorecer o seleccionar un subproceso basándose en la directiva o directivas. Por ejemplo, se puede favorecer o seleccionar un subproceso que está realizando progresos por debajo de un cierto umbral mínimo, basándose en una directiva de garantía de desempeño.
El circuito de directivas de capacidad de proceso 1228 puede incluir circuitería, estructuras y / o hardware para implementar una o más directivas de capacidad de proceso y / o favorecer o seleccionar un subproceso basándose en la directiva o directivas. Por ejemplo, se puede favorecer o seleccionar un subproceso que está realizando un progreso relativamente mayor o más rápidamente que otros subprocesos.
Cualquiera o la totalidad del circuito de directivas de energía 1222, el circuito de directivas de equidad 1224, el circuito de directivas de garantía de desempeño 1226, el circuito de directivas de capacidad de proceso 1228 y / o cualquier otro circuito de directivas pueden incluir ubicaciones de almacenamiento o registros individuales en los que almacenar información y / o criterios para habilitar, modificar (por ejemplo, reforzar o debilitar la importancia de una directiva o uno o más criterios o medidas usados por una directiva), o afectar de otro modo de forma dinámica a una directiva. Las realizaciones pueden incluir también o, en su lugar, una ubicación de almacenamiento o registro central o compartido para esta información. Cualesquiera una o más de las ubicaciones de almacenamiento individuales o de grupo se representan como el registro de directivas 1220A. En realizaciones, cualquier ubicación de almacenamiento o registro de este tipo puede ser configurable (por ejemplo, por hardware o firmware) o programable (por ejemplo, por software).
El circuito de decisión 1230 puede incluir circuitería, estructuras y / o hardware para recibir información, resultados y / o señales desde el circuito de seguimiento 1210 e información, criterios y / o señales desde el circuito de directivas 1220 para usar, ponderar, priorizar, filtrar, comparar, combinar, anular o procesar de otro modo los mismos para generar información que puede dar como resultado la elección de un subproceso al que asignar un recurso y / o una o más indicaciones o señales con respecto a esa decisión. Por ejemplo, en una realización que incluye una directiva de capacidad de proceso y una garantía de desempeño mínimo, la directiva de capacidad de proceso puede favorecer un primer subproceso, pero el circuito de decisión 1230 puede anular esa preferencia y elegir un segundo subproceso para ayudar a cumplir con una garantía de desempeño mínimo para el segundo subproceso. En realizaciones, el asignador de recursos 1200 puede incluir múltiples instancias de una o más realizaciones del circuito de decisión 1230, cada una para cualquier recurso o grupo de recursos, y cada una para implementar cualesquiera una o más directivas de asignación de recursos o combinaciones de directivas de asignación de recursos, y cada una para implementar cualesquiera uno o más enfoques o combinaciones de enfoques descritos a continuación, en donde cada uno se puede configurar o programarse para elegir un subproceso de acuerdo con cualquier enfoque o combinación de enfoques (por ejemplo, cada uno puede asignar un peso diferente a información recibida desde cada circuito de directivas separado en circuito de directivas 1220).
En realizaciones que incluyen un recurso indivisible, el circuito de decisión 1230 puede determinar qué subproceso tiene prioridad para la asignación dinámica de forma completa del recurso indivisible. En realizaciones que incluyen un recurso divisible, el circuito de decisión 1230 puede determinar qué subproceso tiene prioridad para la asignación dinámica en parte del recurso divisible y / o parte del recurso divisible, y / o cuánto (por ejemplo, cuántas entradas de memoria temporal) del recurso divisible asignar a un subproceso.
En una realización, el circuito de decisión 1230 puede generar o proporcionar una o más información, resultados de decisión, indicadores y / o señales, por ejemplo, almacenando los mismos en una o más ubicaciones de almacenamiento accesibles por el circuito de asignación 1240 y / o enviando estos directamente al circuito de asignación 1240, que puede identificar un único subproceso que tiene prioridad frente a cualquier número de otros subprocesos o puede especificar una clasificación de prioridad de dos o más subprocesos.
El circuito de asignación 1240 puede incluir circuitería, estructuras y / o hardware para recibir información, resultados de decisión, indicadores y / o señales desde el circuito de decisión 1230 para actuar sobre, finalizar y / o implementar decisiones de asignación de recursos, por ejemplo, respondiendo a una decisión, desde el circuito de decisión 1230, de que un primer subproceso tiene prioridad frente a un segundo subproceso, para enviar una o más señales para dirigir la asignación de un recurso (por ejemplo, el recurso 1250), de forma completa o en parte, a ese subproceso. Para hacer esto, el circuito de asignación 1240 puede enviar una o más señales (por ejemplo, una señal de "ir" 1240C) a un circuito de despacho u otro circuito que permite o permiten a un subproceso particular usar un recurso indivisible o usar una o más partes de un recurso divisible.
En realizaciones, el circuito de asignación 1240 también puede recibir una o más solicitudes (por ejemplo, las solicitudes 1240A y 1240B) para usar un recurso. Las solicitudes pueden ser señales y / o cualquier otro tipo de indicaciones desde subprocesos, desde el recurso y / o desde cualquier tipo de circuitería de despacho asociada con un subproceso o recurso. En realizaciones, el circuito de asignación 1240 puede elegir o arbitrar entre solicitudes de subprocesos, por ejemplo, usando información, resultados de decisión, indicadores y / o señales desde el circuito de decisión 1230, para determinar a qué subproceso se le ha de asignar el recurso.
En realizaciones, el circuito de asignación 1240 puede incluir circuitería, estructuras y / o hardware para actuar sobre decisiones de asignación desde el circuito de decisión 1230, dependiendo de o basándose en información o restricciones adicionales. Por ejemplo, el circuito de asignación 1240 puede incluir un conjunto de ubicaciones de almacenamiento o registros 1242 fijos, configurables o programables, con un registro por subproceso, que indica cuántas partes de un recurso divisible (por ejemplo, cuántas entradas de una memoria temporal) se dedican a cada subproceso, un conjunto de contadores 1244, uno por subproceso, para realizar un seguimiento de cuántas de cada parte están actualmente en uso por cada subproceso, y un conjunto de comparadores 1246, uno por subproceso, para verificar si un subproceso está usando su asignación completa. El circuito de asignación 1240 puede usar resultados desde los comparadores 1246 para aceptar o rechazar decisiones de asignación desde el circuito de decisión 1230. En su lugar o adicionalmente, una realización puede incluir un almacenamiento para un indicador para cada parte de un recurso divisible (por ejemplo, un bit o campo de cada entrada en una memoria temporal), para indicar qué subproceso (o subprocesos) se permite usar a esa parte de ese recurso, y el circuito de asignación 1240 puede usar el indicador almacenado para aceptar o rechazar decisiones de asignación desde el circuito de decisión 1230.
Sumario de algunas realizaciones
Una realización de la invención puede incluir un procesador que comprende un asignador de recursos y un recurso, incluyendo un circuito de seguimiento, un circuito de directivas, un circuito de decisión y un circuito de asignación. El circuito de seguimiento puede ser para realizar un seguimiento de al menos uno de historial de desempeño del recurso, historial de uso del recurso y un estado de subproceso, El circuito de directivas puede ser para proporcionar información de directiva para implementar una directiva de asignación de recursos. El circuito de decisión puede ser para elegir un subproceso basándose en una salida del circuito de seguimiento y la información de directiva. El circuito de asignación puede ser para usar una salida del circuito de decisión para asignar el recurso al subproceso.
Compartición competitiva algorítmica de recursos
Un núcleo de procesador puede soportar una característica de SMT algorítmica de acuerdo con realizaciones. En algunas realizaciones, esta característica soluciona el problema de la asignación de subprocesos a recursos disponibles que se comparten de forma competitiva en la canalización. En algunas realizaciones, este problema se soluciona usando un algoritmo de prioridad. En algunas realizaciones, un bloque de predictor de ramificaciones en una canalización se puede compartir de manera competitiva y puede usar un algoritmo de prioridad para una asignación de entradas eficiente. En algunas realizaciones, un algoritmo de prioridad se puede implementar en hardware y / o software. En algunas realizaciones, la asignación de subprocesos se puede realizar con dos o más subprocesos. En algunas realizaciones, la asignación de subprocesos puede asignar un subproceso lo más eficiente al recurso disponible en la canalización para lograr unas instrucciones por reloj (IPC) y / o una capacidad de proceso de canalización que sean las más altas. En algunas realizaciones, esta característica puede proporcionar un algoritmo que es el mejor conocido para priorizar una asignación de subprocesos a un recurso disponible. A medida que aumenta el número de subprocesos y / o aumentan las conmutaciones de contexto entre subprocesos, la característica puede proporcionar beneficios adicionales asignando recursos de forma eficiente.
La figura 13 es un diagrama de bloques que ilustra una característica de SMT algorítmica que se puede incluir en un procesador 1300 de acuerdo con realizaciones. El hardware de algoritmo de prioridad puede, por ejemplo, incluir una gestión basándose en un comportamiento dinámico. El hardware de prioridad puede comprender al menos uno de un bloque de detección de sucesos 1301, un bloque de indicador de contador de desempeño 1302, un bloque de prevención de interbloqueo 1303 y un bloque de tipo / clase de instrucción 1304. El bloque de detección de sucesos 1301 puede, por ejemplo, detectar uno o más sucesos, tales como una eliminación, una frecuencia de borrado (por ejemplo, JEClear y CRClear), una frecuencia de BR, una interrupción y fallos de memoria caché. El bloque de indicador de contador de desempeño 1302 puede, por ejemplo, contar uno o más de los siguientes: instrucciones retiradas, fallos de código, fallos de L2 / L3. El bloque de prevención de interbloqueo 1303 puede evitar estados de interbloqueo. El bloque de tipo / clase de instrucción 1304 puede, por ejemplo, permitir que una instrucción de punto flotante se retire. En algunas realizaciones, uno o más de los anteriores se pueden implementar en software y / o firmware. Adicionalmente, en algunas realizaciones, el software puede permitir que un sistema operativo (SO) y / o un gestor de máquina virtual (VMM) establezcan prioridades.
En algunas realizaciones, un algoritmo de prioridad puede tener capacidades de aprendizaje tales como aprendizaje automático. La capacidad de aprendizaje puede proporcionar una selección de subprocesos más inteligente y puede ser adaptativa basándose, por ejemplo, en patrones y / o datos históricos que se están recopilando.
En algunas realizaciones, puede haber más de un subproceso con un suceso similar. En algunas realizaciones, se puede usar un esquema de prioridad en los casos en los que hay un empate entre subprocesos. La rotura de empates se puede realizar, por ejemplo, mediante selección aleatoria, seleccionando el subproceso con el número inferior, seleccionando el subproceso con el número superior y / o seleccionando subprocesos alternos.
La figura 14 es un diagrama de flujo que ilustra un método para una característica de SMT algorítmica que puede ser realizado por un procesador de acuerdo con realizaciones. El método puede comprender determinar si está disponible el recurso compartido competitivo en la canalización, como se ilustra en 1401. El método puede comprender además priorizar subprocesos, como se ilustra en 1402. Por ejemplo, los subprocesos se pueden priorizar si hay más de un suceso. El método puede comprender además seleccionar el suceso o indicador de la prioridad más alta, como se ilustra en 1403. Por ejemplo, el suceso o indicador de la prioridad más alta se puede seleccionar basándose en un algoritmo asignado. El método puede comprender además asignar recursos a un subproceso, como se ilustra en 1404. Por ejemplo, se pueden asignar recursos al subproceso más deseable basándose en el algoritmo de prioridad.
La figura 15 es un diagrama de bloques que ilustra una característica de SMT algorítmica que se puede incluir en un procesador de acuerdo con realizaciones. La figura 15 muestra una asignación de un subproceso, por ejemplo, el subproceso TO, a un recurso compartido de forma competitiva basándose en un bloque de prioridad algorítmica. Por ejemplo, la característica puede determinar que un recurso 1501 compartido de forma competitiva está disponible, por ejemplo, de acuerdo con el recuadro 1401 en la figura 14. El bloque de prioridad algorítmica 1502 puede priorizar si hay más de un suceso, por ejemplo, los sucesos Scs1 y Scs2, por ejemplo, de acuerdo con el recuadro 1402 en la figura 14. El bloque de prioridad algorítmica 1502 también puede seleccionar el suceso o indicador de la prioridad más alta basándose en el algoritmo asignado, por ejemplo, de acuerdo con el recuadro 1403 en la figura 14. El bloque de prioridad algorítmica 1502 también puede asignar un recurso, por ejemplo, 1501, a un subproceso lo más deshabilitado, por ejemplo, TO, basándose en el algoritmo de prioridad.
En algunas realizaciones, un algoritmo de prioridad puede comprender un algoritmo de cambio de nombre de número entero y / o un algoritmo de cambio de nombre de punto flotante. El algoritmo de prioridad puede comprender determinaciones basadas en sucesos basándose en sucesos tales como Eliminar, Borrar e interrumpir. El algoritmo de prioridad puede comprender un contador de desempeño, que puede contar apariciones tales como instrucciones retiradas y fallos de código. El algoritmo de prioridad puede comprender limitar registros físicos, usar prevención de interbloqueo y / o determinar fallos de memoria caché. El algoritmo de prioridad puede comprender determinar clases y tipos de instrucción. El algoritmo de prioridad puede comprender asignar registros, por ejemplo, asignar a una línea de palabra de punto flotante más de los registros de punto flotante. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. Por ejemplo, el algoritmo de prioridad puede permitir que un sistema operativo y / o un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware, por ejemplo, basándose en un comportamiento dinámico.
En algunas realizaciones, un algoritmo de prioridad puede comprender un algoritmo de predictor de ramificaciones. En algunas realizaciones, el algoritmo de predictor de ramificaciones puede controlar la acción de las memorias temporales de destino de ramificaciones (BTB) basándose en una o más de las siguientes: frecuencia de borrados (por ejemplo, JEClears y CRClears), frecuencias de ramificaciones (por ejemplo, todas, tomadas, no tomadas), propiedades que no sean ramificaciones (por ejemplo, instrucciones retiradas, fallos de L2 / L3). El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. Por ejemplo, el algoritmo de prioridad puede permitir que un sistema operativo y / o un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware, por ejemplo, basándose en un comportamiento dinámico. La figura 16 muestra un diagrama de bloques que implementa un algoritmo de prioridad de predictor de ramificaciones de acuerdo con una realización ilustrativa. La lógica de subdivisión 1602 puede recibir unas entradas 1603 tales como frecuencia de borrados (por ejemplo, JEClears y CRClears), frecuencias de ramificaciones (por ejemplo, todas, tomadas, no tomadas), propiedades que no sean ramificaciones (por ejemplo, instrucciones retiradas, fallos de L2 / L3). La lógica de subdivisión 1602 puede asignar entradas de las memorias temporales de destino de ramificaciones (BTB) 1601 basándose en las entradas 1603.
Sumario de algunas realizaciones
Una realización puede incluir un procesador configurado para identificar un recurso compartido de forma competitiva disponible; seleccionar un subproceso basándose, al menos en parte, en un algoritmo de prioridad; y asignar el subproceso seleccionado al recurso compartido de forma competitiva disponible.
En algunas realizaciones, son de aplicación uno o más de los siguientes. En algunas realizaciones, el procesador se puede configurar además para compartir de forma competitiva la predicción de ramificaciones y para usar el algoritmo de prioridad para la asignación de entradas. En algunas realizaciones, el procesador se puede configurar además para asignar un segundo subproceso basándose en el algoritmo de prioridad. En algunas realizaciones, el procesador se puede configurar además para asignar un subproceso lo más eficiente al recurso disponible en la canalización para aumentar al menos una de instrucciones por reloj (IPC) y capacidad de proceso de canalización. En algunas realizaciones, el procesador se puede configurar además para proporcionar un algoritmo que es el mejor conocido para priorizar una asignación de subprocesos al recurso disponible. En algunas realizaciones, el procesador se puede configurar además para priorizar cuando se detectan dos o más sucesos. En algunas realizaciones, el procesador se puede configurar además para seleccionar al menos uno de un suceso e indicador de la prioridad más alta basándose en un algoritmo asignado.
En algunas realizaciones, el procesador puede comprender un bloque de detección de sucesos, un bloque de indicador de contador de desempeño, un bloque de prevención de interbloqueo y un bloque de tipo / clase de instrucción. En algunas realizaciones, el bloque de detección de sucesos puede detectar al menos uno de una eliminación, una frecuencia de borrado, una frecuencia de BR, una interrupción y un fallo de memoria caché. En algunas realizaciones, el bloque de indicador de contador de desempeño puede contar al menos uno de instrucciones retiradas, fallos de código y fallos de L2 / L3. En algunas realizaciones, el bloque de prevención de interbloqueo puede evitar estados de interbloqueo. En algunas realizaciones, el bloque de clase / tipo de instrucción puede permitir que una instrucción de punto flotante se retire. En algunas realizaciones, el procesador se puede configurar además para permitir que al menos uno de un sistema operativo (SO) y un gestor de máquina virtual (VMM) establezca prioridades. En algunas realizaciones, el algoritmo de prioridad puede tener al menos una capacidad de aprendizaje. En algunas realizaciones, la al menos una capacidad de aprendizaje puede ser adaptativa basándose en al menos uno de datos históricos y patrones de carga de trabajo.
En algunas realizaciones, el algoritmo de prioridad puede comprender al menos uno de un algoritmo de cambio de nombre de número entero y un algoritmo de cambio de nombre de punto flotante. El algoritmo de prioridad puede comprender determinaciones basadas en sucesos. La determinación basada en sucesos puede comprender uno o más de una eliminación, un borrado y una interrupción. El algoritmo de prioridad puede comprender un contador de desempeño. El contador de desempeño puede contar apariciones. Las apariciones pueden ser una o más de instrucciones retiradas y fallos de código. El algoritmo de prioridad puede comprender uno o más de limitar registros físicos, usar prevención de interbloqueo y determinar fallos de memoria caché. El algoritmo de prioridad puede comprender determinar clases y tipos de instrucción. El algoritmo de prioridad puede comprender asignar registros. Asignar registros puede comprender asignar a una línea de palabra de punto flotante más de los registros de punto flotante. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar en un comportamiento dinámico.
En algunas realizaciones, un algoritmo de prioridad puede comprender un algoritmo de predictor de ramificaciones. En algunas realizaciones, el algoritmo de predictor de ramificaciones puede controlar la acción de las memorias temporales de destino de ramificaciones (BTB) basándose, al menos en parte, en una o más de las siguientes: frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. Los borrados pueden comprender uno o más de JEClears y CRClears. Las frecuencias de ramificaciones pueden comprender una o más de todas, tomadas, no tomadas. Las propiedades que no sean ramificaciones pueden comprender una o más de instrucciones retiradas, fallos de L2 / L3. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar, al menos en parte, en comportamiento dinámico. El algoritmo de prioridad puede comprender usar lógica de subdivisión para recibir entradas. Las entradas pueden comprender una o más de frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. La lógica de subdivisión puede asignar entradas de las memorias temporales de destino de ramificaciones (BTB) basándose en las entradas.
Una realización puede incluir un método que comprende identificar un recurso compartido de forma competitiva disponible; seleccionar un subproceso basándose, al menos en parte, en un algoritmo de prioridad; y asignar el subproceso seleccionado al recurso compartido de forma competitiva disponible.
En algunas realizaciones, son de aplicación uno o más de los siguientes. En algunas realizaciones, el método puede comprender además compartir de forma competitiva la predicción de ramificaciones y usar el algoritmo de prioridad para la asignación de entradas. En algunas realizaciones, el método puede comprender además asignar un segundo subproceso basándose en el algoritmo de prioridad. En algunas realizaciones, el método puede comprender además asignar un subproceso lo más eficiente al recurso disponible en la canalización para aumentar al menos una de instrucciones por reloj (IPC) y capacidad de proceso de canalización. En algunas realizaciones, el método puede comprender además proporcionar un algoritmo que es el mejor conocido para priorizar una asignación de subprocesos al recurso disponible. En algunas realizaciones, el método puede comprender además priorizar cuando se detectan dos o más sucesos. En algunas realizaciones, el método puede comprender además seleccionar al menos uno de un suceso e indicador de la prioridad más alta basándose en un algoritmo asignado.
En algunas realizaciones, el método puede comprender además usar un bloque de detección de sucesos, un bloque de indicador de contador de desempeño, un bloque de prevención de interbloqueo y un bloque de tipo / clase de instrucción. En algunas realizaciones, el método puede comprender además usar el bloque de detección de sucesos para detectar al menos uno de una eliminación, una frecuencia de borrado, una frecuencia de BR, una interrupción y un fallo de memoria caché. En algunas realizaciones, el método puede comprender además usar el bloque de indicador de contador de desempeño para contar al menos uno de instrucciones retiradas, fallos de código y fallos de L2 / L3. En algunas realizaciones, el método puede comprender además usar el bloque de prevención de interbloqueo para evitar estados de interbloqueo. En algunas realizaciones, el método puede comprender además usar el bloque de clase / tipo de instrucción para permitir que una instrucción de punto flotante se retire. En algunas realizaciones, el método puede comprender además permitir que al menos uno de un sistema operativo (SO) y un gestor de máquina virtual (VMM) establezca prioridades. En algunas realizaciones, el algoritmo de prioridad puede tener al menos una capacidad de aprendizaje. En algunas realizaciones, la al menos una capacidad de aprendizaje puede ser adaptativa basándose en al menos uno de datos históricos y patrones de carga de trabajo.
En algunas realizaciones, el algoritmo de prioridad puede comprender al menos uno de un algoritmo de cambio de nombre de número entero y un algoritmo de cambio de nombre de punto flotante. El algoritmo de prioridad puede comprender determinaciones basadas en sucesos. La determinación basada en sucesos puede comprender uno o más de una eliminación, un borrado y una interrupción. El algoritmo de prioridad puede comprender un contador de desempeño. El contador de desempeño puede contar apariciones. Las apariciones pueden ser una o más de instrucciones retiradas y fallos de código. El algoritmo de prioridad puede comprender uno o más de limitar registros físicos, usar prevención de interbloqueo y determinar fallos de memoria caché. El algoritmo de prioridad puede comprender determinar clases y tipos de instrucción. El algoritmo de prioridad puede comprender asignar registros. Asignar registros puede comprender asignar a una línea de palabra de punto flotante más de los registros de punto flotante. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar en un comportamiento dinámico.
En algunas realizaciones, un algoritmo de prioridad puede comprender un algoritmo de predictor de ramificaciones. En algunas realizaciones, el algoritmo de predictor de ramificaciones puede controlar la acción de las memorias temporales de destino de ramificaciones (BTB) basándose, al menos en parte, en una o más de las siguientes: frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. Los borrados pueden incluir JEClears. Las frecuencias de ramificaciones pueden comprender una o más de todas, tomadas, no tomadas. Las propiedades que no sean ramificaciones pueden comprender una o más de instrucciones retiradas, fallos de L2 / L3. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar, al menos en parte, en comportamiento dinámico. El algoritmo de prioridad puede comprender usar lógica de subdivisión para recibir entradas. Las entradas pueden comprender una o más de frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. La lógica de subdivisión puede asignar entradas de las memorias temporales de destino de ramificaciones (BTB) basándose en las entradas.
Una realización puede incluir un medio legible por máquina no transitorio que almacena al menos una instrucción que, cuando es ejecutada por un procesador, hace que el procesador realice un método, comprendiendo el método identificar un recurso compartido de forma competitiva disponible; seleccionar un subproceso basándose, al menos en parte, en un algoritmo de prioridad; y asignar el subproceso seleccionado al recurso compartido de forma competitiva disponible.
En algunas realizaciones, son de aplicación uno o más de los siguientes. En algunas realizaciones, el método puede comprender además compartir de forma competitiva la predicción de ramificaciones y usar el algoritmo de prioridad para la asignación de entradas. En algunas realizaciones, el método puede comprender además asignar un segundo subproceso basándose en el algoritmo de prioridad. En algunas realizaciones, el método puede comprender además asignar un subproceso lo más eficiente al recurso disponible en la canalización para aumentar al menos una de instrucciones por reloj (IPC) y capacidad de proceso de canalización. En algunas realizaciones, el método puede comprender además proporcionar un algoritmo que es el mejor conocido para priorizar una asignación de subprocesos al recurso disponible. En algunas realizaciones, el método puede comprender además priorizar cuando se detectan dos o más sucesos. En algunas realizaciones, el método puede comprender además seleccionar al menos uno de un suceso e indicador de la prioridad más alta basándose en un algoritmo asignado.
En algunas realizaciones, el método puede comprender además usar un bloque de detección de sucesos, un bloque de indicador de contador de desempeño, un bloque de prevención de interbloqueo y un bloque de tipo / clase de instrucción. En algunas realizaciones, el método puede comprender además usar el bloque de detección de sucesos para detectar al menos uno de una eliminación, una frecuencia de borrado, una frecuencia de BR, una interrupción y un fallo de memoria caché. En algunas realizaciones, el método puede comprender además usar el bloque de indicador de contador de desempeño para contar al menos uno de instrucciones retiradas, fallos de código y fallos de L2 / L3. En algunas realizaciones, el método puede comprender además usar el bloque de prevención de interbloqueo para evitar estados de interbloqueo. En algunas realizaciones, el método puede comprender además usar el bloque de clase / tipo de instrucción para permitir que una instrucción de punto flotante se retire. En algunas realizaciones, el método puede comprender además permitir que al menos uno de un sistema operativo (SO) y un gestor de máquina virtual (VMM) establezca prioridades. En algunas realizaciones, el algoritmo de prioridad puede tener al menos una capacidad de aprendizaje. En algunas realizaciones, la al menos una capacidad de aprendizaje puede ser adaptativa basándose en al menos uno de datos históricos y patrones de carga de trabajo.
En algunas realizaciones, el algoritmo de prioridad puede comprender al menos uno de un algoritmo de cambio de nombre de número entero y un algoritmo de cambio de nombre de punto flotante. El algoritmo de prioridad puede comprender determinaciones basadas en sucesos. La determinación basada en sucesos puede comprender uno o más de una eliminación, un borrado y una interrupción. El algoritmo de prioridad puede comprender un contador de desempeño. El contador de desempeño puede contar apariciones. Las apariciones pueden ser una o más de instrucciones retiradas y fallos de código. El algoritmo de prioridad puede comprender uno o más de limitar registros físicos, usar prevención de interbloqueo y determinar fallos de memoria caché. El algoritmo de prioridad puede comprender determinar clases y tipos de instrucción. El algoritmo de prioridad puede comprender asignar registros. Asignar registros puede comprender asignar a una línea de palabra de punto flotante más de los registros de punto flotante. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar en un comportamiento dinámico.
En algunas realizaciones, un algoritmo de prioridad puede comprender un algoritmo de predictor de ramificaciones. En algunas realizaciones, el algoritmo de predictor de ramificaciones puede controlar la acción de las memorias temporales de destino de ramificaciones (BTB) basándose, al menos en parte, en una o más de las siguientes: frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. Los borrados pueden comprender uno o más de JEClears y CRClears. Las frecuencias de ramificaciones pueden comprender una o más de todas, tomadas, no tomadas. Las propiedades que no sean ramificaciones pueden comprender una o más de instrucciones retiradas, fallos de L2 / L3. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar, al menos en parte, en comportamiento dinámico. El algoritmo de prioridad puede comprender usar lógica de subdivisión para recibir entradas. Las entradas pueden comprender una o más de frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. La lógica de subdivisión puede asignar entradas de las memorias temporales de destino de ramificaciones (BTB) basándose en las entradas.
Una realización puede incluir un sistema que incluye una memoria y un procesador, el procesador configurado para identificar un recurso compartido de forma competitiva disponible; seleccionar un subproceso basándose, al menos en parte, en un algoritmo de prioridad; y asignar el subproceso seleccionado al recurso compartido de forma competitiva disponible.
En algunas realizaciones, el algoritmo de prioridad puede comprender al menos uno de un algoritmo de cambio de nombre de número entero y un algoritmo de cambio de nombre de punto flotante. El algoritmo de prioridad puede comprender determinaciones basadas en sucesos. La determinación basada en sucesos puede comprender uno o más de una eliminación, un borrado y una interrupción. El algoritmo de prioridad puede comprender un contador de desempeño. El contador de desempeño puede contar apariciones. Las apariciones pueden ser una o más de instrucciones retiradas y fallos de código. El algoritmo de prioridad puede comprender uno o más de limitar registros físicos, usar prevención de interbloqueo y determinar fallos de memoria caché. El algoritmo de prioridad puede comprender determinar clases y tipos de instrucción. El algoritmo de prioridad puede comprender asignar registros. Asignar registros puede comprender asignar a una línea de palabra de punto flotante más de los registros de punto flotante. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar en un comportamiento dinámico.
En algunas realizaciones, un algoritmo de prioridad puede comprender un algoritmo de predictor de ramificaciones. En algunas realizaciones, el algoritmo de predictor de ramificaciones puede controlar la acción de las memorias temporales de destino de ramificaciones (BTB) basándose, al menos en parte, en una o más de las siguientes: frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. Los borrados pueden comprender uno o más de JEClears y CRClears. Las frecuencias de ramificaciones pueden comprender una o más de todas, tomadas, no tomadas. Las propiedades que no sean ramificaciones pueden comprender una o más de instrucciones retiradas, fallos de L2 / L3. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar, al menos en parte, en comportamiento dinámico. El algoritmo de prioridad puede comprender usar lógica de subdivisión para recibir entradas. Las entradas pueden comprender una o más de frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. La lógica de subdivisión puede asignar entradas de las memorias temporales de destino de ramificaciones (BTB) basándose en las entradas.
En algunas realizaciones, son de aplicación uno o más de los siguientes. En algunas realizaciones, el procesador se puede configurar además para compartir de forma competitiva la predicción de ramificaciones y para usar el algoritmo de prioridad para la asignación de entradas. En algunas realizaciones, el procesador se puede configurar además para asignar un segundo subproceso basándose en el algoritmo de prioridad. En algunas realizaciones, el procesador se puede configurar además para asignar un subproceso lo más eficiente al recurso disponible en la canalización para aumentar al menos una de instrucciones por reloj (IPC) y capacidad de proceso de canalización. En algunas realizaciones, el procesador se puede configurar además para proporcionar un algoritmo que es el mejor conocido para priorizar una asignación de subprocesos al recurso disponible. En algunas realizaciones, el procesador se puede configurar además para priorizar cuando se detectan dos o más sucesos. En algunas realizaciones, el procesador se puede configurar además para seleccionar al menos uno de un suceso e indicador de la prioridad más alta basándose en un algoritmo asignado.
En algunas realizaciones, el procesador puede comprender un bloque de detección de sucesos, un bloque de indicador de contador de desempeño, un bloque de prevención de interbloqueo y un bloque de tipo / clase de instrucción. En algunas realizaciones, el bloque de detección de sucesos puede detectar al menos uno de una eliminación, una frecuencia de borrado, una frecuencia de BR, una interrupción y un fallo de memoria caché. En algunas realizaciones, el bloque de indicador de contador de desempeño puede contar al menos uno de instrucciones retiradas, fallos de código y fallos de L2 / L3. En algunas realizaciones, el bloque de prevención de interbloqueo puede evitar estados de interbloqueo. En algunas realizaciones, el bloque de clase / tipo de instrucción puede permitir que una instrucción de punto flotante se retire. En algunas realizaciones, el procesador se puede configurar además para permitir que al menos uno de un sistema operativo (SO) y un gestor de máquina virtual (VMM) establezca prioridades. En algunas realizaciones, el algoritmo de prioridad puede tener al menos una capacidad de aprendizaje. En algunas realizaciones, la al menos una capacidad de aprendizaje puede ser adaptativa basándose en al menos uno de datos históricos y patrones de carga de trabajo.
En algunas realizaciones, el algoritmo de prioridad puede comprender al menos uno de un algoritmo de cambio de nombre de número entero y un algoritmo de cambio de nombre de punto flotante. El algoritmo de prioridad puede comprender determinaciones basadas en sucesos. La determinación basada en sucesos puede comprender uno o más de una eliminación, un borrado y una interrupción. El algoritmo de prioridad puede comprender un contador de desempeño. El contador de desempeño puede contar apariciones. Las apariciones pueden ser una o más de instrucciones retiradas y fallos de código. El algoritmo de prioridad puede comprender uno o más de limitar registros físicos, usar prevención de interbloqueo y determinar fallos de memoria caché. El algoritmo de prioridad puede comprender determinar clases y tipos de instrucción. El algoritmo de prioridad puede comprender asignar registros. Asignar registros puede comprender asignar a una línea de palabra de punto flotante más de los registros de punto flotante. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar en un comportamiento dinámico.
En algunas realizaciones, un algoritmo de prioridad puede comprender un algoritmo de predictor de ramificaciones. En algunas realizaciones, el algoritmo de predictor de ramificaciones puede controlar la acción de las memorias temporales de destino de ramificaciones (BTB) basándose, al menos en parte, en una o más de las siguientes: frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. Los borrados pueden comprender uno o más de JEClears y CRClears. Las frecuencias de ramificaciones pueden comprender una o más de todas, tomadas, no tomadas. Las propiedades que no sean ramificaciones pueden comprender una o más de instrucciones retiradas, fallos de L2 / L3. El algoritmo de prioridad puede comprender gestionar la prioridad a través de software. El algoritmo de prioridad puede permitir que uno o más de un sistema operativo y un gestor de máquina virtual proporcionen prioridad. El algoritmo de prioridad puede comprender prioridad gestionada por hardware. La prioridad gestionada por hardware se puede basar, al menos en parte, en comportamiento dinámico. El algoritmo de prioridad puede comprender usar lógica de subdivisión para recibir entradas. Las entradas pueden comprender una o más de frecuencia de borrados, frecuencias de ramificaciones, propiedades que no sean ramificaciones. La lógica de subdivisión puede asignar entradas de las memorias temporales de destino de ramificaciones (BTB) basándose en las entradas.
Conmutación de subprocesos
Un núcleo de procesador puede soportar una característica de conmutación de subprocesos de SMT de acuerdo con realizaciones de la invención. En un núcleo de procesador que implementa SMT con recursos compartidos, SMT puede implicar elegir cuál de dos o más subprocesos seleccionar en diversas fases de la canalización de emisión / ejecución de procesador. Se pueden desear realizaciones de la invención que incluyen una característica de conmutación de subprocesos de SMT para prever que esta selección se vea influenciada por prioridades de entre desempeño, equidad y otros factores (por ejemplo, aumentar el desempeño, disminuir el consumo de energía e implementar características de ahorro de energía, y mejorar la equidad, garantías de desempeño mínimo, capacidad de proceso, instrucciones por reloj (IPC), instrucciones por unidad de tiempo, calidad de servicio, eficiencia de memoria y / o tiempo, por enumerar solo algunos de los criterios aplicables). Por ejemplo, en una canalización de emisión / ejecución del núcleo de procesador 900, se puede usar un arbitraje para seleccionar un subproceso en el que el predictor de ramificaciones 911 ha de comenzar la predicción, un subproceso para el cual consultar una predicción en la TLB i 916, un subproceso para el cual consultar una traducción de TLB i en la memoria caché i 913, un subproceso para el cual descodificar bytes desde la memoria caché i 913 en el descodificador 914, un subproceso para el cual leer desde la memoria caché de operaciones 912, un subproceso para el cual leer desde la cola de microoperaciones 915, etc.
La figura 17 es un diagrama de bloques que ilustra un circuito de arbitraje 1700 para una característica de conmutación de subprocesos de SMT que se puede incluir en un procesador de acuerdo con realizaciones de la invención. El circuito de arbitraje 1700 puede incluir circuitería, estructuras y / o hardware para elegir cuál de dos o más subprocesos seleccionar para su progreso en cualquiera de diversas fases de una canalización de emisión / ejecución de procesador. Un procesador o núcleo de procesador puede incluir múltiples instancias de una o más realizaciones del circuito de arbitraje 1700, cada una para cualesquiera uno o más recursos una o fases de canalización, cada uno incluyendo cualesquiera uno o más de los bloques mostrados en la figura 17, y cada una para implementar cualesquiera uno o más enfoques o combinaciones de enfoques descritos a continuación. Además, todo o parte de cualquier instancia del circuito de arbitraje 1700 se puede incluir, integrar o incorporar en otra circuitería, estructuras y / o hardware de un procesador o núcleo de procesador, tal como circuitería de asignación de recursos, de programación o de compartición.
El circuito de arbitraje 1700 puede incluir el circuito de orden cíclico simple 1710, el circuito de orden cíclico de capacidad de proceso alta 1720, el circuito de orden cíclico dinámico 1730 y el circuito de orden cíclico controlable por software 1740, junto con cualquier otra circuitería deseada para implementar cualquier otro orden cíclico u otro esquema o esquemas.
El circuito de orden cíclico simple 1710 puede incluir circuitería, estructuras y / o hardware para realizar un esquema de orden cíclico simple para seleccionar un subproceso. Por ejemplo, este puede implementar un esquema en el que la selección alterna constantemente entre elecciones; es decir, el subproceso 0, entonces el subproceso 1, entonces el subproceso 0, entonces el subproceso 1, y así sucesivamente; o el subproceso 0, el subproceso 1, el subproceso 2, el subproceso 0, el subproceso 1, el subproceso 2, y así sucesivamente; etc.
El circuito de orden cíclico de capacidad de proceso alta 1720 puede incluir circuitería, estructuras y / o hardware para realizar un esquema de orden cíclico modificado para seleccionar un subproceso basándose en un deseo de priorizar la capacidad de proceso frente a otros factores posibles (tales como equidad). Por ejemplo, este puede implementar un esquema de orden cíclico simple (por ejemplo, como se ha descrito anteriormente) siempre que cada subproceso tenga trabajo disponible en el punto de conmutación de subprocesos, de lo contrario, este puede elegir el subproceso que tiene trabajo disponible. En una realización con más de dos subprocesos de entre los que elegir, este puede eliminar del esquema de orden cíclico simple cualquier subproceso sin trabajo disponible.
El circuito de orden cíclico dinámico 1730 puede incluir circuitería, estructuras y / o hardware para realizar un esquema de orden cíclico modificable de forma dinámica para seleccionar un subproceso basándose en el comportamiento dinámico de subprocesos. El circuito de orden cíclico dinámico 1730 puede incluir y / o usar contadores de desempeño, otros contadores de hardware u otras estructuras (cualquiera de las cuales se representa como 1732) para proporcionar información en la que basar una decisión (por ejemplo, heurística). Una relación u otros criterios sobre los que basar la selección de subprocesos para favorecer un subproceso, así como una indicación de qué medidas de comportamiento dinámico se han de usar, pueden ser fijos (por ejemplo, cableados), configurables (por ejemplo, por hardware o firmware) y / o programables (por ejemplo, por software). Por ejemplo, se puede favorecer o seleccionar un primer subproceso frente a un segundo subproceso en una relación de 2:1 (por ejemplo, el subproceso 0, el subproceso 0, el subproceso 1, el subproceso 0, el subproceso 0, el subproceso 1, y así sucesivamente). Ejemplos de factores o criterios para determinar que un subproceso se favorece frente a otro subproceso son: tasa de predicciones erróneas, instrucciones por ciclo, tasa de fallos de memoria caché, etc.)
El circuito de orden cíclico controlable por software 1740 puede incluir circuitería, estructuras y / o hardware para realizar un esquema de orden cíclico modificado para seleccionar un subproceso basándose en una prioridad proporcionada por software (por ejemplo, y el sistema operativo o el monitor de máquina virtual), que puede tener más información acerca del comportamiento de sistema deseado de la que está disponible por lo demás para el software. La indicación, junto con una relación a la que favorecer y / o cualquier otra información con respecto a qué esquema usar o cómo implementar el mismo (por ejemplo, si y cómo combinar un orden cíclico controlable por software con un orden cíclico dinámico y / o modificable) se puede proporcionar en una ubicación de almacenamiento o registro 1742 programable dentro de o accesible por el circuito de arbitraje 1700.
En realizaciones, son posibles combinaciones de enfoques. Por ejemplo, el software puede proporcionar (por ejemplo, usando la circuitería y / o técnicas para un orden cíclico controlable por software), una sugerencia acerca de qué subproceso favorecer, y hardware (por ejemplo, la circuitería o técnicas de orden cíclico dinámico) puede determinar, basándose en heurística y / o comportamiento de subproceso, puede determinar una relación de acuerdo con la cual favorecer ese subproceso.
Sumario de algunas realizaciones
Una realización de la invención puede incluir un procesador que comprende un circuito de arbitraje. El circuito de arbitraje puede incluir un primer circuito de orden cíclico y un segundo circuito de orden cíclico. El primer circuito de orden cíclico puede ser para implementar un esquema de conmutación de subprocesos de orden cíclico simple. El segundo circuito de orden cíclico puede ser para implementar un esquema de conmutación de subprocesos de orden cíclico modificado de forma dinámica.
Evitación de interbloqueos
Un núcleo de procesador puede soportar una característica de evitación de interbloqueos de SMT de acuerdo con realizaciones de la invención. La compartición de recursos podría, en algunas circunstancias, conducir a que un subproceso realice un progreso lento debido a verse privado de uno o más recursos, que no realice progreso alguno debido a que no es capaz de avanzar (por ejemplo, retirar una instrucción) y / o cualquier otra situación de tipo interbloqueo. Como resultado, la experiencia de usuario podría incluir un desempeño notablemente más lento o un error, fallo o bloqueo. Se pueden desear realizaciones de la invención que incluyen una característica de evitación de interbloqueos para reducir situaciones de tipo interbloqueo y mejorar la experiencia de usuario. Otros beneficios de estas realizaciones pueden incluir, por ejemplo, aumentar el desempeño, disminuir el consumo de energía e implementar características de ahorro de energía, y mejorar la equidad, garantías de desempeño mínimo, capacidad de proceso, instrucciones por reloj (IPC), instrucciones por unidad de tiempo, calidad de servicio, eficiencia de memoria y / o tiempo, por enumerar solo algunos de los criterios aplicables.
La figura 18 es un diagrama de bloques que ilustra un hardware de evitación de interbloqueos 1800 que se puede incluir en un procesador de acuerdo con realizaciones de la invención. El hardware de evitación de interbloqueos 1800 puede incluir circuitería, estructuras y / o hardware para afectar a la asignación y uso de circuitería, estructuras, unidades y recursos de núcleo, y porciones de los mismos, para reducir la incidencia de situaciones de tipo interbloqueo. En realizaciones, el hardware de evitación de interbloqueos 1800 se puede implementar para evitar un interbloqueo que implica un único recurso y / o múltiples recursos. En uno u otro caso, un procesador o núcleo de procesador puede incluir múltiples instancias de una o más realizaciones del hardware de evitación de interbloqueos 1800, cada una para cualesquiera uno o más recursos, cada uno incluyendo cualesquiera uno o más de los bloques mostrados en la figura 18, y cada una para implementar cualesquiera uno o más enfoques o combinaciones de enfoques descritos a continuación. Además, todo o parte de cualquier instancia del hardware de evitación de interbloqueos 1800 se puede incluir, integrar o incorporar en otra circuitería, estructuras y / o hardware de un procesador o núcleo de procesador, tal como circuitería de asignación de recursos, de programación o de compartición.
El hardware de evitación de interbloqueos 1800 puede incluir el circuito de asignación 1810, que puede incluir circuitería, estructuras y / o hardware para asignar recursos a subprocesos. Una realización o instancia de una realización del circuito de asignación 1810 puede representar o corresponder a una realización o instancia de una realización del circuito de asignación 1240 en la figura 12.
El hardware de evitación de interbloqueos 1800, el circuito de asignación CGA10 y / o cualquier otra parte de un procesador o núcleo de procesador pueden incluir circuitería, estructura y / o hardware para deshabilitar, bloquear o evitar de otro modo de forma dinámica que el circuito de asignación CGA10 asigne un recurso o una parte de un recurso divisible, a cualesquiera uno o más subprocesos particulares. Por ejemplo, en una realización que incluye cualquier tipo de esquema de orden cíclico, tal como los descritos anteriormente, para elegir o arbitrar entre solicitudes de subprocesos, bloquear un subproceso particular con respecto a usar un recurso se puede lograr eliminando temporalmente ese subproceso del esquema de orden cíclico. Las realizaciones pueden incluir una puerta Y que tiene una señal de solicitud de subproceso (por ejemplo, 1240A, 1240B) como una entrada y el complemento de una señal de bloque de subproceso (por ejemplo, generada por circuitería basándose en contadores de uso de recursos 1820, como se describe a continuación, o cualquier otra información, estado o señales), de tal modo que la salida de la puerta Y puede indicar si un recurso se ha de asignar a un subproceso o se ha de considerar como un candidato para el cual se ha de asignar un recurso.
El hardware de evitación de interbloqueos 1800 también puede incluir un contador de uso de recursos 1820. En una realización, el contador de uso de recursos 1820 puede ser un contador de hardware por subproceso para contar el número de partes (por ejemplo, entradas) de un recurso divisible (por ejemplo, memoria temporal, cola, programador, estación de reserva) que están siendo ocupadas o usadas por un subproceso particular. Para un recurso particular, una instancia de un contador de uso de recursos 1820 para un subproceso particular se puede incrementar en respuesta a que el circuito de asignación 1810 asigne una entrada a ese subproceso, decrementarse en respuesta a que la entrada se desasigne o se retire, y borrarse en respuesta a que el recurso se purgue. El circuito de asignación 1810 se puede deshabilitar o bloquear de forma dinámica (por ejemplo, como se ha descrito anteriormente) con respecto a asignar una entrada a un subproceso en respuesta a que el recuento de ese subproceso alcance o supere un umbral.
El umbral se puede elegir para que sea menor que el número total de entradas en el recurso para evitar que un único subproceso use todas las entradas al mismo tiempo, lo que podría dar como resultado una situación de tipo interbloqueo. El umbral también se puede elegir o ajustar basándose en otros factores o criterios, incluyendo los relacionados con la tolerancia para aproximarse a situaciones de tipo interbloqueo y / o el deseo de priorizar la capacidad de proceso u otras medidas o factores de desempeño. El umbral puede ser fijo (por ejemplo, cableado), configurable (por ejemplo, por hardware o firmware) o programable (por ejemplo, por software).
En una realización, un recurso divisible se puede subdividir lógicamente para subprocesos y grupos de subprocesos particulares. Por ejemplo, en un recurso divisible que tiene un conjunto de N entradas, se puede reservar un subconjunto de N1 entradas (en donde N1 es menor que N) para su uso solo por un primer subproceso, se puede reservar un subconjunto de N2 entradas (en donde N2 es menor que N) para su uso solo por un segundo subproceso, y el subconjunto restante de N -(N1 N2) entradas se puede asignar a uno u otro subproceso. En realizaciones, este enfoque puede ser impuesto por una o más instancias del circuito de asignación 1810.
En una realización en la que la compleción de una carga depende de la extracción por lectura de datos de una memoria caché, cada entrada de memoria caché puede incluir un bit para indicar que la entrada está bloqueada por un subproceso que incluye una carga desde esa entrada. El reemplazo de entradas con ese conjunto de bits de indicador se puede evitar hasta que el bit se haya borrado en conexión con la compleción de la carga o que el subproceso haya experimentado un suceso de purga de canalización (por ejemplo, una ramificación mal predicha). En realizaciones, este enfoque puede ser impuesto por una o más instancias del circuito de asignación 1810.
En una realización, el contador de uso de recursos 1820 puede ser un contador de hardware por subproceso para contar el número de ciclos de reloj que, para la entrada más antigua en una cola de retirada para un subproceso particular, ese subproceso (el subproceso estancado) ha estado esperando un despacho correspondiente para un recurso indivisible (la condición implica la cola de retirada debido a que el subproceso necesita una ranura de despacho y una ranura de escritura en diferido). El circuito de asignación 1810, en respuesta a que el recuento para el subproceso estancado alcance o supere un umbral, se puede deshabilitar o bloquearse de forma dinámica (por ejemplo, como se ha descrito anteriormente) con respecto a asignar una operación desde un subproceso diferente al programador para el recurso indivisible. Como alternativa, el despacho de cualquier operación al recurso indivisible se puede deshabilitar o bloquear durante un número dado de ciclos de reloj.
Estos enfoques pueden evitar una situación de tipo interbloqueo a lo largo del uso de un recurso indivisible, tal como una unidad de ejecución, que puede realizar diferentes operaciones que consumen un intervalo de ciclos de reloj. Por ejemplo, esta puede permitir que una operación que se puede completar en un único ciclo use un recurso que, de otro modo, se podría mantener ocupado completando una sucesión de operaciones de múltiples ciclos.
El umbral puede ser fijo (por ejemplo, cableado), configurable (por ejemplo, por hardware o firmware) o programable (por ejemplo, por software). Este se puede elegir y / o ajustar de forma dinámica basándose en diversos factores o criterios, incluyendo los relacionados con la capacidad de proceso y los relacionados con la equidad. Por ejemplo, si la equidad es una prioridad, entonces el umbral se puede reducir de forma gradual para permitir, de forma más agresiva, que cada subproceso realice progresos; si la capacidad de proceso es una prioridad, esta se puede aumentar de forma gradual para permitir, de forma más agresiva, que subprocesos que están haciendo progresos continúen sin interrupción.
Sumario de algunas realizaciones
Una realización de la invención puede incluir un procesador que comprende hardware de evitación de interbloqueos y un recurso. El hardware de evitación de interbloqueos puede incluir un circuito de asignación y un contador de uso de recursos. El circuito de asignación puede ser para determinar si asignar el recurso a un subproceso basándose en una salida desde el contador de uso de recursos.
Características de trayectoria de datos
Los núcleos de procesador de acuerdo con realizaciones de la invención pueden incluir diversas características para soportar una arquitectura de conjunto de instrucciones (ISA) con una trayectoria de datos que es más estrecha que la prevista por la ISA. Un número de tales características se describen por separado usando ejemplos no limitantes a continuación, pero las realizaciones pueden incluir cualquier combinación de tales características.
Un núcleo de procesador puede soportar una característica que permite operaciones sobre operandos de un tamaño más grande (por ejemplo, cargas / almacenamientos / operaciones aritméticas sobre operandos que tienen un tamaño de 256 bits) fragmentando estas operaciones en múltiples microoperaciones (|uops) que operan sobre operandos más pequeños (por ejemplo, múltiples |uops que operan sobre valores que tienen un tamaño de 128 bits). Una característica de este tipo puede ser deseable por una diversidad de razones: por ejemplo, un procesador puede soportar una arquitectura de conjunto de instrucciones que implica tamaños de operando más grandes, pero puede usar una microarquitectura basándose en tamaños de operando más pequeños. Adicionalmente o como alternativa, un procesador puede soportar una arquitectura de conjunto de instrucciones que implica tamaños de operando más grandes y tener un archivo de registro que incluye registros de este tamaño más grande, pero puede incluir unidades de ejecución que solo pueden manejar datos en fragmentos más pequeños. Adicionalmente o como alternativa, un procesador puede tener puertos de carga / almacenamiento, unidades de ejecución y un archivo de registro de un tamaño más grande, pero realizar |uops usando operandos de un tamaño más pequeño puede ser deseable, por ejemplo, para fines de ahorro de energía o de programación. Otros beneficios potenciales de un procesador que incluye las características descritas a continuación incluyen, pero no se limitan a, aumentar el desempeño, disminuir el consumo de energía e implementar características de ahorro de energía, y mejorar la equidad, garantías de desempeño mínimo, capacidad de proceso, instrucciones por reloj (IPC), instrucciones por unidad de tiempo, calidad de servicio y eficiencia de memoria y / o tiempo, por enumerar solo algunos de los criterios aplicables.
Cargas y almacenamientos de trayectoria de datos de 256 a 128 bits
Un núcleo de procesador puede soportar una característica que permite cargas y almacenamientos de 256 bits usando microoperaciones (|uops) de 128 bits, de acuerdo con realizaciones de la invención. En algunas realizaciones, un procesador puede soportar una arquitectura de conjunto de instrucciones de 256 bits, pero puede usar una microarquitectura de 128 bits, que incluye un archivo de registro de 128 bits. En otras realizaciones, un procesador puede tener una arquitectura de conjunto de instrucciones de 256 bits y un archivo de registro de 256 bits, pero puede incluir puertos de carga y / o de almacenamiento que solo pueden manejar datos en fragmentos de 128 bits.
La figura 19 es un diagrama que muestra una carga de 256 bits en un archivo de registro de 256 bits usando un par de |uops de 128 bits, de acuerdo con algunas realizaciones. La memoria 1901 incluye una serie de valores de 256 bits, tales como el valor almacenado en la ubicación de memoria 1902. Una primera |uop 1903 recobra la mitad inferior del valor almacenado en la ubicación de memoria 1902, y una segunda |uop 1904 recobra la mitad superior del valor almacenado en la ubicación de memoria 1902. Las dos mitades del valor almacenado en la ubicación de memoria 1902 se mezclan (1905) y el resultado de la operación de mezcla se coloca en el archivo de registro de 256 bits 1906.
La figura 20 es un diagrama de flujo que representa el proceso descrito anteriormente con referencia a la figura 19, de acuerdo con algunas realizaciones. Durante el proceso de descodificación de una instrucción (2001) si se detecta una carga de 256 bits, se generan 3 |uops (el recuadro 2002), incluyendo una primera |uop de carga, una segunda |uop de carga y una |uop de mezcla. Las |uops se programan para ejecutarse y, para cada |uop, el procesador puede esperar hasta que los datos a cargar / mezclar están listos (2003). Cuando se ejecuta la primera |uop de carga, el procesador puede recobrar la mitad inferior del valor almacenado en la ubicación de memoria 1902, como se muestra en el recuadro 2004. Cuando se ejecuta la segunda |uop de carga, el procesador puede recobrar la mitad superior del valor almacenado en la ubicación de memoria 1902, como se muestra en el recuadro 2004. Cuando se ejecuta la |uop de mezcla, las dos mitades recobradas del valor almacenado en la ubicación de memoria 1902 se combinan y se colocan en un archivo de registro de 256 bits, como se muestra en el recuadro 2004. Por último, las instrucciones descodificadas se retiran tras la compleción, como se muestra en el recuadro 2005.
En algunas realizaciones, un valor se puede almacenar desde un archivo de registro de 256 bits en memoria usando |uops de 128 bits. La figura 21 es un diagrama que ilustra este proceso. Un archivo de registro de 256 bits 2101 incluye registros que tienen 256 bits de anchura, tales como el registro 2102. Una primera |uop de almacenamiento, 2103, recobra la mitad inferior del valor almacenado en el registro 2102 y lo almacena en la mitad inferior de la ubicación de memoria 2104. Una segunda |uop de almacenamiento, 2105, recobra la mitad superior del valor almacenado en el registro 2102 y lo almacena en la mitad superior de la ubicación de memoria 2104.
La figura 22 es un diagrama de flujo que representa el proceso descrito anteriormente con referencia a la figura 21, de acuerdo con algunas realizaciones. Durante el proceso de descodificación de una instrucción (2201), si se detecta un almacenamiento de 256 bits, se generan 2 |uops (el recuadro 2202), que incluyen una primera |uop de almacenamiento y una segunda |uop de almacenamiento. Las |uops se programan para ejecutarse y, para cada |uop, el procesador puede esperar hasta que los datos a almacenar están listos (2203). Cuando se ejecuta la primera pop de almacenamiento, el procesador puede recobrar la mitad inferior del valor almacenado en el registro 2102, como se muestra en el recuadro 2204, y escribir este en la mitad inferior de la ubicación de memoria 2104. Cuando se ejecuta la segunda pop de almacenamiento, el procesador puede recobrar la mitad superior del valor almacenado en el registro 2102, como se muestra en el recuadro 2204, y escribir este en la mitad superior de la ubicación de memoria 2104. Por último, las instrucciones descodificadas se retiran tras la compleción, como se muestra en el recuadro 2205.
En algunas realizaciones, una instrucción de carga de 256 bits puede cargar un valor de 256 bits en dos registros de 128 bits ejecutando dos pops, una primera pop para cargar la mitad inferior del valor de 256 bits en un primer registro de 128 bits, y una segunda pop para cargar la mitad superior del valor de 256 bits en un segundo registro de 128 bits.
En algunas realizaciones, una carga se logra usando una única pop que es "de doble bombeo" - es decir, que se ejecuta dos veces, una vez para cargar la mitad inferior de un valor desde memoria y una segunda vez para cargar la mitad superior de un valor desde memoria. En algunas realizaciones, un almacenamiento se logra usando una única pop que es "de doble bombeo" - es decir, se ejecuta una vez para almacenar la mitad inferior de un registro en memoria y una vez para almacenar la mitad superior de un registro en memoria. En algunas realizaciones, las pops usadas para implementar una carga y / o almacenamiento de 256 bits se pueden programar de acuerdo con algoritmos de programación de vectores. En algunas realizaciones, se pueden usar técnicas de programación en cuadrilla para programar los múltiples pops implicados en una carga y / o un almacenamiento para su ejecución en unidades de ejecución separadas.
Las características de carga / almacenamiento descritas anteriormente no se limitan a realizar cargas y / o almacenamientos usando memoria, puertos de carga o archivos de registro de cualquier tamaño particular. Por ejemplo, las técnicas descritas anteriormente se pueden usar para realizar cargas y / o almacenamientos de 512 bits usando hardware subyacente que opera sobre 256 bits a la vez]
Ejecución en carril de trayectoria de datos de 256 a 128 bits
Un núcleo de procesador puede soportar una característica que permite operaciones aritméticas de 256 bits usando microoperaciones (pops) de 128 bits, de acuerdo con realizaciones de la invención. En algunas realizaciones, un procesador puede soportar una arquitectura de conjunto de instrucciones de 256 bits, pero puede usar una microarquitectura de 128 bits, que incluye un archivo de registro de 128 bits. En otras realizaciones, un procesador puede tener una arquitectura de conjunto de instrucciones de 256 bits y un archivo de registro de 256 bits, pero puede incluir unidades de ejecución que solo pueden manejar datos en fragmentos de 128 bits. En algunas realizaciones, un procesador puede tener puertos de carga / almacenamiento, unidades de ejecución y un archivo de registro de 256 bits, pero puede ser deseable, por ejemplo, para fines de ahorro de energía o de programación, implementar operaciones aritméticas de 256 bits usando múltiples pops de 128 bits.
La figura 23 ilustra este proceso de acuerdo con algunas realizaciones. Una instrucción de 256 bits 2301 se descodifica dividiendo la misma en 2 pops de 128 bits 2302 y 2303, que entonces se programan de forma independiente para su ejecución en una o más unidades de ejecución de 128 bits 2304, 2305. De acuerdo con la realización mostrada en la figura 23, la primera pop de 128 bits 2302 puede ejecutar una instrucción usando las mitades inferiores de los operandos de 256 bits proporcionados a la instrucción aritmética de 256 bits y el procesador puede almacenar entonces el resultado en la mitad inferior de un registro de destino de 256 bits. La segunda pop de 128 bits 2303 puede ejecutar una instrucción usando las mitades superiores de los operandos de 256 bits proporcionados a la instrucción aritmética de 256 bits y el procesador puede almacenar entonces el resultado en la mitad superior de un registro de destino de 256 bits.
De acuerdo con algunas realizaciones, la subdivisión de la instrucción de 256 bits en un par de pops de 128 bits basa la mitad inferior del resultado únicamente en las mitades inferiores de los operandos de la instrucción de 256 bits, y la mitad superior del resultado se basa únicamente en las mitades superiores de los operandos de la instrucción de 256 bits (es decir, operaciones "en carril"). En estos escenarios en carril, las dos pops de 128 bits se pueden programar de forma independiente una de otra, debido a que el resultado de la instrucción de 256 bits se puede expresar como dos resultados independientes de dos pops de 128 bits separadas.
En algunas realizaciones, cada una de las pops de 128 bits representa la misma instrucción (por ejemplo, una instrucción ADD), y la instrucción de 256 bits se puede implementar usando una única pop de 128 bits que es "de doble bombeo" - es decir, se ejecuta dos veces, una vez para calcular la mitad inferior del resultado y una vez para calcular la mitad superior del resultado. En algunas realizaciones, la instrucción de 256 bits se puede "dividir" en dos pops distintas, que se programan y se ejecutan de forma independiente en una o más unidades de ejecución. En algunas realizaciones, la instrucción de 256 bits se puede ejecutar usando dos unidades de ejecución simultáneamente, cada una ejecutando una pop de 128 bits (este procedimiento se conoce a veces en la técnica como "programación en cuadrilla").
Las características de ejecución en carril descritas anteriormente no se limitan a ejecutar instrucciones usando valores de memoria, puertos de carga, unidades de ejecución o archivos de registro de cualquier tamaño particular. Por ejemplo, las técnicas descritas anteriormente se pueden usar para realizar operaciones de 512 bits usando hardware subyacente que opera sobre 256 bits a la vez, o para realizar operaciones de 1024 bits usando hardware subyacente que opera sobre 512 bits a la vez.
Ejecución de cruce de carril de trayectoria de datos de 256 a 128 bits
En algunas realizaciones, la instrucción de 256 bits a ejecutar no se puede subdividir en dos pops de 128 bits completamente independientes, debido a que la mitad inferior del resultado depende de valores almacenados en las mitades superiores de los operandos y / o la mitad superior del resultado depende de valores almacenados en las mitades inferiores de los operandos (es decir, operaciones "de cruce de carril").
Las operaciones de cruce de carril se pueden implementar usando un área de almacenamiento temporal para almacenar resultados parciales, que se combinan entonces para dar un resultado final y se almacenan en un registro de destino. La figura 24 ilustra este proceso de acuerdo con algunas realizaciones de esta característica. Una instrucción QJA01 de 256 bits de cruce de carril se descodifica dividiendo la misma en 2 pops de 128 bits QJA02 y QJA03, que entonces se programan de forma independiente para su ejecución en una o más unidades de ejecución de 128 bits QJA06, QJA07. Se usa un área de almacenamiento temporal QJA04 para almacenar resultados parciales producidos por las pops QJA02 y QJA03. Estos resultados temporales son usados por una tercera pop, QJA05, para producir un resultado final.
En algunas realizaciones, cada una de las pop de 128 bits QJA02 y QJA03 representa la misma instrucción, y se puede implementar usando una única pop de 128 bits que es "de doble bombeo" - es decir, se ejecuta dos veces, una vez para calcular un primer resultado parcial que se almacena en el área de almacenamiento temporal QJA04, y una vez para calcular un segundo resultado parcial, que se almacena en el área de almacenamiento temporal QJA04. En algunas realizaciones, la instrucción de 256 bits se puede "dividir" en dos pops distintas, que se programan y se ejecutan de forma independiente en una o más unidades de ejecución, cuyos resultados parciales se almacenan en un área de almacenamiento temporal. En algunas realizaciones, la instrucción de 256 bits se puede ejecutar usando dos unidades de ejecución simultáneamente, cada una ejecutando una pop de 128 bits (este procedimiento se conoce a veces en la técnica como "programación en cuadrilla"). En algunas realizaciones, se puede ejecutar una pop de 256 bits usando una unidad de ejecución "especial" con capacidades de 256 bits, eliminando la necesidad de un área de almacenamiento temporal (por ejemplo, el área de almacenamiento temporal QJA04).
Las características de ejecución de cruce de carril descritas anteriormente no se limitan a ejecutar instrucciones usando valores de memoria, puertos de carga, unidades de ejecución o archivos de registro de cualquier tamaño particular. Por ejemplo, las técnicas descritas anteriormente se pueden usar para realizar operaciones de 512 bits usando hardware subyacente que opera sobre 256 bits a la vez, o para realizar operaciones de 1024 bits usando hardware subyacente que opera sobre 512 bits a la vez.
Características independientes y combinables adicionales
Los núcleos de procesador de acuerdo con realizaciones de la invención pueden incluir diversas características adicionales para soportar un desempeño aumentado y / o un consumo de energía disminuido. Un número de tales características se describen por separado usando ejemplos no limitantes a continuación, pero las realizaciones pueden incluir cualquier combinación de tales características.
Memoria caché de microoperaciones
Un núcleo de procesador puede soportar una característica de memoria caché de microoperaciones de acuerdo con realizaciones. En algunas realizaciones, la característica de memoria caché de microoperaciones puede incluir asignación, directiva de reemplazo y diferentes tipos de estructura (por ejemplo, física, virtual, etc.). La asignación inteligente en la característica de memoria caché de microoperaciones puede detectar un tipo de instrucciones, tal como flujo de bucle o instrucciones complejas con un flujo de secuenciador de microcódigo (MS), frente a instrucciones simples, y asignar en consecuencia. La característica de memoria caché de microoperaciones también puede cubrir añadir una memoria caché víctima para una reutilización potencial futura y / o para determinar cuántas microoperaciones asignar por línea de memoria caché. En algunas realizaciones, la memoria caché de microoperaciones se puede usar para guardar instrucciones descodificadas (microoperaciones) en una memoria temporal de microoperaciones para una reutilización posterior de las instrucciones descodificadas. En algunas realizaciones, el uso de la memoria temporal de microoperaciones puede acortar la canalización evitando múltiples (por ejemplo, al menos dos) ciclos de una fase de consulta y de descodificación de memoria caché de instrucciones. Este también puede ahorrar energía usando microoperaciones ya disponibles y descodificadas en la memoria temporal de microoperaciones. En algunas realizaciones, podría haber más de un subproceso con un suceso similar (por ejemplo, de tipo micro-de, dificultad de descodificación de microoperación, patrones de uso de microoperación), y se puede usar un esquema de prioridad en los casos en los que hay un empate entre subprocesos para asignar recursos a la memoria caché de microoperaciones. En algunas realizaciones, la característica de memoria caché de microoperaciones puede proporcionar asignación inteligente, directiva de reemplazo y / o configuración para memoria caché de microoperaciones para lograr la capacidad de proceso de instrucciones y / o IPC más altas en la canalización.
La figura 25 es un diagrama de bloques que ilustra una característica de memoria caché de microoperaciones que se puede incluir en un procesador de acuerdo con realizaciones. Una característica de memoria caché de microoperaciones puede comprender uno o más de los siguientes: un descodificador de instrucciones 2501, un bloque de asignación y de reemplazo inteligente 2502 y una memoria caché de microoperaciones 2503. Un bloque de asignación y de reemplazo inteligente 2502 puede recibir una instrucción desde el descodificador de instrucciones 2501. El descodificador de instrucciones 2501 también se puede omitir y el bloque de asignación y de reemplazo inteligente 2502 puede recibir una instrucción ya descodificada. El bloque de asignación y de reemplazo inteligente 2502 puede determinar algorítmicamente qué tipos de instrucciones asignar, tales como instrucción compleja (por ejemplo, con flujo de MS), flujo de bucle, etc. El bloque de asignación y de reemplazo inteligente 2502 puede determinar dónde asignar una instrucción en la memoria caché de microoperaciones KQA03 y puede asignar la instrucción en la ubicación determinada. En algunas realizaciones, el bloque de asignación y de reemplazo inteligente 2502 puede, por ejemplo, determinar algorítmicamente qué tipos de instrucciones asignar basándose en uno o más de los siguientes: patrones de uso históricos para instrucciones, frecuencia de uso, dificultad de descodificación y tiempo de descodificación. El bloque de asignación y de reemplazo inteligente puede, por ejemplo, determinar dónde almacenar instrucciones en la memoria caché de microoperaciones basándose en uno o más de los siguientes parámetros: información de instrucciones menos recientemente usadas, patrones de uso históricos para instrucciones, frecuencia de uso, dificultad de descodificación, si la instrucción es parte de un bucle y si se almacenan otras instrucciones desde el bucle, y tiempo de descodificación de instrucciones almacenadas en la memoria caché de microoperaciones. Estos parámetros pueden, por ejemplo, almacenarse en el bloque de asignación y de reemplazo inteligente, en la memoria caché de microoperaciones y / o en algún otro lugar (por ejemplo, en una tabla separada).
La figura 26 es un diagrama de flujo que ilustra un método para una característica de memoria caché de microoperaciones que puede ser realizado por un procesador de acuerdo con realizaciones. El método puede comprender recibir instrucciones como se muestra en el recuadro 2601. El método puede comprender además determinar algorítmicamente qué tipos de instrucciones asignar, tales como instrucción compleja, flujo de bucle, etc., como se muestra en el recuadro 2602. El método puede comprender además determinar dónde asignar una instrucción en una memoria caché de microoperaciones como se muestra en el recuadro 2603. El método puede comprender además asignar la instrucción en la ubicación determinada de la memoria caché de microoperaciones como se muestra en el recuadro 2604.
La figura 27 es un diagrama de bloques que ilustra una característica de memoria caché de microoperaciones que se puede incluir en un procesador de acuerdo con realizaciones. La característica de memoria caché de microoperaciones puede comprender una o más de una unidad de predicción de ramificaciones (BPU) 2701, una etiqueta de memoria caché de instrucciones 2702, una etiqueta de microoperación 2703, una memoria caché de instrucciones 2704, una memoria caché de microoperaciones 2705, un descodificador 2706 y una cola de microoperaciones 2707. La BPU 2701 puede realizar predicciones de ramificaciones (por ejemplo, para determinar si realizar operaciones condicionales). Como se ilustra en el lado izquierdo de la figura 27, la etiqueta de memoria caché de instrucciones 2702 puede, por ejemplo, recibir una etiqueta de instrucción desde la BPU 2701 y determinar una instrucción asociada con la etiqueta de instrucción. La instrucción se puede recobrar de la memoria caché de instrucciones 2704 y ser descodificada por el descodificador 2706. La cola de microoperaciones 2707 puede recibir entonces la instrucción descodificada desde el descodificador 2706. Como se ilustra en el lado derecho de la figura 28, la etiqueta de microoperación 2703 puede recibir una etiqueta de instrucción desde la BPU 2701 y determinar una etiqueta de microoperación asociada. Se puede comprobar entonces la memoria caché de microoperaciones 2705 para determinar si la microoperación asociada con la etiqueta de microoperación está almacenada en la memoria caché de microoperaciones 2705 y para recobrar la microoperación desde la memoria caché de microoperaciones 2705. Las microoperaciones se pueden descodificar y almacenar en la memoria caché de microoperaciones 2705, por ejemplo, como se ha descrito anteriormente en conexión con las figuras 25 y 26. La característica de memoria caché de microoperaciones puede ser física y / o virtual. La característica de memoria caché de microoperaciones puede comprender acortar la canalización. Por ejemplo, como se ilustra en la figura 27, en el caso en el que se han descodificado y almacenado previamente microoperaciones en la memoria caché de microoperaciones, la canalización en el lado derecho es más corta que la canalización en el lado izquierdo debido a que puede ser necesario realizar una operación de descodificación cuando la microoperación ya está almacenada en la memoria caché de microoperaciones. La característica de memoria caché de microoperaciones puede comprender una predicción de línea siguiente dentro de la memoria caché de microoperaciones 2705. La característica de memoria caché de microoperaciones puede almacenar flujos de MS en la memoria caché de microoperaciones 2705. La característica de memoria caché de microoperaciones puede usar directivas de reemplazo para determinar qué microoperaciones almacenar en la memoria caché y qué microoperaciones reemplazar con microoperaciones nuevas. La característica de memoria caché de microoperaciones puede determinar los tipos de instrucciones que asignar en la memoria caché de microoperaciones 2705, por ejemplo, flujo de bucle y / o instrucciones complejas. La característica de memoria caché de microoperaciones puede priorizar microoperaciones. La característica de memoria caché de microoperaciones puede comprender una memoria caché víctima (no mostrada). La memoria caché víctima puede almacenar instrucciones para una reutilización potencial, tal como instrucciones que fueron difíciles de descodificar.
La figura 28 es un diagrama de bloques que ilustra una característica de memoria caché de microoperaciones que se puede incluir en un procesador de acuerdo con realizaciones. La característica de memoria caché de microoperaciones puede comprender una o más de una memoria caché de microoperaciones física 2801 y una memoria caché de microoperaciones virtual 2802. La memoria caché de microoperaciones física 2801 puede, por ejemplo, almacenar microoperaciones en memoria física usando un espacio de direcciones físico. La memoria caché de microoperaciones virtual puede, por ejemplo, almacenar microoperaciones en memoria virtual usando un espacio de direcciones virtual. La memoria caché de microoperaciones física 2801 y / o la memoria caché de microoperaciones virtual 2802 se pueden purgar, por ejemplo, en una conmutación de modo y / o contexto. La memoria caché de microoperaciones física 2801 y / o la memoria caché de microoperaciones virtual 2802 se pueden compartir de forma competitiva.
Sumario de algunas realizaciones
Una realización puede incluir un procesador configurado para determinar algorítmicamente un tipo de instrucción que asignar a una memoria caché de microoperaciones; determinar una ubicación para asignar una instrucción del tipo determinado a la memoria caché de microoperaciones; y asignar la instrucción a la ubicación determinada.
En algunas realizaciones, son de aplicación uno o más de los siguientes. En algunas realizaciones, el procesador está configurado además para hacer que un bloque de asignación y de reemplazo inteligente reciba una instrucción desde un descodificador de instrucciones. En algunas realizaciones, el tipo de instrucción determinado es al menos uno de una instrucción compleja y un flujo de bucle. En algunas realizaciones, el procesador puede comprender una o más de una unidad de predicción de ramificaciones (BPU), una etiqueta de memoria caché de instrucciones, una etiqueta de microoperación, una memoria caché de instrucciones, una memoria caché de microoperaciones y un descodificador, y una cola de microoperaciones. En algunas realizaciones, la memoria caché de microoperaciones puede comprender una predicción de línea siguiente. En algunas realizaciones, el procesador está configurado para almacenar flujos de MS en la memoria caché de microoperaciones. En algunas realizaciones, el procesador está configurado para priorizar microoperaciones. En algunas realizaciones, el procesador comprende una memoria caché víctima. En algunas realizaciones, la memoria caché de microoperaciones comprende al menos una de una memoria caché de microoperaciones física y una memoria caché de microoperaciones virtual. En algunas realizaciones, la al menos una de la memoria caché de microoperaciones física y la memoria caché de microoperaciones virtual se puede compartir de forma competitiva. En algunas realizaciones, la determinación de qué tipo de instrucción asignar a una memoria caché de microoperaciones se puede basar, al menos en parte, en uno o más de los siguientes: patrones de uso históricos, frecuencia de uso, dificultad de descodificación y tiempo de descodificación. En algunas realizaciones, la determinación de la ubicación para asignar la instrucción del tipo determinado a la memoria caché de microoperaciones se puede basar en uno o más de los siguientes: información de instrucciones menos recientemente usadas, patrones de uso históricos para instrucciones, frecuencia de uso, dificultad de descodificación, información de estado de bucle, y tiempo de descodificación de instrucciones almacenadas en la memoria caché de microoperaciones.
Una realización puede incluir un método que comprende determinar algorítmicamente un tipo de instrucción que asignar a una memoria caché de microoperaciones; determinar una ubicación para asignar una instrucción del tipo determinado a la memoria caché de microoperaciones; y asignar la instrucción a la ubicación determinada.
En algunas realizaciones, son de aplicación uno o más de los siguientes. En algunas realizaciones, el método puede comprender además hacer que un bloque de asignación y de reemplazo inteligente reciba una instrucción desde un descodificador de instrucciones. En algunas realizaciones, el tipo de instrucción determinado es al menos uno de una instrucción compleja y un flujo de bucle. En algunas realizaciones, el método puede comprender además usar una o más de una unidad de predicción de ramificaciones (BPU), una etiqueta de memoria caché de instrucciones, una etiqueta de microoperación, una memoria caché de instrucciones, una memoria caché de microoperaciones y un descodificador, y una cola de microoperaciones. En algunas realizaciones, la memoria caché de microoperaciones puede comprender una predicción de línea siguiente. En algunas realizaciones, el método puede comprender además almacenar flujos de MS en la memoria caché de microoperaciones. En algunas realizaciones, el método puede comprender además priorizar microoperaciones. En algunas realizaciones, el método puede comprender además usar una memoria caché víctima. En algunas realizaciones, usar la memoria caché de microoperaciones comprende usar al menos una de una memoria caché de microoperaciones física y una memoria caché de microoperaciones virtual. En algunas realizaciones, el método puede comprender además compartir de manera competitiva al menos una de la memoria caché de microoperaciones física y la memoria caché de microoperaciones virtual. En algunas realizaciones, la determinación de qué tipo de instrucción asignar a una memoria caché de microoperaciones se puede basar, al menos en parte, en uno o más de los siguientes: patrones de uso históricos, frecuencia de uso, dificultad de descodificación y tiempo de descodificación. En algunas realizaciones, la determinación de la ubicación para asignar la instrucción del tipo determinado a la memoria caché de microoperaciones se puede basar en uno o más de los siguientes: información de instrucciones menos recientemente usadas, patrones de uso históricos para instrucciones, frecuencia de uso, dificultad de descodificación, información de estado de bucle, y tiempo de descodificación de instrucciones almacenadas en la memoria caché de microoperaciones.
Una realización puede incluir un medio legible por máquina no transitorio que almacena al menos una instrucción que, cuando es ejecutada por un procesador, hace que el procesador realice un método, comprendiendo el método determinar algorítmicamente un tipo de instrucción que asignar a una memoria caché de microoperaciones; determinar una ubicación para asignar una instrucción del tipo determinado a la memoria caché de microoperaciones; y asignar la instrucción a la ubicación determinada.
En algunas realizaciones, son de aplicación uno o más de los siguientes. En algunas realizaciones, el método puede comprender además hacer que un bloque de asignación y de reemplazo inteligente reciba una instrucción desde un descodificador de instrucciones. En algunas realizaciones, el tipo de instrucción determinado es al menos uno de una instrucción compleja y un flujo de bucle. En algunas realizaciones, el método puede comprender además usar una o más de una unidad de predicción de ramificaciones (BPU), una etiqueta de memoria caché de instrucciones, una etiqueta de microoperación, una memoria caché de instrucciones, una memoria caché de microoperaciones y un descodificador, y una cola de microoperaciones. En algunas realizaciones, la memoria caché de microoperaciones puede comprender una predicción de línea siguiente. En algunas realizaciones, el método puede comprender además almacenar flujos de MS en la memoria caché de microoperaciones. En algunas realizaciones, el método puede comprender además priorizar microoperaciones. En algunas realizaciones, el método puede comprender además usar una memoria caché víctima. En algunas realizaciones, usar la memoria caché de microoperaciones comprende usar al menos una de una memoria caché de microoperaciones física y una memoria caché de microoperaciones virtual. En algunas realizaciones, el método puede comprender además compartir de manera competitiva al menos una de la memoria caché de microoperaciones física y la memoria caché de microoperaciones virtual. En algunas realizaciones, la determinación de qué tipo de instrucción asignar a una memoria caché de microoperaciones se puede basar, al menos en parte, en uno o más de los siguientes: patrones de uso históricos, frecuencia de uso, dificultad de descodificación y tiempo de descodificación. En algunas realizaciones, la determinación de la ubicación para asignar la instrucción del tipo determinado a la memoria caché de microoperaciones se puede basar en uno o más de los siguientes: información de instrucciones menos recientemente usadas, patrones de uso históricos para instrucciones, frecuencia de uso, dificultad de descodificación, información de estado de bucle, y tiempo de descodificación de instrucciones almacenadas en la memoria caché de microoperaciones.
Una realización puede incluir un sistema que incluye una memoria y un procesador, el procesador configurado para determinar algorítmicamente un tipo de instrucción que asignar a una memoria caché de microoperaciones; determinar una ubicación para asignar una instrucción del tipo determinado a la memoria caché de microoperaciones; y asignar la instrucción a la ubicación determinada.
En algunas realizaciones, son de aplicación uno o más de los siguientes. En algunas realizaciones, el procesador está configurado además para hacer que un bloque de asignación y de reemplazo inteligente reciba una instrucción desde un descodificador de instrucciones. En algunas realizaciones, el tipo de instrucción determinado es al menos uno de una instrucción compleja y un flujo de bucle. En algunas realizaciones, el procesador puede comprender una o más de una unidad de predicción de ramificaciones (BPU), una etiqueta de memoria caché de instrucciones, una etiqueta de microoperación, una memoria caché de instrucciones, una memoria caché de microoperaciones y un descodificador, y una cola de microoperaciones. En algunas realizaciones, la memoria caché de microoperaciones puede comprender una predicción de línea siguiente. En algunas realizaciones, el procesador está configurado para almacenar flujos de MS en la memoria caché de microoperaciones. En algunas realizaciones, el procesador está configurado para priorizar microoperaciones. En algunas realizaciones, el procesador comprende una memoria caché víctima. En algunas realizaciones, la memoria caché de microoperaciones comprende al menos una de una memoria caché de microoperaciones física y una memoria caché de microoperaciones virtual. En algunas realizaciones, la al menos una de la memoria caché de microoperaciones física y la memoria caché de microoperaciones virtual se puede compartir de forma competitiva. En algunas realizaciones, la determinación de qué tipo de instrucción asignar a una memoria caché de microoperaciones se puede basar, al menos en parte, en uno o más de los siguientes: patrones de uso históricos, frecuencia de uso, dificultad de descodificación y tiempo de descodificación. En algunas realizaciones, la determinación de la ubicación para asignar la instrucción del tipo determinado a la memoria caché de microoperaciones se puede basar en uno o más de los siguientes: información de instrucciones menos recientemente usadas, patrones de uso históricos para instrucciones, frecuencia de uso, dificultad de descodificación, información de estado de bucle, y tiempo de descodificación de instrucciones almacenadas en la memoria caché de microoperaciones.
Movimiento - eliminación
Un núcleo de procesador puede soportar una característica de movimiento - eliminación de acuerdo con realizaciones de la invención. Para muchos procesadores, ejecutar una instrucción de movimiento habitualmente implica mover un valor desde un registro a otro registro, o mover un inmediato a un registro. Debido a la frecuencia de tales instrucciones de movimiento, el desempeño del procesador se puede aumentar si las instrucciones de movimiento se procesan de forma eficiente.
La mayoría de las instrucciones operan sobre varios operandos de origen y generan resultados. Estas nombran, de forma o bien explícita o bien indirecta, las ubicaciones de origen y de destino desde donde se leen o en donde se escriben valores. Un nombre puede ser o bien un registro lógico (arquitectónico) o bien una ubicación en memoria.
Habitualmente, el número de registros físicos disponibles para un procesador supera el número de registros lógicos, de tal modo que se puede utilizar un cambio de nombre de registro para aumentar el desempeño. En particular, para los procesadores fuera de orden, el cambio de nombre de registro permite que se ejecuten instrucciones fuera de su orden de programa original. Por lo tanto, para muchos procesadores fuera de orden, se cambia el nombre de una instrucción de movimiento de tal modo que el registro lógico nombrado en la instrucción de movimiento original se cambia de nombre a registros físicos.
Cambiar el nombre de un registro lógico implica correlacionar un registro lógico con un registro físico. Estas correlaciones se pueden almacenar en una Tabla de Alias de Registro (RAT). Una RAT mantiene la correlación más reciente para cada registro lógico. Una RAT es indexada por registros lógicos, y proporciona correlaciones con registros físicos correspondientes.
En la figura 29 se ilustra un esquema de cambio de nombre de registro y de seguimiento de dependencia que implica tres estructuras, la RAT 2900, la lista activa (AL) 2902 y la lista libre (FL) 2904. Para cada registro lógico especificado por una instrucción sometida a cambio de nombre, se correlaciona un registro físico no usado a partir de la FL 2904, y se actualiza la RAT 2900 con esta correlación nueva. Los registros físicos son libres de usarse de nuevo (es decir, rescatarse) una vez que ya no se haga más referencia a los mismos por instrucciones en la ventana de instrucciones actual.
Basándose en las estructuras de datos representadas en la figura 29, un método para el rescate de registros es rescatar un registro físico solo cuando la instrucción que expulsó el mismo de la RAT 110, es decir, la instrucción que creó una nueva correlación con el registro físico, se retira. Como resultado, cada vez que una correlación nueva actualice la RAT 2900, la correlación antigua expulsada se inserta en la AL 2902 (una entrada de AL está asociada con cada instrucción en la ventana de instrucciones). Cuando una instrucción se retira, el registro físico de la correlación antigua registrada en la AL 2902, de haber alguno, se rescata y se inserta en la FL 2904. Este ciclo se representa en la figura 29.
Para muchas instrucciones, uno de los registros de origen también se usa como un registro de destino. Si el valor almacenado en este registro de origen es necesario para instrucciones posteriores (en el orden de programa), se puede insertar una instrucción de movimiento de registro antes de la instrucción posterior para copiar el operando de origen en el registro de origen en otra ubicación lógica de tal modo que se pueda tener acceso al mismo por la instrucción posterior.
Otra razón para la inserción de instrucciones de movimiento de registro es establecer los valores de parámetro en los registros apropiados antes de una llamada de procedimiento.
Como resultado, el número de instrucciones de movimiento de registro puede ser bastante significativo. Por lo tanto, puede ser deseable prever la ejecución eficiente de instrucciones de movimiento de registro con esquemas de cambio de nombre de registro y de rescate eficientes.
En la figura 1B, la unidad funcional de cambio de nombre de registro se indica como la unidad de cambio de nombre / asignación 152, y los registros físicos se indican como la unidad de archivos de registro físico 158. En la figura 3, las unidades funcionales de cambio de nombre de registro se indican como la unidad de cambio de nombre de número entero 321 y la unidad de cambio de nombre de FP 331, y los registros físicos son indicados por el archivo de registro físico de número entero 323 y el archivo de registro de FP 333. Cada registro lógico tiene una correlación con un registro físico, en donde la correlación se almacena en la RAT 2900 como una entrada. Una entrada en la RAT 2900 es indexada por un registro lógico y contiene un puntero a un registro físico.
Durante un cambio de nombre de una instrucción, entradas actuales en la RAT proporcionan la correlación requerida para cambiar el nombre del registro o registros lógicos de origen de la instrucción, y se crea una correlación nueva para el registro lógico de destino de la instrucción. Esta correlación nueva expulsa la correlación antigua en la RAT, y la RAT se actualiza con la correlación nueva.
La Tabla 1 ilustra un ejemplo de cambio de nombre de registro. En la Tabla 1, se proporcionan cuatro instrucciones en el orden de programa original en la primera columna. Las instrucciones sometidas a cambio de nombre se indican en la segunda columna. Junto a cada instrucción sometida a cambio de nombre están las entradas actuales en la RAT después del cambio de nombre de instrucción. La columna final proporciona la correlación expulsada por cambio de nombre de instrucción. Por simplicidad, solo se consideran tres registros lógicos, LRa, LRb y LRb. Un registro físico se denota por PRi en donde i es un número entero. La primera entrada en la Tabla 1 proporciona el estado actual de la RAT antes de que se cambie el nombre de la primera instrucción enumerada.
Por ejemplo, en la Tabla 1, la primera instrucción LRa 2 ^ LRa (que indica que el inmediato 2 se añade al valor en el registro lógico LRa y el resultado se almacena en el registro lógico LRa) se cambia de nombre a PR1 2 ^ PR2, en donde se supuso que el registro físico PR2 estaba disponible. Para esta instrucción, se creó una correlación nueva LRa ^ PR2 y se expulsó de la RAT la correlación antigua LRa ^ PR1.
Obsérvese que existe una dependencia verdadera de la segunda y la cuarta instrucciones con respecto a la primera instrucción, y una dependencia verdadera de la tercera instrucción con respecto a la segunda instrucción. Sin embargo, el cambio de nombre de registro ha retirado la dependencia de salida entre la segunda y la cuarta instrucciones, así como la antidependencia entre la tercera y la cuarta instrucciones, de tal modo que la segunda, la tercera y la cuarta instrucciones se pueden ejecutar fuera de orden, siempre que la ejecución de orden siga las diversas dependencias verdaderas.
Tabla 1
Figure imgf000032_0001
Las instrucciones sometidas a cambio de nombre se colocan en la memoria temporal de ventana de instrucciones. Las entradas en la memoria temporal de ventana de instrucciones contienen el código de operación de la instrucción sometida a cambio de nombre, así como otros campos que se van a describir más adelante. Para esta realización, los resultados de las instrucciones no se almacenan en la memoria temporal de ventana de instrucciones, sino que residen en el archivo de registro físico.
La memoria temporal de ventana de instrucciones prevé la retirada de instrucciones en el orden de programa original. Para arquitecturas de ordenador de conjunto de instrucciones complejas (CISC), una instrucción compleja se retira cuando todas las microinstrucciones que conforman la instrucción compleja se retiran conjuntamente. La memoria temporal de ventana de instrucciones funciona como una memoria temporal circular, en donde un primer puntero apunta a la instrucción siguiente a retirar y un segundo puntero apunta a la entrada disponible siguiente para una instrucción recién descodificada. El incremento de los punteros se realiza en aritmética de módulo N, en donde N es el número de entradas disponibles en la memoria temporal. Cuando una instrucción se retira, se incrementa el primer puntero. Los punteros se incrementan en uno para cada instrucción descodificada en arquitecturas de ordenador de conjunto de instrucciones reducido (RISC), y se pueden incrementar en más de uno para arquitecturas de CISC.
Para una instrucción de almacenamiento que escribe su resultado en una ubicación de memoria, la memoria caché de datos se actualiza tras la retirada de la instrucción. Para una instrucción que escribe su resultado en un registro lógico, no es necesario realizar escritura alguna ante la retirada debido a que no hay registro dedicado alguno como registros lógicos. Para una instrucción de este tipo, el archivo de registro físico tiene el resultado de la instrucción de retirada en el registro físico con el que se correlacionó el registro lógico de destino cuando se cambió el nombre de la instrucción.
El programador programa instrucciones en unidades de ejecución para su ejecución. La función de programación puede ser lograda, por ejemplo, por estaciones de reserva que implementan el algoritmo de Tomasulo (o variaciones del mismo). Las unidades de ejecución pueden recobrar datos desde, o enviar datos a, la memoria caché de datos o al archivo de registro físico, dependiendo de la instrucción (o microinstrucción) a ejecutar.
En otras realizaciones de la invención, el contenido de información contenido en las estructuras de datos del archivo de registro físico y la memoria temporal de ventana de instrucciones puede ser logrado por diferentes unidades funcionales. Por ejemplo, una memoria temporal de reordenación puede reemplazar la memoria temporal de ventana de instrucciones y el archivo de registro físico, de tal modo que los resultados se almacenan en la memoria temporal de reordenación y, además, los registros en un archivo de registro se dedican como registros lógicos. Para este tipo de realización, el resultado de una instrucción que especifica una escritura en un registro lógico se escribe en un registro lógico tras la retirada de la instrucción.
A continuación se distinguen dos tipos de instrucciones de movimiento: movimientos de registro a registro y movimientos de inmediato a registro. En un movimiento de registro a registro, un valor se mueve desde un registro, el registro lógico de origen, a otro registro, el registro lógico de destino. En un movimiento de inmediato a registro, un valor inmediato se mueve a un registro lógico.
En realizaciones de la invención, se ejecutan instrucciones de movimiento correlacionando más de un registro lógico con el mismo registro físico. La ejecución de una instrucción de movimiento de registro a registro se realiza correlacionando el registro lógico de destino de la instrucción de movimiento con el registro físico correlacionado por el registro lógico de origen de la instrucción de movimiento.
La ejecución de una instrucción de movimiento de inmediato a registro se puede realizar accediendo a una memoria caché de puesta en coincidencia de valores. Las entradas en una memoria caché de puesta en coincidencia de valores se indexan por valores, en donde una entrada de memoria caché asocia un valor con un registro físico que almacena ese valor. La memoria caché de puesta en coincidencia de valores puede tener menos entradas que el número de registros físicos. Si hay un acierto en la memoria caché de puesta en coincidencia de valores, entonces el registro lógico de destino de la instrucción de movimiento se correlaciona con el registro físico indicado por la memoria caché de puesta en coincidencia de valores. Si no hay un acierto, entonces la ejecución de movimiento se realiza como en arquitecturas de la técnica anterior, y se actualiza la memoria caché de puesta en coincidencia de valores.
El archivo de registro físico puede atender, él mismo, la función de una memoria caché de puesta en coincidencia de valores, de tal modo que la memoria caché de puesta en coincidencia de valores no es necesaria. En este caso, el archivo de registro necesitaría un puerto adicional para realizar una puesta en coincidencia de etiquetas en paralelo, en donde la etiqueta es el valor almacenado en un registro físico.
Como se ha analizado anteriormente, las instrucciones de movimiento de registro a registro y las instrucciones de movimiento de inmediato a registro (con la condición de que haya un acierto en la memoria caché de puesta en coincidencia de valores para este último tipo de movimiento) se ejecutan creando múltiples correlaciones en las que más de un registro lógico se correlaciona con el mismo registro físico. En la práctica, tales instrucciones de movimiento se "eliminan" en el sentido de que estas ya no son ejecutadas por unidades de ejecución. En su lugar, las eliminaciones de movimientos se realizan durante la fase de cambio de nombre. Estas instrucciones permanecen en la ventana de memoria temporal de instrucciones, listas para retirarse. Los gráficos de dependencia se contraen debido a que las instrucciones dependientes de tales instrucciones de movimiento se hacen dependientes directamente del productor real (las dependencias se redirigen). También puede haber una reducción en el requisito de registros físicos y puede haber menos escrituras en el archivo de registro.
Los mecanismos de modismo - eliminación efectúan de manera similar las operaciones de instrucción sin pasar las mismas por una canalización fuera de orden tradicional. Los modismos son instancias de instrucciones de propósito general codificadas para lograr un efecto específico, a menudo de una manera más optimizada en comparación con instrucciones explícitas. Los modismos de movimiento incluyen cualquier instrucción construida para colocar los contenidos de un registro de origen en un registro de destino sin otros efectos, tal como R1 = ADD R0, #0. De manera similar, los modismos con cero son instrucciones de propósito general codificadas para establecer un registro a cero, tal como R0 = XOR R0, R0. Las no-op (NOP) son instrucciones definidas para no tener efecto alguno sobre el estado arquitectónico, incluyendo el código de operación NOP explícito y modismos NOP tales como RO = ADD R0, #0.
Se pueden desear realizaciones de la invención para realizar mejoras en técnicas de movimiento - eliminación y de modismo - eliminación existentes ahorrando ancho de banda de asignación / cambio de nombre de microoperaciones, aumentando el desempeño, disminuyendo el consumo de energía e implementando características de ahorro de energía, y mejorando la equidad, garantías de desempeño mínimo, capacidad de proceso, instrucciones por reloj (IPC), instrucciones por unidad de tiempo, calidad de servicio, eficiencia de memoria y / o tiempo, y ampliando la cobertura de las eliminaciones de movimientos a más tipos de instrucción.
En realizaciones, los resultados de las operaciones de movimiento - eliminación y de modismo - eliminación sobre la marcha sobre un flujo de instrucciones se pueden almacenar en una memoria caché de microoperaciones descodificada, tal como la memoria caché de microoperaciones 133 o 312. Por lo tanto, se puede evitar el redescubrimiento de las condiciones necesarias y la repetición de las operaciones que eliminan, de la canalización, las instrucciones originales.
Las instrucciones eliminadas se pueden reemplazar con metadatos almacenados en la memoria caché de microoperaciones que logra el mismo efecto que las instrucciones eliminadas. Cuando se escribe la memoria caché de microoperaciones, los resultados del movimiento - eliminación o el modismo - eliminación se convierten en metadatos con el fin de que las microoperaciones se puedan retirar de la memoria caché de microoperaciones y, por lo tanto, optimizarse fuera del flujo de microoperaciones entregado. Debido a que el mecanismo de eliminación de instrucciones sobre la marcha ya ha hecho el trabajo para identificar las oportunidades, la compilación de memoria caché de microoperaciones se puede modificar para explorar y retirar las microoperaciones afectadas. Los metadatos incluyen información necesaria para realizar las operaciones de cambio de nombre, además de información arquitectónica relevante, tal como la existencia de fronteras de suceso y efectos de contadores de supervisión de desempeño. Por ejemplo, los metadatos pueden indicar cuántas instrucciones se eliminaron y / o, para una arquitectura de CISC, cuántas microoperaciones se eliminaron para cada instrucción y / o que tuvo lugar un final de macroinstrucción después de una instrucción que se eliminó. Se pueden almacenar metadatos en un campo en una entrada para una microoperación antes y / o después de microoperaciones eliminadas.
En una realización, el movimiento - eliminación se puede ampliar para incluir operaciones de ampliación de cero y de ampliación de signo. Por ejemplo, R0 = MOV.ZE R1 se puede someter a movimiento - eliminación, aunque este no es un movimiento simple.
En una realización, la RAT 3000 se puede ampliar como se muestra en la figura 30 para incluir modismos con cero, ampliación de signo y ampliación de cero. La RAT se amplía con los siguientes tres bits: Z, cuando se establece, el resto de la entrada de RAT se ignora y el registro lógico se trata como cero; SE, cuando se establece, el valor del registro lógico es la versión con ampliación de signo del identificador de archivo de registro físico (ID de PRF) almacenado en la entrada; y ZE, cuando se establece, el valor del registro lógico es la versión con ampliación de cero del ID de PRF almacenado en la entrada.
Entonces, como se ilustra en la figura 31, los bits Z, SE y ZE se pueden leer durante el cambio de nombre de registro y el paso por la canalización con la microoperación que lee el registro. Los bits se interpretan antes de la operación de la ALU 3120 para crear el resultado correcto. En la figura 31, la trayectoria de origen izquierda se amplifica conceptualmente para incluir la interpretación de los bits Z, SE y ZE por el multiplexor 3110. Basándose en estos bits, el origen se usa sin modificar a partir de la red de derivación o el archivo de registro físico, se reemplaza con un cero, se usa después de la ampliación de signo o se usa después de la ampliación de cero.
Sumario de algunas realizaciones
Una realización de la invención puede incluir un procesador que comprende una memoria caché de microoperaciones que incluye una pluralidad de ubicaciones de entrada. Al menos una ubicación de entrada puede incluir un primer campo y un segundo campo. El primer campo puede ser para almacenar una primera microoperación. El segundo campo puede ser para almacenar metadatos para indicar la eliminación de una segunda microoperación con respecto a un flujo de microoperaciones a descodificar a partir de un flujo de instrucciones, en donde la segunda microoperación ha de resultar de una descodificación de una instrucción de movimiento.
Una realización de la invención puede incluir un procesador que comprende una tabla de alias de registro que incluye una pluralidad de entradas. Al menos una entrada puede incluir un campo en el que almacenar uno de un indicador de cero, un indicador de ampliación de signo y un indicador de ampliación de cero. El indicador de cero ha de indicar que un operando de origen se ha de reemplazar con un cero. El indicador de ampliación de signo ha de indicar que el operando de origen se ha de usar después de la ampliación de signo. El indicador de ampliación de cero ha de indicar que el operando de origen se ha de usar después de la ampliación de cero.
Cambio de nombre de registro virtual
Un núcleo de procesador puede soportar una característica de cambio de nombre de registro virtual de acuerdo con realizaciones. En algunas realizaciones, un operando ymmi de 256 bits se puede almacenar en un archivo de registro de 128 bits. La mitad superior del operando de 256 bits se puede almacenar en el archivo de registro de 128 bits como el operando de 128 bits ymmihigh. La mitad inferior del operando de 256 bits se puede almacenar en el archivo de registro de 128 bits como el operando de 128 bits xmmi (ymmilow) cambiando virtualmente el nombre de la mitad inferior del operando de 256 bits. En algunas realizaciones, esta característica prevé de manera ventajosa implementar una ISA más amplia en un registro físico más pequeño cambiando el nombre de mitades de la instrucción. En algunas realizaciones, el uso de registros físicos más pequeños mejora el sistema informático proporcionando más flexibilidad, ahorros de energía y un desempeño mejor debido a que, por ejemplo, se puede acceder a porciones de las instrucciones de forma individual. En algunas realizaciones, se pueden usar otros tamaños de instrucciones y registros (por ejemplo, operandos de 512 bits con registros de 256 bits). En algunas realizaciones, los operandos se pueden dividir en fragmentos más pequeños, por ejemplo, tercios, cuartos, octavos, dieciseisavos. Por ejemplo, la característica de cambio de nombre de registro virtual se podría usar, por ejemplo, para permanecer como un operando de 512 bits como ocho partes a almacenar en un archivo de registro de 64 bits.
La figura 32 es un diagrama de bloques que ilustra una característica de cambio de nombre de registro virtual que se puede incluir en un procesador de acuerdo con realizaciones. La característica de cambio de nombre de registro virtual puede comprender un operando 3201 tal como un operando de 256 bits ymmi. La característica de cambio de nombre de registro virtual puede comprender además un archivo de registro de 128 bits 3201. El operando de 256 bits ymmi 3201 se puede almacenar en un archivo de registro de 128 bits 3202. La mitad superior del operando de 256 bits 3201 se puede almacenar en el archivo de registro de 128 bits 3202 como el operando de 128 bits ymmihigh. La mitad inferior del operando de 256 bits 3201 se puede almacenar en el archivo de registro de 128 bits 3202 como el operando de 128 bits xmmi (ymmilow) cambiando virtualmente el nombre de la mitad inferior del operando de 256 bits.
La figura 33 es un diagrama de flujo que ilustra un método para una característica de cambio de nombre de registro virtual que puede ser realizado por un procesador de acuerdo con realizaciones. El método comprende almacenar una mitad inferior de un operando en un archivo de registro como se muestra en 3301. El método comprende además cambiar el nombre virtualmente de una mitad superior del operando como se muestra en 3302. El método comprende además almacenar la mitad superior sometida a cambio de nombre virtualmente del operando en el archivo de registro. En otras realizaciones, son posibles otras modificaciones. Por ejemplo, se puede cambiar de nombre virtualmente la mitad inferior del operando en lugar o además de cambiar de nombre virtualmente la mitad superior. Adicionalmente, las operaciones se pueden realizar en diferentes órdenes. Por ejemplo, el almacenamiento de la mitad no sometida a cambio de nombre virtualmente se puede realizar antes o después del cambio de nombre virtual y / o el almacenamiento de la mitad sometida a cambio de nombre virtualmente. Adicionalmente, la mitad sometida a cambio de nombre virtualmente se puede someter a cambio de nombre virtualmente y, entonces, almacenarse, o viceversa.
Sumario de algunas realizaciones
Una realización puede incluir un procesador configurado para almacenar una primera mitad de un operando en un archivo de registro; cambiar de nombre virtualmente una segunda mitad del operando; y almacenar la segunda mitad del operando sometida a cambio de nombre virtualmente en el archivo de registro. En algunas realizaciones, son de aplicación uno o más de los siguientes. El operando puede ser un operando de 256 bits. El archivo de registro puede ser un archivo de registro de 128 bits.
Una realización puede incluir un método que comprende almacenar una primera mitad de un operando en un archivo de registro; cambiar de nombre virtualmente una segunda mitad del operando; almacenar la segunda mitad del operando sometida a cambio de nombre virtualmente en el archivo de registro. En algunas realizaciones, son de aplicación uno o más de los siguientes. El operando puede ser un operando de 256 bits. El archivo de registro puede ser un archivo de registro de 128 bits.
Una realización puede incluir un medio legible por máquina no transitorio que almacena al menos una instrucción que, cuando es ejecutada por un procesador, hace que el procesador realice un método, comprendiendo el método almacenar una primera mitad de un operando en un archivo de registro; cambiar de nombre virtualmente una segunda mitad del operando; almacenar la segunda mitad del operando sometida a cambio de nombre virtualmente en el archivo de registro. En algunas realizaciones, son de aplicación uno o más de los siguientes. El operando puede ser un operando de 256 bits. El archivo de registro puede ser un archivo de registro de 128 bits.
Una realización puede incluir un sistema que incluye una memoria y un procesador, el procesador configurado para almacenar una primera mitad de un operando en un archivo de registro; cambiar de nombre virtualmente una segunda mitad del operando; y almacenar la segunda mitad del operando sometida a cambio de nombre virtualmente en el archivo de registro. En algunas realizaciones, son de aplicación uno o más de los siguientes. El operando puede ser un operando de 256 bits. El archivo de registro puede ser un archivo de registro de 128 bits.
Fisión y fusión de FMA
Un núcleo de procesador puede soportar la fisión y la fusión de instrucciones y operaciones de multiplicación - suma de acuerdo con realizaciones de la invención. En diversas realizaciones, un núcleo de procesador puede soportar un conjunto de instrucciones que tiene cualesquiera una o más instrucciones de suma, multiplicación, multiplicación -suma fusionada (FMAD) y / o multiplicación - acumulación fusionada (FMAC) (en donde FMAD y / o FMAC se pueden denominar FMA) para operar sobre valores de FP. Un núcleo de este tipo puede incluir cualesquiera uno o más de un circuito sumador, un circuito multiplicador y / o un circuito de FMA para realizar operaciones de suma, de multiplicación y / o de FMA de FP en respuesta a estas instrucciones. Se pueden proporcionar instrucciones y / o circuitería separadas para operar sobre valores enteros (por ejemplo, FMAC) y valores de FP (por ejemplo, FMAD), y se pueden describir realizaciones con referencia a una u otra (de número entero o de FP); sin embargo, diversas realizaciones de la invención pueden incluir una u otra o ambas.
Realizaciones de la invención prevén convertir instrucciones / operaciones de FMA en pares de instrucciones / operaciones de suma y de multiplicación (fisión) y / o convertir pares de instrucciones / operaciones de suma y de multiplicación en instrucciones / operaciones de f Ma (fusión) entre y / o dentro de diversas fases en una canalización de emisión / ejecución de instrucción. Esta característica se puede denominar, en general, fisión / fusión de FMA o fisión / fusión de FMA dinámica.
Se pueden desear realizaciones de la invención que incluyen fisión / fusión de FMA por muchas razones, incluyendo: proporcionar la capacidad de ejecutar instrucciones de FMA y / o realizar operaciones de FMA en un núcleo que tiene un circuito sumador y un circuito multiplicador, pero sin circuito de FMA; proporcionar la capacidad de ejecutar una instrucción de multiplicación y una instrucción de suma usando una operación de FMA para aumentar la capacidad de proceso a través de uno o más recursos de núcleo; proporcionar la capacidad de dividir de forma dinámica instrucciones u operaciones de FMA en operaciones de multiplicación y operaciones de suma para reducir la trayectoria crítica en un bucle y aumentar las instrucciones por ciclo; y proporcionar la posibilidad de optimizar, de una forma fase a fase, una canalización capaz de FMA para una combinación deseada de desempeño, complejidad y energía (por ejemplo, aumentar el desempeño, disminuir el consumo de energía e implementar características de ahorro de energía, y mejorar la equidad, garantías de desempeño mínimo, capacidad de proceso, instrucciones por reloj (IPC), instrucciones por unidad de tiempo, calidad de servicio, eficiencia de memoria y / o tiempo, por enumerar solo algunos de los criterios aplicables).
La figura 34 es un diagrama de bloques que ilustra una canalización de emisión / ejecución 3400 que se puede implementar en un núcleo de procesador que soporta una característica de fisión / fusión de FMA de acuerdo con realizaciones de la invención. En la figura 34, la canalización 3400 incluye la fase de recuperación de instrucciones 3401, la fase de descodificación de instrucciones 3402, la fase de cambio de nombre / asignación 3403, la fase de programación 3404, la fase de ejecución 3405 y la fase de retirada / consignación 3406. La canalización 3400 se proporciona para fines ilustrativos y se puede implementar y / o modificar de una diversidad de formas en diversas realizaciones de la invención. Por lo tanto, la siguiente descripción de la canalización 3400 se puede referir a diversos bloques mostrados en otras figuras descritas en esta memoria descriptiva.
Por ejemplo, la fase de recuperación de instrucciones 3401 puede incluir usar un circuito de recuperación de instrucciones (por ejemplo, 138, 400) para identificar (por ejemplo, usando el registro de PC siguiente 410) una instrucción o la ubicación de memoria de una instrucción a recuperar y para recuperar la instrucción desde una memoria caché i (por ejemplo, 134, 313, 470, 913) u otra ubicación de memoria; la fase de descodificación de instrucciones 3402 puede incluir usar un circuito de descodificación de instrucciones (por ejemplo, 140, 314, 500, 914) para descodificar (por ejemplo, usando el descodificador 530) la instrucción; la fase de cambio de nombre / asignación 3403 puede incluir usar un circuito de cambio de nombre / asignación (por ejemplo, 152, 331, 931) para cambiar el nombre de operandos de registro y / o para asignar ubicaciones de almacenamiento y / o etiquetas para el cambio de nombre de registro; la fase de programación 3404 puede incluir usar un circuito de programación (por ejemplo, 156, 332, 932) para programar operaciones y / o microoperaciones (por ejemplo, desde el descodificador 140, 314, 530 o 614 o la memoria caché de microoperaciones 133, 312, 540 o 912) asociadas con la instrucción para su ejecución; la fase de ejecución 3405 puede incluir usar un circuito de ejecución (por ejemplo, 162, 334, 335, 770, 780, 934, 935) para ejecutar operaciones y / o microoperaciones (por ejemplo, desde el descodificador 140, 314, 530 o 614 o la memoria caché de microoperaciones 133, 312, 540 o 912) asociadas con la instrucción; y la fase de retirada / consignación 3406 puede incluir usar un circuito de retirada (por ejemplo, 154, 730, 960) para retirar la instrucción y / o consignar su resultado a un archivo de registro físico (por ejemplo, 158, 333, 750, 933) o memoria. Cada fase mostrada en la figura 34 puede representar una o más fases y / o ciclos de reloj en diversas realizaciones.
La figura 34 también muestra la trayectoria fusionada 3410 y la trayectoria dividida 3420, cada una de las cuales representa una realización de una trayectoria a través de la canalización 3400. La trayectoria fusionada 3410 puede incluir circuitos, estructuras y / o hardware para procesar, realizar y / o ejecutar una instrucción, operación y / o microoperación de FMA como una instrucción, operación y / o microoperación fusionada, como se describe usando realizaciones ilustrativas a continuación. La trayectoria dividida 3420 puede incluir circuitos, estructuras y / o hardware para procesar, realizar y / o ejecutar una instrucción, operación y / o microoperación de multiplicación y una de suma como instrucciones, operaciones y / o microoperaciones separadas, como se describe usando realizaciones ilustrativas a continuación. Además, la trayectoria dividida 3420 puede incluir circuitos, estructuras y / o hardware para procesar, realizar y / o ejecutar una instrucción, operación y / o microoperación de FMA como una instrucción, operación y / o microoperación de multiplicación y una de suma; y la trayectoria fusionada 3410 puede incluir circuitos, estructuras y / o hardware para procesar, realizar y / o ejecutar una instrucción, operación y / o microoperación de multiplicación y una de suma como una instrucción, operación y / o microoperación fusionada.
Por lo tanto, la figura 34 ilustra conceptualmente un conjunto de recursos de núcleo que se pueden usar para procesar, realizar y / o ejecutar operaciones, instrucciones y microoperaciones de multiplicación y de suma fusionadas y / o separadas. Diversas realizaciones pueden incluir diversos subconjuntos de estos recursos para soportar diversas capacidades, como se describirá adicionalmente a continuación. Asimismo, las implementaciones pueden incluir diversos recursos adicionales no mostrados en la figura 34 que se pueden proporcionar y / o configurar para poner en práctica diversas realizaciones de la invención.
La figura 34 también muestra el controlador de fisión / fusión de FMA 3430, que puede representar un controlador o estructura de control programable, configurable o cableado, que incluye uno o más circuitos de control y / o registros de configuración de hardware o software programables para generar señales de control para dirigir el flujo de instrucciones, operaciones, microoperaciones, operandos, valores y / u otros datos a través de, y / o entre, la trayectoria fusionada 3410 y / o la trayectoria dividida 3420. Estas señales de control pueden prever una o más trayectorias a través de la canalización 3400 que incluyen una combinación de recursos en la trayectoria fusionada 3410 y la trayectoria dividida 3420. Estas señales de control pueden prever una fisión / fusión de FMA dinámica haciendo que una instrucción, operación y / o microoperación de FMA se procese, se realice y / o se ejecute como una instrucción, operación y / o microoperación fusionada en respuesta a una primera condición y como instrucciones, operaciones y / o microoperaciones de multiplicación y de suma separadas en respuesta a una segunda condición y / o haciendo que instrucciones, operaciones y / o microoperaciones de multiplicación y de suma separadas, se procesen y se realicen y / o se ejecuten como una instrucción, operación y / o microoperación fusionada en respuesta a una tercera condición y como instrucciones, operaciones y / o microoperaciones de multiplicación y de suma separadas en respuesta a una cuarta condición.
Por ejemplo, una instrucción de FMA puede ser recuperada por hardware en la trayectoria fusionada 3410, y el controlador 3430 puede generar una o más señales de control para encaminar la instrucción al hardware en la trayectoria dividida 3420 para descodificar la instrucción en dos microoperaciones separadas, una microoperación de multiplicación y una microoperación de suma. Aunque se muestra como un bloque independiente en la figura 34, en diversas realizaciones, el controlador 3430 se puede integrar o incluir dentro de otra estructura de control en un núcleo de procesador o se puede omitir por completo (por ejemplo, en una realización en la que el núcleo proporciona solo una trayectoria posible, ejemplos de lo cual se describen a continuación).
En la figura 34, la trayectoria fusionada 3410 incluye el recuperador 3411, el descodificador 3412, la unidad de cambio de nombre 3413, el programador 3414, el multiplicador - sumador fusionado 3415 y la memoria temporal intermedia de reordenación / cola de retirada (ROB / RQ) 3416; y la trayectoria dividida 3420 incluye el recuperador 3421, el descodificador 3422, la unidad de cambio de nombre 3423, el programador 3424, el multiplicador 3425A y el sumador 3425B, y la memoria temporal intermedia de reordenación / cola de retirada (ROB / RQ) 3426.
El recuperador 3411 puede incluir circuitería y / o estructuras para recuperar una instrucción de FMA (por ejemplo, una instrucción de AVX (como se define a continuación) tal como VFMADD132PS, VFMADD213PS, VFMADD231PS, VFMADD132PD, VFMADD213PD, VFMADD231 PD, VFMADD132SS, VFMADD213SS, VFMADD231SS, VFMADD 132SD, VFMADD213SD, VFMADD23 1SD, VFMSUB132PS, VFMSUB213PS, VFMSUB231 PS, VFMSUB132PD, VFMSUB213PD, VFMSUB231 PD, VFMSUB132SS, VFMSUB213SS, VFMSUB231SS, VFMSUB132SD, VFMSUB213SD, VFMSUB231SD, VFNMADD132PS, VFNMADD213PS, VFNMADD231 PS, VFNMADD132PD, VFNMADD213PD, VFNMADD231 PD, VFNMADD132SS, VFNMADD213SS, VFNMADD231SS, VFNMADD132SD, VFNMADD213 SD, VFNMADD231SD, VFNMSUB132PS, VFNMSUB213PS, VFNMSUB231 PS, VFNMSUB132PD, VFNMSUB213PD, VFNMSUB231 PD, VFNMSUB132SS, VFNMSUB213SS, VFNMSUB231SS, VFNMSUB132SD, VFNMSUB213SD, VFNMSUB231SD, VFMADDSUB132PS, VFMADDSUB213PS, VFMADDSUB231 PS, VFMADDSUB132PD, VFMADDSUB213PD, VFMADDSUB231 PD, VFMSUBADD132PS, VFMSUBADD213PS, VFMSUBADD231 PS, VFMSUBADD132PD, VFMSUBADD213PD o VFMSUBADD231 PD).
Una instrucción de FMA recuperada por el recuperador 3411 puede tener tres operandos. Por ejemplo, una instrucción IPS VFMADD23 puede tener un primer operando (xmm1 o ymm1), un segundo operando (xmm2 o ymm2) y un tercer operando (xmm3 o ymm3), en donde los registros xmm e ymm que pueden ser especificados por estos operandos se describen a continuación. Estos registros pueden contener valores escalares o apilados y, para una descripción conveniente de una realización, la letra 'd' se puede usar para referirse al registro de origen / destino o una porción del registro especificado por el operando xmm1 y / o un valor almacenado o a almacenar en este registro o una porción de este registro; la letra 'a' se puede usar para referirse al registro de origen o una porción del registro especificado por el operando xmm2 y / o un valor almacenado o a almacenar en este registro o una porción de este registro; y la letra 'b' se puede usar para referirse al registro de origen o una porción del especificado por el operando xmm3 y / o un valor almacenado o a almacenar en este registro o una porción de este registro. Por lo tanto, una representación conceptual de una operación a realizar en respuesta a una instrucción IPS VFMADD23, en donde a, b y d también se pueden denominar operandos, es d = a * b d. Además, aunque esta descripción se refiere a operandos como registros, realizaciones pueden usar ubicaciones de memoria en lugar de registros para cualquiera de o todos los operandos.
El recuperador 3421 puede incluir circuitería, estructuras y / o hardware para recuperar una instrucción de multiplicación (por ejemplo, una instrucción SSE (ampliación de única instrucción - múltiples datos de transmisión por secuencias) tal como MULPS, MULPD, MULSS o MULSD) y una instrucción de suma (por ejemplo, una instrucción SSE tal como ADDPS, ADDPD, ADDSS o ADDSD), teniendo cada una dos operandos Por ejemplo, una instrucción MULPS puede tener un primer operando (xmm1) y un segundo operando (xmm2), y una instrucción ADDPS puede tener un primer operando (xmm1) y un segundo operando (xmm2), en donde, en general, cada uno de los operandos MULPS xmm1, MULPS xmm2, ADDPS xmm1 y ADDPS xmm2 pueden ser registros diferentes. Sin embargo, en una realización de la invención, el recuperador 3421 puede emparejar una instrucción MULPS con una instrucción ADDPS cuando se determina que la instrucción ADDPS depende de la instrucción MULPS (es decir, el resultado de MULPS es una entrada a la ADDPS). Por ejemplo, con 'a' como el operando MULPS xmm1 y 'b' como el operando MULPS xmm2, la operación de multiplicación correspondiente a = a * b y, si a se usa a continuación como un operando ADDPS xmm2, con 'd' como el operando ADDPS xmm1, la operación de suma correspondiente es d = d a, y el recuperador 3421 puede emparejar las instrucciones MULPS y ADDPS. En realizaciones, el emparejamiento y / o la determinación de si se satisface la condición para el emparejamiento se puede realizar en respuesta a una señal de control desde el controlador 3430.
El recuperador 3411 puede estar acoplado o conectado, como es representado por la flecha 3432A, al descodificador 3412 y / o, como es representado por la flecha 3432B, al descodificador 3422. El recuperador 3421 puede estar acoplado o conectado, como es representado por la flecha 3432C, al descodificador 3412 y / o, como es representado por la flecha 3432D, al descodificador 3422. El acoplamiento o la conexión y / o la operación de descodificador puede ser estática (por ejemplo, cableada) o dinámica (por ejemplo, dependiendo de señales de control desde 3430) en diversas realizaciones.
El descodificador 3412 puede incluir circuitería, estructuras y / o hardware para descodificar una instrucción de FMA, recibida desde el recuperador 3411, en una microoperación de FMA que tiene tres operandos (por ejemplo, d, a y b). En su lugar o adicionalmente, el descodificador 3412 puede incluir circuitería, estructuras y / o hardware para descodificar una instrucción de multiplicación y de suma emparejada, recibida desde el recuperador 3421, en una microoperación de FMA que tiene tres operandos (por ejemplo, d, a y b).
El descodificador 3422 puede incluir circuitería, estructuras y / o hardware para descodificar una instrucción de FMA, recibida desde el recuperador 3411, en una microoperación de multiplicación que tiene dos operandos y una microoperación de suma que tiene dos operandos. En su lugar, o adicionalmente, el descodificador 3422 puede incluir circuitería, estructuras y / o hardware para descodificar una instrucción de multiplicación y de suma emparejada recibida desde el recuperador 3421 en una microoperación de multiplicación que tiene dos operandos y una microoperación de suma que tiene dos operandos. Por ejemplo, la microoperación de multiplicación se puede representar como t = a * b y la microoperación de suma como d = d t, en donde se puede introducir un operando nuevo 't' para que sirva como el destino de la operación de multiplicación y un origen para la operación de suma.
El descodificador 3412 puede estar acoplado o conectado, como es representado por la flecha 3433A, a la unidad de cambio de nombre 3413 y / o, como es representado por la flecha 3433B, a la unidad de cambio de nombre 3423. El descodificador 3422 puede estar acoplado o conectado, como es representado por la flecha 3433C, a la unidad de cambio de nombre 3413 y / o, como es representado por la flecha 3433D, a la unidad de cambio de nombre 3423. El acoplamiento o la conexión y / o la operación de unidad de cambio de nombre puede ser estática (por ejemplo, cableada) o dinámica (por ejemplo, dependiendo de señales de control desde 3430) en diversas realizaciones.
Las unidades de cambio de nombre 3413 y / o 3423 pueden incluir circuitería, estructuras y / o hardware, tales como una memoria temporal de reordenación, para cambiar el nombre de operandos de registro y / o para asignar ubicaciones de almacenamiento y / o etiquetas para el cambio de nombre de registro, por ejemplo, para dar cabida a un procesamiento fuera de orden. En realizaciones, para eliminar conflictos de registro (por ejemplo, para a, b, t y / o d), la unidad de cambio de nombre 3413 puede cambiar el nombre de operandos para la operación de FMA (por ejemplo, como a', b' y / o d'); y / o la unidad de cambio de nombre 3423 puede cambiar el nombre de operandos para la operación de multiplicación (por ejemplo, como a' y / o b') y para la operación de suma (por ejemplo, como t 'y / o d').
La unidad de cambio de nombre 3413 puede estar acoplada o conectada, como es representado por la flecha 3434A, al programador 3414 y / o, como es representado por la flecha 3434B, al programador 3424. La unidad de cambio de nombre 3423 puede estar acoplada o conectada, como es representado por la flecha 3434C, al programador 3414 y / o, como es representado por la flecha 3434D, al programador 3424. El acoplamiento o la conexión y / o la operación de programador puede ser estática (por ejemplo, cableada) o dinámica (por ejemplo, dependiendo de señales de control desde 3430) en diversas realizaciones.
Los programadores 3414 y / o 3424 pueden incluir circuitería, estructuras y / o hardware, tales como una estación de reserva, para programar operaciones y / o microoperaciones para su ejecución. En realizaciones, el programador 3414 puede programar, en una estación de reserva para un circuito de ejecución de FP, una operación de FMA a ejecutar con los operandos a, b y d, y / o el programador 3424 puede programar, en una estación de reserva para un circuito de ejecución de FP, una operación de multiplicación a ejecutar con los operandos a y b y una operación de suma a ejecutar con los operandos t y d.
El programador 3414 puede estar acoplado o conectado, como es representado por la flecha 3435A, al multiplicador / sumador fusionado 3415 y / o, como es representado por la flecha 3435B, al multiplicador 3425A o tanto al multiplicador 3425A como al sumador 3425B. El programador 3424 puede estar acoplado o conectado, como es representado por la flecha 3434C, al multiplicador / sumador fusionado 3415 y / o, como es representado por la flecha 3434D, al multiplicador 3425A o tanto al multiplicador 3425A como al sumador 3425B. El acoplamiento o la conexión y / o la operación de programador puede ser estática (por ejemplo, cableada) o dinámica (por ejemplo, dependiendo de señales de control desde 3430) en diversas realizaciones.
El multiplicador / sumador fusionado 3415, el multiplicador 3425A y el sumador 3425B pueden incluir circuitería, estructuras y / o hardware para realizar una operación de multiplicación - suma fusionada, una operación de multiplicación y una operación de suma, respectivamente. En una realización, el multiplicador 3425A se puede acoplar a una estación de reserva para recibir dos entradas (por ejemplo, a y b) para una operación de multiplicación y acoplarse al sumador 3425B para proporcionar su salida (por ejemplo, t) para usarse como una de dos entradas (por ejemplo, t y d) para una operación de suma. En esta realización, la precisión de un multiplicador - sumador fusionado dedicado (por ejemplo, de acuerdo con la norma 754 de IEEE) se puede obtener enviando el resultado de multiplicación no redondeado al sumador. En otra realización, el multiplicador 3425A se puede acoplar a una estación de reserva para recibir dos entradas (por ejemplo, a y b) para una operación de multiplicación que genera una salida (por ejemplo, t), y el sumador 3425A se puede acoplar a la estación de reserva para recibir dos entradas para una operación de suma (por ejemplo, t y d). En esta realización, la precisión de un multiplicador - sumador fusionado dedicado se puede obtener aumentando la anchura de las ubicaciones de almacenamiento interno para el resultado intermedio (por ejemplo, t) o usando una trampa o ayuda de microcódigo para proporcionar un manejo especial.
El multiplicador - sumador fusionado 3415 puede estar acoplado o conectado, como es representado por la flecha 3436A, a la ROB / RQ 3416 y / o, como es representado por la flecha 3436B, a la ROB / RQ 3426. El sumador 3425B se puede acoplar o conectar, como es representado por la flecha 3436C, a la ROB / RQ 3416, y / o, el sumador 3425B o tanto el multiplicador 3425A como el sumador 3425B se pueden acoplar o conectar, como es representado por la flecha 3436D, a la ROB / RQ 3426. El acoplamiento o la conexión y / o la operación de programador puede ser estática (por ejemplo, cableada) o dinámica (por ejemplo, dependiendo de señales de control desde 3430) en diversas realizaciones.
La ROB / RQ 3416 y / o la ROB / RQ 3426 pueden incluir circuitería, estructuras y / o hardware, tales como una memoria temporal de reordenación y / o una cola de retirada, para retirar instrucciones y / o consignar resultados. En una realización, la ROB / RQ 3416 puede retirar una instrucción de FMA y consignar su resultado (por ejemplo, xmm1). En una realización, la ROB / RQ 3426 puede retirar una instrucción de multiplicación y una instrucción de suma y consignar sus resultados (por ejemplo, MULPS xmm1, ADDPS xmm1, respectivamente). En una realización, la ROB / RQ 3416 puede consignar el resultado de una operación de FMA que se ha creado mediante la fusión de una instrucción de multiplicación separada y una de suma separada, siempre que no se desee el resultado de la operación de multiplicación separada (por ejemplo, que se espere de acuerdo con la arquitectura de conjunto de instrucciones). En una realización, la ROB / RQ 3426 puede consignar, como resultado de una instrucción de FMA, el resultado de una operación de suma que se ha creado mediante la fisión de la instrucción de FMA. En un núcleo de procesador de acuerdo con realizaciones de la invención, el resultado de la instrucción de suma será el mismo que el resultado de una instrucción de FMA correspondiente.
Como se ilustra en la figura 34, realizaciones pueden prever una fisión o fusión de FMA en diversas fases de una canalización de emisión / ejecución. En una realización, la fisión en la fase de descodificación 3402 puede prever que instrucciones de multiplicación - suma fusionada se ejecuten en un núcleo sin un multiplicador - sumador fusionado dedicado. En una realización, la fusión en la fase de descodificación 3402, la fase de cambio de nombre / asignación 3403, la fase de programación 3404, la fase de ejecución 3405 y / o la fase de retirada 3406 pueden prever una capacidad de proceso mayor a través de recursos de hardware (una instrucción / operación / microoperación en lugar de dos instrucciones / operaciones / microoperaciones). En una realización, la fisión en la fase de cambio de nombre / asignación 3403 puede prever una complejidad reducida en el hardware de cambio de nombre restringiendo el número de operandos a dos en lugar de tres. En una realización, la fusión en la fase de cambio de nombre / asignación 3403 y / o la fase de programación 3404 puede prever el uso de menos entradas en el cambio de nombre, la reordenación y / o la programación de almacenamiento para permitir ventanas de ejecución fuera de orden más profundas y / o el descubrimiento de un paralelismo de nivel de instrucción mayor. En una realización, la fisión en la fase de programación 3404 puede prever una complejidad de hardware reducida al limitar el número de orígenes de activación fuera de orden a dos por entrada en lugar de tres. En una realización, la fisión en la fase de programación 3404 y / o la fase de ejecución 3405 puede prever una latencia reducida permitiendo que partes separadas de una operación de FMA se ejecuten en diferentes momentos para limitar la trayectoria crítica a la de la parte más lenta en lugar de la suma de las dos partes. En una realización, la fusión en la fase de ejecución 3405 puede prever un desempeño aumentado, una precisión aumentada y / o una potencia reducida usando un multiplicador - sumador fusionado dedicado.
La figura 35 es un diagrama de flujo que ilustra un método para la fisión / fusión de FMA que puede ser realizado por un procesador de acuerdo con realizaciones de la invención. En el bloque 3510 del método 3500 de la figura 35, un circuito de recuperación de instrucciones (por ejemplo, 138, 400) puede recuperar una instrucción desde una memoria caché i (por ejemplo, 134, 313, 470, 913) u otra ubicación de memoria. Por ejemplo, la instrucción puede ser una instancia de una instrucción de FMA tal como VFMADD23 1PS, que tiene un primer operando ('d'), un segundo operando ('a') y un tercer operando ('b'), a la que un procesador ha de responder realizando una operación de FMA (por ejemplo, d = a * b d).
En el bloque 3520, un circuito de descodificación o descodificador de instrucciones (por ejemplo, 140, 314, 500, 914) que está cableado, configurado o programado para realizar la fisión de instrucciones de FMA puede descodificar la instrucción en múltiples microoperaciones separadas, una microoperación de multiplicación y una microoperación de suma. El descodificador puede seleccionar operandos particulares a partir de la instrucción de FMA y / o a partir de otra microoperación, asignar uno o más de los mismos a una o más de las microoperaciones separadas, y / o crear operandos nuevos para una o más de las microoperaciones separadas. Por ejemplo, el descodificador puede seleccionar los operandos 'a' y 'b' de la instrucción de FMA como operandos de origen para una microoperación de multiplicación y crear un operando 't' como el operando de destino para la microoperación de multiplicación, a la que el procesador ha de responder realizando la operación de multiplicación t = a * b; y el descodificador puede seleccionar los operandos 'd' de la instrucción de FMA y el operando 't' de la microoperación de multiplicación como operandos de origen para una microoperación de suma y seleccionar el operando 'd' de la instrucción de FMA como el operando de destino para la microoperación de suma, a la que el procesador ha de responder realizando la operación de suma d = d * t.
En el bloque 3530, un circuito de cambio de nombre de registro (por ejemplo, 152, 331,931) puede cambiar el nombre de cualquiera de los operandos, asignar ubicaciones de almacenamiento y / o etiquetas para el cambio de nombre de registro (por ejemplo, en una memoria temporal de reordenación) y / o implementar la asignación de la salida de la microoperación de multiplicación (por ejemplo, 't') como una entrada para la microoperación de suma.
En el bloque 3540, un circuito de programación (por ejemplo, 156, 332, 932) puede programar las microoperaciones separadas para su ejecución, por ejemplo, en una estación de reserva para una unidad de FP. En una realización, múltiples microoperaciones separadas descodificadas a partir de la misma instancia de una instrucción (por ejemplo, una microoperación de multiplicación y una de suma descodificada a partir de una instrucción de FMA) se pueden programar en una estación de reserva para su despacho en un orden especificado (por ejemplo, la microoperación de suma se puede programar para su despacho solo después del despacho y / o la compleción de la microoperación múltiple).
En el bloque 3550, un circuito de ejecución (por ejemplo, 162, 334, 770, 934) puede ejecutar una de las microoperaciones separadas. Por ejemplo, el multiplicador de FP 334A, 334B, 770A, 770B, 934A o 934B puede ejecutar la microoperación de multiplicación.
En el bloque 3552, un circuito de ejecución (por ejemplo, 162, 335, 780, 935) puede ejecutar la otra de las microoperaciones separadas. Por ejemplo, el sumador de FP 335A, 335B, 780A, 780B, 935A o 935B puede ejecutar la microoperación de suma.
En el bloque 3560, un circuito de retirada (por ejemplo, 154, 730, 960) puede retirar la instrucción y / o consignar su resultado a un archivo de registro físico (por ejemplo, 158, 333, 750, 933) o memoria. En una realización, el bloque 3560 puede incluir la retirada de solo una de las microoperaciones separadas descodificadas a partir de una instrucción. Por ejemplo, una instrucción de FMA se puede retirar, y / o se puede consignar su resultado, retirando, de una memoria temporal de reordenación, una microoperación de suma correspondiente, y consignando su resultado (por ejemplo, d).
Sumario de algunas realizaciones
Una realización de la invención puede incluir un procesador que comprende una pluralidad de circuitos dispuestos en una canalización. La pluralidad de circuitos puede incluir un descodificador para descodificar una instrucción de multiplicación - suma fusionada en al menos dos microoperaciones separadas. La pluralidad de circuitos también puede incluir un multiplicador para operar sobre una primera de las dos microoperaciones separadas y un sumador para operar sobre una segunda de las dos microoperaciones separadas.
Arquitecturas de procesador específicas
La figura 36 es un diagrama de bloques de un procesador 3600 que puede tener más de un núcleo, puede tener un controlador de memoria integrado y puede tener gráficos integrados de acuerdo con realizaciones de la invención. Los recuadros con líneas de trazo continuo en la figura 36 ilustran un procesador 3600 con un único núcleo 3602A, un agente de sistema 3610, un conjunto de una o más unidades de controlador de bus 3616, mientras que la adición opcional de los recuadros con líneas de trazo discontinuo ilustra un procesador 3600 alternativo con múltiples núcleos 3602A - N, un conjunto de una o más unidad o unidades de controlador de memoria integrada 3614 en la unidad de agente de sistema 3610, y la lógica de propósito especial 3608.
Por lo tanto, diferentes implementaciones del procesador 3600 pueden incluir: 1) una CPU en la que la lógica de propósito especial 3608 es lógica (de capacidad de proceso) científica y / o de gráficos integrada (que puede incluir uno o más núcleos), y en la que los núcleos 3602A - 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 en el que los núcleos 3602A - N son un número grande de núcleos de propósito especial previstos principalmente para fines gráficos y / o científicos (de capacidad de proceso); y 3) un coprocesador en el que los núcleos 3602A - N son un número grande de núcleos en orden de propósito general. Por lo tanto, el procesador 3600 puede ser un procesador de propósito general, procesadores de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores (por ejemplo, coprocesadores de seguridad), procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP), aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes o aceleradores de visión por ordenador), matrices de puertas programables en campo o cualquier otro procesador o dispositivo de procesamiento. El procesador se puede implementar en uno o más chips. El procesador 3600 puede ser parte de y / o se puede implementar en uno o más sustratos usando cualquiera de un número de tecnologías de proceso, tales como, por ejemplo, BiCMOS, CMOS o NMOS.
La jerarquía de memoria incluye uno o más niveles de memoria caché dentro de los núcleos, un conjunto o una o más unidades de memoria caché compartida 3606 y una memoria externa (no mostrada) acoplada al conjunto de unidades de controlador de memoria integrada 3614. El conjunto de unidades de memoria caché compartida 3606 puede incluir una o más memorias caché de nivel medio, tales como el nivel 2 (L2), el nivel 3 (L3), el nivel 4 (L4) u otros niveles de memoria caché, una memoria caché de último nivel (LLC) y / o combinaciones de las mismas. Mientras que, en una realización, una unidad de interconexión basada en anillo 3612 interconecta la lógica de gráficos integrada 3608 (la lógica de gráficos integrada 3608 es un ejemplo de, y también se denomina en el presente documento como, lógica de propósito especial), el conjunto de unidades de memoria caché compartida 3606 y la unidad de agente de sistema 3610 / la unidad o unidades de controlador de memoria integrada 3614, realizaciones alternativas pueden usar cualquier número de técnicas bien conocidas para interconectar tales unidades. En una realización, se mantiene la coherencia entre una o más unidades de memoria caché 3606 y los núcleos 3602-A - N.
En algunas realizaciones, uno o más de los núcleos 3602A - N son capaces de realizar múltiples subprocesos. El agente de sistema 3610 incluye aquellos componentes que coordinan y hacen funcionar los núcleos 3602A - N. La unidad de agente de sistema 3610 puede incluir, por ejemplo, una unidad de control de potencia (PCU) y una unidad de visualización. La PCU puede ser o incluir lógica y componentes necesarios para regular el estado de alimentación de los núcleos 3602A - N y la lógica de gráficos integrada 3608. La unidad de visualización es para accionar uno o más visualizadores conectados externamente.
Los núcleos 3602A - N pueden ser homogéneos o heterogéneos en términos del conjunto de instrucciones de arquitectura; es decir, dos o más de los núcleos 3602A - N pueden ser capaces de la ejecución del 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 figura 37 es un diagrama de bloques de un complejo de unidad central de procesamiento (CPU) ilustrativo que se puede incluir en un procesador de acuerdo con realizaciones de la invención. En una realización, la memoria caché de L3 es una memoria caché de 16 vías de 8 MB dividida a lo largo de un módulo de cuatro núcleos (denominado complejo de CPU o CCX), que proporciona un "segmento" de 2 MB de memoria caché de L3 por núcleo. Sin embargo, los segmentos de memoria caché de L3 en un CCX se implementan de tal modo que la memoria caché de L3 es una memoria caché compartida. Se pueden incluir múltiples CCX en un único procesador (por ejemplo, dos CCX forman una memoria caché de L3 de 16 MB). Las memorias caché de 8 MB en cada CCX están separadas, por lo que estas actúan como una memoria caché de último nivel por módulo de cuatro núcleos con los enganches apropiados a la otra memoria caché de L3 para determinar si se necesitan datos (los protocolos implicados en el diseño de memoria caché de L3 permiten que cada núcleo acceda a la memoria caché de L3 de cada uno de los otros núcleos). Por lo tanto, estas memorias caché de L1, de L2 y de L3 son memorias caché coherentes, con los segmentos de memoria caché de L3 dentro de un CCX y entre unos CCX que están conectados por una interconexión coherente de memoria caché (también denominada tejido coherente de memoria caché).
La figura 38 es un diagrama de bloques de una jerarquía de memoria caché ilustrativa que se puede incluir en un procesador de acuerdo con realizaciones de la invención. En la figura 38, la jerarquía de memoria caché 3800 incluye la memoria caché i de L1 3810A y la memoria caché d de L1 3810B (de forma colectiva, la memoria caché de L1 3810), la memoria caché de instrucciones y de fechas de L23820 y la memoria caché de instrucciones y de datos de nivel 3 (L3) 3830. En una realización, tanto la memoria caché de L1 3810 como la memoria caché de L2 3820 son memorias caché de escritura en diferido privadas / locales, mientras que la memoria caché de L33830 es una memoria caché víctima. En una realización, la memoria caché i de L1 3810A es una memoria caché de 4 vías de 64 kB, la memoria caché d de L1 3810B es una memoria caché de 8 vías de 32 kB, la memoria caché de L2 3820 es una memoria caché de 8 vías de 512 kB y la memoria caché de nivel 3 (L3) 3830 es una memoria caché de 16 vías de 8 MB.
Características de organización de memoria
Los núcleos de procesador, los procesadores y los sistemas de acuerdo con realizaciones de la invención pueden incluir diversas características relacionadas con la organización y el uso de memoria. Un número de tales características se describen por separado usando ejemplos no limitantes a continuación, pero las realizaciones pueden incluir cualquier combinación de tales características.
Puesta a cero de línea de memoria caché
Algunas realizaciones incluyen una instrucción cuya ejecución provoca una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria. Una instrucción de este tipo se puede denominar instrucción de puesta a cero de línea de memoria caché, instrucción CLZERO, instrucción CLZEROING, instrucción de inicialización de línea de memoria caché, instrucción CLINIT, etc. En una realización, la instrucción de puesta a cero de línea de memoria caché es una macroinstrucción ejecutada por un núcleo, tal como el núcleo 190 y / o el núcleo 5300. Específicamente, el descodificador 140 y / o el descodificador 5314 se implementarían para descodificar una macroinstrucción de este tipo en una o más señales de control o instrucciones de un nivel relativamente inferior (por ejemplo, una o más microinstrucciones, microoperaciones (micro-ops), puntos de entrada de microcódigo, instrucciones descodificadas o señales de control) que hacen que la unidad o unidades de acceso a memoria 164 y / o la unidad o unidades de generación de direcciones 325 / la unidad de carga - almacenamiento 340, respectivamente, realicen la operación.
Una instrucción de puesta a cero de línea de memoria caché tiene la ventaja de ser una forma más rápida y más determinista de poner a cero una línea de memoria caché debido a que esta no necesita usar una operación de solicitud de propiedad (RFO) o, al menos, no necesita los datos de vuelta o que estos se devuelvan. Una operación de RFO es una operación en protocolos de coherencia de memoria caché que combina una lectura y una radiodifusión de invalidación (una operación de lectura con la intención de escribir en esa dirección de memoria) y, por lo tanto, hace que todas las otras memorias caché coherentes establezcan el estado de una línea de memoria caché de este tipo al estado de protocolo de coherencia de memoria caché de "no válido". Por ejemplo, una operación de RFO habitualmente es emitida por un procesador que intenta escribir en una línea de memoria caché que está en los estados compartido (S) o no válido (I) del protocolo MESI. El protocolo MESI usa los estados de protocolo de coherencia de memoria caché de "modificado", "exclusivo", "compartido" y "no válido". En contraposición, una implementación de una instrucción de puesta a cero de línea de memoria caché no requiere que una línea sea leída y devuelta al agente de emisión debido a que esta está poniendo a cero los datos; de hecho, en algunas realizaciones, el agente de emisión no ha de tener propiedad de los datos.
Diferentes realizaciones pueden implementar la instrucción de puesta a cero de línea de memoria caché para indicar una dirección de memoria de diferentes formas. Por ejemplo, la instrucción de puesta a cero de línea de memoria caché se puede implementar para indicar información de dirección de forma explícita (por ejemplo, a través de un inmediato, uno o más campos), de forma indirecta (por ejemplo, especificando uno o más registros en los que se almacena información de dirección), y / o de forma implícita (por ejemplo, uno o más registros designados). La información de dirección de memoria puede ser una dirección de memoria o ser información usada en combinación con otra información (por ejemplo, información a partir de un registro de segmento, etc.) para generar una dirección de memoria. Aunque en algunas realizaciones la dirección de memoria está alineada en una frontera de línea de memoria caché, realizaciones alternativas también pueden soportar que la dirección de memoria esté entre fronteras de línea de memoria caché y se trate como si indicara la línea de memoria caché entre esas fronteras. La información de dirección puede representar o bien información de dirección de memoria absoluta o bien información de dirección de memoria relativa, que puede indicar una ubicación de memoria relativa a una dirección de memoria base u otra ubicación de memoria. Además, se pueden usar, opcionalmente, diferentes modos de direccionamiento indirecto de memoria. Como un ejemplo específico, la instrucción puede indicar de forma implícita un registro (por ejemplo, un registro de propósito general) que se usa para almacenar información de dirección de memoria relativa que se puede combinar con información de dirección de memoria adicional almacenada en otro registro implícito (por ejemplo, un código, datos, o registro de segmento ampliado) para generar la dirección de memoria final usada para identificar la dirección de memoria. Esto es solo un ejemplo. También son posibles otras formas de la información de dirección.
Diferentes realizaciones pueden implementar líneas de memoria caché de diferentes tamaños (por ejemplo, 32 bytes, 64 bytes) y / o una realización dada puede implementar más de un tamaño de línea de memoria caché. Por ejemplo, realizaciones pueden soportar una instrucción de puesta a cero de línea de memoria caché que: 1) se implementa para un tamaño de línea de memoria caché específico (y, por lo tanto, esta no necesita designar un tamaño de línea de memoria caché); 2) se implementa para usar un tamaño de memoria caché actual en donde diferentes tipos de núcleos tienen diferentes tamaños de línea de memoria caché (por ejemplo, el tamaño de memoria caché actual se puede indicar a través de un valor en un registro); o 3) se implementa para tener un campo para indicar un tamaño de línea de memoria caché. En algunas realizaciones, la instrucción prevé la indicación de un parámetro de tamaño que indica una o más líneas de memoria caché (es decir, un múltiplo de un tamaño de línea de memoria caché). En algunas realizaciones, hay adicionalmente, o en su lugar, una instrucción ZERO que prevé la indicación de un parámetro de tamaño que no está vinculado a un tamaño de línea de memoria caché (por ejemplo, solo indica un n.° de bytes) debido a que esto habilita que el software no sea consciente del tamaño de línea de memoria caché (si el tamaño no es un múltiplo de un tamaño de línea de memoria caché (por ejemplo, especificado en bytes y el número de bytes es 112 aunque el tamaño de línea de memoria caché es de 64 bytes), realizaciones podrían o bien ponerse cero hasta la línea de memoria caché o bien emitir una RFO solo para los datos restantes en esa última línea).
En algunas realizaciones, la instrucción de puesta a cero de línea de memoria caché es atómica. Por lo tanto, se almacenará la línea de ceros de memoria caché completa en su totalidad, o nada de la misma, no solo una porción (es decir, una garantía de atomicidad de compleción). La atomicidad también puede garantizar que los ceros escritos por una instrucción de puesta a cero de línea de memoria caché no se intercalen con datos almacenados por otros almacenamientos. La atomicidad puede ser con respecto a otros accesos de tal modo que cualquier acceso de este tipo observará o bien todos los datos almacenados en su totalidad, o bien ninguno de los datos almacenados, pero no solo una porción. La atomicidad también puede ser con respecto a un fallo de alimentación, bloqueo de sistema, reinicio u otro suceso de este tipo, de tal modo que, incluso ante tales sucesos, o bien se almacenan todos los ceros o bien ninguno de los ceros se almacena, no solo una porción. Hay diversos usos posibles de una operación atómica de este tipo. Un ejemplo de un uso de este tipo es actualizar de forma atómica un fragmento de datos en una base de datos. Otro ejemplo de un uso de este tipo es actualizar de forma atómica un fragmento de datos compartidos en un entorno de multiprocesamiento. Otro ejemplo más de un uso de este tipo es almacenar datos de forma atómica en una ubicación para reemplazar un bloqueo, un semáforo, para actualizar una variable compartida, para sincronizar, para coordinar o similares. Aún otros usos de una operación de almacenamiento atómico de este tipo se contemplan y serán evidentes para los expertos en la materia y que cuenten con el beneficio de la presente divulgación.
Jerarquías de memoria ilustrativas
La figura 39 es un diagrama de bloques que ilustra una jerarquía de memoria dentro de la cual se puede implementar una instrucción de puesta a cero de línea de memoria caché de acuerdo con realizaciones de la invención. La jerarquía de memoria ilustrada se puede implementar junto con diversos núcleos de procesador, agrupaciones de núcleos, CCX, procesadores, arquitecturas de ordenador, etc. A modo de realizaciones específicas, se describirá una implementación de la instrucción de puesta a cero de memoria caché con referencia a la jerarquía de memoria de la figura 39 junto con el núcleo / CCX de las figuras 3, 8, 38 y 37. Esto es para fines ilustrativos, y la instrucción de puesta a cero de memoria caché se puede implementar en diferentes jerarquías de memoria y / o junto con diferentes núcleos, agrupaciones de núcleos, etc.
La figura 39 ilustra un agente coherente 3900 y un agente coherente 3901, así como la posibilidad de otros agentes coherentes como es representado por "..." y el agente coherente 3902 usando un recuadro de trazo discontinuo. La jerarquía de memoria en la figura 39 incluye las memorias caché coherentes 3904A, una interconexión 3920 y una memoria de aguas abajo 3930. Diferentes realizaciones pueden implementar diferentes números de memorias caché y niveles de memoria caché como parte de las memorias caché coherentes 3904A. Los agentes coherentes y las memorias caché coherentes son parte de un dominio de coherencia de memoria caché dentro del cual se mantiene la coherencia de memoria caché usando un protocolo de coherencia de memoria caché (por ejemplo, el protocolo MESI, que usa los estados de protocolo de coherencia de memoria caché de "modificado", "exclusivo", "compartido "y" no válido"; el protocolo MESIF que añade el estado de protocolo de coherencia de memoria caché de "de reenvío"; el protocolo MOESI que, en su lugar, añade el estado de protocolo de coherencia de memoria caché de "Poseído"; y otros protocolos de coherencia de memoria caché de este tipo).
El agente coherente 3900 está acoplado a la interconexión 3920 a través de una o más memorias caché en niveles inferiores sucesivamente de una jerarquía de memoria caché. Una jerarquía de memoria caché incluye una memoria caché que está en el nivel más alto de la jerarquía de memoria caché y que está acoplada al agente coherente 3900, una memoria caché (por ejemplo, una memoria caché de L33915) que está en un nivel más bajo de la jerarquía de memoria caché y que está acoplada a la interconexión 3920 (y, por lo tanto, esta memoria caché se denomina memoria caché de nivel más bajo o memoria caché de último nivel (LLC)), y cero o más memorias caché (por ejemplo, una memoria caché de L23910), que están en un nivel o niveles medios de la jerarquía de memoria caché, acopladas a una de las memorias caché en un nivel superior y una de las memorias caché en un nivel inferior (por ejemplo, la figura 39 ilustra el agente coherente 3900 acoplado a la memoria caché de L1 3905, que está acoplada a la memoria caché de L23910, que está acoplada a memoria caché de L33915, que está acoplada a la interconexión 3920).
El agente coherente 3901 también está acoplado a la interconexión a través de uno o más niveles de memorias caché. La figura 39 ilustra el agente coherente 3901 acoplado a una memoria caché de L1 opcional 3906, que está acoplada a una memoria caché de L2 opcional 3911, que está acoplada a la memoria caché de L33915. Además, la figura 3902 también ilustra que el agente coherente opcional 3902 se puede acoplar directamente a la interconexión 3920 (es decir, no tener memoria caché coherente alguna).
Además de o en lugar de la conectividad, incluyendo que los agentes coherentes estén acoplados a la interconexión 3920 a través de niveles sucesivos de memorias caché, ciertas realizaciones implementan otra conectividad para permitir una comunicación directa o más directa (por ejemplo, acoplar el agente coherente 3900 directamente a la interconexión 3920, acoplar el agente coherente 3900 directamente a la memoria caché de L2 3910, acoplar la memoria caché de L1 3905 directamente a la interconexión 3920 y / o acoplar la memoria caché de L2 3910 directamente a la interconexión 3920, como se ilustra respectivamente mediante las líneas de trazo discontinuo 3935, 3936, 3937 y 3938).
La interconexión 3920 está acoplada a la memoria de aguas abajo 3930 (por ejemplo, a través de un conjunto de uno o más controladores de memoria (no mostrados)). La memoria de aguas abajo 3930 está en un nivel inferior de la jerarquía de memoria que las memorias caché coherentes 3904, y puede incluir uno o más tipos de memoria y / o una jerarquía de memoria (por ejemplo, memoria volátil y / o memoria no volátil, memoria principal, entrada / salida correlacionada en memoria (MMIO), memoria caché o memorias caché de lado de memoria, memoria de dos niveles (2LM), DRAM, flash, memoria de cambio de fase, 3D Xpointtm).
La interconexión 3920 (también denominada interconexión coherente de memoria caché, tejido, interconexión, parte de una porción que no es núcleo, red de interconexión, unidad o unidades de interconexión) incluye un controlador de sondeo 3925 para enviar sondeos a las memorias caché coherentes 3904 y recibir cualquier respuesta a partir de las mismas. El controlador de sondeo 3925 incluye un generador de sondeo 3926 para emitir sondeos y, en algunas realizaciones, un respondedor de sondeo 3927 para recibir cualesquiera respuestas. Además, el controlador de sondeo 3925 en ciertas realizaciones incluye un generador de escritura 3929 (para generar en la práctica una escritura de tamaño de línea de memoria caché de todo ceros) y / o un convertidor de escritura QOS28 (para convertir en la práctica una línea de memoria caché de datos recibidos en respuesta a un sondeo en todos ceros). Además, aunque en una realización, la interconexión 3920 se ilustra entre la memoria caché de L33915 y la memoria de aguas abajo 3930, realizaciones alternativas pueden implementar la interconexión 3920 en otra ubicación (por ejemplo, entre las memorias caché de L2 y la memoria caché de L3, o bien con un conjunto o bien con uno o más controladores de memoria con la memoria de aguas abajo 3930 fuera de la interconexión 3920 (por ejemplo, como un agente propio) o un conjunto o uno o más controladores de memoria entre la memoria caché de L33915 y la memoria de aguas abajo 3930). La interconexión 3920 (por ejemplo, como parte del controlador de sondeo 3925) puede incluir otros elementos, tales como un filtro de sondeo (no mostrado).
Se pueden implementar diferentes realizaciones con diferentes números de los agentes coherentes como núcleos de propósito general (también conocidos como unidades centrales de procesamiento (CPU)). Por ejemplo, en algunas realizaciones, el agente coherente 3900 es un núcleo, el agente coherente 391 es un núcleo, hay cero o más agentes coherentes adicionales que son núcleos y hay cero o más agentes coherentes adicionales que son otros tipos de agentes (por ejemplo, procesadores de propósito general, procesadores de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores (por ejemplo, coprocesadores de seguridad), procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP), aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes o aceleradores de visión por ordenador), matrices de puertas programables en campo o cualquier otro procesador o dispositivo de procesamiento, por nombrar solo algunos ejemplos).
En algunas realizaciones, los agentes coherentes y las memorias caché coherentes 3904 se implementan como en las figuras 38 y 37. Por ejemplo, en un CCX, hay 4 agentes coherentes que son núcleos, una memoria caché de L1 privada / local por núcleo, una memoria caché de L2 privada / local por núcleo y una memoria caché de L3 compartida; y puede haber múltiples CCX acoplados entre sí en un único procesador. Las memorias caché de L1 y L2 son memorias caché de escritura en diferido, las memorias caché de L2 son memorias caché inclusivas y la memoria caché de L3 es una memoria caché víctima. Además, la memoria caché de L3 3915 se divide en segmentos entre múltiples agentes coherentes (por ejemplo, 2 MB por núcleo a lo largo de 4 núcleos, dando un total de 8 MB) dentro de un módulo (un CCX) y, opcionalmente, entre uno o más de tales módulos (por ejemplo, dos CCX, cada uno con 8 MB, para formar una memoria caché de L3 de 16 MB). La figura 39 ilustra esto con el segmento de memoria caché de L3 3916 del agente coherente 3900 y el segmento de memoria caché de L3 3917 del agente coherente 3901. La interconexión 3920 puede, por ejemplo, representar: 1) solo una interconexión dentro de un CCX; 2) una interconexión dentro de y entre unos CCX; 3) interconexiones separadas dentro de diferentes CCX, así como una interconexión o interconexiones entre unos CCX. Diferentes realizaciones pueden implementar la interconexión 3920 de forma diferente, incluyendo uno o más de un anillo, múltiples anillos, enlaces punto a punto, bus o buses compartidos, etc. En realizaciones que implementan un agente propio y agentes de almacenamiento en memoria caché, se considera que la interconexión 3920 incluye los agentes de almacenamiento en memoria caché.
Uno o más de o todos los agentes coherentes en la figura 39 se pueden implementar para ejecutar una instrucción de puesta a cero de línea de memoria caché (véase el agente de emisión de instrucciones de puesta a cero de línea de memoria caché 3903 posible que se identifica como cualquiera de los agentes coherentes 3900, 3901 y 3902). El agente coherente que está ejecutando actualmente una instrucción de puesta a cero de línea de memoria caché es el "agente de emisión", "agente coherente de emisión" o "primer agente", y sus memorias caché se denominan memorias caché de Lx del agente de emisión (en donde x puede ser 1, 2 o 3; y en donde la memoria caché de L3 se implementa con segmentos, es el segmento de memoria caché de L3 del agente de emisión). En el análisis a continuación, este será el agente coherente 3900. Un agente coherente que no está ejecutando actualmente una instrucción de puesta a cero de línea de memoria caché se denomina "agente coherente pero no de emisión", "agente no de emisión", "agente coherente no de emisión" o "segundo agente" (como se ha analizado anteriormente, puede haber múltiples segundos agentes, pero a continuación se analizará uno por simplicidad), y sus memorias caché se denominan memorias caché de Lx del segundo agente (en donde x puede ser 1, 2 o 3; y en donde la memoria caché de L3 se implementa con segmentos, es el segmento de memoria caché de L3 del segundo agente). En el análisis a continuación, este será el agente coherente 391.
Arquitectura de memoria caché ilustrativa
La figura 40 es un diagrama de bloques que ilustra una memoria caché en un procesador que implementa una instrucción de puesta a cero de línea de memoria caché de acuerdo con realizaciones de la invención. La figura 40 incluye una memoria caché de Lx 4050, en donde x indica el nivel en la jerarquía de memoria caché (por ejemplo, 1, 2, 3). La memoria caché de Lx 4050 incluye un controlador de memoria caché 4051 para controlar el funcionamiento de la memoria caché, incluyendo detectar aciertos / fallos, provocar escrituras / lecturas en líneas de memoria caché, recibir sondeos (y, por lo tanto, en algunas realizaciones, el controlador de memoria caché 4051 incluye una interfaz de sondeo y, en algunas realizaciones, un controlador de sondeo 4043), etc. El controlador de memoria caché incluye una matriz de etiquetas 4055 con unas entradas 4060 (lo que incluye lo que a veces se denomina "estado de etiqueta"), y la memoria caché de Lx 4050 incluye una matriz de datos 4056 con las líneas de memoria caché 4070 correspondientes. Cada una de las entradas 4060 incluye un campo de etiqueta 4061 para almacenar una etiqueta usada para determinar si una dirección dada acierta o falla los datos en la correspondiente de las líneas de memoria caché 4070. Además, cada una de las entradas 4060 incluye un conjunto de uno o más campo o campos de atributo 4062 (denominados a veces "estado de etiqueta") para almacenar atributos de los datos almacenados en la correspondiente de las líneas de memoria caché 4070. El campo o campos de atributo 4062 incluyen un campo de estado de protocolo de coherencia de memoria caché 4065 para almacenar un valor que indica un estado actual del protocolo de coherencia de memoria caché de los datos almacenados en la correspondiente de las líneas de memoria caché 4070. El campo o campos de atributo 4062 pueden incluir opcionalmente otros campos, tales como un campo de línea de ceros 4066, un campo de veneno 4067, un campo de código de corrección de errores (no mostrado).
Aunque la figura 40 ilustra el campo o campos de atributo 4062 que están en la matriz de etiquetas, realizaciones alternativas pueden implementar estos campos en una matriz de estados separada (no mostrada). En una realización, una línea de memoria caché dada puede tener múltiples indicaciones de veneno (por ejemplo, una para los dos fragmentos de 32 bytes de una línea de memoria caché de 64 bytes) en el campo de veneno 4067. Aunque la figura 40 ilustra un campo de veneno 4067 separado, realizaciones alternativas pueden codificar las indicaciones de veneno en otro campo (por ejemplo, el campo de código de corrección de errores (ECC) o el campo de estado de protocolo de coherencia de memoria caché).
En respuesta a un acierto en la memoria caché (por ejemplo, basándose en una etiqueta en el campo de etiqueta 4061), el controlador de memoria caché 4051 incluye circuitería (por ejemplo, circuitería de estado de protocolo de coherencia de memoria caché u otra circuitería) para responder al estado de protocolo de coherencia de memoria caché en el campo de estado de protocolo de coherencia de memoria caché 4056 para el acierto (por ejemplo, el campo de estado de protocolo de coherencia de memoria caché 4056 correspondiente al campo de etiqueta 4061 cuya etiqueta coincidió); respuesta que difiere entre las realizaciones y se basa en diversos factores (por ejemplo, si la consulta de memoria caché se inició en respuesta a una orden de escritura, una orden de lectura, un sondeo (y, posiblemente, el tipo de sondeo)). Por ejemplo, en algunas realizaciones, la respuesta ha de determinar si el estado de protocolo de coherencia de memoria caché es uno que concede a la memoria caché autoridad para modificar la línea de memoria caché (por ejemplo, un estado "modificado" o "exclusivo") en respuesta a una orden de escritura y / o ciertos tipos de sondeos, como se analiza con más detalle a continuación. En algunas realizaciones, el controlador de memoria caché 4051 incluye: 1) una circuitería de acierto - fallo (no mostrada) para determinar si hay un acierto o un fallo en la memoria caché en respuesta a una orden (por ejemplo, una orden de escritura, una orden de lectura, una orden de sondeo); 2) el controlador de sondeo 4043 acoplado a una interfaz de sondeo (no mostrada) para recibir sondeos y para transmitir mensajes de respuesta a los sondeos; y 3) una circuitería de lectura de línea de memoria caché (no mostrada) y una circuitería de escritura de línea de memoria caché (no mostrada).
Técnicas para configurar una línea de memoria caché para indicar todo ceros
Aunque algunas realizaciones se implementan para configurar una línea de memoria caché para indicar todo ceros escribiendo sobre los datos en la línea de memoria caché con ceros (la primera técnica), realizaciones alternativas pueden configurar una línea de memoria caché para indicar todo ceros usando otras técnicas (de la segunda a la cuarta técnicas descritas a continuación son ejemplos). Tales otras técnicas se pueden implementar por una diversidad de razones, tales como que el tamaño de una línea de memoria caché es habitualmente más grande que la anchura de algunos buses / estructuras dentro de un núcleo (por ejemplo, una o más de las memorias temporales intermedias, tales como la cola de carga 810, la cola de almacenamiento 820, la memoria temporal de combinación de escritura (WCB) 860) y / o escribir sobre los datos en una línea de memoria caché con ceros consume energía y aumenta la complejidad de la memoria caché.
La segunda técnica consiste en invalidar la línea de memoria caché en la vía de la memoria caché en la que reside actualmente esa línea de memoria caché, y escribir una línea de memoria caché de ceros en una vía diferente de la memoria caché.
La tercera y la cuarta técnicas implican cambiar el estado de etiqueta en lugar de los datos en la matriz de datos 4056, y estos se pueden usar en uno o más de los niveles de memoria caché y / o en la interconexión. La tercera técnica consiste en implementar un campo (denominado campo de línea de ceros 4066) para cada una de las líneas de memoria caché (por ejemplo, en el campo o campos de atributo 4062), y el valor en este campo (que puede ser un bit) indica si: 1) la línea de memoria caché se debería tratar como si tuviera el valor de los datos almacenado en esa línea de memoria caché; o 2) la línea de memoria caché se debería tratar como si fuera todo ceros (con independencia de los datos reales almacenados en esa línea de memoria caché). En tales realizaciones, las lecturas (incluyendo expulsiones) de esa línea de memoria caché o bien pasarán el valor del campo de línea de ceros 4066 a otra estructura que soporta un campo de línea de ceros de este tipo o bien convertirán los datos en ceros. Los datos también se convertirían antes de que estos fueran usados por uno de los agentes coherentes (por ejemplo, el agente coherente 3900) en una lectura. Mientras que, en algunas de tales realizaciones, los datos también se convierten antes de escribirse en la memoria de aguas abajo QO30, realizaciones alternativas también implementan un campo de línea de ceros en la memoria de aguas abajo 3930 o una estructura de memoria alternativa gestionada por el controlador de memoria.
La cuarta técnica es como la tercera pero, en lugar de implementar un campo separado, implementa una codificación nueva en uno existente del campo o campos de atributo (por ejemplo, una codificación nueva en un campo de estado de protocolo de coherencia de memoria caché o el campo de síndrome de código de corrección de errores (ECC)).
Ciertas realizaciones pueden implementar una memoria caché para, como parte de configurar una línea de memoria caché para indicar todo ceros, modificar el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché a "modificado" o "poseído" (o, en el caso de usar una codificación nueva en el campo de estado de coherencia de memoria caché para indicar línea de ceros, entonces al estado de línea de ceros) y hacer que cualquier indicación o indicaciones de veneno se ignoren (los datos ya no están envenenados) o se borren. Por lo tanto, otra ventaja de una instrucción de puesta a cero de línea de memoria caché es que esta se puede usar para eliminar líneas envenenadas de forma consistente.
Con respecto a un tema relacionado, un mecanismo para forzar una línea de memoria caché a cero se puede implementar solo en ciertos niveles de memoria caché (por ejemplo, un subconjunto de las memorias caché de L1, las memorias caché de L2 y las memorias caché de L3, tal como solo en la memoria caché de L1 y no en las memorias caché de L2 o de L3), y un nivel de memoria caché dado que carece de un mecanismo de este tipo se puede implementar para configurar una línea de memoria caché para indicar todo ceros enviando la misma a un nivel de memoria caché diferente que tiene el mecanismo (por ejemplo, un nivel de memoria caché superior (por ejemplo, las memorias caché de L1) se implementa para configurar una línea de memoria caché para indicar todo ceros expulsando los datos a un nivel de memoria caché inferior (por ejemplo, las memorias caché de L2) que puede hacer la puesta a cero; un nivel de memoria caché inferior (por ejemplo, las memorias caché de L2) se implementa para configurar una línea de memoria caché para indicar todo ceros reenviando esta a una memoria caché de nivel superior (por ejemplo, las memorias caché de L1) que puede hacer la puesta a cero). Como se describe con más detalle a continuación, diferentes realizaciones pueden implementar la puesta a cero de una línea de memoria caché en respuesta a una escritura y / o un sondeo. En realizaciones que implementan la puesta a cero de una línea de memoria caché en respuesta tanto a una escritura como a un sondeo, se podría implementar un nivel de memoria caché dado para hacer la puesta a cero en respuesta a solo una de una escritura o un sondeo (pero no ambos), y podría insertar / expulsar o reenviar los datos a una memoria caché de nivel inferior o superior que puede hacer la puesta a cero en respuesta al otro de una escritura y un sondeo.
Desencadenamiento de una memoria caché para configurar una línea de memoria caché para indicar todo ceros
Con independencia de la técnica implementada en una memoria caché para configurar una línea de memoria caché para indicar todo ceros (véase anteriormente), el desencadenamiento de una memoria caché para configurar una línea de memoria caché para indicar todo ceros podría ser en respuesta a un mensaje enviado desde la interconexión a una de las memorias caché, por el agente de emisión por sí solo, o por el agente de emisión en respuesta a un mensaje enviado desde la interconexión.
En el caso en el que el agente de emisión (por sí solo o en respuesta a un mensaje desde la interconexión) desencadena que una memoria caché configure una línea de memoria caché para indicar todo ceros, diferentes realizaciones pueden usar diferentes técnicas, incluyendo técnicas para implementar que la instrucción de puesta a cero de línea de memoria caché sea atómica en el caso en el que una línea de memoria caché es más ancha (por ejemplo, 32 bytes, 64 bytes) que la anchura de datos soportada de forma nativa de un agente de emisión (por ejemplo, 32 bits, 64 bits, 128 bits, 256 bits, 512 bits, 1024 bits). La anchura de datos soportada de forma nativa se puede manifestar de diferentes formas en diferentes realizaciones. En algunas realizaciones, la anchura de datos soportada de forma nativa puede representar la anchura en bits del conjunto más amplio de registros, y / o la anchura del operando u operandos sobre los que se ha de operar por las instrucciones. En algunas realizaciones, la anchura de datos soportada de forma nativa puede representar la anchura de las unidades de ejecución aritméticas y / o lógicas (por ejemplo, cuando estos tienen la misma anchura de los operandos indicados por las instrucciones de tal modo que múltiples porciones de los operandos no se bombean de forma secuencial a través de la misma (de doble bombeo o más)). En algunas realizaciones, la anchura de datos soportada de forma nativa puede representar la anchura de un bus (por ejemplo, una canalización de carga). La cantidad de datos que se pueden almacenar de forma atómica puede estar limitada por la anchura de una o más estructuras internas del agente de emisión (por ejemplo, buses, memorias temporales intermedias).
Por lo tanto, en algunas realizaciones en las que el agente de emisión (por sí solo o en respuesta a un mensaje desde la interconexión) realiza el desencadenamiento (de una memoria caché para configurar una línea de memoria caché para indicar todo ceros), el agente de emisión: o bien 1) implementa un campo de línea de ceros en otras estructuras, tales como una o más de las memorias temporales intermedias (por ejemplo, la cola de almacenamiento 820 y la memoria temporal de combinación de escritura (WCB) 860); o bien 2) implementa una orden nueva (por ejemplo, una microoperación, una señal de control, una microinstrucción), que no porta la línea de memoria caché de ceros pero indica una escritura de ceros de tamaño de línea de memoria caché, que puede pasar a través de las memorias temporales intermedias (por ejemplo, la cola de almacenamiento 820 y la memoria temporal de combinación de escritura (WCB) 860). En este sentido, en donde el tamaño de línea de memoria caché es más ancho (por ejemplo, 32 bytes, 64 bytes) que la anchura de datos soportada de forma nativa de un agente de emisión, se puede representar una línea de ceros de memoria caché en estas estructuras más estrechas. La conversión a una línea de ceros se realiza cuando la línea de ceros (como es indicado por el campo de línea de ceros o la orden / microoperación nueva) se está enviando a una estructura que está más abajo en la jerarquía de memoria y que no soporta el campo de línea de ceros o la orden nueva (por ejemplo, la conversión a una línea de ceros se puede realizar cuando la línea de ceros se envía a la memoria caché de datos 840 (que puede realizar otra de las técnicas anteriores), se envía desde la memoria temporal de combinación de escritura 8600, es enviada por la memoria caché de L3 a la interconexión, o es enviada por la interconexión (por ejemplo, a través de un controlador de memoria) a la memoria de aguas abajo).
Como otro ejemplo, en algunas realizaciones en las que el agente de emisión (por sí solo o en respuesta a un mensaje desde la interconexión) realiza el desencadenamiento (de una memoria caché para configurar una línea de memoria caché para indicar todo ceros)), el agente de emisión escribe de forma secuencial fragmentos más pequeños (por ejemplo, 16 bytes a la vez, 32 bytes a la vez) de ceros en una memoria temporal intermedia (por ejemplo, la cola de almacenamiento 820, la memoria temporal de combinación de escritura (WCB) 860, una memoria temporal de almacenamiento provisional separada (no mostrada)) que no responde a sondeos (o no responde a sondeos mientras se están escribiendo los fragmentos) y que queda expulsada en respuesta a que se hayan escrito suficientes fragmentos para igualar el tamaño de una línea de memoria caché (y no antes) de tal modo que los fragmentos se escriben de forma concurrente; implementando de ese modo la instrucción de puesta a cero de línea de memoria caché de forma atómica.
Otros aspectos
Diferentes realizaciones pueden implementar una instrucción de puesta a cero de línea de memoria caché con una ordenación diferente (por ejemplo, ordenada débilmente, ordenada fuertemente, una ordenación que es más débil que la ordenada débilmente, una ordenación que es más fuerte que la ordenada fuertemente). En el caso de una instrucción de puesta a cero de línea de memoria caché que se ordena débilmente, realizaciones pueden implementar la instrucción de tal modo que esta sea de autoexpulsión.
La instrucción de puesta a cero de línea de memoria caché se puede implementar de tal modo esta que no configurará una línea de memoria caché para indicar todo ceros antes de la retirada de esa instrucción. En tales realizaciones, hay un mecanismo para asegurar que la instrucción de puesta a cero de línea de memoria caché se haya completado y que la línea de memoria caché esté configurada para indicar todo ceros para todos los lectores (por ejemplo, una o más de una instrucción de valla, una instrucción de bloqueo, una instrucción de serialización arquitectónica, que un almacenamiento más joven sea GO (ordenado fuertemente), que una carga más joven sea GO (más estricta que ordenada fuertemente)).
La instrucción de puesta a cero de línea de memoria caché se puede tratar como un almacenamiento para fines de recorridos por tablas de páginas (incluyendo tablas de virtualización (por ejemplo, tablas de páginas ampliadas (EPT) (en las que se actualizarán los bits A y D), tablas de páginas de sombra) y fallará si no es escribible.
Realizaciones que, en primer lugar, intentan escribir en una memoria caché del agente de emisión antes de usar sondeos
La figura 41 es un diagrama de flujo que ilustra realizaciones de la invención que, en primer lugar, intentan escribir en una memoria caché del agente de emisión antes de usar sondeos. Como se ha analizado anteriormente, el primer agente 3900 ha de descodificar y ejecutar una instrucción cuya ejecución va a provocar una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria (el bloque 4110). En respuesta a la descodificación y ejecución de la instrucción, el primer agente ha de emitir, a una de las memorias caché coherentes acopladas al primer agente (por ejemplo, la memoria caché de L1 3905), una orden de escritura para iniciar la escritura de ceros de tamaño de línea de memoria caché en la dirección de memoria (caso en el cual, el primer agente también se denomina agente de emisión) (el bloque 4112). En algunas realizaciones, el primer agente incluye una unidad de descodificación (por ejemplo, el descodificador 140, el descodificador 314) para descodificar la instrucción cuya ejecución va a provocar la escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria. El primer agente también incluye una unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340), en respuesta a la unidad de descodificación, para emitir la orden para iniciar la escritura de ceros de tamaño de línea de memoria caché en la dirección de memoria.
Cuando hay un acierto para una línea de memoria caché de la memoria caché (por ejemplo, la memoria caché de L1 3905) a la que se emite la orden (el bloque 4114) y el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché es uno que concede a la memoria caché la autoridad para modificar la línea de memoria caché sin radiodifundir a otras memorias caché (por ejemplo, "modificado" o "exclusivo") (el bloque 4116), entonces esa memoria caché ha de configurar la línea de memoria caché para indicar todo ceros y suprimir sondeos (el bloque 4118). Diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros". En algunas realizaciones, si hay un acierto para una línea de memoria caché de la memoria caché (por ejemplo, la memoria caché de L13905) a la que se emite la orden (el bloque 4114), la línea de memoria caché se sigue poniendo a cero para otros uno o más estados de protocolo de coherencia de memoria caché (por ejemplo, uno o más de "poseído", "de reenvío" o "compartido"). Para cualquier estado para el que se hace esto, el control pasa al bloque 4119; para cualquier estado para el que no se hace esto, el control pasa al bloque 4120. Por lo tanto, en las realizaciones en las que el control pasa al bloque 4119 para cualquier estado que no sea "modificado", "exclusivo" y "no válido", entonces no se implementa el bloque 4120; y viceversa. Sin embargo, se pueden implementar realizaciones en las que el control pasa al bloque 4119 o 4120 dependiendo del estado. En el bloque 4119, esa memoria caché ha de configurar la línea de memoria caché para indicar todo ceros; desde el bloque 4119, el control pasa al bloque 4122 (descrito con más detalle más adelante en el presente documento) en el que la memoria caché ha de emitir la orden de escritura hacia la interconexión (dependiendo de la realización, al siguiente nivel de memoria caché, o a la interconexión para emitir sondeos (por ejemplo, un sondeo de escritura - actualización (también denominado sondeo de escritura - puesta a cero o sondeo de escritura y puesta a cero), un sondeo de escritura - invalidación (también denominado sondeo de invalidación incluso si se modifica), o un sondeo que indica invalidar y escribir en diferido (también denominado sondeo de escritura en diferido e invalidación)). Es posible que la orden de escritura pasada al siguiente nivel de memoria caché o interconexión indique que una línea con un estado que no sea "modificado" o "exclusivo" se configuró para indicar todo ceros. Un uso de esta orden de escritura modificada es que, si una línea "compartida" se configura a todo ceros y su estado se cambia o bien a "modificado" o bien a "poseído", entonces no se enviaría un sondeo de escritura - actualización. En esa situación, la interconexión podría emitir un tipo de sondeo diferente (por ejemplo, un sondeo de escritura - invalidación o un sondeo de escritura en diferido e invalidación). En el bloque 4120, la memoria caché ha de cambiar el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché a "no válido" y el control pasa al bloque 4122. Si hay un fallo de memoria caché (el bloque 4114), entonces el control pasa al bloque 4122.
A modo de ejemplo específico con respecto al estado de reenvío o poseído, cuando una memoria caché del agente de emisión tiene la línea de memoria caché en el estado de reenvío o poseído, esa línea de memoria caché puede estar en otras memorias caché en el estado compartido. En este sentido, si la línea de memoria caché se pone a cero en el bloque 4119, entonces se puede enviar un sondeo para invalidar esas otras líneas de memoria caché que están en el estado compartido o para configurar para indicar todo ceros aquellas otras líneas de memoria caché que están en el estado compartido. Como alternativa, la línea de memoria caché en el estado de reenvío o poseído se podría invalidar (o ser de limpieza - expulsión e invalidación) (el bloque 4120), y se podría crear una nueva línea que es modificada y puesta a cero o poseída y puesta a cero. Esa nueva línea que se pone a cero se podría insertar (cargar) en la misma memoria caché que la línea de memoria caché que se halló en el estado de reenvío o poseído (por ejemplo, en un conjunto o vía diferente de esa memoria caché), o esta se podría insertar en una memoria caché diferente (por ejemplo, si la línea de memoria caché se halló en el estado de reenvío o poseído en la memoria caché de L2 o la memoria caché de L3, la línea de memoria caché se puede invalidar y se puede crear una línea nueva de modificada y puesta a cero o poseída y puesta a cero en la memoria caché de L1).
En el bloque 4122, la memoria caché ha de emitir la orden de escritura hacia la interconexión. Esta orden de escritura se puede enviar directamente a la interconexión 3920, o se puede enviar a uno o más niveles inferiores de las memorias caché del primer agente. A modo de ejemplos: 1) en algunas realizaciones, la orden de escritura se emite directamente a la interconexión (es decir, omitiendo cualquier memoria caché en niveles inferiores de la jerarquía de memoria caché - por ejemplo, desde la memoria caché de L1 3905 directamente a la interconexión 3920, omitiendo cualquier memoria caché de nivel inferior (por ejemplo, la memoria caché de L2 OQA10, la memoria caché de L3 OQA15) - caso en el cual, la orden de escritura se usa para la memoria caché de L1 de datos del primer agente, mientras que se usan sondeos (descritos a continuación) para la memoria caché de L1 de instrucciones, la memoria caché de L2 y la memoria caché de L3 (más específicamente, el segmento de memoria caché de L33916, de haberse implementado) del primer agente, así como para las memorias caché del segundo agente); 2) en algunas realizaciones, la orden de escritura se emite a la memoria caché de L23910 que repite lo anterior y, si esta no configura una línea de memoria caché para indicar todo ceros, emite la orden de escritura directamente a la interconexión 3920 - caso en el cual, la orden de escritura se usa para la memoria caché de L1 y la memoria caché de L2 del primer agente, mientras que se usan sondeos (descritos a continuación) para la memoria caché de L3 (más específicamente, el segmento de memoria caché de L33916, de haberse implementado) del primer agente, y las memorias caché del segundo agente; 3) en algunas realizaciones, la orden de escritura se emite a la memoria caché de L23910 que repite lo anterior y, si esta no configura una línea de memoria caché para indicar todo ceros, emite la orden de escritura a la memoria caché de L3 3915 (más específicamente, el segmento de memoria caché de L3 3916, de haberse implementado) y, si esta no configura una línea de memoria caché para indicar todo ceros, a la interconexión 3920 -caso en el cual, la orden de escritura se usa para las memorias caché del primer agente, mientras que se usan sondeos (descritos a continuación) para las memorias caché del segundo agente. En ciertas realizaciones, la memoria caché o memorias caché a la que se emiten las órdenes de escritura incluye un controlador de memoria caché implementado para, en respuesta a las órdenes de escritura analizadas anteriormente, determinar si hay, o no, aciertos de memoria caché, configurar líneas de memoria caché que aciertan para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros"), y emitir las órdenes de escritura hacia la interconexión en fallos de memoria caché. En un ejemplo específico, en respuesta a un acierto de línea de memoria caché, en la memoria caché de L23910 (del agente de emisión), que es modificada, exclusiva y / o poseída, la memoria caché de L2 se implementa para configurar una línea de memoria caché para indicar todo ceros reenviando la tarea a la memoria caché de L1.
El controlador de sondeo 3925 de la interconexión 3920, en respuesta a la orden de escritura, se implementa para iniciar un proceso de sondeo (el bloque 4190) para ubicar cualquier memoria caché que pueda estar almacenando la línea de memoria caché. Para implementar el proceso de sondeo 4190, el controlador de sondeo 3925 se implementa (por ejemplo, a través del generador de sondeo 3926) para emitir un sondeo a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché (el bloque 4126) (en otras palabras, aquellas de las memorias caché coherentes para las que se ha de determinar si hay un acierto). En algunas realizaciones, las memorias caché coherentes que pueden almacenar la línea de memoria caché son esas de las memorias caché coherentes: 1) a las que no se les ha emitido previamente la orden de escritura; y 2) en realizaciones que implementan un filtro de sondeo (no mostrado) en la interconexión 3920, que el filtro de sondeo indica que la memoria caché podría contener la línea (es decir, para las cuales el filtro de sondeo no suprime el sondeo). Esto puede incluir los uno o más niveles de memorias caché (por ejemplo, la memoria caché de L1 3906, la memoria caché de L23911, la memoria caché de L33915) que acoplan el segundo agente 3901 a la interconexión 3920; así como cualquiera de las memorias caché (por ejemplo, la memoria caché de L23910, la memoria caché de L33915) que acoplan el primer agente 3900 (el agente de emisión) a la interconexión 3920, que no recibieron la orden de escritura (es decir, memorias caché que se omitieron), y que, en realizaciones que implementan un filtro de sondeo (no mostrado) en la interconexión 3920, el filtro de sondeo indica que podría contener la línea (es decir, el filtro de sondeo no suprime el sondeo). En realizaciones en las que se envía un sondeo a una o más de las memorias caché que acoplan el primer agente a la interconexión, cada uno de tales sondeos también se puede denominar sondeo en diferido. Como parte del proceso de sondeo 4190, se pueden implementar diferentes realizaciones para emitir diferentes tipos de sondeo dependiendo de la situación, o emitir solo un tipo de sondeo. Hay una diversidad de tipos de sondeos posibles que se pueden usar (por ejemplo, un sondeo de escritura - actualización (también denominado sondeo de escritura - puesta a cero o sondeo de escritura y puesta a cero), un sondeo de escritura - invalidación (también denominado sondeo de invalidación incluso si se modifica), un sondeo que indica invalidar y escribir en diferido (también denominado sondeo de escritura en diferido e invalidación), un sondeo que escribe cualquier línea de memoria caché que acierta pero no envía los datos de vuelta al primer agente y no da como resultado que los datos se lean desde la memoria de aguas abajo, un sondeo de la técnica anterior (por ejemplo, una RFO)) como se analiza con más detalle más adelante en el presente documento. Específicamente, cuando se usan sondeos de escritura - actualización, el controlador de sondeo 3925 también se implementa para determinar si la escritura de tamaño de línea de memoria caché fue realizada por una de las memorias caché en respuesta a uno de los sondeos de escritura - actualización (mostrado como el bloque de trazo discontinuo 4128) como parte del proceso de sondeo 4190; si es así, el proceso está completo (el bloque 4130); de lo contrario, el control pasa al bloque 4132. El bloque 4128 es de trazo discontinuo debido a que este no se usa cuando se usan los otros tipos de sondeos para el proceso de sondeo 4190.
La orden de escritura y los sondeos operan para manejar casos en los que hay una línea de memoria caché que contiene los datos a poner a cero en una o más de las memorias caché. La escritura de ceros de tamaño de línea de memoria caché puede haber sido realizada por una de las memorias caché en respuesta a la orden de escritura (como se ha descrito anteriormente) o, en realizaciones que emiten sondeos de escritura - actualización, por una de las memorias caché en respuesta a una de las operaciones de sondeo de escritura - actualización como se describe con más detalle a continuación. Si la escritura de ceros de tamaño de línea de memoria caché no ha sido realizada por ninguna de las memorias caché, entonces, en el bloque 4132, la interconexión 3920 (por ejemplo, a través del generador de escritura 3929 del controlador de sondeo 3925), o el primer agente (el agente de emisión) en respuesta a un mensaje desde la interconexión 3920, hace que una línea de memoria caché en una o más de las memorias caché coherentes (por ejemplo, la memoria caché de L13905, la memoria caché de L23910, la memoria caché de L3 3915) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección de memoria. Como se ha indicado anteriormente y se indica con más detalle a continuación, en ciertas realizaciones, el controlador de sondeo 3925 incluye un respondedor de sondeo 3927 (y, opcionalmente, un convertidor de escritura 3928 y un generador de escritura 3929) responsable de esta acción. En ciertas realizaciones, el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga -almacenamiento 340) u otra estructura de hardware) realiza su papel (de haber alguno) en esta acción. En una realización alternativa, la interconexión 3920 instruye a un controlador de memoria para que provoque la escritura de ceros en la memoria de aguas abajo.
Como se ha descrito anteriormente en la sección titulada "Desencadenamiento de una memoria caché para configurar una línea de memoria caché para indicar todo ceros", diferentes realizaciones pueden implementar el agente de emisión de forma diferente para hacer que el desencadenamiento de una memoria caché configure una línea de memoria caché para indicar todo ceros (por ejemplo, para asegurar la atomicidad en donde una línea de memoria caché es más ancha (por ejemplo, 32 bytes, 64 bytes) que la anchura de datos soportada de forma nativa de un agente de emisión, implementando un campo de línea de ceros en otras estructuras (por ejemplo, las memorias temporales intermedias), implementando una orden nueva (que no porta la línea de memoria caché de ceros, pero indica una escritura de ceros de tamaño de línea de memoria caché) que puede pasar a través de las memorias temporales intermedias, o implementando una escritura secuencial de fragmentos más pequeños (por ejemplo, 16 bytes a la vez, 32 bytes a la vez) de ceros en una memoria temporal intermedia (por ejemplo, la cola de almacenamiento 8200, la memoria temporal de combinación de escritura (WCB) 8600, una memoria temporal de almacenamiento provisional separada (no mostrada)) que no responde a sondeos (o no responde a sondeos mientras se están escribiendo los fragmentos) y que queda expulsada en respuesta a que se hayan escrito suficientes fragmentos para igualar el tamaño de una línea de memoria caché (y no antes) de tal modo que los fragmentos se escriben de forma concurrente).
Ejemplos útiles para entender la invención que se basan en sondeos de las memorias caché coherentes
La figura 42 es un diagrama de flujo que ilustra ejemplos útiles para entender la invención de la invención que se basan en sondeos de las memorias caché coherentes (estos no intentan, en primer lugar, escribir en una memoria caché del agente de emisión). Como se ha analizado anteriormente, el primer agente 3900 ha de descodificar y ejecutar una instrucción cuya ejecución va a provocar una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria (el bloque 4210). En respuesta a la descodificación y ejecución de la instrucción, el primer agente ha de emitir, a la interconexión 3920, una orden para iniciar la escritura de ceros de tamaño de línea de memoria caché en la dirección de memoria (caso en el cual, el primer agente también se denomina agente de emisión) (el bloque 4212). En algunos ejemplos útiles para entender la invención, el primer agente incluye una unidad de descodificación (por ejemplo, el descodificador 140, el descodificador 314) para descodificar la instrucción cuya ejecución va a provocar la escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria. El primer agente también incluye una unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340), en respuesta a la unidad de descodificación, para emitir la orden para iniciar la escritura de ceros de tamaño de línea de memoria caché en la dirección de memoria.
La orden del primer agente / agente de emisión 3900 se emite a la interconexión 3920 (el bloque 4212), y la interconexión 3920, en respuesta a la orden, se implementa para iniciar un proceso de sondeo (el bloque 4290) para ubicar cualquier memoria caché que pueda estar almacenando la línea de memoria caché. Para implementar el proceso de sondeo 4290, la interconexión 3920 (por ejemplo, a través del controlador de sondeo 3925) se implementa (por ejemplo, a través del generador de sondeo 3926) para emitir un sondeo a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché (el bloque 4226) (en otras palabras, aquellas de las memorias caché coherentes para las que se ha de determinar si hay un acierto). En algunos ejemplos útiles para entender la invención, las memorias caché coherentes que pueden almacenar la línea de memoria caché son esas de las memorias caché coherentes: 1) cualquiera de las memorias caché coherentes (por ejemplo, la memoria caché de L1 3905, la memoria caché de L2 3910, la memoria caché de L1 3906, la memoria caché de L23911, la memoria caché de L33915) en ejemplos útiles para entender la invención que no implementan un filtro de sondeo (no mostrado) en la interconexión 3920; o 2) aquellas de las memorias caché coherentes para las que un filtro de sondeo (no mostrado) en la interconexión 3920 indica que la memoria caché podría contener la línea (es decir, el filtro de sondeo no suprime el sondeo) en ejemplos útiles para entender la invención que implementan un filtro de sondeo de este tipo. En ejemplos útiles para entender la invención en los que se envía un sondeo a una o más de las memorias caché que acoplan el primer agente a la interconexión, cada uno de tales sondeos también se puede denominar sondeo en diferido. Como antes, como parte del proceso de sondeo 4290, diferentes ejemplos útiles para entender la invención pueden emitir diferentes tipos de sondeo dependiendo de la situación, o emitir solo un tipo de sondeo. Hay una diversidad de tipos de sondeos posibles que se pueden usar (por ejemplo, un sondeo de escritura - actualización (también denominado sondeo de escritura - puesta a cero o sondeo de escritura y puesta a cero), un sondeo de escritura - invalidación (también denominado sondeo de invalidación incluso si se modifica), un sondeo que indica invalidar y escribir en diferido (también denominado sondeo de escritura en diferido e invalidación), un sondeo que escribe cualquier línea de memoria caché que acierta pero no envía los datos de vuelta al primer agente y no da como resultado que los datos se lean desde la memoria de aguas abajo, un sondeo de la técnica anterior (por ejemplo, una RFO) como se analiza con más detalle más adelante en el presente documento. Específicamente, cuando se usan sondeos de escritura - actualización, el controlador de sondeo 3925 también se implementa para determinar si la escritura de tamaño de línea de memoria caché fue realizada por una de las memorias caché en respuesta a uno de los sondeos de escritura - actualización (mostrado como el bloque de trazo discontinuo 4228) como parte del proceso de sondeo 4290; si es así, el proceso está completo (el bloque 4230); de lo contrario, el control pasa al bloque 4232. El bloque 4228 es de trazo discontinuo debido a que este no se usa cuando se usan los otros tipos de sondeos para el proceso de sondeo 4290.
En un ejemplo alternativo útil para entender la invención, el bloque 4212 se reemplaza con el primer agente que se implementa para emitir una orden de sondeo a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché (caso en el cual, el bloque 4226 no está presente, y el flujo pasa al bloque 4228 en ejemplos útiles para entender la invención que usan sondeos de escritura - actualización o, de lo contrario, al bloque 4232).
Los sondeos operan para manejar casos en los que hay una línea de memoria caché que contiene los datos a poner a cero en una o más de las memorias caché. En ejemplos útiles para entender la invención que emiten sondeos de escritura - actualización, la escritura de ceros de tamaño de línea de memoria caché puede haber sido realizada por una o más de las memorias caché. Si la escritura de ceros de tamaño de línea de memoria caché no ha sido realizada por ninguna de las memorias caché, entonces, en el bloque 4232, el primer agente por sí solo, la interconexión 3920 (por ejemplo, a través del generador de escritura 3929), o el primer agente en respuesta a un mensaje desde la interconexión 3920, hace que una línea de memoria caché en una o más de las memorias caché (por ejemplo, la memoria caché de L1 3905, la memoria caché de L23910, la memoria caché de L33915) se configure para indicar todo ceros (diferentes ejemplos útiles para entender la invención pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección. Como se ha indicado anteriormente y se indica con más detalle a continuación, en ciertos ejemplos útiles para entender la invención, el controlador de sondeo 3925 incluye un respondedor de sondeo 3927 (y, opcionalmente, un convertidor de escritura 3928 y un generador de escritura 3929) para realizar su papel (de haber alguno) en esta acción. En ciertos ejemplos útiles para entender la invención, el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) realiza su papel (de haber alguno) en esta acción. En un ejemplo alternativo útil para entender la invención, la interconexión 3920 instruye a un controlador de memoria para que provoque la escritura de ceros en la memoria de aguas abajo.
Como se ha descrito anteriormente en la sección titulada "Desencadenamiento de una memoria caché para configurar una línea de memoria caché para indicar todo ceros", diferentes ejemplos útiles para entender la invención pueden implementar el agente de emisión de forma diferente para hacer que el desencadenamiento de una memoria caché configure una línea de memoria caché para indicar todo ceros (por ejemplo, para asegurar la atomicidad en donde una línea de memoria caché es más ancha (por ejemplo, 32 bytes, 64 bytes) que la anchura de datos soportada de forma nativa de un agente de emisión, implementando un campo de línea de ceros en otras estructuras (por ejemplo, las memorias temporales intermedias), implementando una orden nueva (que no porta la línea de memoria caché de ceros, pero indica una escritura de ceros de tamaño de línea de memoria caché) que puede pasar a través de las memorias temporales intermedias, o implementando una escritura secuencial de fragmentos más pequeños (por ejemplo, 16 bytes a la vez, 32 bytes a la vez) de ceros en una memoria temporal intermedia (por ejemplo, la cola de almacenamiento 8200, la memoria temporal de combinación de escritura (WCB) 8600, una memoria temporal de almacenamiento provisional separada (no mostrada)) que no responde a sondeos (o no responde a sondeos mientras se están escribiendo los fragmentos) y que queda expulsada en respuesta a que se hayan escrito suficientes fragmentos para igualar el tamaño de una línea de memoria caché (y no antes) de tal modo que los fragmentos se escriben de forma concurrente).
Diferentes tipos de sondeos
Como se ha indicado previamente, como parte del proceso de sondeo 4190 o de proceso de sondeo 4290, diferentes realizaciones pueden emitir diferentes tipos de sondeo dependiendo de la situación, o emitir solo un tipo de sondeo. Hay una diversidad de tipos de sondeos posibles que se pueden usar (por ejemplo, un sondeo de escritura -actualización (también denominado sondeo de escritura - puesta a cero o sondeo de escritura y puesta a cero), un sondeo de escritura - invalidación, un sondeo que indica invalidar y escribir en diferido (también denominado sondeo de invalidación incluso si se modifica), un sondeo que escribe cualquier línea de memoria caché que acierta pero no envía los datos de vuelta al primer agente y no da como resultado que los datos se lean desde la memoria de aguas abajo, un sondeo de la técnica anterior (por ejemplo, una RFO)). Como se ha indicado previamente, cualquiera de estos diferentes tipos de sondeos se puede usar junto con cualquiera de las realizaciones anteriores analizadas con respecto a las figuras 41 y 42. A continuación se describirán más detalles con respecto a los diferentes tipos de sondeos.
Sondeos de escritura - actualización: La figura 43 es un diagrama de flujo que ilustra realizaciones de la invención que usan sondeos de escritura - actualización (también denominados sondeos de escritura - puesta a cero o sondeos de escritura y puesta a cero) para implementar el proceso de sondeo 4190 o 4290. En el contexto de las figuras 41 y 42, el flujo pasa respectivamente desde el bloque 4124 o el bloque 4212 al bloque 4326, que realiza el bloque 4126 o 4226 usando un sondeo de escritura - actualización. La interconexión 3920 (por ejemplo, a través del generador de sondeo 3926 del controlador de sondeo 3925) se implementa para emitir sondeos de escritura - actualización a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché (el bloque 4326) (en otras palabras, aquellas de las memorias caché coherentes para las que se ha de determinar si hay un acierto). Cuando hay un acierto para una línea de memoria caché de una memoria caché (por ejemplo, la memoria caché de L1, la memoria caché de L2 y / o el segmento de memoria caché de L3 del primer agente, y la memoria caché de L1, la memoria caché de L2 y el segmento de memoria caché de L3 del segundo agente) a la que se emite un sondeo de escritura - actualización (el bloque 4340), entonces esa memoria caché ha de: 1) si el estado de protocolo de coherencia de memoria caché de la línea de memoria caché que acierta es "modificado" (y, en algunas realizaciones, uno o más de "de reenvío", "exclusivo", "poseído" y / o "compartido") (el bloque 4342), configurar la línea de memoria caché para indicar todo ceros (el bloque 4344) (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") y emitir a la interconexión 3920 un mensaje de respuesta que indica puesto a cero (en algunas realizaciones que soportan la puesta a cero de una línea de memoria caché que acierta que está en el estado compartido, el mensaje de respuesta también distingue el estado de la línea de memoria caché - tal como modificado y puesto a cero o poseído y puesto a cero, frente a compartido y puesto a cero (indicando esto último que el estado original era "compartido" y que la memoria caché ha configurado la línea de memoria caché para indicar todo ceros y su estado sigue siendo "compartido"); en una realización alternativa que soporta la puesta a cero de una línea de memoria caché en el estado compartido, se envía un mensaje de respuesta que indica no puesto a cero (como en el bloque 4350) cuando el estado original era "compartido" y la memoria caché ha configurado la línea de memoria caché para indicar todo ceros y su estado sigue siendo "compartido")) (4346); y 2) de lo contrario, configurar el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché a "no válido" (el bloque 4328) y emitir un mensaje de respuesta que indica no puesto a cero a la interconexión (el bloque 4350). Cuando no hay un acierto para una línea de memoria caché de la memoria caché a la que se emite un sondeo de escritura - actualización (el bloque 4340), entonces la memoria caché emite un mensaje de respuesta que indica no puesto a cero a la interconexión (el bloque 4350). Por lo tanto, en algunas realizaciones, se puede implementar una memoria caché coherente de tal modo que una orden de escritura o un sondeo de escritura y puesta a cero que acierta una línea de memoria caché en cualquiera de los estados modificado, poseído, exclusivo y de reenvío hará que la memoria caché configure la línea de memoria caché para ponerse a cero (y cambiar su estado a modificado (modificado y puesto a cero) o poseído (poseído y puesto a cero)). En realizaciones alternativas, una memoria caché de este tipo puede hacer esto para solo un subconjunto de los estados modificado, poseído, exclusivo y de reenvío; caso en el cual, esta haría que cualquier línea de memoria caché acertada que está en los estados modificado, poseído, exclusivo o de reenvío y que no se está cambiando a modificado y puesto a cero o poseído y puesto a cero, se cambiase al estado no válido en respuesta a un sondeo de escritura y puesta a cero. En este sentido, en algunas realizaciones, todas o un subconjunto de las memorias caché coherentes se implementan, para todos o un subconjunto de los estados modificado, exclusivo, poseído o de reenvío, para hacer que una línea de memoria caché se ponga a cero (y que su estado se cambie a modificado (modificado y puesto a cero) o poseído (poseído y puesto a cero)) en respuesta a una orden de escritura o un sondeo de escritura y actualización (también conocido como escritura y puesta a cero) que acierta en esa memoria caché. Realizaciones que soportan la puesta a cero de una línea de memoria caché que acierta que está en el estado compartido y dejar la misma en el estado compartido harán esto solo cuando cualquier línea Modificada, Exclusiva, Poseída o de Reenvío que se acierta en otras memorias caché se cambie a Poseída y Puesta a cero o se invalide en lugar de cambiarse a Modificada y Puesta a cero. En ciertas realizaciones, una memoria caché implementada para responder a un sondeo de escritura - actualización incluye el controlador de memoria caché 4051 (por ejemplo, a través del controlador de sondeo 4053), en respuesta a los sondeos de escritura - actualización, para determinar si hay, o no, aciertos de memoria caché, configurar líneas de memoria caché que aciertan para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros"), y emitir los mensajes de respuesta a la interconexión 3920.
Después de emitir los sondeos de escritura - actualización, la interconexión 3920 (por ejemplo, a través del respondedor de sondeo 3927 del controlador de sondeo 3925) se implementa para realizar un seguimiento de la recepción de los mensajes de respuesta respectivos (el bloque 4352) (por ejemplo, en una realización, el generador de sondeo 3926 indica al respondedor de sondeo 3927 una información para que este realice un seguimiento de la recepción de los mensajes de respuesta respectivos). Desde el bloque 4352, el control pasa o bien al bloque 4128 o bien al bloque 4228 dependiendo de si se está implementando una realización de la figura 41 o 42. La escritura de ceros de tamaño de línea de memoria caché puede haber sido realizada por una de las memorias caché en respuesta a uno de los sondeos de escritura - actualización (sin embargo, en realizaciones que implementan la puesta a cero de una línea de memoria caché en el estado "compartido" y ninguno de los mensajes de respuesta refleja que una de las líneas de memoria caché haya sido poseída y puesta a cero o modificada y puesta a cero, entonces no se considera que la escritura de ceros de línea de memoria caché haya sido realizada por una de las memorias caché en respuesta a uno de los sondeos de escritura - actualización). Si la escritura de ceros de tamaño de línea de memoria caché no ha sido realizada por ninguna de las memorias caché (el bloque 4128 y el bloque 4228) (todos los mensajes de respuesta indican no puesto a cero; o, en realizaciones que implementan la puesta a cero de una línea de memoria caché en el estado "compartido" y ninguno de los mensajes de respuesta refleja que una de las líneas de memoria caché sea poseída y puesta a cero o modificada y puesta a cero), entonces se realiza o bien el bloque 4132 o bien el bloque 4232 - en concreto, la interconexión 3920 (por ejemplo, a través del generador de escritura 3929 del controlador de sondeo QO25), o el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) en respuesta a un mensaje desde la interconexión 3920, hace que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1, la memoria caché de L2, la memoria caché de L3) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección.
Como se ha ilustrado anteriormente, el uso de un sondeo de escritura - actualización, en contraposición al uso de una operación de RFO, es ventajoso debido a que este no requiere que una línea se lea y se devuelva al agente de emisión y requiere que se dé propiedad de los datos al agente de emisión (cuando se cumplen las condiciones de 4340 y 4342, el sondeo de escritura - actualización hace que la línea de memoria caché se ponga a cero en la memoria caché de otro agente coherente). Por lo tanto, una ventaja de realizaciones que usan sondeos de escritura - actualización es que estas pueden actualizar directamente una memoria caché local de otro agente (por ejemplo, el segundo agente / agente no de emisión). Por ejemplo, esto prevé una comunicación relativamente rápida - tal como actualizar una variable sobre la que está actuando otro agente.
Como se ha indicado previamente, se pueden usar sondeos de escritura - actualización junto con las realizaciones de las figuras 41 y 42. A modo de ejemplo, se describirá una realización específica que implementa sondeos de escritura - actualización en una de las realizaciones a partir de la figura 41. En esta realización específica, el agente de emisión 3900, en primer lugar, intenta escribir en la memoria caché de L1 3905 del agente de emisión 3900; y, si se requieren sondeos, la interconexión 3920 emite sondeos de escritura - actualización a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché como se ha descrito anteriormente. Por lo tanto, las memorias caché de L1 se implementan para responder a órdenes de escritura como se ha descrito anteriormente; las memorias caché de L1, las memorias caché de L2 y las memorias caché de L3 (más específicamente, los segmentos de memoria caché de L3, de haberse implementado) se implementan para responder a sondeos de escritura - actualización como se ha descrito anteriormente; la interconexión 3920 se implementa para emitir los sondeos de escritura - actualización en respuesta a las órdenes de escritura (por ejemplo, a través del generador de sondeo 3926 del controlador de sondeo 3925) y para responder a los mensajes de respuesta (por ejemplo, a través del respondedor de sondeo 3927 del controlador de sondeo 3925) como se ha descrito anteriormente; y la interconexión 3920 (por ejemplo, a través del generador de escritura 3929 del controlador de sondeo QO25), o el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) en respuesta a un mensaje desde la interconexión, se implementa para hacer que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1 3905, la memoria caché de L23910 o la memoria caché de L33915 (más específicamente, el segmento de memoria caché de L33916, de haberse implementado) del primer agente) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección de memoria.
Sondeos de escritura - invalidación: La figura 44 es un diagrama de flujo que ilustra realizaciones de la invención que usan sondeos de escritura - invalidación (también denominados "sondeos de invalidación incluso si se modifican) para implementar el proceso de sondeo 4190 o 4290. En el contexto de las figuras 41 y 42, el flujo pasa respectivamente desde el bloque 4124 o el bloque 4212 al bloque 4426, que realiza el bloque 4126 o 4226 usando sondeos de escritura - invalidación. La interconexión 3920 (por ejemplo, a través del generador de sondeo 3926 del controlador de sondeo 3925) se implementa para emitir sondeos de escritura - invalidación a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché (el bloque 4426) (en otras palabras, aquellas de las memorias caché coherentes para las que se ha de determinar si hay un acierto). Cuando hay un acierto para una línea de memoria caché de una memoria caché (por ejemplo, la memoria caché de L1, la memoria caché de L2 y / o el segmento de memoria caché de L3 del primer agente, y la memoria caché de L1, la memoria caché de L2 y el segmento de memoria caché de L3 del segundo agente) a la que se emite un sondeo de escritura - invalidación (el bloque 4440), entonces esa memoria caché ha de hacer que el estado de protocolo de coherencia de memoria caché indique "no válido" (incluso si, en el estado actual, es "modificado") (el bloque 4448); la memoria caché no necesita configurar la línea de memoria caché para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o emitir un mensaje de respuesta a la interconexión si la invalidación se completa en un tiempo fijo (si la invalidación no se completa en un tiempo fijo, entonces una de las realizaciones hace que las memorias caché sondeadas envíen mensajes de respuesta que indican que el sondeo está completo). Cuando no hay un acierto para una línea de memoria caché de la memoria caché a la que se emite un sondeo de escritura - invalidación (4440), entonces esa memoria caché en una realización no hace cosa alguna (el bloque 4430).
Además, en el contexto de las figuras 41 y 42, el flujo pasa respectivamente desde el bloque 4124 o el bloque 4212 al bloque 4132 o 4232 (los bloques 4128 y 4228 no se implementan cuando se usan sondeos de escritura - invalidación). En el bloque 4132 o 4232, el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) por sí solo, la interconexión 3920 (por ejemplo, a través del generador de escritura 3929 del controlador de sondeo QO25), o el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) en respuesta a un mensaje desde la interconexión, hace que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1 3905, la memoria caché de L23910 o la memoria caché de L33915 (más específicamente, el segmento de memoria caché de L3 3916, de haberse implementado) del primer agente) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección.
Como se ha ilustrado anteriormente, el uso de un sondeo de escritura - invalidación, en contraposición al uso de una operación de RFO, es ventajoso debido a que este no requiere que una línea de memoria caché se lea y se devuelva al agente de emisión debido a que el agente de emisión estará poniendo a cero los datos.
Como se ha indicado previamente, se pueden usar sondeos de escritura - invalidación junto con las realizaciones de las figuras 41 y 42. A modo de ejemplo, se describirá una realización específica que implementa sondeos de escritura - invalidación en una de las realizaciones a partir de la figura 41. En esta realización específica, el agente de emisión 3900, en primer lugar, intenta escribir en la memoria caché de L1 3905 del agente de emisión 3900; y, si se requieren sondeos, la interconexión 3920 emite sondeos de escritura - invalidación a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché como se ha descrito anteriormente. Por lo tanto, las memorias caché de L1 se implementan para responder a órdenes de escritura como se ha descrito anteriormente; las memorias caché de L1, las memorias caché de L2 y la memoria caché de L3 (más específicamente, los segmentos de memoria caché de L3, de haberse implementado) se implementan para responder a sondeos de escritura -invalidación como se ha descrito anteriormente; la interconexión 3920 se implementa para emitir los sondeos de escritura - invalidación en respuesta a las órdenes de escritura; y el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) por sí solo, la interconexión 3920 (por ejemplo, a través del generador de escritura 3929 del controlador de sondeo QO25), o el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) en respuesta a un mensaje desde la interconexión, se implementan para hacer que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1 3905, la memoria caché de L23910 o la memoria caché de L33915 (más específicamente, el segmento de memoria caché de L33916, de haberse implementado) del primer agente) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección de memoria.
Sondeos que invalidan y escriben en diferido: La figura 45 es un diagrama de flujo que ilustra las realizaciones de la invención que usan sondeos, que invalidan y escriben en diferido (también denominados "sondeos de escritura e invalidación"), para implementar el proceso de sondeo 4190 o 4290. En el contexto de las figuras 41 y 42, el flujo pasa respectivamente desde el bloque 4124 o el bloque 4212 al bloque 4526, que realiza el bloque 4126 o 4226 usando un sondeo de escritura en diferido e invalidación (un sondeo que invalida y escribe en diferido). La interconexión 3920 (por ejemplo, a través del generador de sondeo 3926 del controlador de sondeo 3925) se implementa para emitir sondeos de escritura en diferido e invalidación a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché (el bloque 4526) (en otras palabras, aquellas de las memorias caché coherentes para las que se ha de determinar si hay un acierto). Cuando hay un acierto para una línea de memoria caché de una memoria caché (por ejemplo, la memoria caché de L1, la memoria caché de L2 y / o el segmento de memoria caché de L3 del primer agente, y la memoria caché de L1, la memoria caché de L2 y el segmento de memoria caché de L3 del segundo agente) a la que se emite un sondeo de este tipo (el bloque 4540), entonces esa memoria caché ha de: 1) si el estado de protocolo de coherencia de memoria caché de la línea de memoria caché es "modificado" (el bloque 4542) (y, en algunas realizaciones, "limpieza - expulsión"), escribir en diferido la línea de memoria caché en la interconexión 3920 (el bloque 4544); e, independientemente, 2) hacer que el estado de protocolo de coherencia de memoria caché de la línea de memoria caché indique "no válido" (el bloque 4548) (la memoria caché no necesita configurar la línea de memoria caché para indicar todo ceros). Cuando no hay un acierto para una línea de memoria caché de la memoria caché a la que se emite el sondeo (el bloque 4540), entonces la memoria caché en una realización no hace cosa alguna (el control pasa al bloque 4552). En ciertas realizaciones, una memoria caché implementada para responder a un sondeo de este tipo incluye el controlador de memoria caché 4051, en respuesta a tales sondeos, para determinar si hay, o no, aciertos de memoria caché, escribir en diferido líneas de memoria caché modificadas (por ejemplo, aquellas que aciertan y tienen un estado de protocolo de coherencia de memoria caché de "modificado") a la interconexión 3920, y modificar los estados de protocolo de coherencia de memoria caché de las líneas de memoria caché a "no válido".
Después de emitir los sondeos, la interconexión 3920 (por ejemplo, a través del respondedor de sondeo 3927 del controlador de sondeo 3925) se implementa para realizar un seguimiento de la recepción de cualquier mensaje de respuesta respectivo (el bloque 4552) (por ejemplo, en una realización, el generador de sondeo 3926 indica al respondedor de sondeo 3927 una información para que este realice un seguimiento de la recepción de cualquier mensaje de respuesta respectivo). Si se recibe un mensaje de respuesta con los datos (el bloque 4560) (es decir, los datos desde la línea de memoria caché modificada), entonces la interconexión 3920 se implementa opcionalmente (por ejemplo, a través del convertidor de escritura 3928 del controlador de sondeo 3925) para convertir en la práctica los datos en ceros (el bloque 4562). De lo contrario, la interconexión 3920 se implementa opcionalmente (por ejemplo, a través del generador de escritura 3929 del controlador de sondeo 3925) para crear en la práctica una línea de ceros (el bloque 4564). El control pasa desde los bloques 4562 y 4564 o bien al bloque 4132 o bien al bloque 4232 (los bloques 4128 y 4228 no se implementan cuando se usan sondeos que invalidan y escriben en diferido) dependiendo de si se está implementando una realización de la figura 41 o 42. En el bloque 4132 o 4232, el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) por sí solo, la interconexión 3920 (por ejemplo, el controlador de sondeo QO25), o el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) en respuesta a un mensaje desde la interconexión 3920, hace que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1, la memoria caché de L2 o la memoria caché de L3) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección. En una realización, los bloques 4560 y 4562 no se implementan y siempre se realiza el bloque 4564. En otra realización, el bloque 4562 no se realiza, los datos reescritos se envían al primer agente y el primer agente pone a cero los datos. En otra realización, no se realizan los bloques 4560, 4562 y 4564 y el primer agente pone a cero los datos.
Como se ha ilustrado anteriormente, el uso de un sondeo que invalida y escribe en diferido, en contraposición al uso de una operación de RFO, es ventajoso debido a que este no requiere que una línea de memoria caché se lea y se devuelva al agente de emisión debido a que el agente de emisión estará poniendo a cero los datos.
Como se ha descrito previamente, lo anterior se inicia en respuesta a que el primer agente emita la orden para iniciar la escritura de ceros de tamaño de línea de memoria caché en una dirección alineada en una frontera de línea de memoria caché (por ejemplo, el bloque 4112 o 4212). Como se ha descrito previamente, esta orden puede adoptar la forma de una orden de escritura (por ejemplo, el bloque 4112 o 4212). En otras realizaciones, esta orden puede ser una orden de lectura (por ejemplo, el bloque 4212); caso en el cual, se hace que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1, la memoria caché de L2, la memoria caché de L3) se configure para indicar todo ceros al: 1) implementarse la interconexión 3920 (por ejemplo, el controlador de sondeo 3925) para responder a la orden de lectura desde el primer agente con una respuesta al primer agente que indica una línea de ceros (línea que tendrá su estado de protocolo de coherencia de memoria caché establecido a modificado o exclusivo); y 2) implementarse el primer agente para poner el resultado de su orden de lectura en una memoria caché (hacer que una memoria caché (por ejemplo, la memoria caché de L1 3905) configure una línea de memoria caché para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros"), pero no en un archivo de registro arquitectónico del primer agente.
Como se ha indicado previamente, los sondeos que indican invalidar y escribir en diferido se pueden usar junto con las realizaciones de las figuras 41 y 42. A modo de ejemplo, se describirá una realización específica que implementa tales sondeos en una de las realizaciones a partir de la figura 41. En esta realización específica, el agente de emisión 3900, en primer lugar, intenta escribir en la memoria caché de L1 3905 del agente de emisión 3900; y, si se requieren sondeos, la interconexión 3920 emite los sondeos a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché como se ha descrito anteriormente. Por lo tanto, las memorias caché de L1 se implementan para responder a órdenes de escritura como se ha descrito anteriormente; las memorias caché de L1, las memorias caché de L2 y la memoria caché de L3 (más específicamente, los segmentos de memoria caché de L3, de haberse implementado) se implementan para responder a los sondeos como se ha descrito anteriormente; la interconexión 3920 se implementa para emitir los sondeos en respuesta a órdenes de escritura, se implementa opcionalmente para convertir en la práctica a cero cualesquiera datos recibidos en respuesta a los sondeos (por ejemplo, a través del convertidor de escritura 3928 del controlador de sondeo 3925) y, opcionalmente, se implementa para crear en la práctica una línea de ceros si no se recibe dato alguno en respuesta a los sondeos (por ejemplo, el generador de escritura 3929 del controlador 3925 del sondeo; y el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) por sí solo, la interconexión 3920 (por ejemplo, a través del controlador de sondeo QO25), o el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) u otra estructura de hardware) en respuesta a un mensaje desde la interconexión, se implementa para hacer que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L13905, la memoria caché de L23910 o la memoria caché de L33915 (más específicamente, el segmento de memoria caché de L3 3916, de haberse implementado) del primer agente) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección de memoria.
Sondeos que escriben cualquier línea de memoria caché que acierta pero no envían los datos de vuelta al primer agente y no dan como resultado que los datos se lean desde la memoria de aguas abajo, o sondeos de la técnica anterior que escriben líneas normalmente (una RFO): La figura 46 es un diagrama de flujo que ilustra realizaciones de la invención que usan sondeos, que escriben cualquier línea de memoria caché que acierta pero no envían los datos de vuelta al primer agente y no dan como resultado que los datos se lean desde la memoria de aguas abajo (o sondeos de la técnica anterior que escriben líneas normalmente - por ejemplo, una operación de RFO), para implementar el proceso de sondeo 4190 o 4290. En el contexto de las figuras 41 y 42, el flujo pasa respectivamente desde el bloque 4124 o el bloque 4212 al bloque 4526, que realiza el bloque 4126 o 4226 usando un sondeo de este tipo. La interconexión 3920 (por ejemplo, a través del generador de sondeo 3926 del controlador de sondeo 3925) se implementa para emitir tales sondeos a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché (el bloque 4626) (en otras palabras, aquellas de las memorias caché coherentes para las que se ha de determinar si hay un acierto). Cuando hay un acierto para una línea de memoria caché de una memoria caché (por ejemplo, la memoria caché de L1, la memoria caché de L2 y / o el segmento de memoria caché de L3 del primer agente, y la memoria caché de L1, la memoria caché de L2 y el segmento de memoria caché de L3 del segundo agente) a la que se emite un sondeo de este tipo (el bloque 4640), entonces esa memoria caché ha de responder al sondeo (4644). En algunas realizaciones, las memorias caché se implementan para responder a tales sondeos como una memoria caché de la técnica anterior respondería normalmente de acuerdo con el protocolo de coherencia de memoria caché implementado. Mientras que, en algunas realizaciones, se usa un nuevo tipo de sondeo, en otras se usa un sondeo de la técnica anterior (por ejemplo, una operación de RFO) - caso en el cual, incorporar la instrucción de puesta a cero de línea de memoria caché en un diseño de procesador existente no requiere modificación alguna, o requiere una modificación pequeña, en las memorias caché, dependiendo (véase la sección anterior titulada "Desencadenamiento de una memoria caché para configurar una línea de memoria caché para indicar todo ceros"). Cuando no hay un acierto para una línea de memoria caché de la memoria caché a la que se emite el sondeo (4640), entonces la memoria caché en una realización no hace cosa alguna (el control pasa al bloque 4652).
Después de emitir los sondeos, la interconexión 3920 (por ejemplo, a través del respondedor de sondeo 3927 del controlador de sondeo 3925) se implementa para realizar un seguimiento de la recepción de cualquier mensaje de respuesta respectivo (por ejemplo, en una realización, el generador de sondeo 3926 indica al respondedor de sondeo 3927 una información para que este realice un seguimiento de la recepción de cualquier mensaje de respuesta respectivo). Si se recibe un mensaje de respuesta con los datos (el bloque 4660) (por ejemplo, los datos desde una línea de memoria caché modificada), entonces la interconexión 3920 (por ejemplo, a través del respondedor de sondeo 3927 del controlador de sondeo 3925) se implementa para no enviar los datos al agente de emisión o cualquiera de las memorias caché del agente de emisión (el bloque 4662). Si no se recibe un mensaje de respuesta con los datos (4660), la interconexión 3920 (por ejemplo, a través del contestador 3927 del controlador de sondeo 3925) se implementa para no leer los datos desde la memoria de aguas abajo debido a que esto no es necesario (el bloque 4664).
El control pasa desde los bloques 4662 y 4664 o bien al bloque 4132 o bien al bloque 4232 (los bloques 4128 y 4228 no se implementan cuando se usan tales sondeos) dependiendo de si se está implementando una realización de la figura 41 o 42. En el bloque 4132 o 4232, el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga - almacenamiento 340) por sí solo (solo el bloque 4232), la interconexión 3920 (por ejemplo, el controlador de sondeo QO25), o el primer agente (por ejemplo, a través de la unidad de ejecución (por ejemplo, la unidad o unidades de acceso a memoria 164, la unidad de carga -almacenamiento 340) u otra estructura de hardware) en respuesta a un mensaje desde la interconexión 3920, hace que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1, la memoria caché de L2 o la memoria caché de L3) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección. En una realización en la que no se implementa el bloque 4662 (los datos se envían de vuelta al primer agente) y / o no se implementa el bloque 4664 (se accede a la memoria de aguas abajo y los datos se devuelven al primer agente), entonces el primer agente pone a cero los datos.
Como se ha ilustrado anteriormente, incluso si se usa una operación de RFO, las realizaciones ilustradas son ventajosas debido a que estas funcionan con un diseño de memoria caché existente, que soporta una operación de RFO, con poca o ninguna modificación.
Como se ha indicado previamente, se pueden usar estos tipos de sondeos junto con las realizaciones de las figuras 41 y 42. A modo de ejemplo, se describirá una realización específica que implementa tales sondeos en una de las realizaciones a partir de la figura 42. En esta realización específica, el agente de emisión 3900 ha de emitir la orden para iniciar la escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria directamente a la interconexión 3920 (omitiendo las memorias caché del agente de emisión / primer agente), la interconexión 3920 (por ejemplo, a través del generador de sondeo 3926 del controlador de sondeo 3925) se implementa para emitir los sondeos a aquellas de las memorias caché coherentes que pueden estar almacenando la línea de memoria caché como se ha descrito anteriormente; si se recibe un mensaje de respuesta con los datos (es decir, los datos desde la línea de memoria caché modificada), entonces la interconexión 3920 se implementa opcionalmente (por ejemplo, a través del respondedor de sondeo 3927 del controlador de sondeo 3925) para no enviar los datos al agente de emisión o cualquier memoria caché del agente de emisión; si no se recibe un mensaje de respuesta con los datos, la interconexión 3920 (por ejemplo, a través del contestador 3927 del controlador de sondeo 3925) se implementa opcionalmente para no leer los datos desde la memoria de aguas abajo debido a que esto no es necesario; y el agente de emisión (el primer agente) por sí solo, o el primer agente en respuesta a un mensaje desde la interconexión, hace que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1, la memoria caché de L2, la memoria caché de L3) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección. Por lo tanto, en determinadas realizaciones, las memorias caché de L1, las memorias caché de L2 y las memorias caché de L3 (más específicamente, los segmentos de memoria caché de L3, de haberse implementado) se implementan para responder a los sondeos como se ha descrito anteriormente; la interconexión 3920 se implementa para emitir los sondeos en respuesta a las órdenes (por ejemplo, a través del generador de sondeo 3926 del controlador de sondeo 3925) y responder a datos de respuesta desde las memorias caché (por ejemplo, a través del respondedor de sondeo 3927 del controlador de sondeo 3925) como se ha descrito anteriormente; el agente de emisión se implementa para enviar la orden para iniciar la escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria directamente a la interconexión 3920; y el agente de emisión (el primer agente) por sí solo, o el primer agente en respuesta a un mensaje desde la interconexión, hace que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1, la memoria caché de L2, la memoria caché de L3) se configure para indicar todo ceros (diferentes realizaciones pueden implementar memorias caché para configurar la línea de memoria caché para indicar todo ceros como se ha descrito previamente en la sección titulada "Técnicas para configurar una línea de memoria caché para indicar todo ceros") o provoca una escritura de ceros del tamaño de línea de memoria caché en la memoria de aguas abajo en la dirección. En una realización específica, el agente de emisión (el primer agente) por sí solo hace que una línea de memoria caché en una de las memorias caché (por ejemplo, la memoria caché de L1, la memoria caché de L2, la memoria caché de L3) se configure para indicar todo ceros.
Múltiples zócalos
Como se ha descrito previamente, la interconexión 3920 puede, por ejemplo, representar: 1) solo una interconexión dentro de un CCX; 2) una interconexión dentro de y entre unos CCX; 3) interconexiones separadas dentro de diferentes CCX, así como una interconexión o interconexiones entre unos CCX. Como se analiza en el presente documento, un sistema se puede implementar con uno o más de los procesadores anteriores (incluyendo, cada uno, uno o más CCX) (véase la sección a continuación titulada "Arquitecturas de ordenador ilustrativas). Un sistema de este tipo puede incluir uno o más zócalos (conocidos como zócalo de CPU o ranura de CPU) que comprenden, cada uno, uno o más componentes mecánicos que proporcionan conexiones mecánicas y eléctricas. En sistemas con múltiples zócalos (por ejemplo, un servidor), los zócalos están conectados por un conjunto de una o más interconexiones (también denominadas interconexiones de zócalo a zócalo). Diferentes realizaciones pueden implementar el conjunto de interconexiones de zócalo a zócalo de forma diferente, incluyendo uno o más de un anillo, múltiples anillos, enlaces punto a punto (por ejemplo, enlaces punto a punto, tales como Interconexión QuickPath (QPI), Interconexión UltraPath (UPI), HyperTransport (HP)), bus o buses compartidos, etc. Este conjunto de interconexiones de zócalo a zócalo se puede ver como parte de la interconexión 3920 o como separado, dependiendo de la realización. En algunas realizaciones, este conjunto de interconexiones se implementa para soportar las mismas comunicaciones (órdenes de escritura, sondeos, mensajes de respuesta, etc.) analizados anteriormente con respecto a la interconexión 3920; en donde cada una de estas comunicaciones puede tener el mismo formato o un formato diferente cuando se envían a través de una interconexión de zócalo a zócalo. En otras realizaciones, una o más de estas comunicaciones (por ejemplo, uno o más de los tipos de sondeo y / o mensajes de respuesta) se convierten cuando se envían de zócalo a zócalo. Por ejemplo, algunas realizaciones pueden usar un sondeo de escritura - actualización dentro de un procesador o procesadores en un único zócalo, pero convertir un sondeo de este tipo en un sondeo de escritura -invalidación o escritura en diferido e invalidación cuando este se envía a otro zócalo. Una ventaja de tales realizaciones es que la decisión de si generar una línea de memoria caché puesta a cero nueva es solo dentro de un zócalo (en este sentido, no hay necesidad alguna de una indicación de "puesto a cero" o "no puesto a cero" desde los otros zócalos).
Sumario de algunas realizaciones
Una realización de la invención puede incluir un procesador que comprende un primer agente coherente, un segundo agente coherente y una interconexión. El primer agente está acoplado a la interconexión a través de una memoria caché del primer agente. El segundo agente está acoplado a la interconexión a través de una memoria caché del segundo agente. El primer agente ha de descodificar y ejecutar una instrucción cuya ejecución va a provocar una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria. El primer agente ha de emitir, en la memoria caché del primer agente, una orden de escritura para iniciar la escritura de ceros de tamaño de línea de memoria caché en la dirección de memoria. La memoria caché del primer agente, cuando hay un acierto para una línea de memoria caché en respuesta a recibir la orden de escritura y el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché es un estado modificado o un estado exclusivo, para configurar esa línea de memoria caché para indicar todo ceros. La memoria caché del primer agente, cuando hay una recepción de respuesta a fallo de memoria caché a la orden de escritura, para emitir la orden de escritura hacia la interconexión. La interconexión, en respuesta a recibir la orden de escritura, para emitir un sondeo a la memoria caché del segundo agente. La interconexión o el primer agente en respuesta a un mensaje desde la interconexión, para hacer que una línea de memoria caché en la memoria caché del primer agente se configure para indicar todo ceros cuando la orden de escritura y el sondeo no hicieron que se realizara la escritura de ceros de línea de memoria caché.
Además, puede ser de aplicación lo siguiente: En algunas realizaciones, la memoria caché del primer agente, cuando hay un acierto para una línea de memoria caché en respuesta a recibir la orden de escritura y el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché no es el estado modificado o el estado exclusivo, para hacer que el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché sea un estado no válido y emitir la orden de escritura hacia la interconexión.
Otra realización de la invención puede incluir un procesador que comprende un descodificador para descodificar una instrucción para poner a cero una línea de memoria caché. El procesador también comprende una unidad de ejecución, acoplada al descodificador y en respuesta a la descodificación de la instrucción, para emitir una orden de escritura para iniciar una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria. El procesador también comprende una memoria caché coherente, acoplada a la unidad de ejecución, para recibir la orden de escritura, para determinar si hay un acierto en la memoria caché coherente en respuesta a la orden de escritura, para determinar si un estado de protocolo de coherencia de memoria caché de la línea de memoria caché acertada es un estado modificado o un estado exclusivo, para configurar una línea de memoria caché para indicar todo ceros cuando el estado de protocolo de coherencia de memoria caché es el estado modificado o el estado exclusivo, y para emitir la orden de escritura hacia una interconexión cuando hay una recepción de respuesta a fallo a la orden de escritura. La interconexión, en respuesta a la recepción de la orden de escritura, para emitir un sondeo a cada una de una pluralidad de otras memorias caché coherentes para las que se ha de determinar si hay un acierto. La interconexión, o la unidad de ejecución en respuesta a un mensaje desde la interconexión, para hacer que una línea de memoria caché en una de las memorias caché coherentes se configure para indicar todo ceros cuando la orden de escritura y el sondeo no hicieron que se realizara la escritura de ceros de línea de memoria caché.
Además, puede ser de aplicación lo siguiente: En algunas realizaciones, la memoria caché coherente también para hacer que el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché sea un estado no válido y emitir la orden de escritura hacia la interconexión cuando el estado de protocolo de coherencia de memoria caché de la línea de memoria caché acertada no es el estado modificado o el estado exclusivo. En algunas realizaciones, el descodificador y la unidad de ejecución son parte de un primer núcleo, y la pluralidad de memorias caché coherentes incluye una memoria caché coherente de un segundo núcleo.
Otra realización de la invención puede incluir un procesador que comprende un primer núcleo para emitir una orden de escritura en respuesta a la ejecución de una instrucción de puesta a cero de línea de memoria caché. El primer núcleo también comprende una memoria caché de nivel 1 (L1) acoplada para recibir la orden de escritura, para determinar si hay un acierto o un fallo en la memoria caché en respuesta a la orden de escritura, y para determinar, en respuesta al acierto, si un estado de protocolo de coherencia de memoria caché de una línea de memoria caché que acierta es uno que concede a la memoria caché autoridad para modificar la línea de memoria caché sin una radiodifusión a otras memorias caché. La memoria caché de L1 ha de configurar la línea de memoria caché para indicar todo ceros en respuesta al acierto cuando un estado de protocolo de coherencia de memoria caché de una línea de memoria caché que acierta es uno que concede a la memoria caché autoridad para modificar la línea de memoria caché sin una radiodifusión a otras memorias caché. La memoria caché de L1 para emitir la orden de escritura hacia la interconexión en respuesta al fallo. La interconexión, acoplada al primer núcleo y en respuesta a la orden de escritura, para emitir un sondeo a aquellas de una pluralidad de otras memorias caché para las que se ha de determinar si hay un acierto. El primer núcleo, la interconexión o el primer núcleo en respuesta a un mensaje desde la interconexión, para hacer que una línea de memoria caché en la memoria caché o una de la pluralidad de otras memorias caché se configure para indicar todo ceros cuando la orden de escritura y el sondeo no hicieron que se realizara la escritura de ceros de línea de memoria caché.
Además, puede ser de aplicación lo siguiente: En algunas realizaciones, la memoria caché de L1 también puede hacer que el estado de protocolo de coherencia de memoria caché no sea válido y emitir la orden de escritura hacia una interconexión en respuesta al acierto cuando el estado de protocolo de coherencia de memoria caché de la línea de memoria caché que acierta no es uno que concede a la memoria caché autoridad para modificar la línea de memoria caché sin una radiodifusión a otras memorias caché. En algunas realizaciones, cada una de la pluralidad de otras memorias caché, en respuesta al sondeo, también se puede implementar para determinar si hay un acierto o un fallo en esa otra memoria caché, y para determinar, en respuesta al acierto, si un estado de protocolo de coherencia de memoria caché de una línea de memoria caché que acierta en esa otra memoria caché es uno que concede a la memoria caché autoridad para modificar la línea de memoria caché sin una radiodifusión a otras memorias caché. Cada una de la pluralidad de otras memorias caché para: configurar una línea de memoria caché en esa memoria caché para indicar todo ceros y emitir un mensaje de respuesta que indica puesto a cero en respuesta al acierto cuando un estado de protocolo de coherencia de memoria caché de la línea de memoria caché que acierta en esa memoria caché es uno que concede a la memoria caché autoridad para modificar la línea de memoria caché que acierta en esa memoria caché sin una radiodifusión a otras memorias caché; y emitir un mensaje de respuesta que indica no puesto a cero en respuesta al fallo o en respuesta al acierto cuando el estado de protocolo de coherencia de memoria caché de la línea de memoria caché que acierta en esa memoria caché no es uno que concede a la memoria caché autoridad para modificar la línea de memoria caché que acierta en esa memoria caché. La interconexión para determinar realizar un seguimiento de la recepción de los mensajes de respuesta para determinar si el sondeo hizo que una de la pluralidad de otras memorias caché se configurara para indicar todo ceros.
Otra realización de la invención puede incluir un procesador que comprende un primer agente coherente, un segundo agente coherente y una interconexión. El primer agente está acoplado a la interconexión a través de una memoria caché del primer agente. El segundo agente está acoplado a la interconexión a través de una memoria caché del segundo agente. El primer agente ha de descodificar y ejecutar una instrucción cuya ejecución va a provocar una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria. El primer agente ha de emitir, a la interconexión, una orden. La interconexión, en respuesta a recibir la orden, ha de emitir un sondeo a la memoria caché del primer agente y la memoria caché del segundo agente. El primer agente, la interconexión o el primer agente en respuesta a un mensaje desde la interconexión, para hacer que una línea de memoria caché en la memoria caché del primer agente se configure para indicar todo ceros cuando el sondeo no hizo que se realizara la escritura de ceros de línea de memoria caché.
Otra realización de la invención puede incluir un procesador que comprende un descodificador para descodificar una instrucción para poner a cero una línea de memoria caché. El procesador también comprende una unidad de ejecución, acoplada al descodificador, para emitir una orden en respuesta a la descodificación de la instrucción. La interconexión, en respuesta a la recepción de la orden, para emitir un sondeo a cada una de una pluralidad de memorias caché coherentes para las que se ha de determinar si hay un acierto. La unidad de ejecución por sí sola, la interconexión o la unidad de ejecución en respuesta a un mensaje desde la interconexión, para hacer que una línea de memoria caché en una de la pluralidad de memorias caché coherentes acopladas a la unidad de ejecución se configure para indicar todo ceros cuando el sondeo no hizo que se realizara la escritura de ceros de línea de memoria caché.
Otra realización de la invención puede incluir un procesador que comprende un primer núcleo para emitir una orden en respuesta a la ejecución de una instrucción de puesta a cero de línea de memoria caché. Comprendiendo también el procesador una interconexión, acoplada a una memoria caché de nivel 3 (L3) que se comparte, una memoria caché de nivel 2 (L2) del primer núcleo y una memoria caché de nivel 1 (L1) del primer núcleo, para emitir, en respuesta a la orden, un sondeo a aquellas de una pluralidad de memorias caché coherentes para las que se ha de determinar si hay un acierto. En algunas realizaciones, la pluralidad de memorias caché coherentes incluye la memoria caché de L1 del primer núcleo, la memoria caché de L2 del primer núcleo, la memoria caché de L3, una memoria caché de L1 de un segundo núcleo y una L2 del segundo núcleo. El primer núcleo por sí solo, la interconexión o el primer núcleo en respuesta a un mensaje desde la interconexión, para hacer que una línea de memoria caché en una de la pluralidad de memorias caché coherentes acopladas al primer núcleo se configure para indicar todo ceros.
Fusión de PTE
Un núcleo de procesador puede soportar una característica de fusión de tablas de páginas de acuerdo con algunas realizaciones ilustrativas, permitiendo fusionar múltiples páginas de memoria más pequeñas para dar una única página de memoria más grande efectiva. En algunas realizaciones, por ejemplo, ocho páginas de memoria de 4 kB se pueden fusionar para dar una única página de memoria de 32 kB. En otras realizaciones, se pueden fusionar 16 páginas de memoria de 4 kB para dar una única página de memoria de 64 kB.
Las arquitecturas de ordenador actuales permiten páginas de memoria virtual de diversos tamaños. Por ejemplo, una arquitectura de x86 puede permitir páginas de 4 kB, 2 MB y 1 GB. Un procesador que implementa una arquitectura de este tipo puede proporcionar una memoria temporal de traducción adelantada (TLB) para cada uno de estos tamaños de página, proporcionando una correlación de direcciones virtuales con direcciones físicas. Cuando se intenta traducir una dirección virtual a una física, el procesador puede buscar cada una de las TLB aplicables para determinar si alguna de las mismas contiene una entrada correspondiente a la dirección virtual. Si se halla una entrada (es decir, un "acierto de TLB"), la entrada se recobra de la TLB en el que se halla esta, y se realiza la traducción desde una dirección virtual a una física.
Si no se halla entrada alguna correspondiente a la dirección virtual en cualquiera de las TLB presentes en el procesador (es decir, un "fallo de TLB"), el procesador puede intentar ubicar una entrada en la tabla de páginas que corresponde a la dirección virtual. Si se halla una entrada (es decir, un "acierto de tabla de páginas"), la entrada se recobra de la tabla de páginas y se inserta en la TLB apropiada. Entonces, se puede volver a intentar la traducción desde una dirección virtual a una física, dando un acierto de TLB.
Si no se halla entrada alguna correspondiente a la dirección virtual en la tabla de páginas (es decir, un "fallo de tabla de páginas"), esto puede indicar que actualmente no hay dirección física alguna en memoria que corresponda a la dirección virtual proporcionada. En este caso, el procesador puede hacer que la página correspondiente a la dirección virtual se cargue desde otro almacenamiento (por ejemplo, un disco) en memoria en una dirección física particular, y puede insertar una correlación desde la dirección virtual proporcionada a esta dirección física en la tabla de páginas. Un intento posterior de traducir la dirección virtual proporcionada dará como resultado un acierto de tabla de páginas, lo que hará que se añada una entrada correspondiente a la TLB apropiada.
Una dificultad con algunas arquitecturas de procesador actuales es una carencia de granularidad en los tamaños de página admisibles. Por ejemplo, como se ha explicado anteriormente, algunas arquitecturas de procesador permiten páginas de 4 kB, 2 MB y 1 GB, proporcionando una dispersión relativamente "gruesa" entre tamaños de página.
De acuerdo con algunas realizaciones, esta dificultad se puede abordar fusionando múltiples páginas más pequeñas, dando un tamaño de página intermedio que es, por ejemplo, más grande que 4 kB, pero más pequeño que 2 MB. En algunas realizaciones, esto se puede lograr fusionando de manera oportunista, por ejemplo, ocho páginas de 4 kB para crear una única página de 32 kB efectiva en determinadas condiciones. En algunas realizaciones, las ocho páginas de 4 kB se han de alinear con una frontera de dirección de 32 kB.
En algunas realizaciones, las ocho páginas de 4 kB han de ser contiguas en uno o ambos de espacios de direcciones (a) virtuales; y (b) físicas. Por ejemplo, algunas realizaciones pueden requerir que los bits 12 - 14 de la dirección virtual VA y la dirección física PA sean iguales entre sí. Es decir, en algunas realizaciones, se fusionan páginas más pequeñas para dar una más grande solo si, para cada una de las páginas más pequeñas, VA [14 : 12] == PA [14 : 12].
En algunas realizaciones, se fusionan páginas más pequeñas para dar una más grande solo si cada una de las páginas más pequeñas tiene los mismos bits de permiso. En algunas realizaciones, cuando se fusionan páginas más pequeñas para dar una más grande, el sistema operativo puede combinar los bits a los que se ha accedido / sucios correspondientes con cada una de las páginas más pequeñas para dar un único valor, por ejemplo, realizando una operación lógica O sobre todos los bits a los que se ha accedido / sucios de las páginas más pequeñas. En algunas realizaciones, cuando se fusionan páginas más pequeñas para dar una más grande, el sistema operativo puede establecer solo los bits sucios / a los que se ha accedido de página de 4 kB apropiados, realizando de ese modo un seguimiento de a qué porciones de la página más grande se ha accedido y / o cuáles están sucias.
La figura 47 es un diagrama que ilustra una característica de fusión de páginas que se puede incluir en un procesador de acuerdo con algunas realizaciones. El bloque 4700 representa una porción de una tabla de páginas que contiene ocho entradas 4701 - 4708, cada una de las cuales corresponde a páginas que tienen un tamaño de 4 kB. Como muestra la figura 47, las ocho entradas 4701 - 08 tienen direcciones contiguas, con los bits 12 - 14 de las ocho direcciones tomando los valores consecutivos 000, 001, 010, 011, 100, 101, 110 y 111. De acuerdo con algunas realizaciones, como se muestra en la figura 47, estas ocho páginas de 4 kB se pueden combinar en una página de 32 kB efectiva 4709.
En algunas realizaciones, la página de 32 kB efectiva 4709 se puede indicar incluyendo un bit adicional en cada entrada de tabla de páginas (PTE), indicando que las ocho páginas de 4 kB se deberían tratar como una página de 32 kB efectiva. En algunas realizaciones, la página de 32 kB efectiva 4709 se puede indicar mediante un bit adicional en la entrada de directorio de páginas correspondiente a las entradas de tabla de páginas 4701 - 08, indicando que las ocho páginas de 4 kB se deberían tratar como una página de 32 kB efectiva. En algunas realizaciones, en cada acceso a una de las ocho páginas de 4 kB, las direcciones alineadas y consecutivas de las ocho páginas de 4 kB pueden ser detectadas por el hardware y tratadas como una página de 32 kB efectiva.
Detectar si múltiples páginas más pequeñas cumplen con los criterios de fusión para dar una página más grande efectiva se puede lograr usando una diversidad de métodos. Por ejemplo, la figura 48 es un diagrama de flujo que ilustra un método para fusionar entradas de tabla de páginas para dar una única página efectiva. En un fallo de TLB en todas las TLB (por ejemplo, todas las TLB de 4 kB, de 32 kB, de 2 MB y de 1 GB) como se muestra en el recuadro 4801, el procesador puede recorrer las tablas de páginas de acuerdo con la estructura jerárquica del directorio de páginas (por ejemplo, usando la definición de tabla de páginas de x86), como se muestra en el recuadro 4802. Al determinar la ubicación de la entrada de tabla de páginas apropiada, el procesador puede recobrar entonces una línea de memoria caché que contiene múltiples entradas de tabla de páginas (el recuadro 4803). Por ejemplo, en algunas realizaciones, el procesador puede recobrar ocho entradas de tabla de páginas en una línea de memoria caché.
Tras la recuperación de las múltiples entradas de tabla de páginas en la línea de memoria caché, el procesador puede someter a prueba si las entradas de tabla de páginas corresponden a páginas que cumplen con los requisitos de fusión, como se muestra en 4804. Por ejemplo, el procesador puede someter a prueba si las direcciones de las páginas son consecutivas en memoria virtual y / o física. En algunas realizaciones, el procesador puede someter a prueba adicionalmente si los valores de los bits de permiso de las páginas son los mismos. En algunas realizaciones, el procesador puede determinar si las direcciones de las páginas están alineadas con una frontera de 32 kB.
Si las múltiples entradas de tabla de páginas en la línea de memoria caché cumplen con los criterios de fusión para dar una única página combinada (por ejemplo, una página de 32 kB efectiva), una entrada correspondiente a la página combinada se puede colocar en la TLB apropiada (por ejemplo, la TLB de 32 kB), y se invalidan las entradas en la línea de memoria caché que se combinaron para dar una única entrada, como se muestra en el recuadro 4805. Si las múltiples entradas de tabla de páginas no cumplen con los criterios de fusión para dar una única página combinada, entonces la traducción de dirección de virtual a física puede continuar según lo habitual, asignando una entrada en la TLB correspondiente a la TLB más pequeña (por ejemplo, de 4 kB), como se muestra en el recuadro 4806.
En algunas realizaciones, el procesador puede determinar si fusionar múltiples páginas más pequeñas basándose en los contenidos de la TLB relevante. Por ejemplo, después de un fallo de TLB de 4 kB, el procesador puede detectar si la página de 4 kB correspondiente se puede fusionar con entradas adicionales que están presentes en la TLB (por ejemplo, otras siete entradas de TLB correspondientes a páginas de 4 kB). Si la entrada correspondiente a la dirección proporcionada se puede combinar con otras para crear una página más grande efectiva (por ejemplo, una página de 32 kB efectiva), se invalidan las entradas de TLB existentes a combinar y se crea una entrada correspondiente a la página más grande efectiva en la TLB apropiada (por ejemplo, en la TLB correspondiente a páginas de 32 kB). En algunas realizaciones, no se usa una TLB separada correspondiente al tamaño de página efectiva combinada y, en su lugar, información relacionada con la traducción de dirección de virtual a física para páginas combinadas se almacena en la TLB correspondiente al tamaño de página más pequeño (por ejemplo, la TLB de páginas de 4 kB). En algunas realizaciones, esta información se puede codificar en la TLB correspondiente al tamaño de página más pequeño usando bits adicionales reservados para ese fin.
En algunas realizaciones, las características anteriores se pueden usar junto con un sistema operativo que asigna páginas usando un algoritmo optimizado para la fusión de páginas como se ha descrito anteriormente. Los sistemas operativos existentes tienen algoritmos diseñados para asignar, por ejemplo, páginas de 4 kB, de 2 MB y / o de 1 GB. Los sistemas operativos que se pueden usar junto con algunas realizaciones pueden usar algoritmos adicionales que están diseñados para asignar páginas combinadas (por ejemplo, páginas efectivas de 32 kB).
Las características de fusión de páginas descritas anteriormente no se limitan a combinar un número particular de páginas de un tamaño particular, sino que se pueden usar para fusionar números variables de páginas de diversos tamaños. Por ejemplo, algunas realizaciones pueden fusionar 16 páginas de 4 kB, formando páginas combinadas efectivas de 64 kB. Algunas realizaciones pueden soportar adicionalmente páginas combinadas efectivas de múltiples tamaños (por ejemplo, páginas combinadas de 32 kB y 64 kB). En algunas realizaciones, se pueden combinar páginas de múltiples tamaños (por ejemplo, páginas de 4 kB y de 32 kB) para dar una única página efectiva (por ejemplo, una página de 64 kB efectiva).
Arquitecturas de ordenador ilustrativas
Las figuras 49 - 52 son diagramas de bloques de arquitecturas de ordenador ilustrativas. Otros diseños y configuraciones de sistemas 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), procesadores de propósito general, procesador de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores (por ejemplo, coprocesadores de seguridad), procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos, aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes, o aceleradores de visión por ordenador), disposiciones de puertas programables en campo, o cualquier otro procesador o dispositivo de procesamiento, dispositivos de gráficos, dispositivos de videojuegos, descodificadores, microcontroladores, teléfonos celulares, reproductores de medios portátiles, dispositivos de mano y diversos otros dispositivos electrónicos, también son adecuados. En general, son, en general, adecuados una diversidad enorme de sistemas o dispositivos electrónicos capaces de incorporar un procesador y / u otra lógica de ejecución como se divulga en el presente documento.
Haciendo referencia a continuación a la figura 49, se muestra un diagrama de bloques de un sistema 4900 de acuerdo con una realización de la presente invención. El sistema 4900 puede incluir uno o más procesadores 4910, 4915, que están acoplados a un concentrador de controlador 4920. En una realización, el concentrador de controlador 4920 incluye un concentrador de controlador de memoria de gráficos (GMCH) 4990 y un Concentrador de Entrada / Salida (IOH) 4950 (que pueden estar en chips separados); el GMCH 4990 incluye controladores de memoria y de gráficos a los que están acoplados la memoria 4940 y un coprocesador 4945; el IOH 4950 acopla los dispositivos de entrada / salida (E / S) 4960 al GMCH 4990. Como alternativa, uno o ambos de los controladores de memoria y de gráficos están integrados dentro del procesador (como se describe en el presente documento), la memoria 4940 y el coprocesador 4945 están acoplados directamente al procesador 4910 y el concentrador de controlador 4920 en un único chip con el IOH 4950.
La naturaleza opcional de los procesadores 4915 adicionales se indica en la figura 49 con líneas de trazo discontinuo. Cada procesador 4910, 4915 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 3600.
La memoria 4940 puede ser, por ejemplo, una memoria de acceso aleatorio dinámica (DRAM), una memoria de cambio de fase (PCM) o una combinación de las dos. Para al menos una realización, el concentrador de controlador 4920 se comunica con el procesador o procesadores 4910, 4915 a través de un bus multipunto, tal como un bus de lado frontal (FSB), una interfaz punto a punto tal como la Interconexión QuickPath (QPI), o una conexión 4995 similar.
En una realización, el coprocesador 4945 es un procesador de propósito especial (incluyendo, por ejemplo, procesadores de propósito general, procesadores de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores tales como coprocesadores de seguridad, procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP), aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes o aceleradores de visión por ordenador), matrices de puertas programables en campo o cualquier otro procesador o dispositivo de procesamiento). En una realización, el concentrador de controlador 4920 puede incluir un acelerador de gráficos integrado.
Puede haber una diversidad de diferencias entre los recursos físicos 4910, 4915 en términos de un espectro de métricas de mérito que incluyen características arquitectónicas, microarquitectónicas, térmicas, de consumo de energía y similares.
En una realización, el procesador 4910 ejecuta instrucciones que controlan operaciones de procesamiento de datos de un tipo general. Incrustadas dentro de las instrucciones puede haber instrucciones de coprocesador. El procesador 4910 reconoce estas instrucciones de coprocesador como de un tipo que debería ser ejecutado por el coprocesador 4945 acoplado. Por consiguiente, el procesador 4910 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 4945. El coprocesador o coprocesadores 4945 aceptan y ejecutan las instrucciones de coprocesador recibidas.
Haciendo referencia a continuación a la figura 50, se muestra un diagrama de bloques de un primer sistema 5000 ilustrativo más específico de acuerdo con una realización de la presente invención. Como se muestra en la figura 50, el sistema de múltiples procesadores 5000 es un sistema de interconexión punto a punto e incluye un primer procesador 5070 y un segundo procesador 5080 acoplados a través de una interconexión punto a punto 5050. Cada uno de los procesadores 5070 y 5080 puede ser alguna versión del procesador 3600. En una realización de la invención, los procesadores 5070 y 5080 son, respectivamente, los procesadores 4910 y 4915, mientras que el coprocesador 5038 es el coprocesador 4945. En otra realización, los procesadores 5070 y 5080 son, respectivamente, el coprocesador 4910, el coprocesador 4945.
Los procesadores 5070 y 5080 se muestran incluyendo las unidades de controlador de memoria integrado (IMC) 5072 y 5082, respectivamente. El procesador 5070 también incluye, como parte de su unidad de controlador de bus, las interfaces punto a punto (P - P) 5076 y 5078; de manera similar, el segundo procesador 5080 incluye las interfaces P - P 5086 y 5088. Los procesadores 5070, 5080 pueden intercambiar información a través de una interfaz punto a punto (P - P) 5050 usando los circuitos de interfaz P - P 5078, 5088. Como se muestra en la figura 50, los IMC 5072 y 5082 acoplan los procesadores a memorias respectivas, en concreto, una memoria 5032 y una memoria 5034, que pueden ser porciones de memoria principal unidas de forma local a los procesadores respectivos.
Los procesadores 5070, 5080 pueden, cada uno, intercambiar información con un conjunto de chips 5090 a través de las interfaces P - P 5052, 5054 individuales usando los circuitos de interfaz punto a punto 5076, 5094, 5086, 5098. El conjunto de chips 5090 puede intercambiar, opcionalmente, información con el coprocesador 5038 a través de una interfaz de desempeño alto 5092. En una realización, el coprocesador 5038 es un procesador de propósito especial, tal como, por ejemplo, un procesador MIC de capacidad de proceso alta, un procesador de red o de comunicación, un motor de compresión, un procesador de gráficos, una GPGPU, un procesador integrado o similares.
Se puede incluir una memoria caché compartida (no mostrada) en cualquier procesador o fuera de ambos procesadores, pero conectada con los procesadores a través de una interconexión P - P, de tal modo que la información de la memoria caché local de uno u otro o ambos procesadores se puede almacenar en la memoria caché compartida si se coloca un procesador en un modo de bajo consumo.
El conjunto de chips 5090 se puede acoplar a un primer bus 5016 a través de una interfaz 5096. En una realización, el primer bus 5016 puede ser un bus de Interconexión de Componentes Periféricos (PCI), o un bus tal como un bus PCI Express u otro bus de interconexión de E / S de tercera generación, aunque el alcance de la presente invención no se limita a ello.
Como se muestra en la figura 50, diversos dispositivos de E / S 5014 se pueden acoplar al primer bus 5016, junto con un puente de bus 5018 que acopla el primer bus 5016 a un segundo bus 5020. En una realización, uno o más procesador o procesadores 5015 adicionales, tales como procesadores de propósito general, procesadores de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores (por ejemplo, coprocesadores de seguridad), procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP), aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes o aceleradores de visión por ordenador), matrices de puertas programables en campo o cualquier otro procesador o dispositivo de procesamiento, están acoplados al primer bus 5016. En una realización, el segundo bus 5020 puede ser un bus de recuento de patillas bajo (LPC). Diversos dispositivos se pueden acoplar a un segundo bus 5020 incluyendo, por ejemplo, un teclado y / o ratón 5022, unos dispositivos de comunicación 5027 y una unidad de almacenamiento 5028 tal como una unidad de disco u otro dispositivo de almacenamiento masivo que puede incluir instrucciones / código y datos 5030, en una realización. Además, una E / S de audio 5024 se puede acoplar al segundo bus 5020. Obsérvese que son posibles otras arquitecturas. Por ejemplo, en lugar de la arquitectura punto a punto de la figura 50, un sistema puede implementar un bus multipunto u otra arquitectura de este tipo.
Haciendo referencia a continuación a la figura 51, se muestra un diagrama de bloques de un segundo sistema 5100 ilustrativo más específico de acuerdo con una realización de la presente invención. Elementos semejantes en las figuras 50 y 51 llevan números de referencia semejantes, y ciertos aspectos de la figura 50 se han omitido de la figura 51 con el fin de evitar obstaculizar otros aspectos de la figura 51.
La figura 51 ilustra que los procesadores 5070, 5080 pueden incluir la memoria integrada y la lógica de control ("CL") de E / S 5072 y 5082, respectivamente. Por lo tanto, las CL 5072, 5082 incluyen unidades de controlador de memoria integrada e incluyen lógica de control de E / S. La figura 51 ilustra que no solo las memorias 5032, 5034 están acopladas a la CL 5072, 5082, sino también que los dispositivos de E / S 5114 también están acoplados a la lógica de control 5072, 5082. Los dispositivos de E / S heredados 5115 están acoplados al conjunto de chips 5090.
Haciendo referencia a continuación a la figura 52, se muestra un diagrama de bloques de un SoC 5200 de acuerdo con una realización de la presente invención. Elementos semejantes en la figura 36 llevan números de referencia semejantes. Asimismo, los recuadros con líneas de trazo discontinuo son características opcionales en SoC más avanzados. En la figura 52, una unidad o unidades de interconexión 5202 está acoplada a: un procesador de aplicación 5210 que incluye un conjunto de uno o más núcleos 3602A - N, que incluyen las unidades de memoria caché 3604A - N y la unidad o unidades de memoria caché compartida 3606; una unidad de agente de sistema 3610; una unidad o unidades de controlador de bus 3616; una unidad o unidades de controlador de memoria integrada 3614; un conjunto o uno o más coprocesadores 5220 que pueden incluir lógica de gráficos integrada, un procesador de imagen, un procesador de audio y un procesador de vídeo, procesadores de propósito general, procesadores de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores de seguridad, procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP), aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes o aceleradores de visión por ordenador), matrices de puertas programables en campo o cualquier otro procesador o dispositivo de procesamiento; una unidad de memoria de acceso aleatorio estática (SRAM) 5230; una unidad de acceso directo a memoria (DMA) 5232; y una unidad de visualización 5240 para acoplar a uno o más visualizadores externos. En una realización, el coprocesador o coprocesadores 5220 incluyen 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 capacidad de proceso alta, un procesador integrado o similares.
Realizaciones de los mecanismos divulgados en el presente documento se pueden implementar en hardware, software, firmware o una combinación de tales enfoques de implementación. Realizaciones de la invención se pueden implementar como programas informáticos o código de programa que se ejecutan en sistemas programables que comprenden al menos un procesador, incluyendo, por ejemplo, procesadores de propósito general, procesadores de servidor o elementos de procesamiento para su uso en un entorno de servidor, coprocesadores (por ejemplo, coprocesadores de seguridad), procesadores MIC de capacidad de proceso alta, GPGPU, aceleradores (tales como, por ejemplo, aceleradores de gráficos o unidades de procesamiento de señales digitales (DSP), aceleradores criptográficos, aceleradores de función fija, aceleradores de aprendizaje automático, aceleradores de interconexión de redes o aceleradores de visión por ordenador), matrices de puertas programables en campo o cualquier otro procesador o dispositivo de procesamiento, un sistema de almacenamiento (incluyendo elementos de almacenamiento y / o memoria volátil y no volátil), al menos un dispositivo de entrada y al menos un dispositivo de salida.
Se puede aplicar código de programa, tal como el código 5030 ilustrado en la figura 50, 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. Para los propósitos de esta solicitud, un sistema de procesamiento incluye cualquier sistema que tiene un procesador, tal como, por ejemplo; un procesador de señales digitales (DSP), un microcontrolador, un circuito integrado de específico de la aplicación (ASIC) o un microprocesador.
El código 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 se puede implementar en lenguaje ensamblador o máquina, si se desea. De hecho, el alcance de los mecanismos descritos en el presente documento no se limita a lenguaje de programación particular alguno. En cualquier caso, el lenguaje puede ser un lenguaje compilado o interpretado.
Uno o más aspectos de al menos una realización se pueden implementar mediante instrucciones representativas almacenadas en un medio legible por máquina que representa diversas lógicas dentro del procesador que, cuando son leídas por una máquina, hacen que la máquina elabore una lógica para realizar las técnicas descritas en el presente documento. Tales representaciones, conocidas como "núcleos de IP", se pueden almacenar en un medio tangible legible por máquina y suministrarse a diversos clientes o instalaciones de fabricación para cargarse en las máquinas de elaboración que realmente hacen la lógica o el procesador.
Tales medios de almacenamiento legibles por máquina pueden incluir, sin limitación, disposiciones tangibles y no transitorias de artículos fabricados o formados por una máquina o dispositivo, incluyendo medios de almacenamiento tales como discos duros, cualquier otro tipo de disco, incluyendo disquetes, discos ópticos, discos compactos -memorias de solo lectura (CD-ROM), discos compactos regrabables (CD-RW) 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 medios adecuado para almacenar instrucciones electrónicas.
En consecuencia, realizaciones de la invención también incluyen medios legibles por máquina tangibles y no transitorios que contienen instrucciones o que contienen datos de diseño, tales como el Lenguaje de Descripción de Hardware (HDL), que define estructuras, circuitos, aparatos, procesadores y / o características de sistema descritos en el presente documento. Tales realizaciones también se pueden denominar productos de programa.
Las instrucciones a ejecutar por un núcleo de procesador de acuerdo con realizaciones de la invención se pueden materializar en un "formato de instrucción apto para vectores genérico" que se detalla a continuación. En otras realizaciones, no se utiliza un formato de este tipo y se usa otro formato de instrucción, sin embargo, la descripción a continuación de los registros de máscara de escritura, diversas transformaciones de datos (agitación, radiodifusión, etc.), direccionamiento, etc., es, en general, aplicable a la descripción de las realizaciones de la instrucción o instrucciones anteriores. Adicionalmente, a continuación se detallan sistemas, arquitecturas y canalizaciones ilustrativos. Se pueden ejecutar instrucciones en tales sistemas, arquitecturas y canalizaciones, pero no se limitan a las detalladas.
Conjuntos de instrucciones
Un conjunto de instrucciones puede incluir uno o más formatos de instrucción. Un formato de instrucción dado puede definir diversos campos (por ejemplo, número de bits, ubicación de bits) para especificar, entre otras cosas, la operación a realizar (por ejemplo, un código de operación) y el operando u operandos en los que esa operación se ha de realizar y / u otro campo o campos de datos (por ejemplo, máscara). Algunos formatos de instrucción se descomponen adicionalmente a través de la definición de plantillas (o subformatos) de instrucción. Por ejemplo, las plantillas de instrucción de un formato de instrucción dado se pueden definir para tener diferentes subconjuntos de los campos del formato de instrucción (los campos incluidos están habitualmente en el mismo orden, pero al menos algunos tienen diferentes posiciones de bits debido a que hay menos campos incluidos) y / o definirse para hacer que un campo dado se interprete de forma diferente. Por lo tanto, cada instrucción de una ISA se expresa usando un formato de instrucción dado (y, si se define, en una dada de las plantillas de instrucción de ese formato de instrucción) e incluye campos para especificar la operación y los operandos. Por ejemplo, una instrucción ADD ilustrativa tiene un código de operación específico y un formato de instrucción que incluye un campo de código de operación para especificar ese código de operación y campos de operando para seleccionar operandos (origen 1 / destino y origen 2); y una aparición de esta instrucción ADD en un flujo de instrucciones tendrá contenidos específicos en los campos de operando que seleccionan operandos específicos. Se ha lanzado y / o publicado un conjunto de ampliaciones de SIMD denominadas Ampliaciones de Vector Avanzadas (AVX, AVX2 y AVX-512) y que usan el esquema de codificación de Ampliaciones de Vector (VEX) (por ejemplo, véanse los documentos 64 and IA -32 A rch itectures Software Developer's M anual de Intel®, septiembre de 2014; A dvanced Vector Extensions P rogram m ing Reference de Intel®, octubre de 2014; y A rchitecture Instruction S et Extensions Program m ing Reference de Intel®, octubre de 2016).
Formatos de instrucción ilustrativos
Realizaciones de la instrucción o instrucciones descritas en el presente documento se pueden materializar en diferentes formatos. Adicionalmente, a continuación se detallan sistemas, arquitecturas y canalizaciones ilustrativos. Se pueden ejecutar realizaciones de la instrucción o instrucciones en tales sistemas, arquitecturas y canalizaciones, pero no se limitan a las detalladas.
Formato de instrucción apto para vectores genérico
Un formato de instrucción apto para vectores es un formato de instrucción que es adecuado para instrucciones de vector (por ejemplo, hay ciertos campos específicos de las operaciones con vectores). Aunque se describen realizaciones en las que se soportan tanto operaciones con vectores como operaciones con escalares a través del formato de instrucción apto para vectores, realizaciones alternativas usan solo operaciones con vectores en el formato de instrucción apto para vectores.
Las figuras 53A - 53B son diagramas de bloques que ilustran un formato de instrucción apto para vectores genérico y plantillas de instrucción del mismo de acuerdo con realizaciones de la invención. La figura 53A es un diagrama de bloques que ilustra un formato de instrucción apto para vectores genérico y plantillas de instrucción de clase A del mismo de acuerdo con realizaciones de la invención; mientras que la figura 53B es un diagrama de bloques que ilustra el formato de instrucción apto para vectores genérico y plantillas de instrucción de clase B del mismo de acuerdo con realizaciones de la invención. Específicamente, un formato de instrucción apto para vectores genérico 5300 para el que se definen plantillas de instrucción de clase A y de clase B, ambas de las cuales incluyen plantillas de instrucción sin acceso a memoria 5305 y plantillas de instrucción de acceso a memoria 5320. La expresión genérica en el contexto del formato de instrucción apto para vectores se refiere a que el formato de instrucción no está vinculado a conjunto de instrucciones específico alguno.
Aunque se describirán realizaciones de la invención en las que el formato de instrucción apto para vectores soporta lo siguiente: una longitud (o tamaño) de operando de vectores de 64 bytes con anchuras (o tamaños) de elemento de datos de 32 bits (4 bytes) o 64 bits (8 bytes) (y, por lo tanto, un vector de 64 bytes consiste o bien en 16 elementos de tamaño de palabra doble o bien, como alternativa, en 8 elementos de tamaño de palabra cuádruple); una longitud (o tamaño) de operando de vectores de 64 bytes con anchuras (o tamaños) de elemento de datos de 16 bits (2 bytes) u 8 bits (1 byte); una longitud (o tamaño) de operando de vectores de 32 bytes con anchuras (o tamaños) de elemento de datos de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) u 8 bits (1 byte); y una longitud (o tamaño) de operando de vectores de 16 bytes con anchuras (o tamaños) de elemento de datos de 32 bits (4 bytes), 64 bits (8 bytes), 16 bits (2 bytes) u 8 bits (1 byte); realizaciones alternativas pueden soportar más, menos y / o diferentes tamaños de operando de vectores (por ejemplo, operandos de vectores de 256 bytes) con más, menos o diferentes anchuras de elemento de datos (por ejemplo, anchuras de elemento de datos de 128 bits (16 bytes)).
Las plantillas de instrucción de clase A en la figura 53A incluyen: 1) dentro de las plantillas de instrucción sin acceso a memoria 5305, se muestra una plantilla de instrucción de operación de tipo control de redondeo completo sin acceso a memoria 5310 y una plantilla de instrucción de operación de tipo transformación de datos sin acceso a memoria 5315; y 2) dentro de las plantillas de instrucción de acceso a memoria 5320, se muestra una plantilla de instrucción temporal de acceso a memoria 5325 y una plantilla de instrucción no temporal de acceso a memoria 5330. Las plantillas de instrucción de clase B en la figura 53B incluyen: 1) dentro de las plantillas de instrucción sin acceso a memoria 5305, se muestra una plantilla de instrucción de operación de tipo control de redondeo parcial de control de máscara de escritura sin acceso a memoria 5312 y una plantilla de instrucción de operación de tipo vsize de control de máscara de escritura sin acceso a memoria 5317; y 2) dentro de las plantillas de instrucción de acceso a memoria 5320, se muestra una plantilla de instrucción de control de máscara de escritura de acceso a memoria 5327.
El formato de instrucción apto para vectores genérico 5300 incluye los campos siguientes enumerados a continuación en el orden ilustrado en las figuras 53A - 53B.
Campo de formato 5340 - un valor específico (un valor de identificador de formato de instrucción) en este campo identifica de forma exclusiva el formato de instrucción apto para vectores y, por lo tanto, apariciones de instrucciones en el formato de instrucción apto para vectores en flujos de instrucciones. En este sentido, este campo es opcional en el sentido de que el mismo no es necesario para un conjunto de instrucciones que solo tiene el formato de instrucción apto para vectores genérico.
Campo de operación base 5342 - su contenido distingue diferentes operaciones base.
Campo de índice de registro 5344 - su contenido, directamente o a través de generación de direcciones, especifica las ubicaciones de los operandos de origen y de destino, ya estén las mismas en registros o en memoria. Estos incluyen un número suficiente de bits para seleccionar N registros de entre un archivo de registro P x Q (por ejemplo, 32 x 512, 16 x 128, 32 x 1024, 64 x 1024). Mientras que, en una realización, N puede ser hasta tres orígenes y un registro de destino, realizaciones alternativas pueden soportar más o menos orígenes y registros de destino (por ejemplo, pueden soportar hasta dos orígenes en donde uno de estos orígenes también actúa como el destino, puede soportar hasta tres orígenes en donde uno de estos orígenes también actúa como el destino, puede soportar hasta dos orígenes y un destino).
Campo de modificación 5346 - su contenido distingue apariciones de instrucciones en el formato de instrucción de vector genérico que especifican el acceso a memoria con respecto a las que no lo hacen; es decir, entre las plantillas de instrucción sin acceso a memoria 5305 y las plantillas de instrucción de acceso a memoria 5320. Las operaciones de acceso a memoria leen y / o escriben en la jerarquía de memoria (en algunos casos, especificando las direcciones de origen y / o destino usando valores en registros), mientras que las operaciones sin acceso a memoria no lo hacen (por ejemplo, el origen y los destinos son registros). Aunque, en una realización, este campo también selecciona entre tres formas diferentes de realizar cálculos de dirección de memoria, realizaciones alternativas pueden soportar más, menos o diferentes formas de realizar cálculos de dirección de memoria.
Campo de operación de amplificación 5350 - su contenido distingue cuál de una diversidad de operaciones diferentes se ha de realizar además de la operación base. Este campo es específico de contexto. En una realización de la invención, este campo se divide en un campo de clase 5368, un campo de alfa 5352 y un campo de beta 5354. El campo de operación de amplificación 5350 permite que grupos comunes de operaciones se realicen en una única instrucción, en lugar de 2, 3 o 4 instrucciones.
Campo de ajuste a escala 5360 - su contenido prevé el ajuste a escala del contenido del campo de índice para la generación de direcciones de memoria (por ejemplo, para la generación de direcciones que usa 2scale * índice base).
Campo de desplazamiento 5362A - su contenido se usa como parte de la generación de direcciones de memoria (por ejemplo, para la generación de direcciones que usa 2scale * índice base desplazamiento).
Campo de factor de desplazamiento 5362B (obsérvese que la yuxtaposición del campo de desplazamiento 5362A directamente sobre el campo de factor de desplazamiento 5362B indica que se usa uno u otro) - su contenido se usa como parte de la generación de direcciones; este especifica un factor de desplazamiento que se ha de ajustar a escala por el tamaño de un acceso a memoria (N) - en donde N es el número de bytes en el acceso a memoria (por ejemplo, para la generación de direcciones que usa 2scale * índice base desplazamiento ajustado a escala). Los bits redundantes de orden inferior se ignoran y, por lo tanto, el contenido del campo de factor de desplazamiento es multiplicado por el tamaño total de operandos de memoria (N) con el fin de generar el desplazamiento final a usar en el cálculo de una dirección efectiva. El valor de N es determinado por el hardware de procesador en tiempo de ejecución basándose en el campo de código de operación completo 5374 (descrito más adelante en el presente documento) y el campo de manipulación de datos 5354C. El campo de desplazamiento 5362A y el campo de factor de desplazamiento 5362B son opcionales en el sentido de que estos no se usan para las plantillas de instrucción sin acceso a memoria 5305 y / o diferentes realizaciones pueden implementar solo uno o ninguno de los dos.
Campo de anchura de elemento de datos 5364 - su contenido distingue cuál de un número de anchuras de elemento de datos se ha de usar (en algunas realizaciones para todas las instrucciones; en otras realizaciones para solo algunas de las instrucciones). Este campo es opcional en el sentido de que el mismo no es necesario si solo se soporta una anchura de elemento de datos y / o se soportan anchuras de elemento de datos usando algún aspecto de los códigos de operación.
Campo de máscara de escritura 5370 - su contenido controla, de una forma por posición de elemento de datos, si esa posición de elemento de datos en el operando de vector de destino refleja el resultado de la operación base y la operación de amplificación. Las plantillas de instrucción de clase A soportan una fusión - enmascaramiento de escritura, mientras que las plantillas de instrucción de clase B soportan tanto fusión - enmascaramiento de escritura como puesta a cero - enmascaramiento de escritura. Cuando se fusiona, las máscaras de vector permiten que cualquier conjunto de elementos en el destino se proteja frente a actualizaciones durante la ejecución de cualquier operación (especificada por la operación base y la operación de amplificación); en otra realización, conservando el valor antiguo de cada elemento del destino en donde el bit de máscara correspondiente tiene un 0. Por el contrario, cuando se pone a cero, las máscaras de vector permiten 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 amplificación); en una realización, un elemento del destino se establece a 0 cuando el bit de máscara correspondiente tiene un valor de 0. Un subconjunto de esta funcionalidad es la capacidad de controlar la longitud de vector de la operación que se está realizando (es decir, la amplitud de elementos que se están modificando, desde el primero hasta el último); sin embargo, no es necesario que los elementos que se modifican sean consecutivos. Por lo tanto, el campo de máscara de escritura 5370 prevé operaciones con vectores parciales, incluyendo cargas, almacenamientos, aritmética, lógica, etc. Aunque se describen realizaciones de la invención en las que el contenido del campo de máscara de escritura 5370 selecciona uno de un número de registros de máscara de escritura a usar (y, por lo tanto, el contenido del campo de máscara de escritura 5370 identifica indirectamente ese enmascaramiento a realizar), realizaciones alternativas permiten, en su lugar o adicionalmente, que el contenido del campo de escritura de máscara 5370 especifique directamente el enmascaramiento a realizar.
Campo de inmediato 5372 - su contenido prevé la especificación de un inmediato. Este campo es opcional en el sentido de que el mismo no está presente en una implementación del formato apto para vectores genérico que no soporta un inmediato y el mismo no está presente en instrucciones que no usan un inmediato.
Campo de clase 5368 - su contenido distingue entre diferentes clases de instrucciones. Con referencia a las figuras 53A - B, los contenidos de este campo seleccionan entre instrucciones de clase A y de clase B. En las figuras 53A - B, los cuadrados de esquinas redondeadas se usan para indicar que un valor específico está presente en un campo (por ejemplo, la clase A 5368A y la clase B 5368B para el campo de clase 5368, respectivamente, en las figuras 53A - B).
Plantillas de instrucción de la clase A
En el caso de las plantillas de instrucción sin acceso a memoria 5305 de la clase A, el campo de alfa 5352 se interpreta como un campo de RS 5352A, cuyo contenido distingue cuál de los diferentes tipos de operación de amplificación se ha de realizar (por ejemplo, el redondeo 5352A.1 y la transformación de datos 5352A.2 se especifican respectivamente para las plantillas de instrucción de operación de tipo redondeo sin acceso a memoria 5310 y de operación de tipo transformación de datos sin acceso a memoria 5315), mientras que el campo de beta 5354 distingue cuál de las operaciones del tipo especificado se ha de realizar. En las plantillas de instrucción sin acceso a memoria 5305, el campo de ajuste a escala 5360, el campo de desplazamiento 5362A y el campo de ajuste a escala de desplazamiento 5362B no están presentes.
Plantillas de instrucción sin acceso a memoria - operación de tipo control de redondeo completo
En la plantilla de instrucción de operación de tipo control de redondeo completo sin acceso a memoria 5310, el campo de beta 5354 se interpreta como un campo de control de redondeo 5354A, cuyo contenido o contenidos proporcionan un redondeo estático. Mientras que, en las realizaciones descritas de la invención, el campo de control de redondeo 5354A incluye un campo de supresión de todas las excepciones de punto flotante (SAE) 5356 y un campo de control de operación de redondeo 5358, realizaciones alternativas pueden soportar poder codificar ambos de estos conceptos en el mismo campo o solo tener uno o el otro de estos conceptos / campos (por ejemplo, pueden tener solo el campo de control de operación de redondeo 5358).
Campo de SAE 5356 - su contenido distingue si se deshabilita o no la notificación de sucesos de excepción; cuando el contenido del campo de SAE 5356 indica que la supresión está habilitada, una instrucción dada no notifica tipo alguno de indicador de excepción de punto flotante y no genera manejador de excepciones de punto flotante alguno.
Campo de control de operación de redondeo 5358 - su contenido distingue cuál de un grupo de operaciones de redondeo se ha de realizar (por ejemplo, Redondeo hacia arriba, Redondeo hacia abajo, Redondeo hacia cero y Redondeo al más cercano). Por lo tanto, el campo de control de operación de redondeo 5358 prevé el cambio del modo de redondeo de una forma por instrucción. En una realización de la invención en la que un procesador incluye un registro de control para especificar modos de redondeo, el contenido del campo de control de operación de redondeo 5350 anula ese valor de registro.
Plantillas de instrucción sin acceso a memoria - operación de tipo transformación de datos
En la plantilla de instrucción de operación de tipo transformación de datos sin acceso a memoria 5315, el campo de beta 5354 se interpreta como un campo de transformación de datos 5354B, cuyo contenido distingue cuál de un número de transformaciones de datos se ha de realizar (por ejemplo, sin transformación de datos, agitación, radiodifusión).
En el caso de una plantilla de instrucción de acceso a memoria 5320 de la clase A, el campo de alfa 5352 se interpreta como un campo de sugerencia de expulsión 5352B, cuyo contenido distingue cuál de las sugerencias de expulsión se ha de usar (en la figura 53A, temporal 5352B.1 y no temporal 5352B.2 se especifican respectivamente para la plantilla de instrucción temporal de acceso a memoria 5325 y la plantilla de instrucción no temporal de acceso a memoria 5330), mientras que el campo de beta 5354 se interpreta como un campo de manipulación de datos 5354C, cuyo contenido distingue cuál de un número de operaciones de manipulación de datos (también conocidas como primitivas) se ha de realizar (por ejemplo, sin manipulación; radiodifusión; conversión ascendente de un origen; y conversión descendente de un destino). Las plantillas de instrucción de acceso a memoria 5320 incluyen el campo de ajuste a escala 5360 y, opcionalmente, el campo de desplazamiento 5362A o el campo de ajuste a escala de desplazamiento 5362B.
Las instrucciones de memoria de vectores realizan cargas de vector desde, y almacenamientos de vectores en, la memoria, con soporte de conversión. Al igual que con las instrucciones de vector ordinarias, las instrucciones de memoria de vectores transfieren datos desde / hacia la memoria de una forma por elementos de datos, en la que los elementos que se transfieren realmente son dictados por los contenidos de la máscara de vector que se selecciona como la máscara de escritura.
Plantillas de instrucción de acceso a memoria - temporales
Los datos temporales son datos que es probable que se reutilicen lo suficientemente pronto como para beneficiarse de un almacenamiento en memoria caché. Sin embargo, esto es una sugerencia, y diferentes procesadores pueden implementarlo de diferentes maneras, incluyendo ignorar la sugerencia por completo.
Plantillas de instrucción de acceso a memoria - no temporales
Los datos no temporales son datos que es poco probable que se reutilicen lo suficientemente pronto como para beneficiarse del almacenamiento en memoria caché en la memoria caché de primer nivel y se les debería dar prioridad para la expulsión. Sin embargo, esto es una sugerencia, y diferentes procesadores pueden implementarlo de diferentes maneras, incluyendo ignorar la sugerencia por completo.
Plantillas de instrucción de la clase B
En el caso de las plantillas de instrucción de la clase B, el campo de alfa 5352 se interpreta como un campo de control de máscara de escritura (Z) 5352C, cuyo contenido distingue si el enmascaramiento de escritura controlado por el campo de máscara de escritura 5370 debería ser una fusión o una puesta a cero.
En el caso de las plantillas de instrucción sin acceso a memoria 5305 de la clase B, parte del campo de beta 5354 se interpreta como un campo de RL 5357A, cuyo contenido distingue cuál de los diferentes tipos de operación de amplificación se ha de realizar (por ejemplo, el redondeo 5357A.1 y la longitud de vector (VSIZE) 5357A.2 se especifican respectivamente para la plantilla de instrucción de operación de tipo control de redondeo parcial de control de máscara de escritura sin acceso a memoria 5312 y la plantilla de instrucción de operación de tipo VSIZE de control de máscara de escritura sin acceso a memoria 5317), mientras que el resto del campo de beta 5354 distingue cuál de las operaciones del tipo especificado se ha de realizar. En las plantillas de instrucción sin acceso a memoria 5305, el campo de ajuste a escala 5360, el campo de desplazamiento 5362A y el campo de ajuste a escala de desplazamiento 5362B no están presentes.
En la plantilla de instrucción de operación de tipo control de redondeo parcial de control de máscara de escritura sin acceso a memoria 5310, el resto del campo de beta 5354 se interpreta como un campo de operación de redondeo 5359A y la notificación de sucesos de excepción está deshabilitada (una instrucción dada no notifica tipo alguno de indicador de excepción de punto flotante y no genera manejador de excepción de punto flotante alguno).
Campo de control de operación de redondeo 5359A - al igual que el campo de control de operación de redondeo 5358, su contenido distingue cuál de un grupo de operaciones de redondeo se ha de realizar (por ejemplo, Redondeo hacia arriba, Redondeo hacia abajo, Redondeo hacia cero y Redondeo al más cercano). Por lo tanto, el campo de control de operación de redondeo 5359A prevé el cambio del modo de redondeo de una forma por instrucción. En una realización de la invención en la que un procesador incluye un registro de control para especificar modos de redondeo, el contenido del campo de control de operación de redondeo 5350 anula ese valor de registro.
En la plantilla de instrucción de operación de tipo VSIZE de control de máscara de escritura sin acceso a memoria 5317, el resto del campo de beta 5354 se interpreta como un campo de longitud de vector 5359B, cuyo contenido distingue cuál de un número de longitudes de vector de datos se ha de realizar en (por ejemplo, 128, 256 o 512 bytes).
En el caso de una plantilla de instrucción de acceso a memoria 5320 de la clase B, parte del campo de beta 5354 se interpreta como un campo de radiodifusión 5357B, cuyo contenido distingue si se ha de realizar o no la operación de manipulación de datos de tipo radiodifusión, mientras que el resto del campo de beta 5354 se interpreta como el campo de longitud de vector 5359B. Las plantillas de instrucción de acceso a memoria 5320 incluyen el campo de ajuste a escala 5360 y, opcionalmente, el campo de desplazamiento 5362A o el campo de ajuste a escala de desplazamiento 5362B.
Con respecto al formato de instrucción apto para vectores genérico 5300, se muestra un campo de código de operación completo 5374 que incluye el campo de formato 5340, el campo de operación base 5342 y el campo de anchura de elemento de datos 5364. Aunque se muestra una realización en la que el campo de código de operación completo 5374 incluye todos estos campos, el campo de código de operación completo 5374 incluye menos de la totalidad de estos campos en realizaciones que no soportan la totalidad de los mismos. El campo de código de operación completo 5374 proporciona el código de operación (código-op).
El campo de operación de amplificación 5350, el campo de anchura de elemento de datos 5364 y el campo de máscara de escritura 5370 permiten que estas características se especifiquen de una forma por instrucción en el formato de instrucción apto para vectores genérico.
La combinación de campo de máscara de escritura y campo de anchura de elemento de datos crea instrucciones con tipo en el sentido de que los mismos permiten que la máscara se aplique basándose en diferentes anchuras de elemento de datos.
Las diversas plantillas de instrucción halladas dentro de la clase A y la clase B son beneficiosas en diferentes situaciones. En algunas realizaciones de la invención, diferentes procesadores o diferentes núcleos dentro de un procesador pueden soportar solo la clase A, solo la clase B o ambas clases. Por ejemplo, un núcleo fuera de orden de propósito general de desempeño alto previsto para informática de propósito general puede soportar solo la clase B, un núcleo previsto principalmente para informática (de capacidad de proceso) científica y / o de gráficos puede soportar solo la clase A, y un núcleo previsto para que ambos puedan soportar ambas (por supuesto, un núcleo que tiene una combinación de plantillas e instrucciones a partir de ambas clases, pero no todas las plantillas e instrucciones de ambas clases están dentro del ámbito de la invención). Asimismo, un único procesador puede incluir múltiples núcleos, la totalidad de los cuales soportan la misma clase o en los que diferentes núcleos soportan diferentes clases. Por ejemplo, en un procesador con núcleos de gráficos y de propósito general separados, uno de los núcleos de gráficos previstos principalmente para informática científica y / o de gráficos puede soportar solo la clase A, mientras que uno o más de los núcleos de propósito general pueden ser núcleos de propósito general de desempeño alto con ejecución fuera de orden y cambio de nombre de registro previstos para informática de propósito general que soportan solo la clase B. Otro procesador que no tiene un núcleo de gráficos separado, puede incluir uno o más núcleos en orden o fuera de orden de propósito general que soportan tanto la clase A como la clase B. Por supuesto, las características a partir de una clase también se pueden implementar en la otra clase en diferentes realizaciones de la invención. Los programas escritos en un lenguaje de alto nivel se pondrían (por ejemplo, compilados justo a tiempo o compilados de forma estática) en una diversidad de formas ejecutables diferentes, incluyendo: 1) una forma que solo tiene instrucciones de la clase o clases soportadas por el procesador de destino para su ejecución; o 2) una forma que tiene rutinas alternativas escritas usando diferentes combinaciones de las instrucciones de todas las clases y que tiene un código de flujo de control que selecciona las rutinas a ejecutar basándose en las instrucciones soportadas por el procesador que está ejecutando actualmente el código.
Formato de instrucción apto para vectores específico ilustrativo
La figura 54A es un diagrama de bloques que ilustra un formato de instrucción apto para vectores específico ilustrativo de acuerdo con realizaciones de la invención. La figura 54A muestra un formato de instrucción apto para vectores específico 5400 que es específico en el sentido de que este especifica la ubicación, el tamaño, la interpretación y el orden de los campos, así como valores para algunos de esos campos. El formato de instrucción apto para vectores específico 5400 se puede usar para ampliar el conjunto de instrucciones de x86 y, por lo tanto, algunos de los campos son similares o iguales a los usados en el conjunto de instrucciones de x86 existente y una ampliación del mismo (por ejemplo, AVX). Este formato sigue siendo coherente con el campo de codificación de prefijo, el campo de bytes de código de operación real, el campo de MOD R/M, el campo de SIB, el campo de desplazamiento y los campos de inmediato del conjunto de instrucciones de x86 existente con ampliaciones. Se ilustran los campos a partir de la figura 53 con los que se correlacionan los campos a partir de la figura 54A.
Se debería entender que, aunque las realizaciones de la invención se describen con referencia al formato de instrucción apto para vectores específico 5400 en el contexto del formato de instrucción apto para vectores genérico 5300 para fines ilustrativos, la invención no se limita al formato de instrucción apto para vectores específico 5400 excepto en donde se reivindique. Por ejemplo, el formato de instrucción apto para vectores genérico 5300 contempla una diversidad de tamaños posibles para los diversos campos, mientras que el formato de instrucción apto para vectores específico 5400 se muestra como si tuviera campos de tamaños específicos. A modo de ejemplo específico, aunque el campo de anchura de elemento de datos 5364 se ilustra como un campo de un bit en el formato de instrucción apto para vectores específico 5400, la invención no se limita a ello (es decir, el formato de instrucción apto para vectores genérico 5300 contempla otros tamaños del campo de anchura de elemento de datos 5364).
El formato de instrucción apto para vectores genérico 5300 incluye los campos siguientes enumerados a continuación en el orden ilustrado en la figura 54A.
Prefijo de EVEX (Bytes 0 - 3) 5402 - está codificado en una forma de cuatro bytes.
Campo de formato 5340 (Byte de EVEX 0, bits [7:0]) - el primer byte (Byte de EVEX 0) es el campo de formato 5340 y contiene 0x62 (el valor exclusivo usado para distinguir el formato de instrucción apto para vectores en una realización de la invención).
Los bytes segundo - cuarto (Bytes 1 a 3 de EVEX) incluyen un número de campos de bits que proporcionan una capacidad específica.
Campo de REX 5405 (Byte de EVEX 1, bits [7 - 5]) - consiste en un campo de bits de EVEX.R (Byte de EVEX 1, bit [7] - R), campo de bits de EVEX.X (byte de EVEX 1, bit [6] - X) y byte de 5357BEX 1, bit [5] - B). Los campos de bits de EVEX.R, de EVEX.X y de EVEX.B proporcionan la misma funcionalidad que los campos de bits de VEX correspondientes, y se codifican usando la forma de complemento a 1, es decir, ZMM0 se codifica como 1111B, ZMM15 se codifica como 0000B. Otros campos de las instrucciones codifican los tres bits inferiores de los índices de registro como se conoce en la técnica (rrr, xxx y bbb), de tal modo que Rrrr, Xxxx y Bbbb se pueden formar añadiendo EVEX.R, EVEX.X y EVEX.B.
Campo de REX 5310 - esta es la primera parte del campo de REX' 5310 y es el campo de bits de EVEX.R' (Byte de EVEX 1, bit [4] - R') que se usa para codificar o bien los 16 superiores o bien los 16 inferiores del conjunto de 32 registros ampliado. En una realización de la invención, este bit, junto con otros como se indica a continuación, se almacena en formato con inversión de bits para distinguir el mismo (en el bien conocido modo de 32 bits de x86) de la instrucción BOUND, cuyo byte de código de operación real es 62, pero no acepta, en el campo de MOD R/M (descrito a continuación), el valor de 11 en el campo de MOD; realizaciones alternativas de la invención no almacenan este y los otros bits indicados a continuación en el formato invertido. Se usa un valor de 1 para codificar los 16 registros inferiores. En otras palabras, R'Rrrr se forma combinando EVEX.R', EVEX.R y el otro RRR a partir de otros campos.
Campo de correlación de código de operación 5415 (byte 1 de EVEX, bits [3:0] - mmmm) - su contenido codifica un byte de código de operación inicial implícito (0F, OF 38 u OF 3).
El campo de anchura de elemento de datos 5364 (byte de EVEX 2, bit [7] - W) - se representa mediante la notación EVEX.W. EVEX.W se usa para definir la granularidad (el tamaño) del tipo de datos (o bien elementos de datos de 32 bits o bien elementos de datos de 64 bits).
EVEX.vvvv 5420 (Byte de EVEX 2, bits [6:3] - vvvv) - el papel de EVEX.vvvv puede incluir lo siguiente: 1) EVEX.vvvv codifica el primer operando de registro de origen, especificado en forma invertida (de complemento a 1) y es válido para instrucciones con 2 o más operandos de origen; 2) EVEX.vvvv codifica el operando de registro de destino, especificado en forma de complemento a 1 para ciertos desplazamientos de vector; o 3) EVEX.vvvv no codifica operando alguno, el campo está reservado y debería contener 1111b. Por lo tanto, el campo de EVEX.vvvv 5420 codifica los 4 bits de orden inferior del primer especificador de registro de origen almacenado en forma invertida (complemento a 1). Dependiendo de la instrucción, se usa un campo de bit EVEX diferente adicional para ampliar el tamaño de especificador a 32 registros.
El Campo de clase de EVEX.U 5368 (byte de EVEX 2, bit [2] - U) - si EVEX.U = 0, eso indica la clase A o EVEX.U0; si EVEX.U = 1, eso indica la clase B o EVEX.U1.
Campo de codificación de prefijo 5425 (byte 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 de SSE heredadas en el formato de prefijo de EVEX, esto también tiene el beneficio de compactar el prefijo de SIMD (en lugar de requerir un byte para expresar el prefijo de SIMD, el prefijo de EVEX requiere solo 2 bits). En una realización, para soportar instrucciones de SSE heredadas que usan un prefijo de SIMD (66H, F2H, F3H) tanto en el formato heredado como en el formato de prefijo de EVEX, estos prefijos de SIMD heredados se codifican en el campo de codificación de prefijo de SIMD; y, en tiempo de ejecución, se expanden al prefijo de SIMD heredado antes de proporcionarse a la PLA del descodificador (para que la PLA pueda ejecutar tanto el formato heredado como el EVEX de estas instrucciones heredadas sin modificación). Aunque instrucciones más nuevas podrían usar el contenido del campo de codificación de prefijo de EVEX directamente como una ampliación de código de operación, ciertas realizaciones se expanden de manera similar por razones de coherencia, pero prevén que significados diferentes sean especificados por estos prefijos de SIMD heredados. Una realización alternativa puede rediseñar la PLA para soportar las codificaciones de prefijo de SIMD de 2 bits y, por lo tanto, no requerir la expansión.
Campo de alfa 5352 (byte de EVEX 3, bit [7] - EH; también conocido como EVEX.EH, EVEX.rs, EVEX.RL, EVEX.control de máscara de escritura y EVEX.N; también se ilustra con a) - como se ha descrito previamente, este campo es específico de contexto.
Campo de beta 5354 (byte de EVEX 3, bits [6:4] - SSS, también conocido como EVEX.s2-0, EVEX.r2-0, EVEX.rrl, EVEX.LL0, EVEX.LLB; también ilustrado con ppp) - como se ha descrito previamente, este campo es específico de contexto.
Campo de REX 5310 - este es el resto del campo de REX' y es el campo de bits de EVEX.V' (Byte de EVEX 3, bit [3] - V') que se puede usar para codificar o bien los 16 superiores o bien los 16 inferiores del conjunto de 32 registros ampliado. Este bit se almacena en formato con inversión de bits. Se usa un valor de 1 para codificar los 16 registros inferiores. En otras palabras, V'VVVV se forma combinando EVEX.V', EVEX.vvvv.
Campo de máscara de escritura 5370 (byte de EVEX 3, bits [2:0] - kkk) - su contenido especifica el índice de un registro en los registros de máscara de escritura como se ha descrito previamente. En una realización de la invención, el valor específico EVEX.kkk = 000 tiene un comportamiento especial que implica que no se usa máscara de escritura alguna para la instrucción particular (esto se puede implementar de una diversidad de formas, incluyendo el uso de una máscara de escritura cableada a todo unos o hardware que sortea el hardware de enmascaramiento).
El campo de código de operación real 5430 (Byte 4) también se conoce como byte de código de operación. Parte del código de operación se especifica en este campo.
El campo de MOD R/M 5440 (Byte 5) incluye el campo de MOD 5442, el campo de Reg 5444 y el campo de R/M 5446. Como se ha descrito previamente, el contenido del campo de MOD 5442 distingue entre operaciones de acceso de acceso a memoria y operaciones sin acceso a memoria. El papel del campo de Reg 5444 se puede resumir en dos situaciones: codificar el operando de registro de destino o un operando de registro de origen, o tratarse como una ampliación de código de operación y no usarse para codificar operando de instrucción alguno. El papel del campo de R/M 5446 puede incluir lo siguiente: codificar el operando de instrucción que hace referencia a una dirección de memoria, o codificar o bien el operando de registro de destino o bien un operando de registro de origen.
Byte de ajuste a escala, índice, base (SIB) (Byte 6) - como se ha descrito previamente, el contenido del campo de ajuste a escala 5350 se usa para la generación de direcciones de memoria. SIB.xxx 5454 y SIB.bbb 5456 - se ha hecho referencia previamente a los contenidos de estos campos con respecto a los índices de registro Xxxx y Bbbb.
Campo de desplazamiento 5362A (Bytes 7 - 10) - cuando el campo de MOD 5442 contiene 10, los bytes 7 - 10 son el campo de desplazamiento 5362A, y el mismo funciona igual que el desplazamiento de 32 bits heredado (disp32) y funciona con granularidad de bytes.
Campo de factor de desplazamiento 5362B (Byte 7) - cuando el campo de MOD 5442 contiene 01, el byte 7 es el campo de factor de desplazamiento 5362B. La ubicación de este campo es la misma que la del desplazamiento de 8 bits (disp8) del conjunto de instrucciones de x86 heredado, que funciona con granularidad de bytes. Debido a que disp8 es de ampliación de signo, este solo puede direccionar desplazamientos entre -128 y 127 bytes; en términos de líneas de memoria caché de 64 bytes, disp8 usa 8 bits que se pueden establecer a solo cuatro valores realmente útiles -128, -64, 0 y 64; debido a que a menudo se necesita un intervalo mayor, se usa disp32; sin embargo, disp32 requiere 4 bytes. A diferencia de disp8 y disp32, el campo de factor de desplazamiento 5362B es una reinterpretación de disp8; cuando se usa el campo de factor de desplazamiento 5362B, el desplazamiento real se determina mediante el contenido del campo de factor de desplazamiento multiplicado por el tamaño del acceso de operando de memoria (N). Este tipo de desplazamiento se denomina disp8 * N. Esto reduce la longitud de instrucción promedio (se usa un único byte para el desplazamiento, pero con un intervalo mucho mayor). Tal desplazamiento comprimido se basa en la suposición de que el desplazamiento efectivo es un múltiplo de la granularidad del acceso a memoria y, por lo tanto, no es necesario codificar los bits de orden inferior redundantes del desplazamiento de dirección. En otras palabras, el campo de factor de desplazamiento 5362B sustituye el desplazamiento de 8 bits de conjunto de instrucciones de x86 heredado. Por lo tanto, el campo de factor de desplazamiento 5362B se codifica de la misma forma que un desplazamiento de 8 bits de conjunto de instrucciones de x86 (por lo que no hay cambio alguno en las reglas de codificación de 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 ajustar a escala el desplazamiento por el tamaño del operando de memoria para obtener un desplazamiento de dirección por bytes). El campo de inmediato 5372 funciona como se ha descrito previamente.
Campo de código de operación completo
La figura 54B es un diagrama de bloques que ilustra los campos del formato de instrucción apto para vectores específico 5400 que conforma el campo de código de operación completo 5374 de acuerdo con una realización de la invención. Específicamente, el campo de código de operación completo 5374 incluye el campo de formato 5340, el campo de operación base 5342 y el campo de anchura (W) de elemento de datos 5364. El campo de operación base 5342 incluye el campo de codificación de prefijo 5425, el campo de correlación de código de operación 5415 y el campo de código de operación real 5430.
Registro de campo de índice
La figura 54C es un diagrama de bloques que ilustra los campos del formato de instrucción apto para vectores específico 5400 que conforma el campo de índice de registro 5344 de acuerdo con una realización de la invención. Específicamente, el campo de índice de registro 5344 incluye el campo de REX 5405, el campo de REX' 5410, el campo de MODR/M.reg 5444, el campo de MODR/M.r/m 5446, el campo de VVVV 5420, el campo de xxx 5454 y el campo de bbb 5456.
Campo de operación de amplificación
La figura 54D es un diagrama de bloques que ilustra los campos del formato de instrucción apto para vectores específico 5400 que conforma el campo de operación de amplificación 5350 de acuerdo con una realización de la invención. Cuando el campo de clase (U) 5368 contiene 0, esto quiere decir EVEX.U0 (clase A 5368A); cuando este contiene 1, esto quiere decir EVEX.U1 (clase B 5368B). Cuando U = 0 y el campo de MOD 5442 contiene 11 (lo que quiere decir una operación sin acceso a memoria), el campo de alfa 5352 (byte de EVEX 3, bit [7] - EH) se interpreta como el campo de rs 5352A. Cuando el campo de rs 5352A contiene un 1 (el redondeo 5352A.1), el campo de beta 5354 (byte de EVEX 3, bits [6:4] - SSS) se interpreta como el campo de control de redondeo 5354A. El campo de control de redondeo 5354A incluye un campo de SAE de un bit 5356 y un campo de operación de redondeo de dos bits 5358. Cuando el campo de rs 5352A contiene un 0 (la transformación de datos 5352A.2), el campo de beta 5354 (byte de EVEX 3, bits [6:4] - SSS) se interpreta como un campo de transformación de datos de tres bits 5354B. Cuando U = 0 y el campo de MOD 5442 contiene 00, 01 o 10 (lo que quiere decir una operación de acceso a memoria), el campo de alfa 5352 (byte de EVEX 3, bit [7] - EH) se interpreta como el campo de sugerencia de expulsión (EH) 5352B y el campo de beta 5354 (byte de EVEX 3, bits [6:4] - SSS) se interpreta como un campo de manipulación de datos de tres bits 5354C.
Cuando U = 1, el campo de alfa 5352 (byte de EVEX 3, bit [7] - EH) se interpreta como el campo de control de máscara de escritura (Z) 5352C. Cuando U = 1 y el campo de MOD 5442 contiene 11 (lo que quiere decir una operación sin acceso a memoria), parte del campo de beta 5354 (byte de EVEX 3, bit [4] - S0) se interpreta como el campo de RL 5357A; cuando el mismo contiene un 1 (el redondeo 5357A.1) el resto del campo de beta 5354 (byte de EVEX 3, bit [6 - 5] - S2-1) se interpreta como el campo de operación de redondeo 5359A, mientras que, cuando el campo de RL 5357A contiene un 0 (VSIZE 5357.A2) el resto del campo de beta 5354 (byte de EVEX 3, bit [6 - 5] - S2-1) se interpreta como el campo de longitud de vector 5359B (byte de EVEX 3, bit [6 - 5] - L1-0). Cuando U = 1 y el campo de MOD 5442 contiene 00, 01 o 10 (lo que quiere decir una operación de acceso a memoria), el campo de beta 5354 (byte de EVEX 3, bits [6:4] - SSS) se interpreta como el campo de longitud de vector 5359B (byte de EVEX 3, bit [6 - 5] - L1 -0) y el campo de radiodifusión 5357B (byte de EVEX 3, bit [4] - B).
Arquitectura de registro ilustrativa
La figura 55 es un diagrama de bloques de una arquitectura de registro 5500 de acuerdo con una realización de la invención. En la realización ilustrada, hay 32 registros de vector 5510 que tienen una anchura de 512 bits; estos registros se denominan zmm0 a zmm31 (el conjunto de registros zmm). Otras realizaciones pueden incluir, en lugar del conjunto de registros zmm, un conjunto de dieciséis registros de vector que tienen una anchura de 256 bits; estos registros se denominan ymm0 a ymm15 (el conjunto de registros ymm). Otras realizaciones pueden incluir, en lugar del conjunto de registros zmm o el conjunto de registros ymm, un conjunto de dieciséis registros de vector que tienen una anchura de 128 bits; estos registros se denominan xmm0 a xmm15 (el conjunto de registros xmm). En la figura 55, los 256 bits de orden inferior de los 16 registros de zmm inferiores se superponen sobre los registros ymm0 - 15, y los 128 bits de orden inferior de los 16 registros de zmm inferiores (los 128 bits de orden inferior de los registros ymm) se superponen sobre los registros xmm0 - 15.
El formato de instrucción apto para vectores específico 5400 opera sobre estos archivos de registro superpuestos como se ilustra en la tabla posterior.
Figure imgf000071_0001
En otras palabras, el campo de longitud de vector 5359B selecciona entre una longitud máxima y otras una o más longitudes más cortas, en donde cada una de tales longitudes más cortas es la mitad de la longitud de la longitud anterior; y las plantillas de instrucciones sin el campo de longitud de vector 5359B operan sobre la longitud de vector máxima. Además, en una realización, las plantillas de instrucción de clase B del formato de instrucción apto para vectores específico 5400 operan sobre datos de punto flotante de precisión simple/doble apilados o escalares y datos enteros apilados o escalares. Las operaciones con escalares son operaciones realizadas sobre la posición de elemento de datos de orden más bajo en un registro zmm/ymm/xmm; las posiciones de los elementos de datos de orden superior o bien se dejan tal cual estaban antes de la instrucción o bien se ponen a cero, dependiendo de la realización.
Registros de máscara de escritura 5515 - en la 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 realización alternativa, los registros de máscara de escritura 5515 tienen un tamaño de 16 bits. En una realización, el registro de máscara de vector k0 no se puede usar como una máscara de escritura; cuando se usa la codificación que normalmente indicaría k0 para una máscara de escritura, este selecciona una máscara de escritura cableada de 0xFFFF, deshabilitando en la práctica la máscara de escritura para esa instrucción.
Registros de propósito general 5525 - en la realización ilustrada, hay dieciséis registros de propósito general de 64 bits que se usan junto con los modos de direccionamiento de x86 existentes para direccionar operandos de memoria. Estos registros se denominan mediante los nombres RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP y R8 a R15.
Archivo de registro de pila de punto flotante escalar (pila de x87) 5545, sobre el que se crea un alias para el archivo de registro plano de números enteros apilados de MMX 5550 - en la realización ilustrada, la pila de x87 es una pila de ocho elementos usada para realizar operaciones de punto flotante escalar sobre datos de punto flotante de 32/64/80 bits usando la ampliación de conjunto de instrucciones de x87; mientras que los registros MMX se usan para realizar operaciones sobre datos enteros apilados de 64 bits, así como para contener operandos para algunas operaciones realizadas entre los registros MMX y XMM.
Realizaciones alternativas de la invención pueden usar registros más anchos o más estrechos. Adicionalmente, realizaciones alternativas de la invención pueden usar más, menos o diferentes archivos de registro y registros.
Emulación (incluyendo traducción binaria, transformación de código, etc.)
En algunos casos, se puede usar un convertidor de instrucciones para convertir una instrucción desde un conjunto de instrucciones de origen a un conjunto de instrucciones de destino. Por ejemplo, el convertidor de instrucciones puede traducir (por ejemplo, usando traducción binaria estática, traducción binaria dinámica que incluye compilación dinámica), transformar, emular o convertir de otro modo una instrucción en otras una o más instrucciones que han de 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 procesador, fuera de procesador, o parte en y parte fuera de procesador.
La figura 56 es un diagrama de bloques que contrasta el uso de un convertidor de instrucciones de software para convertir instrucciones binarias en un conjunto de instrucciones de origen en instrucciones binarias en un conjunto de instrucciones de destino de acuerdo con realizaciones de la invención. En la realización ilustrada, el convertidor de instrucciones es un convertidor de instrucciones de software, aunque, como alternativa, el convertidor de instrucciones se puede implementar en software, firmware, hardware o diversas combinaciones de los mismos. La figura 56 muestra un programa en un lenguaje de alto nivel 5602 que se puede compilar usando un compilador de x865604 para generar un código binario de x86 5606 que puede ser ejecutado de forma nativa por un procesador con al menos un núcleo de conjunto de instrucciones de x865616. El procesador con al menos un núcleo de conjunto de instrucciones de x86 5616 representa cualquier procesador que pueda realizar sustancialmente las mismas funciones que un procesador de Intel con al menos un núcleo de conjunto de instrucciones de x86 ejecutando, o procesando de otro modo, de forma compatible (1) una porción sustancial del conjunto de instrucciones del núcleo de conjunto de instrucciones de x86 de Intel o (2) versiones de código objeto de aplicaciones u otro software destinado a ejecutarse en un procesador de Intel con al menos un núcleo de conjunto de instrucciones de x86, con el fin de lograr sustancialmente el mismo resultado que un procesador de Intel con al menos un núcleo de conjunto de instrucciones de x86. El compilador de x86 5604 representa un compilador que se puede hacer funcionar para generar un código binario de x865606 (por ejemplo, un código objeto) que se puede, con o sin procesamiento de vinculación adicional, ejecutar en el procesador con al menos un núcleo de conjunto de instrucciones de x86 5616. De manera similar, la figura 56 muestra que el programa en el lenguaje de alto nivel 5602 se puede compilar usando un compilador de conjunto de instrucciones alternativo 5608 para generar un código binario de conjunto de instrucciones alternativo 5610 que puede ser ejecutado de forma nativa por un procesador sin al menos un núcleo de conjunto de instrucciones de x865614 (por ejemplo, un procesador con núcleos que ejecutan el conjunto de instrucciones de MIPS, de MIPS Technologies de Sunnyvale, CA y / o que ejecutan el conjunto de instrucciones de ARM, de ARM Holdings de Sunnyvale, CA). El convertidor de instrucciones 5612 se usa para convertir el código binario de x865606 en código que puede ser ejecutado de forma nativa por el procesador sin un núcleo de conjunto de instrucciones de x865614. No es probable que este código convertido sea el mismo que el código binario de conjunto de instrucciones alternativo 5610, debido a que es difícil hacer un convertidor de instrucciones capaz de esto; sin embargo, el código convertido logrará la operación general y estará conformado por instrucciones a partir del conjunto de instrucciones alternativo. Por lo tanto, el convertidor de instrucciones 5612 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 tenga un procesador o núcleo de conjunto de instrucciones de x86 ejecute el código binario de x865606.
La figura 57 ilustra una vista de conjunto conceptual de un centro de datos 5700 que puede ser, en general, representativo de un centro de datos u otro tipo de red informática en / para el cual se pueden implementar una o más técnicas descritas en el presente documento de acuerdo con diversas realizaciones. Como se muestra en la figura 57, el centro de datos 5700 puede contener, en general, una pluralidad de bastidores, cada uno de los cuales puede alojar equipo informático que comprende un conjunto respectivo de recursos físicos. En el ejemplo no limitante particular representado en la figura 57, el centro de datos 5700 contiene cuatro bastidores 5702A a 5702D, que alojan equipo informático que comprende conjuntos respectivos de recursos físicos (PCR) 5705A a 5705D. De acuerdo con este ejemplo, un conjunto colectivo de recursos físicos 5706 del centro de datos 5700 incluye los diversos conjuntos de recursos físicos 5705A a 5705D que se distribuyen entre los bastidores 5702A a 5702D. Los recursos físicos 5706 pueden incluir recursos de múltiples tipos, tales como - por ejemplo - procesadores, coprocesadores, aceleradores, disposiciones de puertas programables en campo (FPGA), memoria y almacenamiento. Las realizaciones no se limitan a estos ejemplos.
El centro de datos 5700 ilustrativo se diferencia de los centros de datos habituales en muchas facetas. Por ejemplo, en la realización ilustrativa, las placas de circuito ("trineos") en las que se colocan componentes tales como CPU, memoria y otros componentes, están diseñadas para un desempeño térmico aumentado. En particular, en la realización ilustrativa, los trineos son menos profundos que las placas habituales. En otras palabras, los trineos son más cortos desde la parte frontal a la parte posterior, en donde se ubican ventiladores de enfriamiento. Esto reduce la longitud de la trayectoria que ha de recorrer el aire para desplazarse a través de los componentes sobre la placa. Además, los componentes sobre el trineo están más separados que en placas de circuito habituales, y los componentes están dispuestos para reducir o eliminar el efecto de pantalla (es decir, un componente en la trayectoria de flujo de aire de otro componente). En la realización ilustrativa, componentes de procesamiento tales como los procesadores están ubicados en un lado de arriba de un trineo, mientras que la memoria cercana, tal como unos DIMM, está ubicada en un lado de debajo del trineo. Como resultado del flujo de aire potenciado proporcionado por este diseño, los componentes pueden funcionar a frecuencias y niveles de potencia superiores a los de los sistemas habituales, aumentando de ese modo el desempeño. Además, los trineos están configurados para acoplarse a ciegas con los cables de comunicación de datos y de alimentación en cada bastidor 5702A, 5702B, 5702C, 5702D, potenciando su capacidad de quitarse, instalar una versión mejorada de los mismos, reinstalarse y / o reemplazarse rápidamente. De manera similar, componentes individuales ubicados sobre los trineos, tales como procesadores, aceleradores, memoria y unidades de almacenamiento de datos, están configurados para instalar una versión mejorada de los mismos fácilmente debido a su separación aumentada entre sí. En la realización ilustrativa, los componentes incluyen adicionalmente características de acreditación de hardware para demostrar su autenticidad.
Además, en la realización ilustrativa, el centro de datos 5700 utiliza una única arquitectura de red ("tejido") que soporta otras múltiples arquitecturas de red, incluyendo Ethernet y Omni-Path. Los trineos, en la realización ilustrativa, están acoplados a conmutadores a través de fibras ópticas, que proporcionan un ancho de banda superior y una latencia inferior que el cableado de par trenzado habitual (por ejemplo, Categoría 5, Categoría 5e, Categoría 6, etc.). Debido al ancho de banda alto, las interconexiones de latencia baja y la arquitectura de red, el centro de datos 5700 puede, durante el uso, agrupar recursos, tales como memoria, aceleradores (por ejemplo, aceleradores de gráficos, FPGA, ASIC, etc.) y unidades de almacenamiento de datos que están desagregados físicamente, y proporcionar los mismos a recursos de cómputo (por ejemplo, procesadores) de una forma según sea necesario, habilitando que los recursos de cómputo accedan a los recursos agrupados como si estos fueran locales. El centro de datos ilustrativo 5700 recibe adicionalmente información de uso para los diversos recursos, predice un uso de recursos para diferentes tipos de cargas de trabajo basándose en un uso de recursos pasado y reasigna de forma dinámica los recursos basándose en esta información.
Los bastidores 5702A, 5702B, 5702C, 5702D del centro de datos 5700 pueden incluir características de diseño físico que faciliten la automatización de una diversidad de tipos de tareas de mantenimiento. Por ejemplo, el centro de datos 5700 se puede implementar usando bastidores que están diseñados para que se acceda a los mismos robóticamente y para aceptar y alojar trineos de recursos manipulables robóticamente. Además, en la realización ilustrativa, los bastidores 5702A, 5702B, 5702C, 5702D incluyen fuentes de alimentación integradas que reciben un voltaje mayor de lo que es habitual para las fuentes de alimentación. El aumento de voltaje habilita que las fuentes de alimentación proporcionen energía adicional a los componentes en cada trineo, habilitando que los componentes funcionen a frecuencias superiores a las habituales. La figura 58 ilustra una configuración lógica ilustrativa de un bastidor 202 del centro de datos 5700. Como se muestra en la figura 58, el bastidor 5802 puede alojar, en general, una pluralidad de trineos, cada uno de los cuales puede comprender un conjunto respectivo de recursos físicos. En el ejemplo no limitante particular representado en la figura 58, el bastidor 5802 aloja los trineos 5804-1 a 5804-4 que comprenden conjuntos respectivos de recursos físicos 5805-1 a 5805-4, cada uno de los cuales constituye una porción del conjunto colectivo de recursos físicos 5806 comprendidos en el bastidor 5802. Con respecto a la figura 1, si el bastidor 5802 es representativo de, por ejemplo, el bastidor 102A, entonces los recursos físicos 5806 pueden corresponder a los recursos físicos 105A comprendidos en el bastidor 102A. En el contexto de este ejemplo, los recursos físicos 105A pueden estar conformados por los conjuntos respectivos de recursos físicos, incluyendo los recursos de almacenamiento físico 5805-1, los recursos de acelerador físicos 5805-2, los recursos de memoria físicos 5804-3 y los recursos de cómputo físicos 5805-5 comprendidos en los trineos 5804-1 a 5804-4 del bastidor 5802. Las realizaciones no se limitan a este ejemplo. Cada trineo puede contener una agrupación de cada uno de los diversos tipos de recursos físicos (por ejemplo, cómputo, memoria, acelerador, almacenamiento). Al tener trineos accesibles robóticamente y manipulables robóticamente que comprenden recursos desagregados, se puede instalar una versión mejorada de cada tipo de recurso de forma independiente entre sí y con su propia tasa de actualización optimizada.
La figura 59 ilustra un ejemplo de un centro de datos 5900 que puede ser, en general, representativo de uno en / para el cual se pueden implementar una o más técnicas descritas en el presente documento de acuerdo con diversas realizaciones. En el ejemplo no limitante particular representado en la figura 59, el centro de datos 5900 comprende los bastidores 5902-1 a 5902-32. En diversas realizaciones, los bastidores del centro de datos 5900 se pueden disponer de tal modo que definen y / o dan cabida a diversas vías de acceso. Por ejemplo, como se muestra en la figura 59, los bastidores del centro de datos 5900 se pueden disponer de tal modo que definen y / o dan cabida a las vías de acceso 5911A, 5911B, 5911C y 5911D. En algunas realizaciones, la presencia de tales vías de acceso puede habilitar, en general, que un equipo de mantenimiento automatizado, tal como un equipo de mantenimiento robótico, acceda físicamente al equipo informático alojado en los diversos bastidores del centro de datos 5900 y realice tareas de mantenimiento automatizadas (por ejemplo, reemplazar un trineo con fallos, instalar una versión mejorada de un trineo). En diversas realizaciones, las dimensiones de las vías de acceso 5911A, 5911B, 5911C y 5911D, las dimensiones de los bastidores 5902-1 a 5902-32 y/u otros uno o más aspectos de la disposición física del centro de datos 5900 se pueden seleccionar para facilitar tales operaciones automatizadas. Las realizaciones no están limitadas en este contexto.
La figura 60 ilustra un ejemplo de un centro de datos 6000 que puede ser, en general, representativo de uno en / para el cual se pueden implementar una o más técnicas descritas en el presente documento de acuerdo con diversas realizaciones. Como se muestra en la figura 60, el centro de datos 6000 puede presentar un tejido óptico 6012. El tejido óptico 6012 puede comprender, en general, una combinación de medios de señalización óptica (tales como cableado óptico) e infraestructura de conmutación óptica a través de la cual, cualquier trineo particular en el centro de datos 6000 puede enviar señales a (y recibir señales desde) cada uno de los otros trineos en el centro de datos 6000. La conectividad de señalización que el tejido óptico 6012 proporciona a cualquier trineo dado puede incluir conectividad tanto con otros trineos en un mismo bastidor como con trineos en otros bastidores. En el ejemplo no limitante particular representado en la figura 60, el centro de datos 6000 incluye cuatro bastidores 6002A a 6002D. Los bastidores 6002A a 6002D alojan unos pares respectivos de trineos 6004A-1 y 6004A-2, 6004B-1 y 6004B-2, 6004C-1 y 6004C-2, y 6004D-1 y 6004D-2. Por lo tanto, en este ejemplo, el centro de datos 6000 comprende un total de ocho trineos. A través del tejido óptico 6012, cada uno de tales trineos puede poseer conectividad de señalización con cada uno de los otros siete trineos en el centro de datos 6000. Por ejemplo, a través del tejido óptico 6012, el trineo 6004A-1 en el bastidor 6002A puede poseer conectividad de señalización con el trineo 6004A-2 en el bastidor 6002A, así como con los otros seis trineos 6004B-1, 6004B-2, 6004C-1, 6004C-2, 6004D-1 y 6004D-2 que se distribuyen entre los otros bastidores 6002B, 6002C y 6002D del centro de datos 6000. Las realizaciones no se limitan a este ejemplo.
La figura 5 ilustra una vista de conjunto de un esquema de conectividad 500 que puede ser, en general, representativo de la conectividad de capa de enlace que se puede establecer en algunas realizaciones entre los diversos trineos de un centro de datos, tales como cualquiera de los centros de datos 5700, 5900 y 6000 de ejemplo de las figuras 57, 59 y 60. El esquema de conectividad 6100 se puede implementar usando un tejido óptico que presenta una infraestructura de conmutación óptica de modo dual 6114. La infraestructura de conmutación óptica de modo dual 6114 puede comprender, en general, una infraestructura de conmutación que es capaz de recibir comunicaciones de acuerdo con múltiples protocolos de capa de enlace a través de un mismo conjunto unificado de medios de señalización óptica, y de conmutar adecuadamente tales comunicaciones. En diversas realizaciones, la infraestructura de conmutación óptica de modo dual 6114 se puede implementar usando uno o más conmutadores ópticos de modo dual 6115. En diversas realizaciones, los conmutadores ópticos de modo dual 6115 pueden comprender, en general, conmutadores de número de puertos alto. En algunas realizaciones, los conmutadores ópticos de modo dual 6115 pueden comprender conmutadores de múltiples capas, tales como conmutadores de cuatro capas. En diversas realizaciones, los conmutadores ópticos de modo dual 6115 pueden presentar fotónica de silicio integrada que habilita que los mismos conmuten comunicaciones con una latencia significativamente reducida en comparación con dispositivos de conmutación convencionales. En algunas realizaciones, los conmutadores ópticos de modo dual 6115 pueden constituir los conmutadores de hoja 6130 en una arquitectura de hojas - columna vertebral que incluye adicionalmente uno o más conmutadores de columna vertebral ópticos de modo dual 6120.
En diversas realizaciones, los conmutadores ópticos de modo dual pueden ser capaces de recibir tanto comunicaciones de protocolo de Ethernet que portan Protocolo de Internet (paquetes de IP) como comunicaciones de acuerdo con un segundo protocolo de capa de enlace de informática de desempeño alto (HPC) (por ejemplo, de la Omni-Path Architecture de Intel, Infiniband) a través de medios de señalización óptica de un tejido óptico. Como se refleja en la figura 61A, con respecto a cualquier par particular de trineos 6104A y 6104B que posea conectividad de señalización óptica con el tejido óptico, el esquema de conectividad 6100 puede proporcionar, por lo tanto, soporte para la conectividad de capa de enlace a través tanto de enlaces de Ethernet como de enlaces de HPC. Por lo tanto, las comunicaciones tanto de Ethernet como de HPC pueden ser soportadas por un único tejido de conmutación de ancho de banda alto y de latencia baja. Las realizaciones no se limitan a este ejemplo.
La figura 61B ilustra una vista de conjunto de una arquitectura de bastidor 600 que puede ser representativa de una arquitectura de uno particular cualquiera de los bastidores representados en las figuras 57 a 60 de acuerdo con algunas realizaciones. Como se refleja en la figura 61B, la arquitectura de bastidor 600 puede presentar, en general, una pluralidad de espacios de trineo en los que se pueden insertar trineos, cada uno de los cuales puede ser accesible por robot a través de una región de acceso a bastidor 601. En el ejemplo no limitante particular representado en la figura 61B, la arquitectura de bastidor 6100 presenta cinco espacios de trineo 6103-1 a 6103-5. Los espacios de trineo 6103­ 1 a 6103-5 presentan unos módulos de conector de múltiples fines (MPCM) 6116-1 a 6116-5 respectivos. La figura 61C es un diagrama detallado de una porción de la arquitectura de bastidor 6100 de la figura 61B. Como se muestra en la figura 61C, cuando se inserta un trineo en cualquiera de los espacios de trineo 6103-1 a 6103-5, el MPCM correspondiente (por ejemplo, el MPCM 6116-3) se puede acoplar con un MPCM 6120 homólogo del trineo insertado. Este acoplamiento puede dotar de conectividad al trineo insertado tanto con la infraestructura de señalización como con la infraestructura de alimentación del bastidor en el que este está alojado.
Entre los tipos de trineos a los que dar cabida en la arquitectura de bastidor 6100 puede haber uno o más tipos de trineos que presentan capacidades de expansión. La figura 62 ilustra un ejemplo de un trineo 6204 que puede ser representativo de un trineo de un tipo como este. Como se muestra en la figura 62, el trineo 6204 puede comprender un conjunto de recursos físicos 6205, así como un MPCM 6216 diseñado para acoplarse con un MPCM homólogo cuando el trineo 6204 se inserta en un espacio de trineo, tal como cualquiera de los espacios de trineo 603-1 a 603-5 de la figura 61A. El trineo 6204 también puede incluir un conector de expansión 6217. El conector de expansión 6217 puede comprender, en general, un zócalo, una ranura u otro tipo de elemento de conexión que es capaz de aceptar uno o más tipos de módulos de expansión, tales como un trineo de expansión 6218. Mediante su acoplamiento con un conector homólogo en el trineo de expansión 6218, el conector de expansión 6217 puede dotar, a los recursos físicos 6205, de acceso a los recursos informáticos complementarios 6205B que residen en el trineo de expansión 6218. Las realizaciones no están limitadas en este contexto.
La figura 63 ilustra un ejemplo de una arquitectura de bastidor 800 que puede ser representativa de una arquitectura de bastidor que se puede implementar con el fin de proporcionar soporte para trineos con capacidades de expansión, tales como el trineo 6204 de la figura 62. En el ejemplo no limitante particular representado en la figura 63, la arquitectura de bastidor 6300 incluye siete espacios de trineo 6303-1 a 6303-7, que presentan los MPCM 6316-1 a 6316-7 respectivos. Los espacios de trineo 6303-1 a 6303-7 incluyen las regiones primarias 6303-1A a 6303-7A respectivas y las regiones de expansión 6303-1B a 6303-7B respectivas. Con respecto a cada uno de tales espacios de trineo, cuando el MPCM correspondiente se acopla con un MPCM homólogo de un trineo insertado, la región primaria puede constituir, en general, una región del espacio de trineo que da cabida físicamente al trineo insertado. La región de expansión puede constituir, en general, una región del espacio de trineo que puede dar cabida físicamente a un módulo de expansión, tal como el trineo de expansión 6218 de la figura 62, en el caso de que el trineo insertado esté configurado con un módulo de este tipo.
La figura 64 ilustra un ejemplo de un bastidor 902 que puede ser representativo de un bastidor implementado de acuerdo con la arquitectura de bastidor 800 de la figura 8 de acuerdo con algunas realizaciones. En el ejemplo no limitante particular representado en la figura 64, el bastidor 6402 presenta siete espacios de trineo 6403-1 a 6403-7, que incluyen las regiones primarias 6403-1A a 6403-7A respectivas y las regiones de expansión 6403-1B a 6403-7B respectivas. En diversas realizaciones, el control de temperatura en el bastidor 6402 se puede implementar usando un sistema de enfriamiento por aire. Por ejemplo, como se refleja en la figura 64, el bastidor 6402 puede presentar una pluralidad de ventiladores 6419 que están, en general, dispuestos para proporcionar un enfriamiento por aire dentro de los diversos espacios de trineo 6403-1 a 6403-7. En algunas realizaciones, la altura del espacio de trineo es mayor que la altura del servidor "1U" convencional. En tales realizaciones, los ventiladores 6419 pueden comprender, en general, ventiladores de enfriamiento de diámetro grande relativamente lentos en comparación con los ventiladores usados en las configuraciones de bastidor convencionales. El funcionamiento de ventiladores de enfriamiento de diámetro más grande a velocidades inferiores puede aumentar la vida útil del ventilador en relación con los ventiladores de enfriamiento de diámetro más pequeño que funcionan a velocidades superiores, al tiempo que se sigue proporcionando la misma cantidad de enfriamiento. Los trineos son físicamente menos profundos que las dimensiones de bastidor convencionales. Además, los componentes están dispuestos en cada trineo para reducir el efecto de pantalla térmica (es decir, no dispuestos en serie en la dirección del flujo de aire). Como resultado, unos trineos más anchos y menos profundos prevén un aumento en el desempeño del dispositivo debido a que los dispositivos pueden funcionar con una envolvente térmica superior (por ejemplo, 250 W) debido a un enfriamiento mejorado (es decir, sin efecto de pantalla térmica, más espacio entre dispositivos, más espacio para disipadores de calor más grandes, etc.).
Los MPCM 6416-1 a 6416-7 se pueden configurar para dotar, a trineos insertados, de acceso a energía suministrada por los módulos de alimentación 6420-1 a 6420-7 respectivos, cada uno de los cuales puede extraer energía desde una fuente de alimentación externa 6421. En diversas realizaciones, la fuente de alimentación externa 6421 puede entregar alimentación de corriente alterna (CA) al bastidor 6402, y los módulos de alimentación 6420-1 a 6420-7 se pueden configurar para convertir tal alimentación de CA en alimentación de corriente continua (CC) a suministrar a trineos insertados. En algunas realizaciones, por ejemplo, los módulos de potencia 6420-1 a 6420-7 se pueden configurar para convertir la alimentación de CA de 277 voltios en alimentación de CC de 12 voltios para su provisión a trineos insertados a través de los MPCM 6416-1 a 6416-7 respectivos. Las realizaciones no se limitan a este ejemplo.
Los MPCM 6416-1 a 6416-7 también se pueden disponer para dotar, a trineos insertados, de conectividad de señalización óptica a la infraestructura de conmutación óptica de modo dual 6414, que puede ser igual - o similar a -la infraestructura de conmutación óptica de modo dual 514 de la figura 5. En diversas realizaciones, los conectores ópticos contenidos en los MPCM 6416-1 a 6416-7 se pueden diseñar para acoplarse con conectores ópticos homólogos contenidos en los MPCM de trineos insertados para dotar, a tales trineos, de conectividad de señalización óptica a la infraestructura de conmutación óptica de modo dual 6414 a través de longitudes respectivas del cableado óptico 6422-1 a 6422-7. En algunas realizaciones, cada una de tales longitudes de cableado óptico se puede extender desde su MPCM correspondiente hasta un haz de interconexión óptica 6423 que es externo a los espacios de trineo del bastidor 6402. En diversas realizaciones, el haz de interconexión óptica 6423 se puede disponer para pasar a través de un poste de soporte u otro tipo de elemento de soporte de carga del bastidor 6402. Las realizaciones no están limitadas en este contexto. Debido a que los trineos insertados conectan con una infraestructura de conmutación óptica a través de unos MPCM, se pueden ahorrar los recursos gastados habitualmente en configurar manualmente el cableado de bastidor para dar cabida a un trineo recién insertado.
La figura 65 ilustra un ejemplo de un bastidor 6504 que puede ser representativo de un trineo diseñado para su uso junto con el bastidor 6402 de la figura 64 de acuerdo con algunas realizaciones. El trineo 6504 puede presentar un MPCM 6516 que comprende un conector óptico 6516A y un conector de alimentación 6516B, y que está diseñado para acoplarse con un MPCM homólogo de un espacio de trineo junto con la inserción del MPCM 6516 en ese espacio de trineo. El acoplamiento del MPCM 6516 con un MPCM homólogo de este tipo puede hacer que el conector de alimentación 6516 se acople con un conector de alimentación comprendido en el MPCM homólogo. En general, esto puede habilitar que los recursos físicos 6505 del trineo 6504 obtengan energía desde una fuente externa, a través del conector de alimentación 6516 y el medio de transmisión de alimentación 6524 que acopla de manera conductora el conector de alimentación 6516 a los recursos físicos 6505.
El trineo 6504 también puede incluir una circuitería de interfaz de red óptica de modo dual 6526. La circuitería de interfaz de red óptica de modo dual 6526 puede comprender, en general, una circuitería que es capaz de comunicarse a través de medios de señalización óptica de acuerdo con cada uno de múltiples protocolos de capa de enlace soportados por la infraestructura de conmutación óptica de modo dual 6414 de la figura 64. En algunas realizaciones, la circuitería de interfaz de red óptica de modo dual 6526 puede ser capaz tanto de comunicaciones de protocolo de Ethernet como de comunicaciones de acuerdo con un segundo protocolo de desempeño alto. En diversas realizaciones, la circuitería de interfaz de red óptica de modo dual 6526 puede incluir uno o más módulos de transceptor ópticos 6527, cada uno de los cuales puede ser capaz de transmitir y recibir señales ópticas a través de cada uno de uno o más canales ópticos. Las realizaciones no están limitadas en este contexto.
El acoplamiento del MPCM 6516 con un MPCM homólogo de un espacio de trineo en un bastidor dado puede hacer que el conector óptico 6516A se acople con un conector óptico comprendido en el MPCM homólogo. En general, esto puede establecer la conectividad óptica entre el cableado óptico del trineo y la circuitería de interfaz de red óptica de modo dual 6526, a través de cada uno de un conjunto de canales ópticos 6525. La circuitería de interfaz de red óptica de modo dual 6526 se puede comunicar con los recursos físicos 6505 del trineo 6504 a través de un medio de señalización eléctrica 6528. Además de las dimensiones de los trineos y la disposición de los componentes sobre los trineos para proporcionar un enfriamiento mejorado y habilitar el funcionamiento en una envolvente térmica relativamente superior (por ejemplo, 250 W), como se ha descrito anteriormente con referencia a la figura 64, en algunas realizaciones, un trineo puede incluir una o más características adicionales para facilitar un enfriamiento por aire, tales como un tubo térmico y / o disipadores de calor dispuestos para disipar el calor generado por los recursos físicos 6505. Cabe destacar que, aunque el trineo 6504 de ejemplo representado en la figura 65 no presenta un conector de expansión, cualquier trineo dado que presente los elementos de diseño del trineo 6504 también puede presentar un conector de expansión de acuerdo con algunas realizaciones. Las realizaciones no están limitadas en este contexto.
La figura 66 ilustra un ejemplo de un centro de datos 6600 que puede ser, en general, representativo de uno en / para el cual se pueden implementar una o más técnicas descritas en el presente documento de acuerdo con diversas realizaciones. Como se refleja en la figura 66, se puede implementar un marco de gestión de infraestructura física 6650A para facilitar la gestión de una infraestructura física 6600A del centro de datos 6600. En diversas realizaciones, una función del marco de gestión de infraestructura física 6650A puede ser para gestionar funciones de mantenimiento automatizadas dentro del centro de datos 6600, tales como el uso de equipo de mantenimiento robótico para dar mantenimiento a equipo informático dentro de la infraestructura física 6600A. En algunas realizaciones, la infraestructura física 6600A puede presentar un sistema de telemetría avanzado que realiza notificaciones de telemetría que es suficientemente robusto para soportar una gestión automatizada remota de la infraestructura física 6600A. En diversas realizaciones, información de telemetría proporcionada por un sistema de telemetría avanzado de este tipo puede soportar características tales como capacidades de predicción/prevención de fallos y capacidades de planificación de capacidad. En algunas realizaciones, el marco de gestión de infraestructura física 6650A también se puede configurar para gestionar la autenticación de componentes de infraestructura física usando técnicas de acreditación de hardware. Por ejemplo, unos robots pueden verificar la autenticidad de los componentes antes de la instalación analizando información recopilada a partir de una etiqueta de identificación por radiofrecuencia (RFID) asociada con cada componente a instalar. Las realizaciones no están limitadas en este contexto.
Como se muestra en la figura 66, la infraestructura física 6600A del centro de datos 6600 puede comprender un tejido óptico 6612, que puede incluir una infraestructura de conmutación óptica de modo dual 6614. El tejido óptico 6612 y la infraestructura de conmutación óptica de modo dual 6614 pueden ser iguales que - o similares a - el tejido óptico 412 de la figura 4 y la infraestructura de conmutación óptica de modo dual 514 de la figura 5, respectivamente, y pueden proporcionar conectividad de múltiples protocolos, de ancho de banda alto y de latencia baja entre trineos del centro de datos 6600. Como se ha analizado anteriormente, con referencia a la figura 1, en diversas realizaciones, la disponibilidad de tal conectividad puede hacer factible desagregar y agrupar de forma dinámica recursos tales como aceleradores, memoria y almacenamiento. En algunas realizaciones, por ejemplo, se pueden incluir uno o más trineos de acelerador agrupados 6630 entre la infraestructura física 6600A del centro de datos 6600, cada uno de los cuales puede comprender una agrupación de recursos de acelerador - tales como coprocesadores y / o FPGA, por ejemplo -que está disponible y resulta globalmente accesible por otros trineos a través del tejido óptico 6612 y la infraestructura de conmutación óptica de modo dual 6614.
En otro ejemplo, en diversas realizaciones, se pueden incluir uno o más trineos de almacenamiento agrupados 6632 entre la infraestructura física 6600A del centro de datos 6600, cada uno de los cuales puede comprender una agrupación de recursos de almacenamiento que está disponible y resulta globalmente accesible por otros trineos a través del tejido óptico 6612 y la infraestructura de conmutación óptica de modo dual 6614. En algunas realizaciones, tales trineos de almacenamiento agrupados 6632 pueden comprender agrupaciones de dispositivos de almacenamiento de estado sólido, tales como unidades de estado sólido (SSD). En diversas realizaciones, se pueden incluir uno o más trineos de procesamiento de desempeño alto 6634 entre la infraestructura física 6600A del centro de datos 6600. En algunas realizaciones, los trineos de procesamiento de desempeño alto 6634 pueden comprender agrupaciones de procesadores de desempeño alto, así como características de enfriamiento que potencian el enfriamiento por aire para dar una envolvente térmica superior de hasta 250 W o más. En diversas realizaciones, cualquier trineo de procesamiento de desempeño alto 6634 puede presentar un conector de expansión 6617 que puede aceptar un trineo de expansión de memoria lejana, de tal modo que la memoria lejana que está disponible localmente para ese trineo de procesamiento de desempeño alto 6634 está desagregada de los procesadores y la memoria cercana comprendidos en ese trineo. En algunas realizaciones, un trineo de procesamiento de desempeño alto 6634 de este tipo se puede configurar con memoria lejana usando un trineo de expansión que comprende un almacenamiento de SSD de latencia baja. La infraestructura óptica prevé que los recursos de cómputo sobre un trineo utilicen recursos de SSD, memoria y / o acelerador / FPGA remotos que están desagregados en un trineo ubicado en el mismo bastidor o en cualquier otro bastidor en el centro de datos. Los recursos remotos se pueden ubicar a una distancia de un salto de conmutador o a una distancia de dos saltos de conmutador con respecto a la arquitectura de red de hojas - columna vertebral descrita anteriormente con referencia a la figura 61. Las realizaciones no están limitadas en este contexto.
En diversas realizaciones, se pueden aplicar una o más capas de abstracción a los recursos físicos de la infraestructura física 6600A con el fin de definir una infraestructura virtual, tal como una infraestructura definida por software 6600B. En algunas realizaciones, los recursos informáticos virtuales 6636 de la infraestructura definida por software 6600B se pueden asignar para soportar la provisión de los servicios en la nube 6640. En diversas realizaciones, conjuntos particulares de los recursos informáticos virtuales 6636 se pueden agrupar para su provisión a los servicios en la nube 6640 en forma de los servicios de SDI 6638. Los ejemplos de servicios en la nube 6640 pueden incluir - sin limitación - los servicios de software como servicio (SaaS) 6642, los servicios de plataforma como servicio (PaaS) 6644 y los servicios de infraestructura como servicio (IaaS) 6646.
En algunas realizaciones, la gestión de la infraestructura definida por software 6600B se puede realizar usando un marco de gestión de infraestructura virtual 6650B. En diversas realizaciones, el marco de gestión de infraestructura virtual 6650B se puede diseñar para implementar técnicas de huellas dactilares de carga de trabajo y / o técnicas de aprendizaje automático junto con la gestión de la asignación de los recursos informáticos virtuales 6636 y / o los servicios de SDI 6638 a los servicios en la nube 6640. En algunas realizaciones, el marco de gestión de infraestructura virtual 6650B puede usar / consultar datos de telemetría junto con la realización de tal asignación de recursos. En diversas realizaciones, se puede implementar un marco de gestión de aplicaciones / servicios 6650C con el fin de proporcionar capacidades de gestión de QoS para los servicios en la nube 6640. Las realizaciones no están limitadas en este contexto.
Se pueden haber descrito operaciones en los diagramas de flujo con referencia a realizaciones ilustrativas de otras figuras. Sin embargo, se debería entender que las operaciones de los diagramas de flujo se pueden realizar mediante realizaciones de la invención que no sean las analizadas con referencia a otras figuras, y las realizaciones de la invención analizadas con referencia a otras figuras pueden realizar operaciones diferentes de las analizadas con referencia a diagramas de flujo. Además, aunque los diagramas de flujo en las figuras muestran un orden particular de operaciones realizadas por ciertas realizaciones de la invención, se debería entender que tal orden es ilustrativo (por ejemplo, realizaciones alternativas pueden realizar las operaciones en un orden diferente, combinar ciertas operaciones, superponer ciertas operaciones, etc.).
Una o más partes de realizaciones de la invención se pueden implementar usando diferentes combinaciones de software, firmware y / o hardware. Realizaciones se pueden implementar usando un dispositivo electrónico que almacena y transmite (internamente y / o con otros dispositivos electrónicos a través de una red) código (que se compone de instrucciones de software y que, a veces, se denomina código de programa informático o programa informático) y / o datos que usan medios legibles por máquina (también llamados medios legibles por ordenador), tales como medios de almacenamiento legibles por máquina (por ejemplo, discos magnéticos, discos ópticos, memoria de solo lectura (ROM), dispositivos de memoria flash, memoria de cambio de fase) y medios de transmisión legibles (también denominados portadores) (por ejemplo, señales eléctricas, ópticas, de radio, acústicas u otra forma de señales propagadas - tales como ondas portadoras, señales infrarrojas). Por lo tanto, un dispositivo electrónico (por ejemplo, un ordenador) puede incluir hardware y software, tal como un conjunto de uno o más procesadores acoplados a uno o más medios de almacenamiento legibles por máquina para almacenar código para su ejecución en el conjunto de procesadores y / o para almacenar datos. Por ejemplo, un dispositivo electrónico puede incluir una memoria no volátil que contiene el código, debido a que la memoria no volátil puede hacer persistir código / datos incluso cuando el dispositivo electrónico está apagado (cuando se retira la alimentación) y, mientras el dispositivo electrónico está encendido, aquella parte del código que va a ser ejecutada por el procesador o procesadores de ese dispositivo electrónico se copia habitualmente desde la memoria no volátil, más lenta, en la memoria volátil (por ejemplo, memoria de acceso aleatorio dinámica (DRAM), memoria de acceso aleatorio estática (SRAM)) de ese dispositivo electrónico. Los dispositivos electrónicos habituales también incluyen un conjunto o una o más interfaz o interfaces de red físicas para establecer conexiones de red (para transmitir y / o recibir código y / o datos usando señales de propagación) con otros dispositivos electrónicos.

Claims (13)

REIVINDICACIONES
1. Un procesador que comprende:
un descodificador (140, 314) para descodificar una instrucción para configurar una línea de memoria caché para indicar todo ceros;
una unidad de ejecución (162), acoplada al descodificador y en respuesta a la descodificación de la instrucción, para emitir una orden de escritura para iniciar una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria;
una memoria caché coherente (3904), acoplada a la unidad de ejecución, para recibir la orden de escritura, para determinar si hay un acierto en la memoria caché coherente en respuesta a la orden de escritura, para determinar si un estado de protocolo de coherencia de memoria caché (4065) de la línea de memoria caché (4070) acertada es un estado modificado o un estado exclusivo, para configurar una línea de memoria caché para indicar todo ceros cuando el estado de protocolo de coherencia de memoria caché es el estado modificado o el estado exclusivo, y para emitir la orden de escritura hacia una interconexión (3920) cuando hay una recepción de respuesta a fallo a la orden de escritura;
el procesador comprende además la interconexión, en donde la interconexión, en respuesta a la recepción de la orden de escritura, está configurada para emitir un sondeo a cada una de una pluralidad de otras memorias caché coherentes para las que se ha de determinar si hay un acierto, en donde la interconexión, o la unidad de ejecución en respuesta a un mensaje desde la interconexión, está configurada para hacer que una línea de memoria caché en una de las memorias caché coherentes indique todo ceros cuando la orden de escritura y el sondeo no hicieron que se realizara la escritura de ceros de tamaño de línea de memoria caché.
2. El procesador de la reivindicación 1, en donde la memoria caché coherente también ha de hacer que el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché sea un estado no válido y emitir la orden de escritura hacia la interconexión cuando el estado de protocolo de coherencia de memoria caché de la línea de memoria caché acertada no es el estado modificado o el estado exclusivo.
3. El procesador de la reivindicación 1, en donde el descodificador y la unidad de ejecución son parte de un primer núcleo, y en donde la pluralidad de memorias caché coherentes incluye una memoria caché coherente de un segundo núcleo.
4. El procesador de la reivindicación 1, en donde la línea de memoria caché se ha de configurar para indicar todo ceros escribiendo sobre datos en la línea de memoria caché con ceros.
5. El procesador de la reivindicación 1, en donde la línea de memoria caché se ha de configurar para indicar todo ceros invalidando la línea de memoria caché en una vía de la memoria caché en la que reside actualmente esa línea de memoria caché, y escribir una línea de memoria caché de ceros en una vía diferente de la memoria caché.
6. El procesador de la reivindicación 1, en donde la línea de memoria caché se ha de configurar para indicar todo ceros cambiando un estado de etiqueta en lugar de datos.
7. El procesador de la reivindicación 1, en donde la línea de memoria caché se ha de desencadenar para configurarse para indicar todo ceros enviando una línea de ceros a una memoria temporal intermedia.
8. El procesador de la reivindicación 1, en donde la línea de memoria caché se ha de desencadenar para configurarse para indicar todo ceros escribiendo fragmentos de ceros más pequeños que la línea de memoria caché en una memoria temporal intermedia y escribiendo de forma concurrente los fragmentos en la línea de memoria caché.
9. El procesador de la reivindicación 1, en donde la ejecución de la instrucción se ha de ordenar débilmente.
10. Un método que comprende, para configurar una línea de memoria caché para indicar todo ceros:
descodificar, por un primer agente (3900), una instrucción para poner a cero una línea de memoria caché, ejecutar, por el primer agente, la instrucción, en donde ejecutar la instrucción ha de incluir emitir, a una primera memoria caché coherente acoplada al primer agente, una orden de escritura que provoca una escritura de ceros de tamaño de línea de memoria caché en una dirección de memoria;
determinar, por el primer agente, si hay un acierto en una línea de memoria caché de la memoria caché coherente; determinar, por el primer agente en respuesta a determinar que hay un acierto, si un estado de protocolo de coherencia de la línea de memoria caché acertada es modificado o exclusivo;
configurar, por el primer agente en respuesta a determinar que el estado de protocolo de coherencia de la línea de memoria caché acertada es línea de memoria caché modificada o exclusiva, la línea de memoria caché para indicar todo ceros;
emitir, por el primer agente en respuesta a determinar que no hay un acierto, la orden de escritura hacia una interconexión (3920);
emitir, por la interconexión en respuesta a la orden de escritura, un sondeo a cada una de una pluralidad de otras memorias caché coherentes para las que se ha de determinar si hay un acierto; y
hacer, por la interconexión, o por la unidad de ejecución en respuesta a un mensaje desde la interconexión, que una línea de memoria caché en una de las memorias caché coherentes se configure para indicar todo ceros cuando la orden de escritura y el sondeo no hicieron que se realizara la escritura de ceros de tamaño de línea de memoria caché.
11. El método de la reivindicación 10, que comprende además determinar, en respuesta a emitir, por la interconexión en respuesta a la orden de escritura, un sondeo a cada una de una pluralidad de otras memorias caché coherentes para las que se ha de determinar si hay un acierto, si una de la orden de escritura y el sondeo hizo que se realizara la escritura de ceros de tamaño de línea de memoria caché.
12. El método de la reivindicación 10, en donde configurar, por el primer agente en respuesta a determinar que el estado de protocolo de coherencia de la línea de memoria caché acertada es línea de memoria caché modificada o exclusiva, también incluye suprimir sondeos.
13. El método de la reivindicación 10, que comprende además determinar, por el primer agente en respuesta a determinar que el estado de protocolo de coherencia de la línea de memoria caché acertada no es línea de memoria caché modificada o exclusiva, haciendo de ese modo que el estado de protocolo de coherencia de memoria caché de esa línea de memoria caché sea no válido.
ES16923787T 2016-12-12 2016-12-12 Aparatos y métodos para una arquitectura de procesador Active ES2895266T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2016/066242 WO2018111228A1 (en) 2016-12-12 2016-12-12 Apparatuses and methods for a processor architecture

Publications (1)

Publication Number Publication Date
ES2895266T3 true ES2895266T3 (es) 2022-02-18

Family

ID=62559007

Family Applications (1)

Application Number Title Priority Date Filing Date
ES16923787T Active ES2895266T3 (es) 2016-12-12 2016-12-12 Aparatos y métodos para una arquitectura de procesador

Country Status (10)

Country Link
EP (2) EP3889787B1 (es)
JP (1) JP7095208B2 (es)
KR (1) KR20190086669A (es)
CN (1) CN109952566A (es)
BR (1) BR112019009566A2 (es)
DE (1) DE112016007516T5 (es)
ES (1) ES2895266T3 (es)
PL (1) PL3552108T3 (es)
TW (2) TW202219748A (es)
WO (1) WO2018111228A1 (es)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180150256A1 (en) 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10929139B2 (en) 2018-09-27 2021-02-23 Qualcomm Incorporated Providing predictive instruction dispatch throttling to prevent resource overflows in out-of-order processor (OOP)-based devices
CN110032407B (zh) 2019-03-08 2020-12-22 创新先进技术有限公司 提升cpu并行性能的方法及装置和电子设备
US11210100B2 (en) 2019-01-08 2021-12-28 Apple Inc. Coprocessor operation bundling
GB2581140A (en) 2019-01-31 2020-08-12 Ernst & Young Gmbh System and method of obtaining audit evidence
US10983797B2 (en) 2019-05-28 2021-04-20 International Business Machines Corporation Program instruction scheduling
TWI748513B (zh) * 2020-06-12 2021-12-01 鴻海精密工業股份有限公司 資料處理方法、系統、電子裝置及存儲介質
US11314657B1 (en) * 2020-12-02 2022-04-26 Centaur Technology, Inc. Tablewalk takeover
CN113626205B (zh) * 2021-09-03 2023-05-12 海光信息技术股份有限公司 处理器、物理寄存器管理方法及电子装置
TWI779923B (zh) * 2021-11-11 2022-10-01 南亞科技股份有限公司 圖案驗證系統及其操作方法
CN115858420B (zh) * 2023-02-23 2023-05-12 芯砺智能科技(上海)有限公司 用于支持多处理器架构的系统缓存架构和芯片

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03231345A (ja) * 1990-02-06 1991-10-15 Fujitsu Ltd キャッシュ装置
GB2260429B (en) * 1991-10-11 1995-05-24 Intel Corp Versatile cache memory
US5551001A (en) * 1994-06-29 1996-08-27 Exponential Technology, Inc. Master-slave cache system for instruction and data cache memories
US5809548A (en) * 1996-08-30 1998-09-15 International Business Machines Corporation System and method for zeroing pages with cache line invalidate instructions in an LRU system having data cache with time tags
US6374330B1 (en) * 1997-04-14 2002-04-16 International Business Machines Corporation Cache-coherency protocol with upstream undefined state
US6345339B1 (en) * 1998-02-17 2002-02-05 International Business Machines Corporation Pseudo precise I-cache inclusivity for vertical caches
CN1230721A (zh) * 1998-02-17 1999-10-06 国际商业机器公司 具有指令和数据的悬停(h)状态的高速缓存相关协议
US6178461B1 (en) * 1998-12-08 2001-01-23 Lucent Technologies Inc. Cache-based compaction technique for internet browsing using similar objects in client cache as reference objects
JP4123621B2 (ja) * 1999-02-16 2008-07-23 株式会社日立製作所 主記憶共有型マルチプロセッサシステム及びその共有領域設定方法
KR100373849B1 (ko) * 2000-03-13 2003-02-26 삼성전자주식회사 어소시어티브 캐시 메모리
US6745297B2 (en) * 2000-10-06 2004-06-01 Broadcom Corporation Cache coherent protocol in which exclusive and modified data is transferred to requesting agent from snooping agent
US7454577B2 (en) * 2005-02-10 2008-11-18 International Business Machines Corporation Data processing system and method for efficient communication utilizing an Tn and Ten coherency states
US7290094B2 (en) 2005-05-17 2007-10-30 International Business Machines Corporation Processor, data processing system, and method for initializing a memory block to an initialization value without a cache first obtaining a data valid copy
US7707361B2 (en) * 2005-11-17 2010-04-27 Apple Inc. Data cache block zero implementation
US7451277B2 (en) * 2006-03-23 2008-11-11 International Business Machines Corporation Data processing system, cache system and method for updating an invalid coherency state in response to snooping an operation
US7475196B2 (en) 2006-03-23 2009-01-06 International Business Machines Corporation Processor, data processing system, and method for initializing a memory block in a data processing system having multiple coherency domains
US7484042B2 (en) * 2006-08-18 2009-01-27 International Business Machines Corporation Data processing system and method for predictively selecting a scope of a prefetch operation
CN101944012B (zh) * 2009-08-07 2014-04-23 威盛电子股份有限公司 指令处理方法以及其所适用的超纯量管线微处理器
US9424190B2 (en) * 2011-08-19 2016-08-23 Freescale Semiconductor, Inc. Data processing system operable in single and multi-thread modes and having multiple caches and method of operation
US9684603B2 (en) * 2015-01-22 2017-06-20 Empire Technology Development Llc Memory initialization using cache state
WO2016141817A1 (zh) * 2015-03-06 2016-09-15 华为技术有限公司 数据备份装置及方法

Also Published As

Publication number Publication date
EP3552108B1 (en) 2021-08-18
PL3552108T3 (pl) 2022-01-03
EP3889787A1 (en) 2021-10-06
TW202219748A (zh) 2022-05-16
JP2020513605A (ja) 2020-05-14
JP7095208B2 (ja) 2022-07-05
WO2018111228A1 (en) 2018-06-21
CN109952566A (zh) 2019-06-28
DE112016007516T5 (de) 2019-10-02
EP3552108A1 (en) 2019-10-16
TWI751222B (zh) 2022-01-01
BR112019009566A2 (pt) 2019-08-06
EP3552108A4 (en) 2020-07-15
KR20190086669A (ko) 2019-07-23
EP3889787B1 (en) 2023-11-01
TW201823971A (zh) 2018-07-01

Similar Documents

Publication Publication Date Title
ES2895266T3 (es) Aparatos y métodos para una arquitectura de procesador
US20220237123A1 (en) Apparatuses and methods for a processor architecture
US11093277B2 (en) Systems, methods, and apparatuses for heterogeneous computing
US20190205244A1 (en) Memory system, method and computer program products
US10089229B2 (en) Cache allocation with code and data prioritization
WO2024000363A1 (en) Variable cacheline set mapping
US20230418750A1 (en) Hierarchical core valid tracker for cache coherency