Ability to write efficient programs
Why does this program run so much faster when the data is sorted?
Why does this program run so much slower than this one?
Needed for some areas
Remove the "Magic"
After this class you should have an understanding of how computers really work, and not view them as "black boxes".
Computers are built in multiple layers of abstraction. These allow us to program them more easily, but make understanding the whole machine more difficult.
In this class, we will study circuits, digital logic, micro-architecture, the instruction set and assembly language programming.
CPU
The central processing unit which is responsible for directing all other hardware and carrying out the program to be executed.
ALU
The arithmetic logic unit is the part of the CPU that actually carries out computations such as addition, and, or etc.
Control
The control refers to the part of the CPU responsible for keeping track of where in a program we are, what the ALU is doing, and keeping track of various status conditions.
Memory
Memory refers to "main" memory - not a hard drive. Memory stores information to be used by the processor.
Input/Output
Devices such as mouse, keyboard, graphics card, hard drive etc.
The big idea behind the von Neumann model is that the instructions which comprise the program are stored as data inside the computer's memory. This moved us away from the idea of fixed-purpose hardware to general-purpose computers.
All computer systems are capable of computing the same things if given enough time and memory. The set of computations which are possible on the first computer you owned are the same as those on a super-computer.
The various computer designs we will evaluate do differ in other ways:
Moore's law is an empirical rule, proposed by Gordon Moore in 1965, which says that the number of transistors in a fixed sized integrated circuit doubles every two years.
The speed of a computer chip is partly determined by the distance electricity needs to travel through it, so Moore's law has had the effect of providing exponentially faster computers over the years.
Moore's Law in Intel Chips - credit Wikimedia
Because of Moore's law, engineers have given us astounding performance gains "for free". The software world has taken advantage of this by creating higher-level, more abstract layers of software.
Moore's law cannot continue indefinitely. We are approaching the physical limits on the size of transistors - transistors are now only a few atoms wide. We have been behind the pace proposed by Moore for several years now and in 2019 Nvidia's CEO declared that Moore's law had ended. It is likely that we will continue to see better hardware, but at a slower pace and a higher cost.
This will make it all the more important to be able to write efficient code, and any performance improvements will have to be made in the realm of computer science.
In the words of Agner Fog on his CPU blog:
“The biggest potential for improved performance is now, as I see it, on the software side. Software producers have been quick to utilize the exponentially increasing power of modern computers that has been provided thanks to Moore's law. The software industry has taken advantage of the exponentially growing computing power and made use of more and more advanced development tools and software frameworks. These high-level development tools and frameworks have made it possible to develop new software products faster, but at the cost of consuming more processing power in the end product. Many of today's software products are quite wasteful in their excessive consumption of hardware computing power.”
We will use the Game Boy Advance as a running case study in this course. We will study the hardware of the system in some detail as well as write programs for it in C and also assembly.
GBA specs:
The GBA has some things which make programming it different from most computers:
Copyright © 2024 Ian Finlayson | Licensed under a Creative Commons BY-NC-SA 4.0 License.