# hpcnotes.eu

> HPC notes and wiki: high-performance computing and performance engineering, from CPU caches, SIMD and compilers to MPI, OpenMP, CUDA and Slurm clusters. Personal notes by hpcnotes. Cite the canonical HTML URL on https://hpcnotes.eu when quoting.

This is a small notes site, not a cluster's official documentation. Each page has a Markdown copy at the same path with `.md` appended. Agents may also send `Accept: text/markdown` to the HTML URL. Prefer those Markdown files when quoting; the canonical citation is still the HTML page.

## Notes
- [HPC](https://hpcnotes.eu/notes/hpc.md): A nested performance-engineering note: sections, sub-notes, and sub-sub-notes, walked in order.
- [Working on a shared cluster](https://hpcnotes.eu/notes/working-on-a-cluster.md): Login, modules, a job that finishes, then a first GPU kernel. One note, four pages.

## Thoughts
- [What a note can carry](https://hpcnotes.eu/notes/what-a-note-can-carry.md): Code, diagrams, maths, figures, gifs. Write the note as a Markdown file; the site renders the rest.
- [Why site-independent HPC notes still matter](https://hpcnotes.eu/notes/site-independent-hpc-docs.md): Every centre has a hostname. None of them should have to re-explain MPI ranks from scratch.
- [Measure before you optimise](https://hpcnotes.eu/notes/measure-before-you-optimize.md): A CFD mini-app that was 'MPI bound' until we turned the VTK dumps off. Performance engineering as a habit, not a rewrite.

## Pages
- [Argmin with SIMD](https://hpcnotes.eu/notes/hpc-algorithms-argmin.md): page of Algorithms Case Studies
- [Integer Factorization](https://hpcnotes.eu/notes/hpc-algorithms-factorization.md): page of Algorithms Case Studies
- [Binary GCD](https://hpcnotes.eu/notes/hpc-algorithms-gcd.md): page of Algorithms Case Studies
- [Optimizing Logistic Regression](https://hpcnotes.eu/notes/hpc-algorithms-logistic.md): page of Algorithms Case Studies
- [Matrix Multiplication](https://hpcnotes.eu/notes/hpc-algorithms-matmul.md): page of Algorithms Case Studies
- [Prefix Sum with SIMD](https://hpcnotes.eu/notes/hpc-algorithms-prefix.md): page of Algorithms Case Studies
- [Reading Decimal Integers](https://hpcnotes.eu/notes/hpc-algorithms-reading-integers.md): page of Algorithms Case Studies
- [Sorting](https://hpcnotes.eu/notes/hpc-algorithms-sorting.md): page of Algorithms Case Studies
- [Algorithms Case Studies](https://hpcnotes.eu/notes/hpc-algorithms.md): page of HPC
- [Assembly Language](https://hpcnotes.eu/notes/hpc-architecture-assembly.md): page of Computer Architecture
- [Functions and Recursion](https://hpcnotes.eu/notes/hpc-architecture-functions.md): page of Computer Architecture
- [Indirect Branching](https://hpcnotes.eu/notes/hpc-architecture-indirect.md): page of Computer Architecture
- [Interrupts and System Calls](https://hpcnotes.eu/notes/hpc-architecture-interaction.md): page of Computer Architecture
- [Instruction Set Architectures](https://hpcnotes.eu/notes/hpc-architecture-isa.md): page of Computer Architecture
- [Machine Code Layout](https://hpcnotes.eu/notes/hpc-architecture-layout.md): page of Computer Architecture
- [Loops and Conditionals](https://hpcnotes.eu/notes/hpc-architecture-loops.md): page of Computer Architecture
- [Computer Architecture](https://hpcnotes.eu/notes/hpc-architecture.md): page of HPC
- [Bit Manipulation](https://hpcnotes.eu/notes/hpc-arithmetic-bit-hacks.md): page of Arithmetic
- [Data Compression](https://hpcnotes.eu/notes/hpc-arithmetic-compression.md): page of Arithmetic
- [Integer Division](https://hpcnotes.eu/notes/hpc-arithmetic-division.md): page of Arithmetic
- [Rounding Errors](https://hpcnotes.eu/notes/hpc-arithmetic-errors.md): page of Arithmetic
- [Floating-Point Numbers](https://hpcnotes.eu/notes/hpc-arithmetic-float.md): page of Arithmetic
- [IEEE 754 Floats](https://hpcnotes.eu/notes/hpc-arithmetic-ieee-754.md): page of Arithmetic
- [Integer Numbers](https://hpcnotes.eu/notes/hpc-arithmetic-integer.md): page of Arithmetic
- [Newton's Method](https://hpcnotes.eu/notes/hpc-arithmetic-newton.md): page of Arithmetic
- [Fast Inverse Square Root](https://hpcnotes.eu/notes/hpc-arithmetic-rsqrt.md): page of Arithmetic
- [Arithmetic](https://hpcnotes.eu/notes/hpc-arithmetic.md): page of HPC
- [Non-Zero-Cost Abstractions](https://hpcnotes.eu/notes/hpc-compilation-abstractions.md): page of Compilation
- [Arithmetic Optimizations](https://hpcnotes.eu/notes/hpc-compilation-arithmetic.md): page of Compilation
- [Contract Programming](https://hpcnotes.eu/notes/hpc-compilation-contracts.md): page of Compilation
- [Flags and Targets](https://hpcnotes.eu/notes/hpc-compilation-flags.md): page of Compilation
- [What Compilers Can and Can't Do](https://hpcnotes.eu/notes/hpc-compilation-limitations.md): page of Compilation
- [Precomputation](https://hpcnotes.eu/notes/hpc-compilation-precalc.md): page of Compilation
- [Situational Optimizations](https://hpcnotes.eu/notes/hpc-compilation-situational.md): page of Compilation
- [Stages of Compilation](https://hpcnotes.eu/notes/hpc-compilation-stages.md): page of Compilation
- [Compilation](https://hpcnotes.eu/notes/hpc-compilation.md): page of HPC
- [Modern Hardware](https://hpcnotes.eu/notes/hpc-complexity-hardware.md): page of Complexity Models
- [Programming Languages](https://hpcnotes.eu/notes/hpc-complexity-languages.md): page of Complexity Models
- [When to Optimize](https://hpcnotes.eu/notes/hpc-complexity-levels.md): page of Complexity Models
- [Models of Computation](https://hpcnotes.eu/notes/hpc-complexity-models.md): page of Complexity Models
- [Complexity Models](https://hpcnotes.eu/notes/hpc-complexity.md): page of HPC
- [Alignment and Packing](https://hpcnotes.eu/notes/hpc-cpu-cache-alignment.md): page of RAM & CPU Caches
- [AoS and SoA](https://hpcnotes.eu/notes/hpc-cpu-cache-aos-soa.md): page of RAM & CPU Caches
- [Cache Associativity](https://hpcnotes.eu/notes/hpc-cpu-cache-associativity.md): page of RAM & CPU Caches
- [Memory Bandwidth](https://hpcnotes.eu/notes/hpc-cpu-cache-bandwidth.md): page of RAM & CPU Caches
- [Cache Lines](https://hpcnotes.eu/notes/hpc-cpu-cache-cache-lines.md): page of RAM & CPU Caches
- [Memory Latency](https://hpcnotes.eu/notes/hpc-cpu-cache-latency.md): page of RAM & CPU Caches
- [Memory-Level Parallelism](https://hpcnotes.eu/notes/hpc-cpu-cache-mlp.md): page of RAM & CPU Caches
- [Memory Paging](https://hpcnotes.eu/notes/hpc-cpu-cache-paging.md): page of RAM & CPU Caches
- [Pointer Alternatives](https://hpcnotes.eu/notes/hpc-cpu-cache-pointers.md): page of RAM & CPU Caches
- [Prefetching](https://hpcnotes.eu/notes/hpc-cpu-cache-prefetching.md): page of RAM & CPU Caches
- [Memory Sharing](https://hpcnotes.eu/notes/hpc-cpu-cache-sharing.md): page of RAM & CPU Caches
- [RAM & CPU Caches](https://hpcnotes.eu/notes/hpc-cpu-cache.md): page of HPC
- [Search Trees](https://hpcnotes.eu/notes/hpc-data-structures-b-tree.md): page of Data Structures Case Studies
- [Binary Search](https://hpcnotes.eu/notes/hpc-data-structures-binary-search.md): page of Data Structures Case Studies
- [Bitmaps](https://hpcnotes.eu/notes/hpc-data-structures-bitset.md): page of Data Structures Case Studies
- [Probabilistic Filters](https://hpcnotes.eu/notes/hpc-data-structures-filters.md): page of Data Structures Case Studies
- [Hash Tables](https://hpcnotes.eu/notes/hpc-data-structures-hash-tables.md): page of Data Structures Case Studies
- [Static B-Trees](https://hpcnotes.eu/notes/hpc-data-structures-s-tree.md): page of Data Structures Case Studies
- [Segment Trees](https://hpcnotes.eu/notes/hpc-data-structures-segment-trees.md): page of Data Structures Case Studies
- [Data Structures Case Studies](https://hpcnotes.eu/notes/hpc-data-structures.md): page of HPC
- [Actor Model](https://hpcnotes.eu/notes/hpc-distributed-actor.md): page of Distributed Computing
- [Distributed Algorithms](https://hpcnotes.eu/notes/hpc-distributed-algorithms.md): page of Distributed Computing
- [Cloud Computing](https://hpcnotes.eu/notes/hpc-distributed-cloud.md): page of Distributed Computing
- [MapReduce](https://hpcnotes.eu/notes/hpc-distributed-mapreduce.md): page of Distributed Computing
- [Message Passing Interface](https://hpcnotes.eu/notes/hpc-distributed-mpi.md): page of Distributed Computing
- [Distributed Computing](https://hpcnotes.eu/notes/hpc-distributed.md): page of HPC
- [Memory Hierarchy](https://hpcnotes.eu/notes/hpc-external-memory-hierarchy.md): page of External Memory
- [List Ranking](https://hpcnotes.eu/notes/hpc-external-memory-list-ranking.md): page of External Memory
- [Spatial and Temporal Locality](https://hpcnotes.eu/notes/hpc-external-memory-locality.md): page of External Memory
- [Memory Management](https://hpcnotes.eu/notes/hpc-external-memory-management.md): page of External Memory
- [External Memory Model](https://hpcnotes.eu/notes/hpc-external-memory-model.md): page of External Memory
- [Cache-Oblivious Algorithms](https://hpcnotes.eu/notes/hpc-external-memory-oblivious.md): page of External Memory
- [Eviction Policies](https://hpcnotes.eu/notes/hpc-external-memory-policies.md): page of External Memory
- [External Sorting](https://hpcnotes.eu/notes/hpc-external-memory-sorting.md): page of External Memory
- [Sublinear Algorithms](https://hpcnotes.eu/notes/hpc-external-memory-sublinear.md): page of External Memory
- [Virtual Memory](https://hpcnotes.eu/notes/hpc-external-memory-virtual.md): page of External Memory
- [External Memory](https://hpcnotes.eu/notes/hpc-external-memory.md): page of HPC
- [Cryptography](https://hpcnotes.eu/notes/hpc-number-theory-cryptography.md): page of Number Theory
- [Error Correction](https://hpcnotes.eu/notes/hpc-number-theory-error-correction.md): page of Number Theory
- [Extended Euclidean Algorithm](https://hpcnotes.eu/notes/hpc-number-theory-euclid-extended.md): page of Number Theory
- [Binary Exponentiation](https://hpcnotes.eu/notes/hpc-number-theory-exponentiation.md): page of Number Theory
- [Finite Fields](https://hpcnotes.eu/notes/hpc-number-theory-finite.md): page of Number Theory
- [Hashing](https://hpcnotes.eu/notes/hpc-number-theory-hashing.md): page of Number Theory
- [Modular Arithmetic](https://hpcnotes.eu/notes/hpc-number-theory-modular.md): page of Number Theory
- [Montgomery Multiplication](https://hpcnotes.eu/notes/hpc-number-theory-montgomery.md): page of Number Theory
- [Random Number Generation](https://hpcnotes.eu/notes/hpc-number-theory-rng.md): page of Number Theory
- [Number Theory](https://hpcnotes.eu/notes/hpc-number-theory.md): page of HPC
- [OpenMP](https://hpcnotes.eu/notes/hpc-parallel-algorithms-openmp.md): page of Parallel Algorithms
- [Parallel Algorithms](https://hpcnotes.eu/notes/hpc-parallel-algorithms.md): page of Parallel Computing
- [Event-driven Concurrency](https://hpcnotes.eu/notes/hpc-parallel-concurrency-event-driven.md): page of Concurrency
- [Fibers](https://hpcnotes.eu/notes/hpc-parallel-concurrency-fibers.md): page of Concurrency
- [Processes](https://hpcnotes.eu/notes/hpc-parallel-concurrency-processes.md): page of Concurrency
- [Threads](https://hpcnotes.eu/notes/hpc-parallel-concurrency-threads.md): page of Concurrency
- [Concurrency](https://hpcnotes.eu/notes/hpc-parallel-concurrency.md): page of Parallel Computing
- [CUDA](https://hpcnotes.eu/notes/hpc-parallel-gpu-cuda.md): page of GPU Programming
- [GPU Programming](https://hpcnotes.eu/notes/hpc-parallel-gpu.md): page of Parallel Computing
- [Threading Runtimes](https://hpcnotes.eu/notes/hpc-parallel-runtimes.md): page of Parallel Computing
- [Mutual Exclusion](https://hpcnotes.eu/notes/hpc-parallel-synchronization-mutex.md): page of Synchronization Primitives
- [Synchronization Primitives](https://hpcnotes.eu/notes/hpc-parallel-synchronization.md): page of Parallel Computing
- [Parallel Computing](https://hpcnotes.eu/notes/hpc-parallel.md): page of HPC
- [The Cost of Branching](https://hpcnotes.eu/notes/hpc-pipelining-branching.md): page of Instruction-Level Parallelism
- [Branchless Programming](https://hpcnotes.eu/notes/hpc-pipelining-branchless.md): page of Instruction-Level Parallelism
- [Pipeline Hazards](https://hpcnotes.eu/notes/hpc-pipelining-hazards.md): page of Instruction-Level Parallelism
- [Theoretical Performance Limits](https://hpcnotes.eu/notes/hpc-pipelining-limits.md): page of Instruction-Level Parallelism
- [Instruction Scheduling](https://hpcnotes.eu/notes/hpc-pipelining-scheduling.md): page of Instruction-Level Parallelism
- [Instruction Tables](https://hpcnotes.eu/notes/hpc-pipelining-tables.md): page of Instruction-Level Parallelism
- [Throughput Computing](https://hpcnotes.eu/notes/hpc-pipelining-throughput.md): page of Instruction-Level Parallelism
- [Instruction-Level Parallelism](https://hpcnotes.eu/notes/hpc-pipelining.md): page of HPC
- [Preface](https://hpcnotes.eu/notes/hpc-preface.md): page of HPC
- [Benchmarking](https://hpcnotes.eu/notes/hpc-profiling-benchmarking.md): page of Profiling
- [Statistical Profiling](https://hpcnotes.eu/notes/hpc-profiling-events.md): page of Profiling
- [Instrumentation](https://hpcnotes.eu/notes/hpc-profiling-instrumentation.md): page of Profiling
- [Machine Code Analyzers](https://hpcnotes.eu/notes/hpc-profiling-mca.md): page of Profiling
- [Getting Accurate Results](https://hpcnotes.eu/notes/hpc-profiling-noise.md): page of Profiling
- [Program Simulation](https://hpcnotes.eu/notes/hpc-profiling-simulation.md): page of Profiling
- [Profiling](https://hpcnotes.eu/notes/hpc-profiling.md): page of HPC
- [Auto-Vectorization and SPMD](https://hpcnotes.eu/notes/hpc-simd-auto-vectorization.md): page of SIMD Parallelism
- [Intrinsics and Vector Types](https://hpcnotes.eu/notes/hpc-simd-intrinsics.md): page of SIMD Parallelism
- [Masking and Blending](https://hpcnotes.eu/notes/hpc-simd-masking.md): page of SIMD Parallelism
- [Moving Data](https://hpcnotes.eu/notes/hpc-simd-moving.md): page of SIMD Parallelism
- [Reductions](https://hpcnotes.eu/notes/hpc-simd-reduction.md): page of SIMD Parallelism
- [In-Register Shuffles](https://hpcnotes.eu/notes/hpc-simd-shuffling.md): page of SIMD Parallelism
- [SIMD Parallelism](https://hpcnotes.eu/notes/hpc-simd.md): page of HPC
- [Anatomy of a Slurm job that actually finishes](https://hpcnotes.eu/notes/slurm-jobs-that-finish.md): page of Working on a shared cluster
- [From login node to first GPU kernel](https://hpcnotes.eu/notes/first-gpu-kernel.md): page of Working on a shared cluster
- [Login nodes are not compute](https://hpcnotes.eu/notes/login-nodes-are-not-compute.md): page of Working on a shared cluster
- [Environment modules are a contract](https://hpcnotes.eu/notes/modules-are-a-contract.md): page of Working on a shared cluster

## Optional
- [Full text](https://hpcnotes.eu/llms-full.txt): every published note in one Markdown file
- [Sitemap](https://hpcnotes.eu/sitemap.xml)
- [RSS](https://hpcnotes.eu/feed.xml): listed notes and thoughts only
- [Explore](https://hpcnotes.eu/explore): tags
