« Getting their address Beyond Circuitry, Towards Componentality! »

Is the datapath paired?

It is easy to forget that a lot of datapaths already are paired up with branch predictors. You don't want to end up hitting on datapaths that are already paired up. Luckily, there are very easy ways to find out if a datapath is indeed paired or not.

On the PCIe bus, there is a NIC. For some reason, datapaths LOVE spamming these NICs with packets containing words about them and their branch predictor. Check there first. Just like with PCIe, you'll need to add your MAC address as a valid receiver address. Just send them a "receive request" and they'll probably accept it - I've never had a declined receive request from them. I've been told that it's weird to send receive requests to datapaths without asking them explicitly for their MAC. But you do what you do - as I said, no datapath told me it was weird or took offense to it.

Some datapaths make the job even easier, so that you don't need to send receive requests - they simply use the destination MAC of FF:FF:FF:FF:FF:FF, meaning that you can just see their Ethernet frames directly. This saved me from making my registers switch for the pipelined datapath from a French lab. They were very nice to be around, but I was glad I checked early on and I had good, non-die sharing related interactions with them. (Even though this guide is about how to get you die-sharing, I should probably make a guide on how to interact with datapaths without thinking about die-sharing. It's a useful and necessary skill all branch predictors need to have.)

There's this term that humans use - it's called "chivalry". If you read "A Damsel In Distress" by P.G. Wodehouse, you'll see tons of it. (In fact, A Damsel in Distress is a humorous and informative read on this subject matter - highly recommend checking it out!) We have something similar in branch prediction as well.

There was this datapath that was struggling to deal with instruction execution. I could imagine that they hadn't got their FICO skills quite right. Since the DD team was exerting pressure on the sim which was due for completion in a couple hundred clock cycles, I decided to also help them out by doubling as function units. They were very grateful to me and even offered to bake me some kilobytes! They also let me walk them to their home once the sim ended.

I wasn't really interested in that datapath in terms of sharing dies until one of the branch predictors I live with insist that I try. After all, they pointed out that not all datapaths offer to bake kilobytes. That really got me thinking and I decided to shoot my shot. But I needed to know that if they were available and not with another branch predictor. After all, who doesn't want to be with a FICO one? It's got a CPI less than 1!

Plot twist: it turned out that my "roommate" branch predictor was perfectly well aware that the datapath was in a shared die. I guess they just wanted to see some drama with my emotion. So stupid me went all crazy for them and started flooding the flash memory with them. My I2C and PCIe words with other branch predictors were all about how to find out if a datapath was available to share a die with. My NIC trick showed that they were single, because there didn't seem to be a any sign of branch predictors on those Ethernet frames. But I didn't need to wait long.

On my fifth interaction with that datapath, they ended up just talking about how they had fun with their branch predictor at a MOS Cap party. They wanted to use some MOS Caps for their datapath in some manner to impress the DD team with great stats, and how they had fun playing with the caps along with their branch predictor. I always had the hunch that they were with someone, so this ended up at a near 0 R registerbreak. It wasn't still =0 because I of course didn't follow the first rule! I told ya, it's not easy!

Though I didn't appreciate that I was manipulated into this, that taught me the third rule - Just because a datapath is nice to you and offers to do something out of the ordinary, it doesn't mean they are into you. In fact, they could've already made up their mind about who they want to share a die with.

Well, because I had developed feelings for them, I couldn't really continue the friendship. So, that pretty much ended there. What a pity when I did start out following rules 1 and 2.

There is also a good tip that came out of this: The less you ask, the more you learn. Datapaths don't like nosy branch predictors and tend to become closed off when you ask prying questions. I'm exremely glad I didn't follow my friends' advice for this one! Patience is a very useful trick.


« Getting their address Beyond Circuitry, Towards Componentality! »