Forum Replies Created
- NoDotParticipantDecember 22, 2017 at 4:50 pmPost count: 6
I’m sorry that I sound far more ignorant than I am. Apparently I’m bad a communication. Sorry.
The belt uses temporal addressing; the scratchpad uses spatial addressing. There are two addresses involved in a spill/fill: the belt address of the value to be spilled somewhere, and the “somewhere” address needed to choose what value to fill. The present Mill uses temporal for the first, and like any reference the spill must execute before its target drops off the belt.
But the addressing logic to get such a scratch entry back into the space where adds and such could address it is too expensive because it would push up the size of the crossbar. So we keep the addresses space separate.
These are all things I know, have known, or figured were the case. I have never been confused on them, but it seems I sounded that way. Again, sorry.
Perhaps you are thinking of a scheme whereby the spill op would push the value into a side stack and the fill would use a stack offset rather than a temporal reference to address it.
While I have considered a stack or second belt for the Scratchpad (as I’m sure you have), no, I was thinking of a spatially-addressed, disjoint Scratchpad addressed by entry rather than one of those. I figured something similar was already present in the hardware for another purpose (holding old-but-still-present items on the belt).
Therefore either the team never thought of it or there were complications that prevented its use. And if the later, I wondered what those were. And I now have an answer to that.
The only question left is whether this holding place for “out of the output latches but not yet fallen off” belt entries exists or not. And if so, whether its mechanism would actually be similar to what a spatially-addressed, entry-based Scratchpad would require for mapping entries to its storage.
(I thought the Spiller would be a sensible place for this storage space-saving transfer time on function call spill/fill. Hence our entire Spiller digression.)
- NoDotParticipantDecember 22, 2017 at 2:05 pmPost count: 6
You… aren’t answering the question I’m asking, but I think I see where you’re getting confused.
I get that the Scratchpad is a different place than the belt. I do. It isn’t a extension of the belt, it’s a different physical location.
I said “an entry-based Scratchpad would be a logical extension of such a structure”. Allow me to expand and unbox:
I an only talking about storing and addressing an entry-based list of items. That the same mechanism that stores and addresses those still-live-but-older values would be the same or similar to the mechanism that stores or addresses the items in an entry-based Scratchpad.
This entry-based Scratchpad would still be populated by items sent there specifically. It would just share part of its mechanism with where older-but-still-live belt items stay until falling off.
And physically locating those places in the Spiller system is what I assumed. (In retrospect, the Scratchpad as a whole likely can’t be fit in the Spiller without pointlessly ballooning the size and scope of that subsystem.)
edit: By “sharing the same mechanism” I meant they would share the same design, not the same physical one. That the design would already need to exist and giving the Scratchpad its own copy would be “simple.” Your first post says it’s not worth the effort, though.
- This reply was modified 3 years, 6 months ago by NoDot. Reason: Additional disambiguation and correcting spelling mistakes
- NoDotParticipantDecember 22, 2017 at 12:53 pmPost count: 6
(We’re slipping away from the topic, but it’s been answered, so…)
I think this is a communication issue. I assume there simply aren’t enough output latches in a single ALU to hold a belt’s worth of outputs. Therefore either those results disappear before they would drop off the belt, or there’s a place they get sent to to wait for the belt to advance them away.
(This would likely require a pathological or artificial case to cause, but I think it deserves an answer.)
I would assume that such a place would be part of the Spiller system-its top layer, perhaps. And that an entry-based Scratchpad would be a logical extension of such a structure.
- NoDotParticipantApril 8, 2019 at 4:29 pmPost count: 6
The problem is congruence over control flow.
I’m sad I didn’t think of this before. I’l take note.
A maximal fast rescue on a Silver (fast belt 16) is 16*4 = 64 bits, which is easily encodable. Meanwhile a slow rescue on a 256-position space would need 256*8 = 2048 bits, which we can’t encode.
256 bytes stores 32 64-bit values (ignoring metadata), but do you need 256 positions? I would (naively) expect the slow belt to have the same number of entries as the main belt.
However, because the slow belt is populated by long-lived values that are going to be referenced many times during their lifetime, a slow belt would have a larger fill/spill (read/write) ratio than the fast belt
I does? I’m afraid I don’t follow.
- NoDotParticipantDecember 22, 2017 at 2:40 amPost count: 6
Storing by entry number would require a mapping from entry number to position, or (trivial mapping) with all entries being maximal size.
How odd. I would expect that, in practice, older belt items would leave the output latches for some space in the spiller – entries that haven’t fallen off yet and need to still be kept around, but have still been around for a few cycles; or things spilled back in after some nested function calls. I expected that an entry-based Scratchpad could simply be an extension of those locations.
But this is likely just gut-feeling not matching reality.