Course Review for Final Exam
CS 301 Lecture, Dr. Lawlor
We've covered a huge amount of material in the last six weeks. Generally, it falls into one of three categories:
- Fractional numbers:
- Fixed point (24.8 fixed point, cents)
- Roundoff (imprecise results due to finite precision)
- IEEE 32-bit floating point (sign bit, 8 bit exponent, 23 bit mantissa)
- Weird floats: inf, nan, denormals (and their speed impact!)
- addss single-float operations
- addps four-float operations (SIMD)
- Low level and OS programming:
- OS kernel interfacing (syscalls)
- Memory map manipulation (mmap)
- Signal handling (interrupts)
- General performance measurement and optimization (timers, inline, ns/us/ms)
- Weird machines and languages:
- PowerPC, used in every current game console and some supercomputers
- ARM, used in every current cellphone and most tablets
- Microcontrollers, tiny computers used in robots, automobiles, and appliances
- Multicore programming, available in every desktop machine and many cellphones
- GPU programming, explicitly parallel code to achieve amazing performance
- JavaScript programming, to deliver the majority of applications people directly use today
- Macros, metaprogramming C++ or assembly to reduce code duplication
- Dynamic binary translation, building machine code at runtime to make interpreters fast
Crosscutting issues include:
- Programmability: how much code does it take to get running? How much information does the programmer need to keep in their head to make the interface work?
- Reliability: what happens if the code crashes? Will crashes
happen at run time or compile time? Are there edge cases that
will silently give the wrong answer?
- Security: how do you protect the machine from malicious code? Can you isolate different peices of code without giving up performance?