Rui's Blog

Lecture 24: Critical Thinking. Code Optimization Aspects.

Lecture Summary

  • Last time
    • Parallel computing, multi-core: how caches come into play
    • Critical thinking, and similar tricks for speeding up your code
  • Today
    • Critical thinking, and other similar tricks for speeding up your code

Know your hardware

Know your bandwidth/latency

Choose the right algorithm

  • When working on a problem, there's more to performance than asymptotic complexity
    • Because asymptotic complexity is most often defined by the number of operations
    • Memory transactions are rarely considered: they are specific to the hardware
  • Assess the arithmetic intensity associated with your problem
  • Simple optimization: Fusing transformations and do not bring data into the cache twice


  • Aggressive optimizations done by the compiler might change the behavior of your code
  • To help the compiler:
    • Allow it to see as much code as possible
    • Provide flags to convey information (e.g., the target architecture)
  • There are a lot of amazing things covered in this lecture. The takeaways are:
    • Compilers are fantastic
    • Know them better to use them wisely
  • A quick example is down below. Refer to the slides for a lot more fun facts