A working understanding of the physical parts of a computer is important for making decisions about how to make code faster.
- Here’s a basic overview of the parts of a modern desktop computer If you’ve never built a computer, this might be helpful.
- How are supercomputers different?
- What is cache, and why does it speed things up?
- How big should a page file/swap partition be?
Why is my code slow?
- Profilers can help you identify code bottlenecks
- One developer’s story of how he used unit testing concepts to benchmark his code
- Big-O notation and algorithmic complexity–aka, maybe your algorithm is the problem
- A proof of Amdahl’s Law, which predicts how much a program can be sped up when parallelized
So you want to parallelize . . .
- A phenomenal introduction to parallel computing
- An intuitive explanation of race conditions: how many people does it take to turn off a light?
- Multithreading is an approach to parallelization, but doesn’t always result in parallelization
- An overview of cloud computing (not a how-to)
- MPI: tutorials for how to parallelize in hardcore mode, generally for compiled languages
- Map-Reduce, Spread-Gather - some sort of link to embarassingly parallel problem framings
- Difference between CPU and GPU computing
- GPU computing, it’s strengths and limitations