High performance computing on your laptop II: algorithms, memory, and parallelism
In the final session of this course, we introduce "the other half" of performance: algorithms, memory, and parallelism. The lecture introduces how to estimate and summarize the performance of an algorithm ("Big-O notation"), and demonstrates that Julia escapes the weaknesses of many other languages for analyzing algorithm performance. The remaining two sections touch on idiosyncracies of computer hardware (specifically the interaction between slow memory and fast CPU cache) that modify the otherwise-"pure" analysis of algorithms, and on opportunities and perils in parallelizing your code across multiple threads, on GPUs, and in clusters.
Course materials are available in the associated GitHub repo: https://github.com/timholy/AdvancedScientificComputing