Pre-Midterm Course Review
CS 641 Lecture, Dr. Lawlor
You should know how to:
- Wire up a CPU from a set of registers and ALUs.
- Design an efficient instruction set encoding, and understand how it will operate the CPU.
- RISC encodings (fixed-size), such as MIPS or PPC
- CISC encodings (variable-size), such as x86
- Read x86 assembly language (in Intel/Microsoft/MASM/NASM/YASM syntax, not gcc)
- Write and modify CPU emulators.
- Understand pipelined CPUs
- Insert FIFOs between circuitry stages
- Forward results between pipeline stages, bypassing register file, for performance
- Insert pipeline stalls for branches or slow instructions
- Understand out-of-order CPUs
- Dependencies: RAW, WAW, WAR
- Register renaming
- Understand superscalar CPUs
- Multiple execution units
- Branch prediction/speculation
- Understand floating-point numbers, including IEEE bit layout, denormals and infinities
- Write and read SIMD code, such as SWAR bit-hacking or SSE floating-point
- Understand high-performance code, including fighting timers
- Understand multi-threaded code, including locks and privatization