So, what is computer architecture? Computer architecture, we're trying to take an application, or something that a human wants to do, so for instance, calculate a spreadsheet, play a video game, play some sort of music, and we want to figure out how to map it down to physics. So what do we mean by physics here? Well, physics is, we have in the world we have particles and they bounce around, they interact, we have photons bouncing around in the world, and we need somehow translate what humans want to do into what the physics can do. And one of the problems with this is, this is a really big gap. So how do you, go from application directly to physics? You have physics bouncing around the world. You have mechanical systems. And without some level of abstraction, it's very hard to go from the application directly to the physics. Now, in the broader sense, what computer architecture is trying to do is it's trying to come up with the abstraction and the implementation layers. That are needed to be able to bridge this gap. So, we're gonna put a bunch of different layers in here. And by making smaller abstraction layers and smaller layers, we're going to be able to solve subsets of these problems and not have to change everything here in the middle, just one. Let's say the physics changes or the application changes a little bit, we'll be able to reuse a lot of the work that we've done along the way. And computer architecture is the study of these layers, and figuring out how to take the physics and turn it into applications that humans want. Now. I wanted to point out that in the natural world, it's pretty challenging to directly jump from application to physics, but there's a few examples. So one example I wanted to bring up actually is the compass. The compass is a nifty little device that directly takes physics and gets pushed up into an application. But there's very few other examples. I think book is a okay example of this but otherwise people build lots of abstraction layers in between here. And one other thing I wanted to point out here is that we're trying to efficiently use manufacturing technologies. So what I mean by that is, when physics changes, or we move to smaller transistors, or we move from, let's say, silicon to gallium arsenide or some other implementation technology, that changes the bottom layer here, but we want to still be able to reuse a lot of the other work that we've done over the years. So, let's take a look at the abstractions in modern day computing systems. We start off here, physics. We have fundamental physical laws of how particles interact, and we move up to devices. So, what do I mean by devices? We have transistors, and we can build different types of transistors. Mosfets, BJTs, we can build other, other types of FETs, and we start to build circuits, bigger circuits out of this, and out of those we go and build gates. And from gates we can go to RTL, or registered transfer language here, which is sort of our verilog coding. And then we start to get into what this course is about, which is different types of architecture. So there's microarchitecture, which is how you do you go and actually build a specific implementation of a chip. And then we're, above that we have instruction set architecture, which gives us some portability on top of that. And then we get into operating systems and virtual machines, Programming languages, and algorithms. And then finally we get to the algorithm the application programmer sitting on top. So in this course, in computer architecture, we're only gonna be focusing in this three middle layers here, instruction set architecture, or what I will sometimes refer to as big A computer architecture. Microarchitecture, or, sometimes what people call organization, of computing systems. And, register transfer language and we'll, we'll also overlap a little bit into the, the abstraction layers above and below here. So, we'll talk a little bit about some operating system concerns and virtual machine concerns. And we'll talk a little bit about how the tran-, the technology and the gates influences the computing system. So one important point here about computer architecture is it's constantly changing because different constraints and different applications are changing. So, people have new applications that they come up with. They come up with ways, or people come up with different applications. I now want to have a smart phone. Well, that didn't exist twenty years ago. And this pushes down different requirements and these different requirements actually suggest how to change the architecture. If you, for instance want to do a lot of video processing that can actually influence your computer architecture so you add specialized instructions to do video processing. Likewise technology constraints push up, so as we go to smaller and smaller transistors, we'll say the smaller and smaller transistors let's say go faster, but the wires go slower, well that's going to influence your computer architecture. And a lot times new, new technologies make new architecture possible. So, what do I mean by that? Well, lets say all of sudden, you get a big bump in transistors, you get twice as many transistors. Well now, architectures and micro architectures that didn't use to make sense, start making sense, because you can for instance fit a lot more computation on one chip. And, what's, the interesting thing here, is that, computer architecture is not done in a vacuum. So, computer architecture actually provides feedback up and down this abstraction layer stack. So, it will give feedback, and it will actually influence the research directions that technology looks at. And will influence research directions and influence different applications that are possible. So this is not all done in a vacuum, the computer architect actually sits in a very key location in this abstraction layer stack here, cuz you can push up and push down, and you're not just forced to work with what you're given, if you will, from a technology perspective. But that might take a few years. So let's talk a little bit more about what this class is about, but we'll, we'll do it by way of a little bit of history. And to put a little bit of a Princeton connection in here, we're gonna talk computers back in the late '40s, early '50's, nineteen, 1940s, 1950s. So, here's actually a, a picture of the IAS, or the Institute for Advanced Study Machine, which was built in the Institute of Advanced Study, which is maybe about a mile and a half away from this classroom. And it was designed by Jon Von Goyman, and, and to give a little bit of insight here. It was first moved in Princeton in 1952, it was actually started in the late'40's and took them a couple years to get, to get working. And one of the interesting things here is that this machine is actually built out of vacuum tubes. So, everyone thinks about transistors today. Well, before we had transistors we had little glass tubes that actually looked like light bulbs, and inside of those there were switches that could be switched. So, very similar idea to what our transistor can do, but, instead you had a evacuated glass tube, and you had a little transmitter, it was a cathode ray tube. And then you had a gate that could open and close inside of this. So people were building computers long before transistors, and people were thinking about computer architecture long before transistors. And people were even thinking about computer architecture and these sorts of technologies even before vacuum tubes. So there was electromechanical systems, a good example of this actually was originally in phone systems. They had these cool electromechanical switches. So when you take your old rotary phone and you sort of turn it and then it goes, tick, tick, tick, tick, tick, tick, tick, tick, tick. What that's actually doing is, it's sending pulses which are turning a mechanical, a little mechanical arm inside of a relay system, and people built computers out of those electro-mechanical relays. So you can have switches that turn, change switches, similar sorts of ideas to transistors. And even before that people had looked at building mechanical systems. So there's mechanical adding machines for instance. And now of days we, of course, have transistors. So, it was computing then, in the fifties and if we fast forward to today, we have lot, computers look very different. In this figure here, ya know, this thing was the size of a room. Pretty big room TV scale sort of, a person is maybe yea tall in this figure thing. It's a, sort of normal-sized room, but, still sort of room sized. But today we have lots of different applications. And computing looks very different. So, we have computing, let's say, in small systems. So we have a little sensor network-, networks, and little sensor nodes distributed. We have fancy cameras. We have smartphones. We have mobile audio players and iPods. We have laptops, like my laptop here. We have self-driving cars, we have big servers, we have Xboxes, and there's a lot of variety now in what computing systems look like. So, the influence of this technology, computer architecture, has been very, very broad. And we even go on to seeing things like routers, flying, unmanned autonomous vehicles. We have GPS's, which are little computers that can basically fit on your wrist these days and tell you exactly where you are. E books, tablets, set-top boxes and the list goes on and on and on. And what, what, I want to get across here is that computer architecture has a very rich history. And this history is continuing and it's very relevant today. So we're not studying something which no one cares about anymore. People are sitting there sort of ready to get the next generation computer architecture. People, and, and it used to be you know, you want your faster desktop computer. And that may not be as important today, but what is important is people want their faster smartphone. They want to enable voice recognition on the go. They want to be able to, in scientific applications, they want to build a model, some health system that's really complex, that you weren't able to do before. So, it continues on and on. It is very relevant today, and it has a very rich history. In this course we're gonna talk a little bit about the history, we'll mostly focus on the technology. Sometimes when people teach computer architecture classes, they have much more emphasis on the history. This class, we're gonna Touch on history a little bit, but more focused on the, on the technology considerations. So here's a chart that's from Hennessy and Patterson's Computer Architecture, or A Quantitative Approach, and what this graph is trying to show is, is something very fundamental to computer architecture, and it's what's been driving our industry. So what we see here is we see different processor designs plotted on a log plot. So this is ten, 100, 1000. This is a log plot and it says performance versus years. So, if you look at this, this plot, you'll see that, well this roughly looks like a straight line, and a straight line on a log plot is an exponential increase in performance. So, we've seen computing going up exponentially faster. And this is a, a really fundamental to driving what's been going on in our industry and why computer architecture is so important. And I do want to say that, you know, this exponential increase is, comes from two things. It's not all computer architects, I'd love to able to sit, stand here and say, "we did all this." Well, no, a fair amount of this is from getting, better, better technology. What I mean that is the, lower down layers and the implementation technology, like the transistor technologies. And some of it is from having better and better computer architecture. And what is really important here to note is even if you have better and better transistors. A lot of times what happens if you look at this graph is what's happening is you're getting more transistors, but those transistors are not necessarily exponentially faster. So, what computer architects have to do is we need to figure out how to take buckets and buckets of more transistors and turn them into more performance. And that's what this is many times called is it's called Moore's Law. If you've heard that term before, what it is, is we're trying, Moore's, Gordon Moore said that every eighteen months to two years, you're going to get twice as many transistors which, you can have for the same amount of dollars. That was what was originally said. People sort of transformed that now into meaning your computer's gonna get twice as fast every year. That's not what, Gordon Moore originally actually said. He said he can get twice as many transistors for a certain amount of dollars. And people have also sometimes taken this to mean that you get twice as many transistors on a chip every year. It's not quite what he said, but close enough approximation. And when, I don't quite have the graph here. But if you look at computing in general across, this, this is all across transistor based technologies. But if you go farther back into the past, you can actually plot other technologies, like vacuum tube technologies, and relay based technologies. And it also fits on this, this graph relatively well. So sort of, if you continue down here, you're gonna see vacuum tubes show up. And it's sort of still on this exponentially increasing curve. Okay, so let's look at, there's two inflection points in this graph that we wanna look at. First one's right here, you can see that the slope changes a little bit. Well, what, what happened here? This was the introduction of reduced instruction set computers, or risk computers. So we got a little bit of a, a crank up there when people came out with the first risk. And, another thing you notice is, this graph keels over a little bit here, and, we are gonna be talking a lot about this in this course, is, what happens or why, did this happen? So, what, what happened here? Well, sequential performance, so this is the performance of a single program; was getting faster exponentially. But then, I don't know, depending on who you ask. I like to use 2005 as the number but somewhere between 2003 and 2007, sequential processor performance started to, to really have a, a problem. But overall performance of your processor, still continuous to go up today. And what happened is we had to move to multi-core processors or multiple cores on a single chip. And hopefully, the hope is, that this graph will continue on here with multiple cores, If we can figure out how we can effectively paralyze our programs, versus our sequential performance tapering, tapering off. Cuz it would be very harmful to computer architecture and computing industry if all of a sudden our computers stopped getting faster, no one would be buying new computer chips.