By: David Kanter (dkanter.delete@this.realworldtech.com), May 7, 2013 9:38 am
Room: Moderated Discussions
Exophase (exophase.delete@this.gmail.com) on May 7, 2013 9:05 am wrote:
> Exophase (exophase.delete@this.gmail.com) on May 7, 2013 9:00 am wrote:
> > Unless there are unknown restrictions and it's confirmed that the two parts can't be scheduled
> > independently I don't see why you'd want to avoid it.
>
> Sorry, I somehow missed Wilco's mention of "single use" here, the comment makes much more sense. But even for
> double use it might still be preferable in some cases, since that would be two vs three instructions (decode/retire/rename/ROB/etc
> slots), even though it'd be four vs three execution ports tied up. With only one memory port that could become
> a bottleneck pretty easily, although that'd often be the case w/Saltwell too.
>
> I wonder if there's any detail available about how many times a load is referenced in typical compiled code..
Based on my understanding, an integer load+op allocates:
1 ROB entry, 1 int rename (destination), 1 int scheduler, 1 memory scheduler
Integer only: 1 ROB, 1 int rename, 1 int scheduler
A load-op-store will also only allocate 1 ROB entry, but would need a store buffer entry as well. Load-op-store can also coalesce the TLB accesses (I think).
David
> Exophase (exophase.delete@this.gmail.com) on May 7, 2013 9:00 am wrote:
> > Unless there are unknown restrictions and it's confirmed that the two parts can't be scheduled
> > independently I don't see why you'd want to avoid it.
>
> Sorry, I somehow missed Wilco's mention of "single use" here, the comment makes much more sense. But even for
> double use it might still be preferable in some cases, since that would be two vs three instructions (decode/retire/rename/ROB/etc
> slots), even though it'd be four vs three execution ports tied up. With only one memory port that could become
> a bottleneck pretty easily, although that'd often be the case w/Saltwell too.
>
> I wonder if there's any detail available about how many times a load is referenced in typical compiled code..
Based on my understanding, an integer load+op allocates:
1 ROB entry, 1 int rename (destination), 1 int scheduler, 1 memory scheduler
Integer only: 1 ROB, 1 int rename, 1 int scheduler
A load-op-store will also only allocate 1 ROB entry, but would need a store buffer entry as well. Load-op-store can also coalesce the TLB accesses (I think).
David