What I expect

Preparation and prereqs

Many many students have been asking me for advice about this course if they have not yet taken something like our own computer architecture course. Here’s roughly what I’ve been saying.

I assume you are very comfortable with the concepts taught in 460N. I will talk about things like caches, cache coherence, consistency, vectors, SIMD, pipelining, out-of-order execution, virtual memory, buses, instruction sets, front end, … assuming you already understand them. I will repeat some explanations and go deeper in many cases, but I expect that you already understand the fundamentals well enough to keep up without me reteaching the concepts. Basically, I will be doing a very quick and brief review (at best) and not introducing these concepts for the first time with all the care required for that.

I expect you to generally understand how tradeoffs work in computer architecture. We’ll see many examples, but I’ll go pretty rapidly over most.

The course labs (and probably the project) will require programming in C/C++ (at least a tiny bit of C++). The number of lines will not be obscene (or even what I consider large), but you will need to understand code and be able to produce your own. If you’re uncomfortable with this, please don’t register for class.

In general, there will be a heavy software component. Computer architecture is about getting solutions using available technology — this is a graduate course and therefore tries to emphasize the interactions between applications, software, and hardware.

A bit about expectations

I expect you to take the course seriously. By which I mean:

  • Prepare for class and participate in class (ask good questions, make good observations, and answer questions occasionally); no-one should say nothing all semester long.
  • When reading is assigned, prepare well.
  • When reading is suggested, skim it quickly at least.
  • Read through labs and assignments before starting on them.
  • Ask clarification questions through Piazza as much as possible so that everyone will benefit from responses (and so that anyone can respond).

I expect that you’re in the class because you want to learn:

  • Think before discussing with others.
  • Do discuss with others (not outside your group if lab or assignment).
  • Spend the effort necessary to do the labs well.
  • Ignore existing solutions on web (or prior years). Referring to something you find on the web explicitly (citing it) is not cheating, however, it’s not an effective way of learning.

I expect to learn something new from you:

  • There will be a project and I expect you to do something novel in it.
  • I expect you to be able to articulate what that is and explain it to me so that I learn something new.
  • I expect the project to be something you’re proud of and not simply something you’ve done to fulfill a class requirement.

I expect maturity:

  • Try to solve problems yourselves before going for help (within reason — the goal is to spend time learning new concepts, not debugging tools).
  • Be comfortable with somewhat vague instructions, grading policies, and requirements; of course, under the assumption that I do my best to be fair and objective.