And I just wanted to say quick note about interconnection networks. if you guys are, get interested in interconnection networks as we go along, I highly recommend this book. I have not assigned anything from this book for this class. But this is Bill Dalley and Brian Towles' interconnections book. It's quite good. It's kind of the definitive guide on the subject matter. Okay. So, interconnection networks. We, we talked about buses and we talked about memory protocol about buses. That's only one way to share information. Now, people may argue that's a intuitive way to share information because we had the ability to do load and storage from our processor. But there are other ways to share information. So, in today's lecture, we are going to talk about two main pieces of two main topics. One, how do you share information in, in a different way which commingles the movement of data with a synchronization primitive. We are going to call that messaging, [COUGH] which is in contrast to memory or communicating via memory addresses. We're also going to talk about different ways to connect together processors, which can either have better performance or better scalability, i.e., have more nodes in the system. And, okay, so let's, let's compare and contrast buses to other forms of network and see why we might want to change. So, this, this is going back to what we had just talked about. Let's say, you have two cores on a bus. And let's forget about how you want to communicate. It could either be via shared memory or it could be via messaging or it could be via some other protocol, Ethernet, whatever, whatever you want put here, which is basically a form of messaging. We have one core and it wants to communicate with another core. Note, I don't draw any caches here because there may not be caches, there may be caches. It's doesn't, it's kind of immaterial here. If one person wants to talk to another person, they can just yell at the other person. It's two people so there's, it's pretty easy to do. We, now, there is some challenges, we can't both talk at the same time. We might not be able to understand each other. So, there's some arbitration that needs to happen. But, in general, that arbitration is pretty simple. Only two, two cores or entities on this bus. Okay. Now we, now we go to more cores. So, we have four people in a room trying to shout to each other. Well, or four people on a bus trying to shout to each other. And as, as we just talked about, the bandwidth can be a challenge here. The arbitration for the bus can be a challenge. And because we're talking about interconnection networks, the wire delay and capacitance of the network can be worse or it can be a challenge here. So, if we got one core, it needs to drive the shared multidrop bus. There's a lot of capacitance on this bus, much more so than this case because all of a sudden, we've, we've, doubled the length of the bus, so the wires are longer and we've also put more loads on the bus. So, there's actually more capacitance on this bus. Okay. Now, we start to think about trying to build a bus that has a lot more cores. In this case, twelve. And through this core, if you go shot to that core, there's no pipelines around on this bus or anything. You go to shout and has to propagate all the way down here and, you know, we're, we're talking about high rates of communication. You actually have to wait for the time of flight of light from here to get down to there. And because we're, if we're using something, let's say, like a snoopy protocol or a broadcast protocol, because that's all we have here, we have to wait for and node here to communicate with every other node. So, we have to wait for the worst case time for this node to communicate to that node, every clock cycle. Hm, okay. and as I said there is capacitance, so it's not quite a, just a transmission line, so it's not just a transmission line problem here. We also have to worry about [COUGH] the capacitance in trying to drive all of these different receivers. And it's a multidirectional bus so we have to have effectively tri-states and the ability to drive or just receive. Well, all of a sudden, we have twelve people and actually, we have twelve people in this room. So, let's all try to pick a number between one and ten and shout it real fast on the count of three. One, two, three, five. Okay. I could, I, I do, I shouted five, I don't know what everyone else said. So, [LAUGH] that's does anyone, could everyone hear everyone else's? Does everyone know exactly what all other ten people said at the same time, or twelve people said at the same time? You heard your nearest neighbor. Okay, but did you know, do you know what Yankey said? Yeah. Okay. So, this is, this is the challenge. And if we need to guarantee that only one person can yell on the bus at a time, we need some arbitration. But the arbitration logic is slower now because we have lots of people communicating so we have to run a wire from this node down to this node and then, we had to come back in the arbitraration, logical, say, over here that needs to make some decision. And the decision is slower because as more layers of logic, more combination of logic, we will say, to make arbitration decision. Hm, okay. Now, if we go to a thousand processors or a a thousand cores on a bus, you know, we, we could even have twelve people in the room shout at the same time. You can have a thousand people in the room shout at the same time, and physically be distanced to the wiring between this thousand different nodes is going to decrease the speed of the bus significantly. So, it's some, something to think about. So, this, this motivates us to take the same twelve course and think about some other ways to connect them. Now, what I'm going to show here is a, what's known as a switched interconnect or sometimes known as a point-to-point link solution. Now, point-to-point does not mean that this core can communicate directly with every other core. That has, that has a different name, we'll talk about that later today. Instead, point-to-point just means each link, only has one sender and one receiver. And then. you use switches along the way to make decisions and to route. So, if we look at this, we can actually have multiple nearest neighbor communication happening. So, all of a sudden, by adding this switching, we can both have connectivity between all the different nodes, but we can also have sort of subconversations happening. But this still allows for this processor here to go communicate with the one that's at the farthest extent. And we need to decide how to do that. Whether it communicates sort of this way or this way or that way or some other squiggly line. [COUGH] We can also take the same point-to-point switch interconnect network. And like a bus, which we can increase the width of the bus, which does not help us with the occupancy on the bus, we can add more networks or we can affectively add multiple concurrent, switching interconnection networks or we can increase the bandwidth on these buses. So, it's similar sorts of ideas there and similar sorts of bandwidth tricks you can do to increase bandwidth on buses. You can play on there, switch interconnection always. Okay. So, this is just a very broad overview. And now, we're getting into some, some more specific ideas.