Computer Architecture #
To paraphrase the course descriptions: At the end, I understood everything that happened to computer hardware from the time the power button was pressed.
We covered all sorts of topics:
- Pipelined processors and hazards
- Memory Hierarchy and Cache Types
- Multi-threading
- Multi-processor coherence
- IO and Storage
- Basic Networking
I took a total of 3 classes in this area, ECE 3058 (Computer Architecture), CS 3220 (Processor Design), and CS 4290 (Advanced COmputer Architecture).
As I moved onto the more advanced topics, I learned
- Branch Prediction
- VLIW Processors
- Out-of-Order Processors
- Super-scalar Processors
- GPU Architecture
- and more that I am forgetting right now
These courses were surprisingly hands on. The moment we covered something like a pipelined processor, I had to implement a 5-stage pipelined processor in Verilog along with a branch-predictor.
For some of the more complex hardware designs like branch predictors, out-of-order processor, or caches, I did software emulation of designs in C/C++. At the end, I would do a design space exploration of my design against various parameters like cache size, predictor size, etc, to find the optimal design against a set of benchmarks.