High-Performance Computer Architecture

Course Website

Average Workload

15.8 hrs/wk

Average Difficulty

3.6 /5

Average Overall

3.9 /5
CS-6290
High-Performance Computer Architecture
Taken Fall 2023
Reviewed on 7/9/2024

Verified GT Email

Workload: 15 hr/wk
Difficulty: Hard
Overall: Strongly Liked

Video version: https://m.youtube.com/watch?v=ZYL1fKduJJU

This is a fantastic course, one of my favorites in the program. The lectures are extremely comprehensive, definitely the best set of lectures of any course I took in OMSCS. They cover a wide variety of techniques used in modern processors for executing tasks and optimizing performance. Each lecture goes very in depth, and overall they really feel like they come from a graduate-level computer architecture class.

The midterm and final emphasize problem solving, and while they are difficult because of the sheer quantity of material, the lectures provide all the material you need in order to do well.

The projects utilize the open source SESC simulator, written in C++. They are a combination of calculation, changing configuration variables, free response questions and modifying functions in the simulator code. They tie in closely to the lecture material. Because you work within an existing simulator, it's important that you feel comfortable working within a large codebase. You don't actually write much C++, but understanding the architecture of the simulator and what functions call other functions is very useful. The only downside of these projects is that they must be submitted by filling out a template Word document, which had the occasional formatting issue and obviously didn't have any auto-grading capabilities.

Nolan, the head TA, is extremely active in the forums and is one of the best TAs I've had in OMSCS. The professor also holds weekly office hours.

This course is great, and in my opinion is a fantastic course to prepare to GIOS or other systems courses that work at higher levels of abstraction.

CS-6290
High-Performance Computer Architecture
Taken Fall 2023
Reviewed on 12/11/2023

Verified GT Email

Workload: 15 hr/wk
Difficulty: Medium
Overall: Strongly Liked

Introduction and Background

As of course start, I had around 3 years of experience working as a professional software engineer, specifically doing web applications (full-stack C#.NET + JavaScript). My previous degree was in Engineering (non-CE/non-EE) from early 2010s. I also did five CS prep courses online via Oakton Community College (2019), as well as a full-stack programming boot camp (2020) to switch careers at the time (my work experience prior to this was unrelated to software engineering).

This was my fourth course in OMSCS, within the computing systems specialization. I previously completed GIOS (CS 6200, Fall 2021), IIS (CS 6035, Fall 2022), and CN (CS 6250, Summer 2023).

Parenthetically, I attempted HPCA (CS 6290) previously, first briefly in my second semester in OMSCS (made the mistake of attempting together with AI, ended up dropping both), and more recently in the preceding Spring (2023), however, due to an unexpected layoff hitting at a bad point in the Spring semester at the time, I had to drop yet again in the latter. (Fortunately, I did manage to land a new job after the layoff, but it was very hectic at the time nevertheless.)

High-Level Review

Overall, I really enjoyed the course. I thought the content struck a very nice balance between breadth and depth with respect to an otherwise complicated subject. The course topics span from "micro" to "macro" levels, providing the "building blocks" along the way. This spans roughly three general themes/areas as follows (in respective order of appearance):

  • out-of-order processors and their internals
  • the memory hierarchy
  • multi-core and multi-threaded execution

Course Logistics and Time Expenditure

The course is not curved, and generally follows a strict 10-point scale (i.e., 90.000-100.000% overall for an A, 80-89.999% overall for a B, etc.). The relative weighting of the deliverables is 50% projects and 50% exams, broken down as follows:

  • projects (5% + 10% + 15% + 20%)
  • midterm (20%)
  • final (30%)

I did not keep strict tabs on time expenditures across deliverables, but my best in-hindsight back-estimates are as follows:

  • 5 hours per lecture (videos watching and taking notes) * 22 lessons total = 110 hours
  • 5 hours for project 0
  • 15 hours for project 1
  • 25 hours apiece for projects 2 and 3 = 50 hours
  • 30 hours of prep per exam * 2 exams = 60 hours

Given a 16-week Fall semester, this averages out to 15 hours/week [= (110 + 5 + 15 + 50 + 60)/16]. The cadence was typically 1-2 (or incidentally 3) lectures per week, along with projects and exams, with the latter generally due Sunday by midnight AOE (equivalent to Monday morning in US-based time zones). The class is somewhat "middle-loaded" in my opinion, in the sense that the 5 (or so) week stretch spanning Project 1 (second project), midterm, and Project 2 (third project) is rather hectic, but otherwise the "flanking" parts of that are relatively more "placid" (but not "snooze mode" by any means, to be clear).

Course Deliverables

Projects

The projects all involved C++, more specifically the SESC CPU simulator, which was co-written by Prof. Prvulovic while in grad school. The projects span a few of the most critical/prominent topics in the course, and approach them more from a "lab" standpoint, involving tweaking the existing SESC code base (more so than coding a lot "from scratch"), and analyzing results accordingly. These topic are as follows (respectively in order of appearance):

  • Project 0 - general introduction/orientation to SESC app
  • Project 1 - branch prediction
  • Project 2 - caches
  • Project 3 - cache coherence

The last two projects (2 and 3) allow to work with a partner. This was helpful in my case, as my partner and I worked pretty collaboratively, and I suspect that we were able to finish faster between the two of us than had we been working individually/separately. Of course, "your mileage may vary" with these things. (There was an Ed thread to coordinate partners, otherwise we did not know each other going into the course, but subsequently became fairly well acquainted 🙂).

As a somewhat controversial/hot take, I thought the projects were actually pretty decent. Some of the typical criticisms going back to old reviews include (among other things) the somewhat archaic handout/form (with red boxes where you must enter your responses), and the "treasure hunt" in Ed for relevant information. However, neither of these were really as "obnoxious" as people tend to make it out to be in my opinion, as most of the relevant information is there, and head TA Nolan (in particular) was very helpful with directing accordingly as well. If nothing else, I personally much prefer this over courses with project handouts that are very vague and ambiguous, to a point of blocking progress on the project itself. Most of the relevant information is available in the aforementioned, and scoring in the 90-100 range is very manageable accordingly (as evidenced by the course-wide median grades falling within this range).

As another aside, having seen a couple of previous iterations of the course, one thing I can clear up here as of Fall 2023 (but I believe rolled out previously as of Summer 2022 or so), at least relative to older reviews, is that the project setup is much better after one of the more recently joining TAs (Joe) streamlined it by adding a Dockerized version (along with 64-bit VM) of the app. I can personally attest that the older 32-bit VM was a huge pain to work with, but fortunately that is no longer a relevant factor anymore. Thanks a lot, Joe!

Exams

I would characterize the exams as "tough, but fair." They are open notes, but they test a fairly sophisticated understanding of the material, involving a lot of "hand calculations" rather than just simply "rote regurgitation" of material. The midterm was logistically more challenging since it only allowed 2 hours, whereas the final was cumulative (i.e., including midterm content), but allowed for 3 hours and had heavier emphasis on the latter content (i.e., post-midterm), which was also more fresh by that point.

The staff additionally provides practice exams and (ungraded) problem sets to further reinforce the course topics, which are useful both for preparatory as well as for pedagogical purposes. Additionally, there are in-lecture "quizzes" videos (ungraded) which help to reinforce the "main" lecture content, as well as to highlight insights therein (e.g., to quantitatively demonstrate the assertions from the previous lecture videos with respect to "why A is more optimal than B," etc.).

Closing Remarks

In my opinion, this course complements GIOS (CS 6200) very well, covering similar subject matter but from the hardware perspective. I personally think the combination of GIOS + HPCA is the "quintessential combo" within computing systems, i.e., for somebody from a different specialization looking to "dabble" in computing systems, these are the two I would recommend to get a "big picture" (but otherwise thorough) sense of the pertinent subject matter; otherwise, for those within the computing systems track, these provide a strong foundation to explore further into other peripheral topics. In terms of ordering among these two, they are relatively independent, though I think some initial exposure in GIOS is helpful to understand the topics in HPCA, so I'm slightly partial to doing GIOS first in hindsight (though doing HPCA first instead will not be a "showstopper" in either, by any means).

With respect to difficulty and "pairability," I think this course was slightly less challenging overall compared to GIOS as a relative reference/benchmark, and I pinned it accordingly as an unambiguous "medium" difficulty (relative to GIOS being a more "medium-going-on-hard" for me). The projects in GIOS were relatively more involved/complicated, however, the more unique challenge of HPCA is just the sheer volume of material; the total lecture video time for HPCA is around 23.5 hours, and fairly info-dense to boot. If I were to pair with HPCA, it would definitely be something lighter (e.g., IIS), however, I would not recommend pairing something like HPCA + GIOS, especially not on top of full-time work.

Lastly, special thanks to the staff for making it a great course experience overall. Prof. Prvulovic is an absolutely brilliant instructor. The quality of the lessons is top-notch in my anecdotal experience with OMSCS courses to date (on par with GIOS for "best" overall I've seen among the courses I've taken thus far), and in particular I really appreciate Prof. Prvulovic's ability to distill such a dense/complex topic into a very well balanced breadth-depth trade-off, in such a manner that "told the overall story" without "missing the forest for the trees." I was able to come out of the course with a very comprehensive view of the subject matter, and appreciate that there was enough attention to detail to make the points stick, but without otherwise getting overly caught in the weeds with minutiae. Also, head TA Nolan is still the GOAT, and absolutely the star of the show. If you look at reviews going back years at this point, you will see them singing Nolan's praises along the way, and this is very much so merited accordingly.

Additional Resources

Here are a few things I put together during my stint in HPCA, which may or may not be helpful if you decide to take the course:

The notes are fairly comprehensive. I clipped out all of the figures (see here), if you prefer to simply use those for your own notes. I essentially turned each video into an outlined/notes form of a "transcript" (i.e., very few details left behind), with the general idea/principle being "one watch the video once" (i.e., let the notes be completely "standalone" subsequently thereafter). The figures are numbered by lesson prefix (e.g., 01-...), but otherwise the numbering is just sequential as appearing throughout the videos spanning a given lecture (i.e., -001, -002, etc.), but not otherwise correlated to the canonical "video numbers" (i.e., in Canvas/Ed). Additionally, suffix Q designates "quiz," while suffix A designates "answer" (i.e., for the preceding quiz), where applicable.