Computer Architecture and the Hardware/Software Interface

To understand a program you must become both the machine and the program.

Alan Perlis

Computer architecture—sometimes called “computer organization”—is an important first look at computing from below the software surface. In our experience it is one of the most neglected area among self-taught software engineers.

The course is scoped as an introduction to the topic, designed for software engineers who wish to be better software engineers, rather than prospective hardware engineers.

The focus is on building a strong mental model of the actual execution of programs by a microprocessor, so that you can better reason about the code you write. This manifests most clearly as the ability to write faster code, whether by better understanding the available instruction set, by reasoning more clearly about branch prediction or cache coherence, or by understanding the limits of parallel execution.

Classes

  1. The Fetch-Decode-Execute Cycle
  2. Binary Encodings of Data
  3. Introduction to Assembly Programming
  4. A Brief Tour of Logic Circuits
  5. The Structure of a Simple CPU
  6. Introduction to Operating Systems: Booting, Loading, and Virtual Memory
  7. An Overview of C, the Portable Assembly Language
  8. The Memory Hierarchy

Projects and exercises

The practical component of this course involves a number of small exercises, mostly writing C or assembly code to understand the hardware/software interface, or designing simple circuits to really understand what your microprocessor does. A favorite exercise among students involves profiling and refactoring a snippet of code to dramatically improve performance based on understanding CPU cache levels.

Assumed knowledge

This course assumes confident general programming abilities. Some familiarity with C and/or assembly programming is advantageous but not required: both are covered in class.

Schedule and price

Computer Architecture and the Hardware/Software Interface will next run 5:30pm-8:00pm Mondays and Thursdays, 4-28 Feb 2019. The total price is $1800.

Apply now Still have questions? Contact us.

Since taking architecture at Bradfield I feel like nothing in Computer Science makes sense except in the light of computer architecture. If you already understand precisely how cache locality, pipelining and hyperthreading affect the code you write every day, why linear algebra is faster in Matlab than Javascript, how to reason about your C code in terms of the assembly it compiles to and how to calculate the decrease in execution time by parallelizing your code, then this course probably isn’t for you. Otherwise, take it.

Rohan Pethiyagoda, Software Engineer at InSite Applications Rohan Pethiyagoda, Software Engineer at InSite Applications

Architecture with Myles replaced my flimsy mental models of computing, which hold up many of my other programming beliefs, with concrete knowledge and better abstractions. I have become a better software engineer as a direct result of this and the Algorithms course.

Jared Daugherty, Software Engineer at Credit Karma Jared Daugherty, Software Engineer at Credit Karma

I didn’t realize I needed to learn Computer Architecture until I attended Bradfield. In retrospect it should have been obvious—decisions at the transistor level have implications further up, for everything from databases to compilers. The abstractions we work on are nice, but if you want to be a great engineer you need to understand the tools you’re working with.

Yoshio Goto, Lead Engineer at Talk-To Yoshio Goto, Lead Engineer at Talk-To

Trying to wrap my head around textbook discussions and video lectures on CPU data paths left me feeling overwhelmed, trying to break down a complicated system into its component functions. But Myles presented a logical progression, building up the data path one piece at a time, turning a mystifying topic into something clearly understandable.

Anthony Landreth, Owner, Robophilosopher LLC Anthony Landreth, Owner, Robophilosopher LLC