Home Knowledge Base NUMA-Aware Programming

NUMA-Aware Programming is the performance optimization discipline for multi-socket and chiplet-based systems where memory access latency and bandwidth depend on the physical location of the memory relative to the processor — where NUMA-oblivious code can suffer 2-4x performance degradation because remote memory accesses (cross-socket or cross-chiplet) take 1.5-3x longer than local accesses, making data placement and thread affinity the dominant factors in memory-bound application performance.

NUMA Architecture

In a NUMA system, each processor (socket/chiplet) has its own local memory controller and DRAM. Accessing local memory: ~80-100 ns. Accessing remote memory (through the interconnect — Intel UPI, AMD Infinity Fabric): ~130-200 ns. The latency asymmetry is the "non-uniform" in NUMA.

Example: 2-Socket AMD EPYC

Each socket has 4 CCDs (chiplet core dies), each with its own L3 cache and a local slice of the memory channels. Memory access hierarchy: 1. Same CCD L3: ~10 ns 2. Same socket, different CCD: ~30-50 ns 3. Same socket, different memory controller: ~80-100 ns 4. Remote socket: ~130-200 ns

NUMA Optimization Techniques

Detecting NUMA Issues

NUMA in Practice

NUMA-Aware Programming is the essential optimization for modern multi-socket and chiplet servers — ensuring that data lives close to the processor that uses it, because in a NUMA system, WHERE you allocate memory matters as much as HOW you access it.

numa aware programmingnuma memory allocationnuma topologynuma bindingnon uniform memory access

Explore 500+ Semiconductor & AI Topics

From EUV lithography to CUDA optimization — search the full knowledge base or chat with our AI assistant.