Practical DSA
Locks and Atomics
Learn how mutexes and atomics prevent race conditions, and why hardware contention can make multithreaded code slower than single-threaded code.
Practical DSA
Cache Coherency and False Sharing
Explore the performance cost of synchronization, how to mitigate it, and how to avoid it entirely with better algorithm design.
Practical DSA
Reader-Writer Locks and std::shared_mutex
Learn how to protect stateful data structures with minimal contention using critical section granularity, std::shared_mutex, and deadlock-safe lock acquisition.
Practical DSA
NP-Hard and Approximations
Learn why some problems are impossible to solve exactly and how we can use approximations like Monte Carlo simulations to cheat.
Practical DSA
Configuring a CMake Project
Separate our core logic into libraries, configure CMake for multiple targets, and apply hardware-aware optimizations.
Practical DSA
The Iterator Pattern
The bridge between data layout and algorithms. Learn how iterators abstract memory traversal and the hierarchy of capabilities.
Practical DSA
Instruction Reordering
Learn how CPU out-of-order execution breaks lock-free code, and how to use seq_cst, acquire, release, acq_rel, and relaxed to fix it.
Practical DSA
Concurrency and Striped Hashing
Scale the Swiss Table across multiple CPU cores with sharded striping, reader-writer locks, and cache-line alignment.
Practical DSA
Swiss Table Memory Layout
Rethink hash table memory layout for SIMD hardware by splitting metadata from payloads and extracting 7-bit hash signatures.
Practical DSA
Swiss Table SIMD Probing
Combine structure of arrays metadata with xsimd batch operations to search 16, 32, or 64 hash buckets in a single clock cycle.
Intro to C++ Programming
Creating Variables
Creating variables to store and update the data that describes our objects. We also introduce comments, allowing us to describe our code in plain language.