Articulo de referencia

El algoritmo de Tomasulo

El algoritmo de Tomasulo es un algoritmo de hardware de arquitectura informática para la planificación dinámica de instrucciones que permite la ejecución fuera de orden y posibi...

El algoritmo de Tomasulo es un algoritmo de hardware de arquitectura informática para la planificación dinámica de instrucciones que permite la ejecución fuera de orden y posibilita un uso más eficiente de múltiples unidades de ejecución. Fue desarrollado por Robert Tomasulo en IBM en 1967 y se implementó por primera vez en la unidad de punto flotante del IBM System/360 Modelo 91. [ 1 ]

Las principales innovaciones del algoritmo de Tomasulo incluyen el cambio de nombre de los registros en el hardware, estaciones de reserva para todas las unidades de ejecución y un bus de datos común (CDB) por el cual se transmiten los valores calculados a todas las estaciones de reserva que puedan necesitarlos. Estos avances permiten una mejor ejecución paralela de instrucciones que, de otro modo, se bloquearían con el uso de marcadores u otros algoritmos anteriores.

Robert Tomasulo recibió el Premio Eckert-Mauchly en 1997 por su trabajo en el algoritmo. [ 2 ]

Conceptos de implementación

Unidad de punto flotante de Tomasulo

Los siguientes son los conceptos necesarios para la implementación del algoritmo de Tomasulo:

bus de datos común

El Bus de Datos Comunes (CDB) conecta las estaciones de reserva directamente con las unidades funcionales. Según Tomasulo, "conserva la precedencia al tiempo que fomenta la concurrencia". [ 1 ] : 33 Esto tiene dos efectos importantes:

  1. Las unidades funcionales pueden acceder al resultado de cualquier operación sin necesidad de utilizar un registro de punto flotante, lo que permite que varias unidades que esperan un resultado continúen sin tener que esperar a resolver la contención por el acceso a los puertos de lectura del archivo de registros.
  2. La detección de riesgos y la ejecución del control están distribuidas. Las estaciones de reserva controlan cuándo se puede ejecutar una instrucción, en lugar de una única unidad dedicada a la detección de riesgos.

Orden de instrucciones

Las instrucciones se emiten de forma secuencial, de modo que los efectos de una secuencia de instrucciones, como las excepciones que generan, se producen en el mismo orden que en un procesador que se ejecuta en orden, independientemente de que se estén ejecutando fuera de orden (es decir, de forma no secuencial).

Cambio de nombre del registro

El algoritmo de Tomasulo utiliza el cambio de nombre de registros para ejecutar correctamente incluso en orden inverso. Todos los registros de las estaciones de reserva y de propósito general contienen un valor real o un valor de marcador de posición. Si un registro de destino no dispone de un valor real durante la fase de emisión, se utiliza inicialmente un valor de marcador de posición. Este valor de marcador de posición indica qué estación de reserva generará el valor real. Cuando la unidad finaliza y difunde el resultado en la base de datos de control (CDB), el marcador de posición se reemplaza por el valor real.

Cada unidad funcional dispone de una única estación de reserva. Estas estaciones almacenan la información necesaria para ejecutar una instrucción, incluyendo la operación y los operandos. La unidad funcional comienza a procesar cuando está libre y cuando todos los operandos fuente necesarios para la instrucción son reales.

Excepciones

En la práctica, puede haber excepciones para las que no se dispone de suficiente información de estado sobre una excepción, en cuyo caso el procesador puede generar una excepción especial, denominada excepción imprecisa . Las excepciones imprecisas no pueden ocurrir en implementaciones en orden , ya que el estado del procesador cambia solo en el orden del programa (véase la sección Excepciones de la tubería RISC clásica  ).

Los programas que experimentan excepciones precisas , donde se puede determinar la instrucción específica que generó la excepción, pueden reiniciarse o volver a ejecutarse en el punto donde ocurrió la excepción. Sin embargo, aquellos que experimentan excepciones imprecisas generalmente no pueden reiniciarse ni volver a ejecutarse, ya que el sistema no puede determinar la instrucción específica que generó la excepción.

Ciclo de vida de las instrucciones

Las tres etapas que se enumeran a continuación son las etapas por las que pasa cada instrucción desde el momento en que se emite hasta que finaliza su ejecución.

Leyenda

  • RS - Estado de la reserva
  • RegisterStat - Estado del registro; contiene información sobre los registros.
  • regs[x] - Valor del registro x
  • Mem[A] - Valor de la memoria en la dirección A
  • rd - número de registro de destino
  • rs, rt - números de registro fuente
  • imm - signo extendido campo inmediato
  • r - estación de reserva o búfer al que se asigna la instrucción

Campos de la estación de reservas

  • Op - representa la operación que se realiza sobre los operandos.
  • Qj, Qk: la estación de reserva que producirá el operando fuente correspondiente (0 indica que el valor está en Vj, Vk).
  • Vj, Vk: el valor de los operandos fuente.
  • A - se utiliza para almacenar la información de la dirección de memoria para una carga o almacenamiento.
  • Ocupado: 1 si está ocupado, 0 si no está ocupado.

Campos de estado de registro

  • Qi: la estación de reserva cuyo resultado debe almacenarse en este registro (si está en blanco o es 0, no se destinan valores a este registro).

Etapa 1: problema

En la fase de emisión, se dan instrucciones para su ejecución si todos los operandos y estaciones de reserva están listos; de lo contrario, se bloquean. En este paso, se renombran los registros, eliminando los riesgos WAR y WAW.

  • Recuperar la siguiente instrucción del inicio de la cola de instrucciones. Si los operandos de la instrucción se encuentran actualmente en los registros, entonces
    • Si hay disponible una unidad funcional compatible, emita la instrucción.
    • De lo contrario, como no hay ninguna unidad funcional disponible, se retrasará la instrucción hasta que una estación o un búfer esté libre.
  • De lo contrario, podemos asumir que los operandos no están en los registros y, por lo tanto, usar valores virtuales. La unidad funcional debe calcular el valor real para llevar un registro de las unidades funcionales que generan el operando.
Example of Tomasulo's algorithm[4]

Stage 2: execute

In the execute stage, the instruction operations are carried out. Instructions are delayed in this step until all of their operands are available, eliminating RAW hazards. Program correctness is maintained through effective address calculation to prevent hazards through memory.

  • If one or more of the operands is not yet available then: wait for operand to become available on the CDB.
  • When all operands are available, then: if the instruction is a load or store
    • Compute the effective address when the base register is available, and place it in the load/store buffer
      • If the instruction is a load then: execute as soon as the memory unit is available
      • Else, if the instruction is a store then: wait for the value to be stored before sending it to the memory unit
  • Else, the instruction is an arithmetic logic unit (ALU) operation then: execute the instruction at the corresponding functional unit

Stage 3: write result

In the write Result stage, ALU operations results are written back to registers and store operations are written back to memory.

  • If the instruction was an ALU operation
    • If the result is available, then: write it on the CDB and from there into the registers and any reservation stations waiting for this result
  • Else, if the instruction was a store then: write the data to memory during this step

Algorithm improvements

The concepts of reservation stations, register renaming, and the common data bus in Tomasulo's algorithm presents significant advancements in the design of high-performance computers.

Reservation stations take on the responsibility of waiting for operands in the presence of data dependencies and other inconsistencies such as varying storage access time and circuit speeds, thus freeing up the functional units. This improvement overcomes long floating point delays and memory accesses. In particular the algorithm is more tolerant of cache misses. Additionally, programmers are freed from implementing optimized code. This is a result of the common data bus and reservation station working together to preserve dependencies as well as encouraging concurrency.[1]:33

By tracking operands for instructions in the reservation stations and register renaming in hardware the algorithm minimizes read-after-write (RAW) and eliminates write-after-write (WAW) and Write-after-Read (WAR) computer architecturehazards. This improves performance by reducing wasted time that would otherwise be required for stalls.[1]:33

An equally important improvement in the algorithm is the design is not limited to a specific pipeline structure. This improvement allows the algorithm to be more widely adopted by multiple-issue processors. Additionally, the algorithm is easily extended to enable branch speculation.[3]:182

Applications and legacy

Tomasulo's algorithm was implemented in the System/360 Model 91 architecture. Outside of IBM, it went unused for several years. However, it saw a vast increase in usage during the 1990s for 3 reasons:

  1. Once caches became commonplace, the algorithm's ability to maintain concurrency during unpredictable load times caused by cache misses became valuable in processors.
  2. Dynamic scheduling and branch speculation from the algorithm enables improved performance as processors issued more and more instructions.
  3. Proliferation of mass-market software meant that programmers would not want to compile for a specific pipeline structure. The algorithm can function with any pipeline architecture and thus software requires few architecture-specific modifications.[3]:183

Many modern processors implement dynamic scheduling schemes that are variants of Tomasulo's original algorithm, including popular Intelx86-64 chips.[5][6]

See also

References

  1. 1234Tomasulo, Robert Marco (Jan 1967). "An Efficient Algorithm for Exploiting Multiple Arithmetic Units". IBM Journal of Research and Development. 11 (1). IBM: 25–33. doi:10.1147/rd.111.0025. ISSN 0018-8646. S2CID 8445049.
  2. "Robert Tomasulo – Award Winner". ACM Awards. ACM. Retrieved 8 December 2014.
  3. 12345Hennessy, John L.; Patterson, David A. (2012). Computer Architecture: A Quantitative Approach. Waltham, MA: Elsevier. ISBN 978-0123838728.
  4. "CSE P548 - Tomasulo"(PDF). washington.edu. Washington University. 2006. Retrieved 8 December 2014.
  5. Intel 64 and IA-32 Architectures Software Developer's Manual (Report). Intel. September 2014. Retrieved 8 December 2014.
  6. Yoga, Adarsh. "Differences between Tomasulo's algorithm and dynamic scheduling in Intel Core microarchitecture". The boozier. Retrieved 4 April 2016.

Further reading

  • Savard, John J. G. (2018) [2014]. "Pipelined and Out-of-Order Execution". quadibloc. Archived from the original on 2018-07-03. Retrieved 2018-07-16.
  • Dynamic Scheduling - Tomasulo's Algorithm at the Wayback Machine(archived December 25, 2017)
  • HASE Java applet simulation of the Tomasulo's algorithm