Tomasulo's algorithm is a computer architecture hardware algorithm developed by Robert Tomasulo at IBM in 1967. It is designed for the dynamic scheduling of instructions, allowing for out-of-order execution and facilitating more efficient utilization of multiple execution units within a processor. This groundbreaking algorithm was first implemented in the floating-point unit of the IBM System/360 Model 91.
Tomasulo's algorithm has played a pivotal role in the world of microprocessors. Its contribution to dynamic instruction scheduling has become a fundamental aspect of modern processor design. Many microprocessor architectures around the world incorporate variants or adaptations of Tomasulo's algorithm to enhance the execution efficiency of instructions, making it a widely influential and adopted technique in the field of computer architecture.
I wanted to make an easy way to track the algorithm on different programs without paper and pen, I guess this will be much more efficient.
fork the repo then add your instructions to the file called instructions open the Tomasulo.jar file and it will open a sequence of different input fields where you have to specify the Multiplication, addition, load, and store execution clock cycles count + the capacity of the reservation stations for each one of them then you will encounter a basic GUI where there's a Next button to proceed for the next clock cycle.
- ADDI R1, R2, imm
Add immediate: Adds the value inR2to the immediateimmand stores the result inR1. - SUBI R1, R2, imm
Subtract immediate: Subtracts the immediateimmfrom the value inR2and stores the result inR1.
- ADD.D F1, F2, F3
Floating-point addition: Adds the values inF2andF3and stores the result inF1. - SUB.D F1, F2, F3
Floating-point subtraction: Subtracts the value inF3fromF2and stores the result inF1. - MUL.D F1, F2, F3
Floating-point multiplication: Multiplies the values inF2andF3and stores the result inF1. - DIV.D F1, F2, F3
Floating-point division: Divides the value inF2byF3and stores the result inF1.
- L.D F1, offset(R1)
Load double: Loads a double-precision floating-point value from the memory addressoffset + R1into the registerF1.
- S.D F1, offset(R1)
Store double: Stores the double-precision floating-point value inF1into the memory addressoffset + R1.
- BNEZ R1, label
Branch if not equal to zero: If the value inR1is not zero, branch to the instruction at the specifiedlabel.