Aparato, sistema y método de dispositivo de memoria para conjuntos múltiples de instrucciones de tipo especulativo
Antecedentes de la invención Un conjunto de instrucciones o tareas especulativas en una arquitectura de múltiples conjuntos de tareas de tipo especulativo puede incluir un cuerpo de dicho conjunto de instrucciones o tareas y un sector de precálculo. El término "tarea" ("thread"), tal como se utiliza en esta descripción, puede hacer referencia a un conjunto de una o varias instrucciones . El término "tarea especulativa"
( "speculative thread" ) , tal como es bien conocido en esta técnica, puede hacer referencia a una tarea que es ejecutada basándose en condiciones de entrada o condiciones iniciales especulativas. Una tarea especulativa puede pasar a ser comprometida ("commited") después de validación de sus condiciones iniciales. El segmento de precálculo o precomputación de una tarea especulativa puede incluir un subconjunto de instrucciones de una tarea de generación dinámica que ha generado dinámicamente la tarea especulativa. Las dependencias de datos entre la tarea de generación dinámica y la tarea generada dinámicamente pueden ser manejadas por el segnerrco de precálculo de la tarea generada dinámicamente. Durante la ejecución de la tarea especulativa, el segmento de precálculo se puede ejecutar para producir uno o varios valores iniciales "vivos" que son consumidos por el cuerpo de tarea de la tarea especulativa.
Para producir valores iniciales vivos, el segmento de precálculo de una tarea especulativa puede requerir acceso a ciertos valores de memoria "antiguos", por ejemplo, valores del momento en el que la tarea fue generada dinámicamente, en vez de los valores producidos de manera más reciente para dicha tarea. No obstante, otras partes de la tarea especulativa, por ejemplo, el cuerpo de la misma, pueden requerir acceso a valores de memoria que se han actualizado de manera muy reciente. Por lo tanto, una arquitectura multitarea especulativa con precálculo vivo puede requerir una configuración de memoria o disposición de memoria que sea capaz de soportar tanto el segmento de precálculo como el cuerpo de la tarea de una tarea especulativa . Breve descripción de los dibujos
La invención se comprenderá y se apreciará de manera más completa en base a la siguiente descripción detallada de diferentes realizaciones de la misma, en relación con los dibujos adjuntos, en los cuales: la figura 1 es un diagrama de bloques que muestra un aparato adaptado para ejecutar un código de programa de ordenador por multitareas especulativas con precálculo vivo de acuerdo, como mínimo, con una realización de la invención; la figura 2 es un diagrama de bloques de una unidad de tarea que tiene configuración de memoria adaptada para soportar múltiples versiones y una unidad de proceso que ejecuta una tarea especulativa de acuerdo con realizaciones ilustrativas de la invención;
la figura 3 es un diagrama de flujo esquemático de un método de generación dinámica de una tarea de acuerdo con realizaciones ilustrativas de la invención; la figura 4 es un diagrama de flujo esquemático de un método de realización del segmento de precálculo de una tarea especulativa según realizaciones ilustrativas de la invención; la figura 5 es un diagrama de flujo esquemático de un método de realización del cuerpo de la tarea de una tarea especulativa según realizaciones ilustrativas de la invención; la figura 6 es un diagrama de flujo esquemático de un método de ejecución de una instrucción de carga en un segmento de precálculo según realizaciones ilustrativas de la invención; la figura 7 es un diagrama de flujo esquemático de un método de realización de una instrucción de almacenamiento en un segmento de precálculo según realizaciones ilustrativas de la invención; la figura 8 es un diagrama de flujo esquemático de un método de ejecución de una instrucción de carga en el cuerpo de la tarea de una tarea especulativa de acuerdo con realizaciones ilustrativas de la presente invención; y la figura 9 es un diagrama de flujo esquemático de un método de realización de una instrucción de almacenamiento en el cuerpo de la tarea de una tarea especulativa, de acuerdo con realizaciones ilustrativas de la invención.
Se observará que, a efectos de simplicidad y claridad de ilustración, los elementos mostrados en las figuras no
se han dibujado necesariamente a escala. Por ejemplo, las dimensiones de algunos de estos elementos se pueden haber exagerado con respecto a otros elementos para mayor claridad . Descripción detallada de realizaciones de la invención
En la siguiente descripción detallada, se indicarán numerosos detalles específicos a efectos de proporcionar una comprensión completa de las realizaciones de la invención. No obstante, se comprenderá por los técnicos en la materia que se pueden llevar a cabo realizaciones de la invención sin estos detalles específicos. En otros casos, no se han descrito de manera detallada métodos y procesos que son conocidos a efectos de no dificultar la comprensión de las realizaciones de la invención. Algunas partes de la descripción detallada siguiente se presentan en términos de algoritmos y representaciones simbólicas de operaciones en bits de datos o señales digitales binarias dentro de una memoria de ordenador. Estas descripciones de algoritmos y representaciones pueden ser técnicas utilizadas por los expertos en el proceso de datos para trasladar las bases de su trabajo a otros técnicos en la materia.
Un algoritmo se considerará en esta descripción, y de modo general, una secuencia autónoma de actos o de operaciones que conducen a un resultado deseado. Éstas incluyen manipulaciones físicas de cantidades físicas. Habitualmente, si bien no de modo necesario, estas cantidades adoptan la forma de señales eléctricas o magnéticas capaces de ser almacenadas, transferidas,
combinadas, comparadas y manipuladas de otras formas. Se ha observado como conveniente en ciertos casos, principalmente por razones de utilización común, hacer referencia a estas señales como bits, valores, elementos, símbolos, caracteres, términos, números o similares. Se debe comprender, no obstante, que todos estos términos y otros similares se tienen que asociar con las cantidades físicas apropiadas y son meramente etiquetas de conveniencia aplicadas a estas cantidades. Si no se indica de otro modo, tal como queda evidente de las explicaciones que siguen, se apreciará que en todas las explicaciones los términos tales como "proceso" , "cálculo" , "proceso de ordenador" , "determinación" o similares se refieren a la acción y/o proceso de un ordenador o de un sistema de ordenador, o dispositivo de cálculo electrónico similar, que manipula y/o transforma datos representados en forma de cantidades físicas, tales como datos electrónicos, dentro de los registros del sistema del ordenador y/o de sus memorias en otros datos representados de manera similar y cantidades físicas dentro de las memorias del sistema del ordenador, registros u otros dispositivos de almacenamiento de información, de transmisión o de visualización.
Algunas realizaciones de la invención pueden ser implementadas , por ejemplo, utilizando un medio legible a máquina o un artículo que pueda almacenar una instrucción o un juego de instrucciones que, si se ejecutan por la máquina, provocan que ésta lleve a cabo un método y/o operaciones de acuerdo con realizaciones de la invención.
Esta máquina puede incluir, por ejemplo, cualquier plataforma de proceso adecuada, plataforma de proceso por ordenador, dispositivo de proceso por ordenador, dispositivo de proceso, sistema de proceso por ordenador, sistema de proceso, ordenador, procesador o similar, y se puede implementar realizando cualquier combinación adecuada de hardware y/o de software .
El medio o artículo que es legible a máquina puede incluir, por ejemplo, cualquier tipo adecuado de unidad de memoria, estructura de memoria, artículo de memoria, medio de memoria, dispositivo de almacenamiento, artículo de almacenamiento, medio de almacenamiento y/o unidad de almacenamiento, por ejemplo, memoria, medios extraíbles o no extraíbles, medios que pueden ser borrados o no, medios que se pueden escribir o reescribir, medios digitales o analógicos, discos duros, discos blandos, discos compactos de memoria de lectura solamente (CD-ROM) , discos compactos gravables (CD-R) , discos compactos que se pueden reescribir
(CD-RW), discos ópticos, soportes magnéticos, varios tipos de discos digitales versátiles (DVD), cinta magnéticas, cásete o similares.
Las instrucciones pueden comprender cualquier tipo adecuado de código, por ejemplo, código fuente, código resumido, código interpretado, código ejecutable, código estático, código dinámico o similares, y se pueden implementar utilizando cualquier lenguaje adecuado de alto nivel, bajo nivel, orientado al objeto, visual, lenguaje de programación resumido y/o interpretado, por ejemplo, C,
C++, Java, BASIC, Pascal, Fortran, Cobol, lenguaje de ensamblado, código de máquina o similares.
Las realizaciones de la invención pueden incluir aparatos para llevar a cabo las operaciones indicadas . Estos aparatos pueden estar específicamente construidos para los objetivos deseados, o pueden incluir un ordenador de tipo general activado selectivamente o reconfigurado por un programa de ordenador almacenado en el ordenador. Este programa de ordenador puede ser almacenado en un medio de almacenamiento legible por el ordenador, por ejemplo, sin que ello sirva de limitación, cualquier tipo de disco incluyendo discos blandos, discos ópticos, CD-ROM, discos magnético ópticos, memoria de lectura solamente (ROM), memorias de acceso al azar (RAM) , memorias de lectura solamente programables eléctricamente (EPROM) , memorias de lectura solamente borrables y programables eléctricamente (EEPROM), tarjetas magnéticas u ópticas, o cualquier otro tipo de soporte adecuado para almacenar instrucciones electrónicas, y capaz de ser acoplado al bus de un sistema de ordenador.
Los procesos y visualizaciones que se presentan en esta descripción no están relacionados de manera intrínseca a ningún ordenador específico u otro aparato. Se pueden utilizar otros varios sistemas de utilización general con programas de acuerdo con lo que se da a conocer en esta descripción, o se puede considerar conveniente construir un aparato más especializado para llevar a cabo el método deseado. La estructura deseada para una serie de estos sistemas quedará evidente de la descripción siguiente.
Además, no se describen realizaciones de la invención haciendo referencia a ningún lenguaje de programación específico. Se observará que se puede utilizar una amplia variedad de lenguajes de programación para implementar la materia que se da a conocer en la invención de acuerdo con su descripción.
En la siguiente descripción, se presentan diferentes figuras, esquemas, diagramas de flujo, modelos y descripciones como medios distintos para trasladar de manera efectiva las bases de la invención y para ilustrar diferentes realizaciones de la misma que se proponen en la presente solicitud de patente. Se comprenderá por los técnicos en la materia que todo ello tiene carácter ilustrativo, y que no se debe considerar como limitativo de la invención.
Las realizaciones de la presente invención dan a conocer una configuración de memoria de múltiples versiones que es capaz de conservar valores múltiples por tarea o grupo de instrucciones ("thread") especulativo para la misma localización de memoria, para soportar de esta manera tanto precálculos o precomputación "viva" ("live-in") y realización de un bloque de una tarea o conjunto de instrucciones especulativas. Además, realizaciones de la invención proporcionan la validación de valores de entrada que pueden ser procesados por ordenador y utilizados en la ejecución de tarea o conjunto de instrucciones especulativo .
La figura 1 es un diagrama de bloques ilustrativo de un aparato (100) adaptado para ejecutar un código de
programa de ordenador por multiconj untos de instrucciones de tipo especulativo con precálculo vivo, de acuerdo con realizaciones ilustrativas de la invención. El aparato
(100) puede comprender, por ejemplo, un procesador (104) que puede ser impletnentado en un dispositivo semiconductor, conectado operativamente a una configuración de memoria, por ejemplo, una jerarquía de memoria "off-chip" (106), con intermedio de un bus de interconexión (108) . El procesador
(104) puede comprender una o varias unidades de tareas o conjuntos de instrucciones, por ejemplo, N unidades incluyendo las unidades de conjuntos de instrucciones (112) y (114) para realizar una o varias tareas. Una unidad de tarea o conjunto de instrucciones puede incluir memorias on-chip, por ejemplo, en forma de antememorias ("caches") y/o tampones, y otro hardware deseable. Las unidades (112) y (114) pueden ser conectadas operativamente a una unidad lógica de control de versión (VCL) (120) con intermedio de un bus de interconexión (110) . La unidad VCL (120) puede controlar la interacción de lectura y escritura entre unidades de tarea, por ejemplo, las unidades (112) y (114) .
Una lista no exhaustiva de ejemplos para el aparato (100) puede comprender un ordenador personal de sobremesa, una estación de trabajo, un ordenador servidor, un ordenador "laptop" , un ordenador de agenda, un ordenador manual, un ordenador asistente digital personal (PDA) , teléfono móvil, consola de juegos y oimilares.
Una lista no exhaustiva de ejemplos para el procesador (104) puede comprender una unidad central de proceso (CPU) , un procesador de señales digitales (DSP) , un ordenador con
juego de instrucciones reducido (RISC), un ordenador con juego de instrucciones complejo (CISC) y similares. El procesador (104) puede formar parte también de un circuito integrado específico de una aplicación (ASIC) , o puede formar parte de un producto estándar específico de una aplicación (ASSP) .
El procesador (104) puede llevar incorporado hardware y tecnologías, por ejemplo, tecnologías de "hyper- threading" (Intel®), y puede soportar "paralelismo a nivel de thread" en el proceso simultáneo de varios conjuntos de instrucciones. Cada unidad thread, por ejemplo, la unidad
(112) o (114), del procesador (104), puede ser considerada por lo tanto como un "procesador virtual" , o núcleo, tal como es conocido en la técnica, y cada una de las unidades (112) y (114) puede procesar conjuntos de instrucciones
("threads") separadamente.
Una lista no exhaustiva de ejemplos de memoria off- chip (106) puede incluir dispositivos semiconductores del tipo siguiente o cualquier combinación de los mismos, tal como dispositivos de memoria de acceso al azar síncrona de tipo dinámico (SDRAM) , dispositivos de memoria de acceso al azar de tipo dinámico RAMBUS (RDRAM) , estructuras de memoria de datos dobles (DDR) , dispositivos de memoria de acceso al azar de tipo estático (SRAM) , estructuras de memoria flash, dispositivos de memoria de lectura solamente de tipo programable legible eléctricamente (EEPROM) , dispositivo de memoria de acceso al azar no volátil
(NVRAM) , memoria extraíble de bus serie universal (USB) y similares; dispositivos ópticos, tales como memorias de
disco compacto de lectura solamente (CD-ROM) y similares; así como dispositivos magnéticos, tales como discos duros, discos blandos, cinta magnética y similares. La memoria off-chip (106) puede estar dispuesta de modo fijo dentro del aparato (100) o de forma desmontable.
La figura 2 es un diagrama de bloques que muestra una unidad de tratamiento de tareas o conjuntos de instrucciones (200) que tiene una configuración de memoria (201) y una unidad de proceso (202) . Para los objetivos del ejemplo, la figura 2 muestra que la unidad de proceso (202) de la unidad de tratamiento de conjunto de instrucciones
(200) puede incluir una antememoria de instrucciones (240), que puede ejecutar un conjunto de instrucciones (241) . La figura 2 muestra además una unidad de tratamiento de tareas o conjuntos de instrucciones (250) para realizar un conjunto de instrucciones (251) . A los efectos de la explicación del ejemplo específico en la figura 2, se supone que el conjunto de instrucciones (251) ha sido generado dinámicamente por el conjunto de instrucciones (241) . La figura 2 muestra también una unidad tradicional
(260) para el proceso de conjuntos de instrucciones para ejecutar una tarea o conjunto de instrucciones (261) .
También en este caso, a efectos de la explicación, la figura 2 muestra un ejemplo que supone que el conjunto de instrucciones (261) ha generado dinámicamente el conjunto de instrucciones (241) de acuerdo, como mínimo, con una realización de la invención. La configuración de memoria
(201) puede ser un dispositivo de memoria capaz de soportar versiones múltiples, y puede incluir una serie de
estructuras de memoria, por ejemplo, una estructura de memoria (210) que incluye uno o más "tampones antiguos", por ejemplo, los tampones antiguos (212) y (214) . La configuración de memoria (201) puede incluir además un "tampón de segmento" (220) y una antememoria de datos "nivel 1" Ll. Los términos y detalles de "tampón antiguo", "tampón del segmento" y "antememoria de datos L-I" se describen en las secciones siguientes. Si bien la figura 2 muestra tres unidades de tareas, se apreciará por los técnicos en la materia que las realizaciones de la invención se pueden implementar con más de tres unidades de tareas o menos de tres unidades de tareas, de acuerdo con las exigencias del sistema específico. Además, se apreciará que la unidad de tarea según las realizaciones de la invención puede ejecutar tareas especulativas así como tareas no especulativas.
Una estructura de memoria, por ejemplo, el tampón de segmento (220) o la antememoria de datos L-I (230), pueden tener múltiples entradas o líneas. El término "línea" o "entrada" en esta descripción puede hacer referencia a la granularidad de la unidad de memoria controlada por un procesador o unidad de tarea, y puede comprender varias localizaciones de memoria y valores de datos.
La tarea o conjunto de instrucciones (251) puede tener el segmento de precálculo (252) y un cuerpo (254) de la tarea. La tarea (261) puede tener un segmento de precálculo
(262) y un cuerpo (264) de la tarea. Las unidades de tarea
(250) y (260) , que ejecutan las tareas (251) y (261) , pueden tener configuraciones de memoria similares a la
unidad de tarea (200) y por lo tanto sus detalles no se han mostrado con el objetivo de que la ilustración sea más simple. La tarea (241), ejecutada por la unidad de proceso
(202) de la unidad de tarea (200), puede tener un segmento de precálculo (242) y un cuerpo (244) de la tarea. La tarea
(241) puede ser designada como tarea local con respecto a la unidad de tarea (200) .
La tarea (241) puede generar dinámicamente la tarea (251) , y por lo tanto la tarea (241) puede ser una "tarea matriz" de la tarea (251) , y la tarea (251) puede ser una
"tarea filial" de la tarea (241) . Por otra parte, la tarea
(241) puede ser generada dinámicamente por la tarea (261) y por lo tanto la tarea (261) puede 3er una tarea matriz de la tarea (241) , y dicha tarea (241) puede ser una tarea filial de la tarea (261) . El segmento de precálculo (252) de la tarea especulativa (251) puede leer valores de memoria generados por su tarea generada dinámicamente (241) en el momento en el que la tarea especulativa (251) ha sido generada dinámicamente. Estos valores de memoria pueden ser leídos por la tarea (251) a partir, por ejemplo, de la antememoria (230) de datos Ll de la unidad de tarea (200) . De acuerdo, como mínimo, con una realización de la invención, las operaciones de "almacenamiento" llevadas a cabo por la tarea matriz (241) para reservar valores actualizados de la antememoria de datos Ll, después de la creación de la tarea filial (251) , se pueden hacer "invisibles" para el segmento de precálculo (252) de la tarea filial (251) por la configuración de memoria (201) . En otras palabras, los valores de memoria en el momento en
el que la tarea filial (251) fue generada dinámicamente se pueden conservar por la configuración de memoria (201) . De acuerdo, como mínimo, con una realización de la invención, las operaciones de almacenamiento llevadas a cabo por la tarea matriz (241) se pueden poner a disposición del cuerpo
(254) de la tarea de la tarea filial (251) de manera que los valores actualizados de la antememoria de datos Ll
(230) pueden ser utilizados en la ejecución del cuerpo de tarea (254) de la tarea filial (251) . El término "tampón antiguo" , en esta descripción, se puede referir a una estructura de memoria adaptada para almacenar valores de otras memorias, por ejemplo, la antememoria de datos Ll de una unidad de memoria cuando una tarea ejecutada por la unidad de tarea genere dinámicamente una o varias tareas especulativas. Por ejemplo, cuando la tarea especulativa (251) es generada dinámicamente, el tampón antiguo (212) puede ser destinado a la tarea generada (251) en la unidad de tarea (200) de la tarea de generación dinámica (241) . De acuerdo con realizaciones ilustrativas de la invención, los valores almacenados en el tampón antiguo (212) de la unidad de tareas (200) pueden ser facilitados al segmento de precálculo (252) de la tarea (251) para el cálculo de valores iniciales vivos hacia el cuerpo (254) de la tarea. La unidad de tarea (200) puede tener tantos tampones antiguos como número de tareas filiales generadas dinámicamente por la unidad de tarea (200) .
Una unidad de tarea puede llevar a cabo operaciones de almacenamiento en sus memorias, por ejemplo, antememoria de
datos Ll, durante la ejecución de una tarea. Por ejemplo, antes de escribir valores nuevos en la localización de la antememoria de datos Ll (230), la unidad de tarea (200) puede almacenar valores existentes en la localización de la antememoria de datos Ll (230) a la estructura de memoria
(210) de tampones antiguos que han sido asignados a la tarea filial generada dinámicamente (251) y otras tareas filiales. Si ya se han almacenado valores de la localización de la antememoria de datos Ll (230) en la estructura de memoria (210) de tampones antiguos, no se necesita entonces soporte duplicado y los valores de esta antememoria Ll pueden ser descartados. En este caso, se pueden sobrescribir nuevos valores en la misma localización. El término "tampón de segmento" , en la presente invención, puede hacer referencia a una estructura de memoria adaptada para el almacenamiento de valores iniciales vivos calculados por pχ-ecálculo de una tarea especulativa. Cuando una tarea especulativa es generada dinámicamente, la tarea generada dinámicamente puede ser asignada, en una unidad de tarea que ejecuta la tarea especulativa generada dinámicamente, con un tampón de segmento vacío. Por ejemplo, la tarea (241) puede ser una tarea especulativa y cuando es generada dinámicamente por la tarea (261) , la unidad de tarea (200) que ejecuta la tarea (241) puede haber asignado el tampón de segmento
(220) a la tarea (241) . El tampón de segmento (220) puede incluir múltiples entradas. Una entrada puede incluir, por ejemplo, un bit de validación "V", por ejemplo, el bit "V"
(222), y un vector de bits de lectura "Rmask" , por ejemplo, los bits "Rmask" (224) . Los bits "Rmask" (224) pueden contener tantos bits como número de unidades de tarea existen en un procesador, por ejemplo, el procesador (104) (figura 1) . Las funciones del bit "V" y de los bits "Rmask" se describen a continuación.
De acuerdo con realizaciones ilustrativas de la invención, el precálculo puede escribir valores en líneas del tampón de segmento de una unidad de tarea. Por ejemplo, cuando se escribe una nueva línea en el tampón de segmento (220) durante la ejecución del segmento de precálculo (242) de la tarea (241) , el bit "V" (222) puede ser dispuesto para indicar que la línea es válida. Durante la ejecución del cuerpo (244) de la tarea correspondiente a la tarea (241) u otras tareas más especulativas, se pueden leer valores de las entradas de memoria del tampón de segmento (220) . Si la lectura es realizada por la tarea (241) , local con respecto a la unidad de tarea (200), el bit "V" (222) puede ser repuesto para invalidar la línea que ha sido leída que puede ser entonces copiada en la antememoria de datos Ll (230) . Si la lectura realizada por una tarea posterior, distinta y más especulativa, el bit "V" (222) puede no ser repuesto, es decir, se puede mantener en su disposición inicial, y la línea se mantiene válida. En ambos casos, el bit correspondiente leído en los bits "Rmask" (224) es utilizado para indicar cuál es la tarea que ha leído la línea.
Antes de que una tarea especulativa pase a ser una tarea no especulativa, las entradas en el tampón de
segmento de la tarea se pueden validar verificando si el cuerpo de la tarea ha sido ejecutado con valores correctos de entrada o si puede haber ocurrido un fallo de especulación durante la ejecución. Esta validación puede ser realizada del modo siguiente. Las entradas del tampón de segmento que tienen dispuestos alguno de sus bits "Rmask" pueden ser enviadas a las tareas no especulativas previas para validar sus valores. En situaciones en las que ha tenido lugar un fallo de especulación, las tareas especulativas posteriores, que pueden haber referenciado las entradas del tampón de segmento de la tarea y todos sus sucesores, se pueden anular. Después de que la tarea especulativa pasa a ser no especulativa, es decir, comprometida, los valores almacenados en el tampón de segmento se pueden anular puesto que son potencialmente erróneos. Todas las líneas de antememorias de datos Ll local son grabadas .
La antememoria de datos Ll (230) puede incluir múltiples "líneas" de memoria" . Una línea de antememoria de datos Ll (230) puede incluir un conjunto de bits de situación que incluye un "bit antiguo" (232) . De acuerdo con realizaciones ilustrativas de la invención, la tarea (241) que se realiza en la unidad de tarea (200) puede llevar a cabo una carga en una línea de la antememoria de datos Ll (230) durante el precálculo. Cuando el valor cargado procede de un tampón antiguo de la tarea matriz (261) asignada para la tarea (241) o de las antememorias de datos Ll o tampones de segmento de otras tareas remotas que son menos especulativas que la tarea matriz (261) , un bit
antiguo de la línea, por ejemplo, bit antiguo (232), puede ser dispuesto para indicar que la línea puede contener potencialmente valores antiguos y que se puede descartar a la salida del segmento de precálculo. De acuerdo con las realizaciones ilustrativas de la invención, los bits antiguos, por ejemplo, el bit antiguo (232), puede ser utilizado para impedir que una tarea más especulativa lea valores antiguos de tareas menos especulativas durante la ejecución de un segmento de precálculo de la tarea más especulativa. Cuando termina el segmento de precálculo, todas las entradas de antememoria Ll con el bit antiguo se invalidan para impedir que valores en las líneas de antememoria, que son potencialmente antiguos, sean leídos por esta tarea y otras tareas más especulativas, tal como se describe en detalle más adelante .
Cuando una tarea no especulativa termina su ejecución, puede ser posible que alguna de las tareas derivadas o filiales generadas dinámicamente por la tarea no especulativa estén todavía realizando sus respectivos segmentos de precálculo. Por lo tanto, de acuerdo con realizaciones ilustrativas de la invención, los tampones antiguos de la tarea no especulativa no pueden ser liberados hasta que estas tareas derivadas o filiales terminan sus segmentos de precálculo. Cuando una tarea especulativa pasa a ser una tarea no especulativa, ésta puede enviar una solicitud a su tarea matriz para anular la asignación de su correspondiente tampón antiguo, tal como se describe en detalle más adelante. Cuando se ha
completado la ejecución de la tarea y ésta se ha agravado, la unidad de tarea que ejecuta la tarea gravada puede pasar a reposo y se puede asignar para realizar una nueva tarea. Si bien la invención no queda limitada en este respecto, el número de unidades de tarea en un procesador, por ejemplo, el procesador (104) de la figura 1, puede ser fijo.
La figura 3 es un diagrama de flujo esquemático de un método de generación dinámica de una tarea de acuerdo con una realización ilustrativa de la presente invención. Durante la ejecución de la tarea, una unidad de tarea puede dividir la tarea que está ejecutando o puede generar dinámicamente una o más tareas especulativas para proceso en paralelo. Cuando una unidad de tarea inicia la generación dinámica, puede determinar, en primer lugar, en el bloque (312) , si existe un tampón antiguo libre a disposición para la tarea a generar dinámicamente. Si no hay tampones antiguos libres a disposición, la generación dinámica puede ser abortada, terminando el proceso. Si se encuentran a disposición uno o varios tampones antiguos libres, uno de los tampones antiguos puede ser asignado en el bloque (314) . Entonces una tarea, es decir, una tarea derivada o filial, puede ser generada dinámicamente en el bloque (316) y atribuida al tampón antiguo asignado. El proceso de generación dinámica puede quedar entonces terminado.
La figura 4 es un diagrama esquemático de flujo de un método de realización del segmento de precálculo de una tarea especulativa, de acuerdo con realizaciones ilustrativas de la invención.
Cuando se generan dinámicamente una o varias tareas especulativas, se pueden realizar segmentos de precálculo de las tareas en diferentes unidades de tarea simultáneamente para el cálculo vivo de valores de entrada o iniciales a sus respectivos cuerpos de tareas. Cuando una unidad de tarea empieza a ejecutar el segmento de precálculo de una tarea especulativa, puede leer una instrucción, en el bloque (412), desde una antememoria de instrucción local o alguna jerarquía de memoria externa. En el bloque (414) , si la instrucción es una instrucción de acceso a memoria, tal como una carga de un segmento o instrucción de almacenamiento, la unidad de tarea puede ejecutar la carga del segmento o almacenar la instrucción, en el bloque (416) , en un proceso que es definido en la figura 6 (para instrucciones de carga) o bien en la figura 7 (para instrucción de almacenamiento) tal como se indica más adelante. Si la instrucción no es una instrucción de acceso a memoria, se puede ejecutar de manera regular en el bloque (417) . En el bloque (418), se puede determinar si la tarea especulativa en ejecución ha recibido, por ejemplo, instrucciones para su eliminación por una instrucción recibida. Si la tarea se tiene que mantener, la unidad de tarea puede pasar a determinar, en el bloque (420), si se ha alcanzado el final del segmento de precálculo. Si hay- más instrucciones de precálculo a ejecutar, la unidad de tarea puede volver el proceso de ejecución nuevamente al bloque (412) para leer la instrucción siguiente, y se puede repetir el proceso descrito anteriormente. Si éste es el
_ o í -
final del segmento de precálculo, la unidad de tarea puede pasar al bloque (422) para invalidar líneas de la antememoria de datos local L-I, cuyos bits antiguos han sido dispuestos durante la ejecución de la carga de segmento o puede almacenar instrucciones (figura 6 ó 7) . En el bloque (430) , la unidad de tarea puede enviar una petición a una unidad de tarea que ha generado dinámicamente la tarea especulativa bajo ejecución para desasignar el tampón antiguo asignado a la tarea especulativa, que acaba de terminar su segmento de precálculo .
En el bloque (418) , si la tarea especulativa se ha determinado que sea eliminada, la unidad de tarea que ejecuta la tarea especulativa puede pasa al bloque (424) a invalidar líneas de la antememoria de datos local L-I que no están comprometidas. La unidad de tarea puede pasar entonces al bloque (426) para vaciar, por ejemplo, borrar, el tampón del segmento de la unidad de tarea, y al bloque
(428) para eliminar, por ejemplo, borrar, la tarea. La unidad de tarea puede proceder además al bloque (430) para enviar una petición a la unidad de tarea que ha generado dinámicamente la tarea especulativa para desasignar el tampón antiguo asignado a la tarea especulativa, que acaba de ser eliminada. La figura 5 es un diagrama esquemático de flujo de un método de ejecución del cuerpo del conjunto de instrucciones de un conjunto de instrucciones especulativas, de acuerdo con las realizaciones ilustrativas de la presente invención.
Después del precálculo "vivo" ("live-in") de un conjunto de instrucciones especulativas, una unidad de tareas puede comenzar la ejecución de instrucciones del cuerpo de dicho conjunto de instrucciones. La unidad de tareas puede leer una instrucción, en el bloque (512), de una antememoria de instrucción local o algún tipo de jerarquía de memoria externa. En el bloque (514), si la instrucción es una instrucción de acceso a memoria, tal como una carga de conjunto de instrucciones o instrucción de almacenamiento, dicha unidad de tareas puede ejecutar dicha carga del conjunto de instrucciones o instrucción de almacenamiento, en el bloque (516) , en un procedimiento que queda definido en la figura 8 (para la instrucción de carga) o la figura 9 (para la instrucción de almacenamiento) más adelante. Si la instrucción no es una instrucción de acceso a memoria, puede ser ejecutada de manera regular en el bloque (517) .
En el bloque (518), se comprueba si el conjunto de instrucciones especulativas debe ser eliminado o silenciado. Si el conjunto de instrucciones no debe ser eliminado, la unidad de tareas puede proceder a determinar, en el bloque (520) , si se ha alcanzado el final del cuerpo del conjunto de instrucciones. Si hay más instrucciones para ejecutar en el cuerpo del conjunto de instrucciones, la unidad de tareas puede continuar la lectura de la siguiente instrucción devolviendo el proceso al bloque (512) , y el procedimiento descrito anteriormente puede ser repetido. Si se ha alcanzado el final del cuerpo del conjunto de instrucciones, la unidad de tareas puede
proceder al bloque (522) para validar las entradas de lectura, en el tampón del segmento del conjunto de instrucciones, cuyos bits de lectura han sido determinados durante la ejecución de la carga del conjunto de instrucciones o de las instrucciones de almacenamiento (figura 8 ó 9) . Basándose en la validación de las entradas de lectura, la ejecución del cuerpo del conjunto de instrucciones es considerada como válida y por lo tanto llevada a cabo, o como inválida y por lo tanto eliminada en el bloque (524) . La unidad de tareas puede proceder entonces al bloque (532) para eliminar, por ejemplo limpiar, las entradas en el tampón del segmento de la unidad de tareas .
Un conjunto de instrucciones puede ser suprimido o silenciado cuando una señal de supresión es enviada por la unidad VCL (120) en situaciones en las que se detecta una especulación defectuosa, o enviada por un conjunto de instrucciones menos especulativas por otras razones. Si en el bloque (518) se determina que el conjunto de instrucciones debe ser suprimido, la unidad de tareas que está ejecutando dicho conjunto de instrucciones puede proceder, en el bloque (526) , a invalidar líneas no ejecutadas en la antememoria de datos local Ll, en el bloque (528) , a desasignar tampones antiguos de la unidad de tareas, y entonces, en el bloque (530) , suprimir el conjunto de instrucciones y terminar la ejecución. La unidad de tareas puede entonces proceder al bloque (532) para limpiar las entradas en el tampón del segmento.
La figura 6 es un diagrama esquemático de flujo de un método de ejecución de una instrucción de carga en un segmento de precálculo de acuerdo con las realizaciones ilustrativas de la presente invención. Cuando una unidad de tareas lleva a cabo una instrucción de carga en un segmento de precálculo, puede acceder a la antememoria de datos local Ll y al tampón del segmento de la unidad de tareas en el bloque (612) . En el bloque (614) , si se determina que la línea de memoria solicitada está disponible en la antememoria de datos local Ll o en el tampón del segmento, es decir, la línea es encontrada de forma local, la instrucción de carga está terminada. De otro modo, la unidad de tareas puede proceder al bloque (616) . En el bloque (616), la unidad de tareas puede emitir un pedido de lectura de bus dentro del segmento para acceder a una unidad de tareas del conjunto de tarea matriz mediante un bus de interconexión "on-chip" (110) (figura 1) . El pedido dentro del segmento puede estar acompañado por una señal que indica que el conjunto de instrucciones que realizó el pedido, un conjunto de instrucciones filial, está en el modo de segmento de precálculo y por lo tanto dicho conjunto de instrucciones matriz puede devolver una línea de un tampón antiguo asignado para dicho conjunto de instrucciones filial y no desde su antememoria de datos Ll. El tampón antiguo asignado a la unidad de tareas matriz puede ser accedido en el bloque (618) .
La unidad de tareas del conjunto de instrucciones matriz puede proporcionar una línea de su tampón antiguo
asignado en el bloque (620) . Dicha línea puede ser copiada a la antememoria de datos Ll de la unidad de tareas del conjunto de instrucciones filial en el bloque (621) . El bit antiguo de la línea en la antememoria de datos local Ll puede ser determinado, en el bloque (630) , para indicar que los valores podrían ser antiguos dado que son copiados de la unidad de tareas del conjunto de instrucciones matriz. Si en el bloque (620) la unidad de tareas del conjunto de instrucciones matriz no proporciona una línea desde el tampón antiguo asignado para el conjunto de instrucciones filial, por ejemplo, en una situación en la que dicho conjunto de instrucciones matriz no ha escrito la línea desde su antememoria de datos Ll al tampón antiguo, la unidad VCL (120) (figura 1) puede acceder a otras antememorias de datos Ll y tampones del segmento de conjuntos de instrucciones remotos, en el bloque (622), que son menos especulativos que el conjunto de instrucciones matriz, mediante un bus de interconexión "on-chip" (110)
(Figura 1) . La unidad VCL (120) puede tratar las instrucciones de carga como una carga ordinaria, y considerar el conjunto de instrucciones filial que solicita la línea como teniendo el miεmo orden lógico que su conjunto de instrucciones matriz.
En el bloque (624) , si se determina que la unidad VCL (120) es capaz de asignar la línea solicitada desde un conjunto de instrucciones remoto menos especulativo que el conjunto de instrucciones matriz, puede proceder a realizar la copia de la línea a la antememoria de datos Ll de la unidad de tareas en el bloque (625) . La unidad de tareas
puede entonces proceder a determinar, en el bloque (628) , si la línea que ha sido copiada es una línea asignada. Si la línea es una línea asignada o comprometida, la instrucción de carga es ejecutada y terminada. Si no es una línea comprometida, el bit antiguo en la línea copiada de la antememoria de datos local Ll puede ser determinado, en el bloque (630) , para indicar que los datos en la misma podrían ser potencialmente antiguos. En el bloque (624), si se ha determinado que la unidad VCL (120) es incapaz de asignar la línea solicitada, la unidad de tareas puede acceder a una jerarquía de memoria "off-chip" (106) (figura 1) , en el bloque (626) , mediante un bus de interconexión "off-chip" (108) (figura 1) . La línea obtenida a partir de la memoria "off-chip" (106) puede ser copiada a la antememoria de datos local Ll .
La figura 7 es un diagrama esquemático de flujo de un método de ejecución de una instrucción de almacenamiento en un segmento de precálculo de acuerdo con las realizaciones ilustrativas de la presente invención. Cuando una unidad de tareas ejecuta un segmento de precálculo y lleva a cabo una instrucción de almacenamiento, los datos pueden ser almacenados en el tampón del segmento de la unidad de tareas. De acuerdo con las realizaciones ilustrativas de la presente invención, la línea que será almacenada puede ser colocada primero en el tampón del segmento y luego actualizada con los datos almacenados. Para acceder a la línea solicitada, puede llevarse a cabo un método similar al descrito con relación a la realización de una instrucción de carga (figura 6) .
Cuando una unidad de tareas lleva a cabo una instrucción de almacenamiento en un segmento de precálculo, puede acceder a la antememoria de datos local Ll y al tampón del segmento de dicha unidad de tareas en el bloque (712) . En el bloque (714) , si se determina que la línea de memoria solicitada está disponible en la antememoria de datos local Ll, entonces dicha línea en la antememoría de datos Ll puede ser invalidada en el bloque (730) . La línea es copiada al tampón del segmento de la unidad de tareas y es actualizada con los datos de almacenamiento en el bloque (728) . Dichos datos son invisibles para las otras unidades de tareas siempre que el segmento de precálculo se encuentre aún en ejecución. En el bloque (714), si se determina que la línea no está disponible en la antememoria de datos local Ll o el tampón del segmento, es decir, la línea no es encontrada de forma local, la unidad de tareas puede proceder al bloque (716) .
En el bloque (716) , la unidad de tareas puede emitir un pedido de escritura de bus "dentro del segmento" para acceder a la unidad de tareas del conjunto de instrucciones matriz mediante el bus de interconexión "on-chip" (110)
(figura 1) . El pedido "dentro del segmento" puede estar acompañado por una señal que indica que el conjunto de instrucciones que ha realizado el pedido, un conjunto de instrucciones filial, está en el modo de segmento de precálculo y por lo tanto el conjunto de instrucciones matriz puede devolver una línea desde un tampón antiguo asignado al conjunto de instrucciones filial y no desde su antememoria de datos Ll. El tampón antiguo asignado a la
unidad de tareas matriz puede ser accedido en el bloque (718) .
La unidad de tareas del conjunto de instrucciones matriz puede proporcionar una linee, a partir de su tampón antiguo asignado en el bloque (720) . La línea puede ser copiada al tampón del segmento de la unidad de tareas del conjunto de instrucciones filial y actualizada con los datos de almacenamiento en el bloque (728) . Estos datos son invisibles para otras unidades de tarea siempre que el segmento de precálculo aún esté en ejecución. Si en el bloque (720) la unidad de tareas del conjunto de instrucciones matriz no proporciona una línea desde el tampón antiguo asignado para el conjunto de instrucciones filial, por ejemplo, en una situación en la que el conjunto de instrucciones matriz no ha escrito la línea desde su antememoria de datos Ll en el tampón antiguo, la unidad VCL (120) (figura 1) puede acceder a otras antememorias de datos Ll y tampones del segmento de conjuntos de instrucciones remotos, en el bloque (722), que son menos especulativos que el conjunto de instrucciones matriz, mediante el bus de interconexión "on-chip" (110) (figura 1) . La unidad VCL (120) puede tratar la instrucción de almacenamiento como una memoria ordinaria, y considerando que el conjunto de instrucciones filial que solicita dicha línea tiene el mismo orden lógico que su conjunto de instrucciones matriz.
En el bloque (724) , si se determina que la unidad VCL (120) es capaz de asignar la línea solicitada desde un conjunto de instrucciones remoto menos especulativo que el
conjunto de instrucciones matriz, puede proceder a copiar la línea al tampón del segmento de la unidad de tareas y actualizarla con los datos de almacenamiento en el bloque
(728) . Estos datos son invisibles para otras unidades de tareas siempre que el segmento de precálculo aún esté en ejecución. En el bloque (724), si se determina que la unidad VCL (120) es incapaz de asignar la línea solicitada, la unidad de tareas puede acceder a una jerarquía de memoria "off-chip" (106) (figura 1) , en el bloque (726) , mediante el bus de interconexión "off-chip" (108) (figura 1) . La línea obtenida a partir de la memoria "off-chip" (106) puede ser copiada al tampón del segmento del conjunto de instrucciones filial y actualizada con los datos de almacenamiento en el bloque (728) . Estos datos con invisibles para otras unidades de tarea siempre que el segmento de precálculo se encuentre aún en ejecución.
La figura 8 es un diagrama esquemático de flujo de un método de ejecución de una instrucción de carga en el cuerpo del conjunto de instrucciones de una tarea especulativa de acuerdo con las realizaciones ilustrativas de la presente invención.
Cuando una unidad de tareas que ejecuta el cuerpo del conjunto de instrucciones de una tarea especulativa lleva a cabo una instrucción de carga, puede acceder primero a las posiciones de memoria del tampón del segmento y la antememoria de datos Ll de la unidad de tareas en el bloque
(812) . En el bloque (814) , si se determina que la línea solicitada está disponible, la unidad de tareas puede proceder a determinar, en el bloque (826) , si la línea está
disponible en el tampón del segmento. Si la línea está disponible a partir del tampón del segmento, entonces es copiada a la antememoria de datos Ll de la unidad de tareas en el bloque (828) . La línea que suministra los datos en el tampón del segmento es marcada como leída por el bit de lectura correspondiente en el "Rmask" y como inválida restaurando el bit de validez "V" (figura 2) . Todas las líneas en el tampón del segmento con algún bit de lectura determinado son luego validadas antes de que el conjunto de instrucciones se vuelva no especulativo. En el bloque (826), si se determina que la línea está disponible en la antememoria de datos local Ll, entonces la instrucción de carga es terminada.
En el bloque (814) , si se determina que la línea no está disponible en el tampón del segmento o la antememoria de datos Ll de la unidad de tareas, es decir, la línea no es encontrada de forma local, la unidad de tareas puede emitir un pedido de lectura de bus, en el bloque (816), a la unidad VCL (120) mediante el bus de interconexión "on- chip" (110) (figura 1) . La unidad VCL (120) puede acceder a otras antememorias de datos Ll y a los tampones del segmento de tareas o conjunto de instrucciones remoto y menos especulativo en el bloque (818) . La unidad VCL (120) puede fijar el bit antiguo en las líneas de la antememoria de datos Ll de los conjuntos de instrucciones que son más especulativos que el conjunto de instrucciones actual y aún están ejecutando segmentos de precálculo, en el bloque (820), para indicar que los datos podrían ser antiguos.
En el bloque (822) , si la unidad VCL (120) puede asignar la versión correcta de la línea solicitada desde los conjuntos de instrucciones que son menos especulativos que el conjunto de instrucciones que está siendo ejecutado, podría copiar la línea a la antememoria de datos Ll de la unidad de conjunto de instrucciones en el bloque (823) . La unidad de conjunto de instrucciones puede proceder a determinar, en el bloque (830), si un tampón del segmento remoto ha proporcionado dicha línea. En caso afirmativo, entonces la línea en el tampón del segmento remoto es marcada como leída e indica qué unidad de tareas ha leído dicha línea, en el bloque (832), utilizando un bit de lectura de "Rmask" del tampón del segmento. Todas las líneas en el tampón del segmento con algún bit de lectura determinado son validadas antes de que el conjunto de instrucciones en ejecución se vuelva no especulativo. En el bloque (822) , si la unidad VCL (120) es incapaz de asignar la línea, entonces la unidad de tareas puede acceder a una jerarquía de memoria uoff-chip" (106) , en el bloque (824) , mediante un bus de interconexión (108) "off-chip" (figura 1) . Entonces, la línea obtenida s partir de la memoria "off-chip" (106) es copiada, en el bloque (824) , a la antememoria de datos local Ll de la unidad de tareas.
La figura 9 es un diagrama esquemático de flujo de un método de ejecución de una instrucción de almacenamiento en el cuerpo del conjunto de instrucciones de un conjunto de instrucciones especulativo de acuerdo con las realizaciones ilustrativas de la presente invención.
Cuando una unidad de tareas que ejecuta el cuerpo de un conjunto de instrucciones de un conjunto de instrucciones especulativas lleva a cabo una instrucción de almacenamiento, una línea de memoria es solicitada puede ser colocada primero en la antememoria de datos local Ll de la unidad de tareas y luego actualizada con los datos de almacenamiento. Para acceder a la línea solicitada, puede llevarse a cabo un método similar al de una instrucción de carga (figura 8) de acuerdo con las realizaciones ilustrativas de la presente invención.
La unidad de tareas puede acceder primero a las posiciones de memoria del tampón del segmento y de la antememoria de datos Ll de dicha unidad de tareas en el bloque (912) . En el bloque (914) , en caso que se haya determinado que la línea solicitada está disponible, la unidad de tareas puede proceder a determinar, en el bloque
(926) , si la línea está disponible en el tampón del segmento. Si se encuentra disponible en el tampón del segmento, la línea que suministra los datos en el tampón del segmento es marcada como leída mediante un bit de lectura de "Rmask" y como no válido restaurando el bit de validez en el bloque (928) . En el bloque (926) , si se ha determinado que la línea no está disponible desde el tampón del segmento, entonces está disponible a partir de la antememoria de datos local Ll. En los dos casos, la línea es copiada a los tampones antiguos, en el bloque (934), que están asignadas en la unidad de tareas para salvar valores de memoria antigua para conjuntos de instrucciones filiales que son activados por la unidad de tareas y que están
ejecutando tampones de precálculo. Entonces, la línea es copiada a la antememoria de datos local Ll de la unidad de tareas y actualizada con los datos de almacenamiento en el bloque (936) . En el bloque (914) , si se determina que la línea no está disponible a partir del tampón del segmento o la antememoria de datos Ll de la unidad de tareas, es decir, la línea no es encontrada de forma local, la unidad de tareas puede enviar un pedido de escritura de bus, en el bloque (916) , a la unidad VCL (120) mediante el bus de interconexión "on-chip" (110) (figura 1) . La unidad (120) puede acceder a otras antememorias de datos Ll y tampones del segmento de conjuntos de instrucciones remotos y menos especulativos en el bloque (918) . La unidad VCL (120) puede determinar además el bit antiguo de las líneas de antememoria de datos Ll de conjuntos de instrucciones que son más especulativos que el presente conjunto de instrucciones y que aún está ejecutando segmentos de precálculo, en el bloque (920), para indicar que los datos podrían ser antiguos.
En el bloque (922) , si la unidad VCL (120) es capaz de asignar la versión correcta de la línea solicitada, puede proceder a determinar, en el bloque (930) , si un tampón del segmento remoto ha proporcionado dicha línea. En caso afirmativo, entonces la línea en el tampón del segmento remoto es marcada como leída y se indica qué unidad de tareas ha leído dicha línea, en el bloque (932), utilizando un bit de lectura de "Rmask" del tampón del segmento remoto. Todas las líneas en el tampón del segmento con
algún bit de lectura determinado son validadas antes de que el conjunto de instrucciones en ejecución se vuelva no especulativo. En el bloque (922), si la unidad VCL (120) es incapaz de asignar la línea, entonces la unidad de tareas puede acceder a una jerarquía de memoria "off-chip" (106) , en el bloque (924), mediante un bus de interconexión "off- chip" (108) (figura 1) . En los dos casos mencionados anteriormente, la línea es copiaαa a tampones antiguos, en el bloque (934) , que son asignados en la unidad de tareas para salvar valores de memoria antiguos para conjuntos de instrucciones filiales que son activados por la unidad de tareas y que están ejecutando tampones de precálculo. Entonces la línea es copiada a la antememoπa de datos local Ll de la unidad de tareas y actualizada con los datos de almacenamiento en el bloque (936) .
Si bien ciertas características de la presente invención han sido ilustradas y descritas en el presente documento, las personas especializadas en la técnica podrán idear numerosas modificaciones, substituciones, cambios, y equivalencias. Debe entenderse, por lo tanto, que las reivindicaciones adjuntas tienen la intención de cubrir todas dichas modificaciones y cambios que quedan dentro del espíritu de la presente invención.