« Prelude Managing Dynamic Registers »

First Interactions with a datapath

You probably see a lot of datapaths in your life. Ever since you're sent to the DD team, they are going to be around you forever. It is true that they look beefier and do a lot of the smart work, but remember that they won't be as fast as they are without you and you would be useless without them. They need you and they treat you just like they'd treat the other datapaths they know from their CompArch lab.

Here's the crux. Just ignore all the marvelous circuitry on 'em for a minute. Just think of them to be ordinary, run-of-the-mill branch predictors. Or, if you want to be cautious, maybe think of them as a tournament predictor. Now, talk to them like you would to your buddies.

It's really not as simple as it sounds, is it?

I'll tell you about the first datapath I met. It was the first few cycles on the first test run, and I happened to be by a pipelined one. The only types of datapaths I'd known about from the lab were single-cycle and multi-cycle, so the massive CPI reduction by the pipeline stages really pulled me like a magnet close to them. I thought to myself, "This would be a fine datapath to predict branches for!" And so I decided to start a conversation with them.

I was so confident in myself that I ended up throwing a lot of bits at them. Obviously, quite a few of them weren't really target addresses. I'd talk to them about the one thing I knew well - how to predict branches. Turns out they weren't really interested in that. They only care about the end result. As you can probably guess, I never saw that datapath again.

The next one was a bit sketchy. This datapath, also pipelined, was not a mere datapath that I was put alongside with. It was an instructional datapath, just a couple generations elder to me. I really liked this one, but as I said, this was an instructional one, meaning I couldn't risk getting too close to them lest the DD folks break out of the simulation. Luckily, there was a little mux that allowed communications to the instructional datapath for a bit of time. The actual purpose of the mux was to ensure that we can learn how to work faster with the datapath, but I used it just to spend more time with said datapath. I'd also join them from the one-on-one mux to a joint bus.

This was all fun and games until I learnt that they were leaving at the end of that test cycle to move on to a different DD team. I'd grown used to the fact that they liked me and we'd go on a CPU together, but oh well. I thought to myself, "Anyway, the DD folks will be ending this test soon, so I could just tell them and they'd know!"

We'll talk about what happened in the next chapter!


« Prelude Managing Dynamic Registers »