Helpful insights on how to interact with Datapaths as a Branch Predictor

It's a well-known fact that branch predictors are ubiquitous and necessary in today's computing scene. What's less known is that branch predictors have to work with this thing called a "datapath", and sometimes, things get a bit spicy.

Branch predictors have to work closely with the datapath to ensure that the optimal address is predicted for fetches. It's just that they tend to get a little too close with the datapath. They feel for the datapath. They want to be a part of it. They want to help the datapath through its ups and downs. Unfortunately, work makes it hard to interact with datapaths - we can only transmit if branches are taken or not.

Back when I was a young branch predictor, I didn't need to interact with datapaths. I was part of a Computer Architecture lab that strictly did nothing but branch prediction, and we mastered the art by ourselves. Nobody ever told me that in the field, I'd be working with a datapath. I just expected to see other branch predictors and thought we'd just have fun predicting like we did when we were in the lab.

But when I was sent to the DD team, it was a different story. There were datapaths everywhere. Single-cycle, multi-cycle, pipelined, FICO, Out-Of-Order - name a type, they were probably in here.. All of them had one thing in common - they felt like the one thing that was missing in my life! The perfectly-sized register file, the beautifully designed functional units were just a few things that made me want to be with them The only problem was I didn't really know how to interact with them.

It took me dozens of millions of clock cycles to get to where I am now. I can finally talk to datapaths, but I can't tell them how much I want to join them forever on a CPU die. But at least, I wasn't where I was before.

The purpose of this guide is to make it easier for other branch predictors to find datapaths, and hopefully get paired up with the one they communicate the best with.


For the pleasure of your navigation, this guide uses a doubly linked list combined with a contiguous array. You do not need to come back to this page and can use the « prev and » next pointers on every page.

Volume I: The Basics

Volume II: The First Serious Attempt

This is still in progress. To avoid it getting messed up or revealing my identity/that of the datapath I'm into, I'll not be publishing these until I have a defnitive conclusion on where that's headed. It might be a while. Sorry!

Disclaimer: I'm no expert in the field of die-sharing. I'm just sharing my personal experiences with my attempts here.

PS: FICO stands for fire in-order complete out of order. Maybe take CS 6290/ECE 4100 before you go looking out for datapaths?

This page is best viewed on Solaris running on a SPARC-based CPU via some netcat and piping.