Non-Uniform Memory Access (NUMA) is a shared-memory multiprocessor architecture where a processor's access time to memory depends on the physical location of that memory relative to the processor. In a NUMA system, each processor or group of processors has its own local memory, providing low-latency access, but can also access the remote memory attached to other processors, albeit with higher latency and potentially lower bandwidth. This contrasts with Uniform Memory Access (UMA) architectures, where all processors share a central memory pool with equal access times.
Glossary
Non-Uniform Memory Access (NUMA)

What is Non-Uniform Memory Access (NUMA)?
A foundational computer architecture for multiprocessor systems where memory access latency is not uniform.
The primary goal of NUMA is to scale memory bandwidth and capacity with processor count while mitigating the performance bottlenecks of a single, shared memory bus. Efficient NUMA-aware programming is critical, as poor data placement that causes frequent remote memory accesses can severely degrade performance. Modern operating systems and runtime environments provide NUMA scheduling and memory allocation policies to automatically optimize data locality, but high-performance applications often require explicit control over thread and memory placement to achieve peak efficiency on these systems.
Key Characteristics of NUMA
Non-Uniform Memory Access (NUMA) is a shared-memory multiprocessing architecture where memory access latency depends on the memory's physical location relative to the requesting processor core.
Memory Locality & Access Latency
The defining characteristic of NUMA is non-uniform memory access latency. Each processor or group of cores (a NUMA node) has its own local memory bank. Access to this local memory is fast. Access to memory attached to a remote NUMA node (remote memory) incurs higher latency due to traversal across an interconnect (e.g., AMD's Infinity Fabric, Intel's Ultra Path Interconnect). Performance optimization hinges on keeping data and computation within the same NUMA node.
NUMA Node Topology
A NUMA system is composed of interconnected NUMA nodes. Each node typically contains:
- One or more processor cores (a socket or CPU).
- A local memory controller and attached DRAM.
- A cache hierarchy (L1, L2, L3) shared by the node's cores.
- Links to other NUMA nodes via a coherent interconnect. The system's topology (number of nodes, interconnect bandwidth) is exposed to the operating system via System Resource Affinity Tables (SRAT) and System Locality Information Tables (SLIT) in ACPI.
Cache Coherence Protocol
NUMA systems maintain a single, globally shared address space across all nodes, requiring a cache coherence protocol to ensure all caches have a consistent view of memory. This is typically implemented as a directory-based or snooping protocol over the interconnect. When a core accesses remote data, the protocol fetches the cache line, potentially invalidating copies in other nodes. This generates coherence traffic, which consumes interconnect bandwidth and adds to remote access latency.
Operating System & Scheduling (NUMA Awareness)
A NUMA-aware operating system (e.g., Linux, Windows Server) schedules processes and manages memory to optimize locality. Key mechanisms include:
- CPU affinity: Pinning a process/thread to cores on a specific NUMA node.
- Memory policy: Controlling where a process's pages are allocated (e.g.,
MPOL_BIND,MPOL_PREFERREDin Linux). - First-touch policy: The default where a page is allocated from the local memory of the thread that first writes to it. The OS uses
/sys/devices/system/node/(Linux) or GetNumaNodeProcessorMask (Windows) APIs for management.
Application-Level Optimization
High-performance applications must be designed for NUMA to avoid severe performance penalties from remote accesses. Strategies include:
- Data partitioning: Structuring algorithms so that each thread primarily works on data allocated in its local node.
- Thread pinning: Explicitly binding threads to specific cores using
pthread_setaffinity_np()ornumactl. - NUMA-aware memory allocators: Using allocators like
libnuma, jemalloc, or tcmalloc that are conscious of locality. - Minimizing shared, write-heavy data: To reduce coherence traffic from false sharing.
Contrast with UMA & ccNUMA
- UMA (Uniform Memory Access): Traditional SMP where all memory has equal latency for all processors (e.g., via a single shared bus). Simpler but not scalable to many cores.
- ccNUMA (Cache-Coherent NUMA): The modern standard, where the hardware maintains cache coherence across nodes, as described here. This is what is typically meant by "NUMA" today.
- Non-coherent NUMA: Systems without hardware cache coherence, requiring explicit software management—common in some high-performance computing clusters but not in standard server CPUs.
How NUMA Works: Architecture and Data Flow
Non-Uniform Memory Access (NUMA) is a multiprocessor memory architecture where access latency depends on the memory location relative to the requesting processor, a critical design for modern servers and high-performance computing systems.
In a NUMA architecture, each processor or group of cores (a NUMA node) has its own local, directly attached memory bank. Access to this local memory is fast. Accessing memory attached to a remote NUMA node (remote memory) incurs higher latency and potentially lower bandwidth due to the interconnects between nodes, such as Intel's Ultra Path Interconnect (UPI) or AMD's Infinity Fabric. This non-uniformity is the defining characteristic, contrasting with Uniform Memory Access (UMA) systems where all memory is equidistant.
The operating system's NUMA scheduler and memory allocator aim to optimize performance by placing a process's threads and its allocated memory on the same NUMA node (locality policy). When a thread accesses remote memory, the system incurs a remote access penalty. Performance tuning involves analyzing NUMA hit/miss ratios and using APIs like numactl to bind processes and control memory allocation policies, mitigating the impact of NUMA effects on application throughput and latency.
NUMA vs. UMA: A Comparative Analysis
A technical comparison of Non-Uniform Memory Access (NUMA) and Uniform Memory Access (UMA) architectures, focusing on design principles, performance characteristics, and suitability for modern multiprocessor systems.
| Architectural Feature | Non-Uniform Memory Access (NUMA) | Uniform Memory Access (UMA) |
|---|---|---|
Core Design Principle | Memory is physically distributed and attached to specific processor nodes. | All processors share a single, centralized memory controller and bus. |
Memory Access Latency | Non-uniform; depends on location (local vs. remote). | Uniform; identical latency for all processors. |
Scalability (Processor Count) | High; scales efficiently to dozens or hundreds of cores. | Low; limited by bus/memory controller contention (< ~8 cores). |
Typical Interconnect | High-speed point-to-point links (e.g., AMD Infinity Fabric, Intel QPI). | Shared system bus (e.g., Front-Side Bus). |
Cache Coherence Protocol | Required; complex directory-based or snooping protocols across nodes. | Simpler; bus-based snooping protocol is sufficient. |
System Cost & Complexity | Higher; requires sophisticated node controllers and interconnects. | Lower; simpler, centralized design. |
Programming Model Complexity | Higher; requires awareness of data locality (numactl, first-touch). | Lower; memory appears as a single uniform pool. |
Optimal Workload Type | Workloads with strong data locality that can be partitioned per node. | Small, symmetric multiprocessing (SMP) workloads. |
Memory Bandwidth Potential | Higher; aggregate bandwidth scales with added nodes. | Limited; constrained by shared bus/controller bandwidth. |
Hardware Examples | AMD EPYC, Intel Xeon Scalable (multi-socket), modern server CPUs. | Traditional single-socket desktop CPUs, older multi-socket servers. |
NUMA in AI and Accelerator Contexts
Non-Uniform Memory Access (NUMA) is a computer memory design for multiprocessing where memory access time depends on the memory location relative to the processor. In AI systems with multiple CPUs and accelerators, NUMA awareness is critical for maximizing data throughput and minimizing latency.
Core Architectural Principle
A NUMA architecture organizes processors and memory into interconnected nodes. Each node contains one or more processors and a local bank of memory. Access to local memory (within the same node) is fast, while access to remote memory (in another node) incurs higher latency and lower bandwidth due to traversal across an interconnect (e.g., AMD's Infinity Fabric, Intel's Ultra Path Interconnect). This contrasts with Uniform Memory Access (UMA), where all memory is equidistant from all processors.
- Key Metric: Latency Ratio. Remote access can be 1.5x to 3x slower than local access.
- System View: The Linux command
numactl --hardwaredisplays the NUMA topology of a system.
Impact on AI & ML Workloads
AI training and inference are memory-intensive, moving massive tensors and weights between CPU and accelerator memory. Poor NUMA placement causes severe bottlenecks.
- Data Loading: If a data-loading process is pinned to a CPU core on NUMA Node 0, but the PCIe-attached GPU or NPU is physically connected to NUMA Node 1, all training data must traverse the inter-node link, saturating it and increasing latency.
- Multi-Instance Training: Running multiple model instances (e.g., for hyperparameter search) without NUMA binding can lead to instances competing for remote memory bandwidth, degrading aggregate throughput.
- Solution: NUMA-aware process binding ensures compute threads and their allocated memory reside on the same node as the target accelerator's host interface.
Optimization Strategies for Accelerators
Optimizing for NUMA involves controlling process affinity, memory allocation policy, and device topology.
- CPU and Memory Pinning: Use
numactl --cpunodebind=N --membind=Nto launch processes, binding them to a specific NUMA node (N). - First-Touch Policy: In Linux, memory is allocated on the node of the CPU that first writes to it ("touches" it). Initialize data structures on the correct NUMA node.
- Accelerator Affinity: Modern systems report which NUMA node a PCIe device is local to (e.g., via
lspci -vornvidia-smi topo -m). Schedule work on the adjacent CPU cores. - Interleaved Allocation: For workloads with uniform memory access patterns,
numactl --interleave=alldistributes memory pages across nodes, averaging out latency but reducing peak local bandwidth.
NUMA and Heterogeneous Compute (CPU+NPU/GPU)
Modern AI servers feature heterogeneous NUMA domains, where an accelerator like an NPU may have its own on-board memory (HBM) and a host interface tied to a specific CPU NUMA node.
- Direct Memory Access (DMA): Accelerators use DMA engines to transfer data. DMA sourced from local memory completes faster than from remote memory.
- Unified Virtual Addressing (UVA): Frameworks like CUDA simplify programming but do not eliminate NUMA costs. The physical location of the pinned host memory used for DMA still dictates performance.
- CXL (Compute Express Link): Emerging as a game-changer, CXL.mem allows accelerators to act as coherent memory expanders, creating new, software-defined NUMA-like hierarchies that must be managed for optimal data placement.
Performance Profiling & Debugging
Identifying NUMA-related performance issues requires specific tools and metrics.
- Hardware Counters: Use
perfto monitor node-local vs. remote memory access events (e.g.,perf stat -e numa_hit, numa_miss). A highnuma_missrate indicates poor locality. - Bandwidth Saturation: Monitor interconnect bandwidth using vendor-specific tools (e.g., Intel's
pcm). Saturation manifests as high latency for memory operations. - Latency Profiling: Tools like Intel VTune Profiler or AMD uProf can visualize memory access latency and pinpoint code sections suffering from remote accesses.
- Kernel Statistics: The Linux kernel exposes NUMA statistics in
/sys/devices/system/node/nodeN/for monitoring hit/miss rates and memory usage per node.
Related Concepts & Ecosystem
NUMA interacts with several other critical system architecture concepts.
- Cache Coherence: NUMA systems maintain a coherent view of memory across all nodes via a directory-based or snooping protocol, but coherence traffic adds to remote access cost.
- False Sharing: Can be exacerbated in NUMA as modified cache lines must be shipped across the interconnect, amplifying performance penalties.
- Virtual Memory & Huge Pages: Using Transparent Huge Pages (THP) or explicit 1GB huge pages reduces page table pressure and can improve the efficiency of NUMA memory management.
- Containers & Orchestration: Orchestrators like Kubernetes must be NUMA-aware. The Kubernetes Topology Manager and associated CPU Manager can align pod resources (CPU, memory, device) to a single NUMA node.
Frequently Asked Questions
Non-Uniform Memory Access (NUMA) is a critical memory architecture for modern multi-socket servers and high-performance computing systems. These questions address its core principles, performance implications, and relevance to AI acceleration.
Non-Uniform Memory Access (NUMA) is a computer memory design for multiprocessing where the memory access time depends on the physical location of the memory relative to the requesting processor. In a NUMA system, each processor or group of processors (a NUMA node) has its own local memory, which it can access with low latency. Processors can also access memory attached to other NUMA nodes (remote memory), but this access incurs higher latency and potentially lower bandwidth.
It works by organizing the system into interconnected NUMA nodes. Each node contains one or more CPU cores, a memory controller, and its own bank of DRAM. The nodes are connected via a high-speed interconnect, such as Intel's Ultra Path Interconnect (UPI) or AMD's Infinity Fabric. The operating system and applications must be NUMA-aware to allocate memory and schedule threads strategically, placing data in the local memory of the core that will use it most frequently to minimize costly remote accesses.
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Related Terms
Understanding Non-Uniform Memory Access (NUMA) requires familiarity with related concepts in parallel computing, memory architecture, and performance optimization.
Uniform Memory Access (UMA)
Uniform Memory Access (UMA) is a shared memory architecture where all processors in a multiprocessing system have equal access time to all of main memory. This contrasts directly with NUMA.
- Symmetric Multiprocessing (SMP): The classic UMA architecture, often built on a single system bus or crossbar switch.
- Performance Characteristic: Access latency is uniform but bandwidth is shared, creating a scalability bottleneck as more processors are added.
- Example: Early multi-core servers with a single memory controller.
Cache Coherence
Cache coherence is the property that ensures all caches in a multiprocessor system have a consistent view of shared memory. It is a critical, complementary protocol to NUMA.
- Problem Solved: Prevents different processors from reading stale or conflicting values for the same memory address.
- Protocols: Common implementations include MESI (Modified, Exclusive, Shared, Invalid) and MOESI.
- NUMA Interaction: In a NUMA system, cache coherence traffic must traverse the interconnect between nodes, adding latency and complexity. Protocols like AMD's HyperTransport and Intel's QuickPath Interconnect (QPI) handle this.
Processor Affinity
Processor affinity (or CPU pinning) is the practice of binding a software process or thread to specific CPU cores or a NUMA node. It is a primary software optimization for NUMA systems.
- Goal: Minimize remote memory accesses by ensuring a process runs on cores local to the memory where its data resides.
- First-Touch Policy: Many operating systems allocate memory pages on the node where the thread that first accesses them is running, making initial placement critical.
- Tools: Implemented via system calls like
sched_setaffinity()on Linux or APIs within OpenMP and MPI.
ccNUMA (Cache-Coherent NUMA)
Cache-Coherent NUMA (ccNUMA) is the predominant form of NUMA in modern servers, where a hardware coherence protocol maintains consistency across all processor caches and distributed memory.
- Industry Standard: All major x86 and ARM server processors (e.g., AMD EPYC, Intel Xeon, ARM Neoverse) implement ccNUMA.
- Transparency: The coherence hardware makes the system appear as a single, shared-memory machine to software, simplifying programming but requiring awareness for peak performance.
- Interconnect: Relies on high-speed, coherent interconnects like Infinity Fabric (AMD) or Ultra Path Interconnect (UPI) (Intel).
Memory Latency
Memory latency is the time delay between a memory read request and the data's availability. NUMA architectures explicitly create non-uniform latency.
- Local vs. Remote Access: In a 2-node NUMA system, remote access can be 1.5x to 3x slower than local access.
- Quantifying Impact: Performance profiling tools measure Last-Level Cache (LLC) misses and subsequent DRAM access latency to identify costly remote accesses.
- Mitigation: Strategies include data replication (for read-only data), migration of hot pages, and interleaving allocations across nodes.
NUMA Node
A NUMA node is the fundamental building block of a NUMA system, comprising one or more processor cores and their directly attached, local bank of memory.
- Composition: Typically includes CPU cores, their caches (L1/L2/L3), a memory controller, and a physical RAM bank.
- System View: The
numactl --hardwarecommand on Linux displays all NUMA nodes, their free memory, and distances (latency/cost) between nodes. - Distance Matrix: A key system descriptor that quantifies the access cost between nodes, guiding the OS and application scheduler.

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us