Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
cpu_bond [2016/06/04 11:46]
flype [Overview]
cpu_bond [2019/10/22 12:15] (current)
203.133.168.54 ↷ Links adapted because of a move operation
Line 3: Line 3:
 ===== Overview ===== ===== Overview =====
  
-The [[apollo_core|APOLLO Core]] is a [[cpu_superscalar|SuperScalar]] 68k processor as was the **Motorola MC68060**. "​[[cpu_superscalar|SuperScalar]]"​ means that the processor can schedule more than one instruction per cycle. Under some circumstances the 68060 could schedule two simple instructions in one cycle where the 68040 had to execute the two instructions one after the other which then took two cycles.+The [[apollo_core:start|APOLLO Core]] is a [[cpu_superscalar|SuperScalar]] 68k processor as was the **Motorola MC68060**. "​[[cpu_superscalar|SuperScalar]]"​ means that the processor can schedule more than one instruction per cycle. Under some circumstances the 68060 could schedule two simple instructions in one cycle where the 68040 had to execute the two instructions one after the other which then took two cycles.
   ​   ​
 A typical pair of instructions that can be executed on a superscalar processor such as the 68060 requires the instructions to be scheduled in parallel to be independent. This means the result of the first instruction must not be used in the subsequent instruction:​ A typical pair of instructions that can be executed on a superscalar processor such as the 68060 requires the instructions to be scheduled in parallel to be independent. This means the result of the first instruction must not be used in the subsequent instruction:​
Line 10: Line 10:
     add.l d2,d3     add.l d2,d3
   ​   ​
-The 68060 can execute these two instructions in the same cycle and so can the APOLLO. But the [[apollo_core|APOLLO Core]] has many advantages over the 68060 which is also why it is faster than the 68060 when running at the same clock rate.+The 68060 can execute these two instructions in the same cycle and so can the APOLLO. But the [[apollo_core:start|APOLLO Core]] has many advantages over the 68060 which is also why it is faster than the 68060 when running at the same clock rate.
   ​   ​
-As already mentioned above, the Apollo core is also superscalar. However, it can execute a much higher variety of instruction in its different pipelines than the 68060. Only a few complex instructions such as DIV and MOVEM are always executed in the first pipeline. Already this feature alone means that far more combinations of two independent instructions can be scheduled in the same cycle on [[apollo_core|APOLLO core]] as compared to the 68060. ​+As already mentioned above, the Apollo core is also superscalar. However, it can execute a much higher variety of instruction in its different pipelines than the 68060. Only a few complex instructions such as DIV and MOVEM are always executed in the first pipeline. Already this feature alone means that far more combinations of two independent instructions can be scheduled in the same cycle on [[apollo_core:start|APOLLO core]] as compared to the 68060. ​
   ​   ​
-But the Apollo core can also execute some instruction pairs in parallel that the 68060 cannot. This is called "​**Instruction Bonding**"​. By bonding two instructions,​ the [[apollo_core|APOLLO Core]] can execute some combinations of dependent instructions in parallel on two of its pipelines. One example:+But the Apollo core can also execute some instruction pairs in parallel that the 68060 cannot. This is called "​**Instruction Bonding**"​. By bonding two instructions,​ the [[apollo_core:start|APOLLO Core]] can execute some combinations of dependent instructions in parallel on two of its pipelines. One example:
   ​   ​
     move.l #1234,d1     move.l #1234,d1
Line 21: Line 21:
 This updates two registers, d1 and d2 (C syntax: ''​d1 = 1234; d2 += d1;''​) which cannot be done by the instruction [[cpu_fuse|fusing]] explained in another thread which will execute two instructions as one in a single pipeline. [[cpu_fuse|Fusing]] instructions requires both instructions to operate on the same destination register and thus can be executed as one instruction in one pipeline. Bonding instructions,​ on the other hand, updates two different destination registers and therefore will be executed by two pipelines. However, a traditional [[cpu_superscalar|superscalar]] processor such as the 68060 could not do this as the two instructions are dependent on each other. This updates two registers, d1 and d2 (C syntax: ''​d1 = 1234; d2 += d1;''​) which cannot be done by the instruction [[cpu_fuse|fusing]] explained in another thread which will execute two instructions as one in a single pipeline. [[cpu_fuse|Fusing]] instructions requires both instructions to operate on the same destination register and thus can be executed as one instruction in one pipeline. Bonding instructions,​ on the other hand, updates two different destination registers and therefore will be executed by two pipelines. However, a traditional [[cpu_superscalar|superscalar]] processor such as the 68060 could not do this as the two instructions are dependent on each other.
   ​   ​
-Using **instruction fusing** and **instruction bonding** in addition to normal superscalar execution the [[apollo_core|APOLLO Core]] can execute two instructions in parallel more often than a 68060 could. This is one of the reasons why the [[apollo_core|APOLLO core]] is faster than even higher clocked 68060 processors.+Using **instruction fusing** and **instruction bonding** in addition to normal superscalar execution the [[apollo_core:start|APOLLO Core]] can execute two instructions in parallel more often than a 68060 could. This is one of the reasons why the [[apollo_core:start|APOLLO core]] is faster than even higher clocked 68060 processors.
  
 ---- ----
Line 27: Line 27:
 [[start|Home]] |  [[start|Home]] | 
 [[links|Links]] |  [[links|Links]] | 
-[[apollo_core|APOLLO Core]]+[[apollo_core:start|APOLLO Core]]
  
Last modified: le 2019/10/22 12:15