# numactl **numactl** controls NUMA (Non-Uniform Memory Access) policy on multi-socket machines. Each CPU socket has its own attached memory. Cross-socket memory access is 2x slower than local access. Pin a process to CPU cores and memory on the same NUMA node to maintain locality—critical for HPC performance. Multi-socket machines are not one uniform pool of RAM. Each socket has a memory controller and DIMMs; accessing memory from another socket crosses the inter-socket interconnect. The OS scheduler tries to keep threads and memory local automatically, but for HPC where every percentage of bandwidth matters, explicit binding is needed. ```bash $ numactl --hardware available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 4 5 6 7 node 0 size: 64000 MB node 1 cpus: 8 9 10 11 12 13 14 15 node 1 size: 64000 MB node distances: node 0 1 0: 10 21 1: 21 10 ``` Distance 21 vs 10 means cross-socket access costs roughly 2x the latency. Bind with `numactl --cpunodebind=0 --membind=0 ./program` to keep everything on node 0. ## Concepts 1. [[numactl-basics|Basics]] 2. [[numactl-binding|Binding]] 3. [[numactl-physcpubind|CPU pinning]] 4. [[numactl-memory-policies|Memory policies]] 5. [[numactl-diagnosing|Diagnosing]] 6. [[numactl-performance|Performance]] 7. [[numactl-openmp|OpenMP]] 8. [[numactl-mpi|MPI]]