This page was originally compiled by Professor David Bindel. I, Professor Guidi, share and fully endorse its content.

As an organizational note, none of us have enough hours in a day, and you probably will not read most of the references below. To help you identify the ones I most recommend, I have split each subsection into a main recommendation and other recommendations, and I deliberately include only one main recommendation.

This page is a living document. If you know of good sources I have missed, please submit a pull request to the main repository.

There is no required textbook for the course, and I will teach primarily from my own notes and slide decks, as well as from papers. Nonetheless, it is helpful to have one or two references.

Recommendation

Other Recommendations

The closest course to CS 5220, aside from previous offerings of the class, is Jim Demmel’s Applications of Computers (Berkeley CS 267).

  • Argonne National Lab runs ATPESC every summer (Argonne Training Program on Extreme-Scale Computing). This covers many things from our class (plus some others) in about two weeks.
  • Alan Edelman at MIT teaches a different parallel programming course, with the most recent iterations based on Julia. Materials are available here on MIT OpenCourseWare].
  • Georgia Tech has two HPC courses; CSE 6220 and CSE 6230. Without exploring in detail, I think we’re closer to the latter.
  • Randy Leveque at UW has also been experimenting with a flipped classroom for their intro HPC class, AM583. You may also be interested in the MOOC version.
  • The NERSC docs have lots of good auxiliary references.

Intel has lots of existing curricular content and tutorials and references on Intel parallel technology, and these are worth a browse.

Though I expect students taking the class to have some programming proficiency, that doesn’t necessarily mean everyone will have seen a Unix command line or a version control system. I mostly won’t spend class time on this, so you should take some time to brush up on your own.

Software Carpentry has good lessons on Unix shell and Git. If you’re unfamiliar with make, the lesson on Automation and Make may also be useful (though less immediately critical).

Other Recommendations

  • Cornell’s Center for Advanced Computing (CAC) offers a number of online training modules, including a good Linux introduction.
  • GitHub has links to several good resources for learning about Git and GitHub. I was particularly amused by the interactive Try Git tutorial.
  • Atlassian (makers of BitBucket) have a good [set of Git tutorials as well][bitbucket-turorials].
  • ProGit is a freely available online book that covers the basics and much more.

As an aside, BitBucket is probably the primary competitor to GitHub. I recommend creating accounts on both GitHub and BitBucket; the latter offers unlimited private repositories for educational users, which is helpful for managing proposals, paper drafts, and other projects you may want to keep private initially.

C Background

You will need prior programming experience in a C family language (Java, C, C++, or C#), but this does not mean you must have programmed in C before. We will use C as the common language for most of the class, so if you are not already familiar with it, it is a good idea to do some reading.

Reference

The C Programming Language (Kernighan and Ritchie) is the bible of C programming. I like it both as a reference to the language and an example of how to write an effective manual.

Other references

Specifically, you should review the lessons on the Unix shell and Git early, and the lesson on Automation and Make soon after. Later in the class, you may want to look at the lesson on Programming with Python.

C++ Background

C++ is a different language from modern C. It is a much bigger language, partly because it provides more abstractions (and more safe abstractions), making it a nice choice for large-scale software development in particular. At the same time, the language design is very wedded to maintaining C levels of performance – the C++ philosophy is to avoid paying extra costs for abstractions if possible (and particularly for abstractions that you are not using).

Reference

  • For learning modern C++, learncpp is a good choice. If you are a confident C programmer already, you can skim past a lot.
  • For looking things up, cppreference is great.

Other References

  • Stroustrop’s A Tour of C++ is a good overview if you already are a confident programmer (and an excellent one if you already know some C++ programming)
  • For the same audience, Professional C++
  • The standard reference is [The C++ Programming Language][stroustrop4e]
  • If you prefer watching things, the CppCon Back to Basics come recommended (I prefer books)

Python Background

Python is not strictly required for this class. Cornell offers a Python course (CS 1110) as its introductory course, but you are not the target audience for that class.

Reference

CAC has instructional modules on Introduction to Python and Python for HPC that fit well with the perspectives of this course.

Other References