By: Ricardo B (ricardo.b.delete@this.xxxxx.xx), May 31, 2013 11:22 am
Room: Moderated Discussions
Sebastian Soeiro (sebastian_2896.delete@this.hotmail.com) on May 31, 2013 6:59 am wrote:
> The array example definitely helped. Though one more about AGU's; say a AGU is given an
> instruction to calculate the virtual address of (array+4), and it does so successfully.
> Where would the result of the virtual address be stored, and how would it be used?
Usually, the virtual address calculated by the AGU is forwarded directly to the DTLB and L1 D$ to be used as an address for a store/load.
It's also possible to store the address calculated by the AGU into a register for other uses.
> - Sorry, I still don't quite understand how multi-threading works. If there are two programs,
> one of each using one thread, how does a single execution unit perform as two?
For example, while an Ivy Bridge CPU can in theory sustain 6 µOPs per clock, in practice most software runs at ~1 µOP per clock, due to instruction dependencies and other things.
There is thus, lots of free time to execute instructions for a second thread.
> The array example definitely helped. Though one more about AGU's; say a AGU is given an
> instruction to calculate the virtual address of (array+4), and it does so successfully.
> Where would the result of the virtual address be stored, and how would it be used?
Usually, the virtual address calculated by the AGU is forwarded directly to the DTLB and L1 D$ to be used as an address for a store/load.
It's also possible to store the address calculated by the AGU into a register for other uses.
> - Sorry, I still don't quite understand how multi-threading works. If there are two programs,
> one of each using one thread, how does a single execution unit perform as two?
For example, while an Ivy Bridge CPU can in theory sustain 6 µOPs per clock, in practice most software runs at ~1 µOP per clock, due to instruction dependencies and other things.
There is thus, lots of free time to execute instructions for a second thread.