Unified Virtual Memory (UVM) is a hardware and software architecture that presents a single, coherent virtual address space to both the CPU and GPU, eliminating the need for explicit data copies between separate host and device memory spaces. This is achieved through a shared page table and a hardware Memory Management Unit (MMU) on the GPU, which handles address translation and triggers page faults for non-resident data. The system transparently manages data placement and movement between CPU system memory and GPU device memory based on access patterns, a process known as demand paging or page migration.
Glossary
Unified Virtual Memory (UVM)

What is Unified Virtual Memory (UVM)?
Unified Virtual Memory (UVM) is a memory management architecture that creates a single, contiguous virtual address space shared between a CPU and GPU, allowing both processors to access the same memory pointers and simplifying data sharing.
For developers, UVM simplifies programming by enabling pointer-based data structures to be shared directly between CPU and GPU code, reducing boilerplate copy operations. From a systems perspective, it enables efficient memory overcommit, allowing applications to allocate more memory than physically exists on the GPU by using system RAM or even storage as a backing store. Key implementations include NVIDIA's CUDA UVM and AMD's Heterogeneous System Architecture (HSA). The primary trade-off is the potential latency of page faults when data must be migrated on-demand versus the bandwidth of pre-planned, explicit copies.
Key Features of Unified Virtual Memory
Unified Virtual Memory (UVM) is a memory management architecture that creates a single, contiguous virtual address space shared between a CPU and GPU. This simplifies programming and enables efficient data sharing. Below are its core technical features.
Single Virtual Address Space
UVM's foundational feature is the creation of a unified, 64-bit virtual address space accessible by both the CPU and GPU. This eliminates the need for developers to manage separate pointers for host and device memory. Key implications include:
- Pointer Consistency: A pointer has the same value and meaning on both processors.
- Simplified APIs: Reduces or removes explicit
cudaMemcpyoperations for data movement. - Dynamic Data Structures: Enables the use of complex, pointer-based data structures (like linked lists or trees) that can be traversed by either processor without manual translation.
On-Demand Page Migration
UVM enables demand paging and automatic page migration. Memory pages are moved between CPU system RAM and GPU device memory transparently based on access patterns.
- Page Fault Driven: When a GPU kernel accesses a page residing in host memory, a GPU page fault occurs. The UVM driver then migrates that page to GPU memory.
- Migration Heuristics: Pages can also be proactively migrated or replicated based on usage to optimize performance.
- Memory Oversubscription: This mechanism allows workloads to allocate more memory than the physical GPU VRAM capacity, using system RAM as a backing store.
Memory Coherency Protocol
UVM maintains cache coherency between the CPU and GPU caches for the shared address space. This ensures both processors see a consistent view of data.
- Granular Coherency: Coherency is typically managed at the granularity of a memory page.
- Protocol Overhead: The coherency protocol (like NVIDIA's HMM) introduces management overhead but is essential for correctness in concurrent access scenarios.
- Access Permissions: Pages have permissions (e.g., CPU-read/write, GPU-read/write) that are managed by the UVM driver to enforce coherency rules.
Zero-Copy Memory Access
A direct benefit of UVM is enabling efficient zero-copy transfers. The GPU can access data directly from host-pinned memory without a preliminary copy to device memory.
- Reduced Latency: Eliminates the explicit copy latency for data only accessed once or infrequently.
- Host Memory as Cache: System RAM effectively acts as a slower, larger cache tier for the GPU.
- Use Case: Ideal for applications with sparse, unpredictable access patterns or where data is generated/consumed by the CPU in real-time.
System-Wide Memory Oversubscription
UVM allows the total allocated memory of active GPU processes to exceed the physical GPU memory (VRAM) capacity. This is known as memory overcommit or oversubscription.
- Backing Store: Non-resident pages spill over to system memory (DRAM) and, under extreme pressure, to storage (SSD) via the OS swap.
- Performance Impact: Access to migrated pages incurs higher latency. Performance depends heavily on locality and the speed of the PCIe bus or NVLink.
- Enables Larger Models: Allows running models whose working set size is larger than a single GPU's VRAM, albeit with potential performance degradation.
Peer-to-Peer Access Over NVLink/PCIe
In multi-GPU systems, UVM extends the unified address space across multiple GPUs, facilitating direct peer-to-peer (P2P) access.
- Direct GPU-to-GPU Access: GPUs can directly read/write to each other's memory using load/store instructions, bypassing the host CPU.
- NVLink Optimization: When GPUs are connected via NVLink, P2P accesses achieve much higher bandwidth and lower latency than over PCIe.
- Simplified Multi-GPU Programming: Developers can program multiple GPUs as if they share a large, pooled memory resource, simplifying data partitioning and communication.
UVM vs. Traditional Discrete Memory
A technical comparison of memory management paradigms for CPU-GPU systems, highlighting the operational differences that impact developer workflow, performance, and system design.
| Feature / Mechanism | Unified Virtual Memory (UVM) | Traditional Discrete Memory |
|---|---|---|
Virtual Address Space | Single, contiguous virtual address space shared by CPU and GPU. | Separate, distinct virtual address spaces for CPU (host) and GPU (device). |
Data Pointer Validity | A single pointer (e.g., | Separate host ( |
Data Movement Primitive | Transparent, on-demand migration via page faults. No explicit copy commands are required for basic access. | Explicit, programmer-managed transfers using |
Memory Allocation API | Unified allocation (e.g., | Separate allocations: |
Synchronization Requirement | Requires explicit synchronization (e.g., | Implicitly synchronized by the completion of |
Performance Model | Predictable, high-bandwidth access to local memory (GPU HBM); accesses to migrated pages incur latency penalties (page fault handling). | Predictable, high-bandwidth for explicit copies; zero latency for local accesses post-copy. Overhead is upfront and explicit. |
Programming Complexity | Lower initial complexity; simplifies code by eliminating many explicit copies and dual pointers. | Higher initial complexity; programmer must meticulously manage data placement and movement. |
Optimal Use Case | Irregular access patterns, workloads with data-dependent parallelism, and rapid prototyping. | Regular, predictable data access patterns where bulk transfers can be amortized, and maximum deterministic performance is required. |
System Memory Utilization | Can lead to oversubscription; allows allocation of more data than fits in GPU physical memory, using system RAM/SSD as a backing store. | Discrete; GPU workload data size is strictly limited by physical GPU memory (VRAM) capacity. |
Hardware/Platform Requirement | Requires GPU architecture and driver support for page faulting and address translation (e.g., NVIDIA Pascal+ with CUDA 8+). | Universally supported on all CUDA/GPU-enabled platforms; no specific architectural requirements. |
Frameworks and Platforms Using UVM
Unified Virtual Memory (UVM) is a foundational technology implemented across major compute platforms and frameworks to simplify memory management and enable efficient data sharing between CPUs and accelerators.
Frequently Asked Questions
Unified Virtual Memory (UVM) is a foundational memory architecture for modern heterogeneous computing. These questions address its core mechanisms, benefits, and practical implementation details for systems engineers and ML Ops professionals.
Unified Virtual Memory (UVM) is a memory management architecture that creates a single, contiguous virtual address space shared between a CPU and a GPU, allowing both processors to access the same memory pointers and simplifying data sharing. It works by extending the CPU's virtual memory system to include GPU-accessible memory, managed by a combination of hardware and software components. The GPU's Memory Management Unit (MMU) handles address translation, while a driver-level page fault handler manages the migration of memory pages between the CPU's system memory and the GPU's device memory on-demand. This creates the illusion of a unified pool of memory, where data movement is handled transparently based on access patterns, rather than requiring explicit programmer-managed copies via APIs like cudaMemcpy.
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
Unified Virtual Memory (UVM) operates within a broader ecosystem of memory management and optimization techniques. These related concepts define the architecture, mechanisms, and hardware that enable efficient data movement and access across CPU and GPU.
Page-Locked Memory (Pinned Memory)
Page-locked memory, also known as pinned memory, is host (CPU) memory that is prevented from being paged out to disk by the operating system. This locking enables high-bandwidth Direct Memory Access (DMA) transfers between the host and GPU device memory, a prerequisite for many UVM optimizations.
- Purpose: Eliminates the need for the operating system to copy data between pageable and pinned buffers before a transfer, reducing latency.
- UVM Role: While UVM can work with pageable memory, using pinned memory for frequently accessed data regions significantly boosts transfer performance within the unified address space.
- Trade-off: Excessive use can reduce available pageable system memory for other processes.
Zero-Copy Transfers
Zero-copy transfers are a technique where a GPU accesses data directly from host memory without an explicit programmer-managed copy into GPU device memory. This is a key performance benefit enabled by UVM architectures.
- Mechanism: The GPU's memory management unit (MMU) maps host memory pages into the GPU's virtual address space. On access, data is transferred over the PCIe bus on-demand.
- Advantage: Reduces host memory pressure by avoiding duplicate copies and can lower latency for infrequently accessed or large datasets.
- Consideration: Access latency is higher than device-resident memory, making it ideal for data used once or when transfer time outweighs slower access speed.
Demand Paging & GPU Page Faults
Demand paging is the core virtual memory mechanism that underpins UVM. Data resides in a slower backing store (e.g., system RAM) and is only migrated to faster GPU memory when actively accessed, triggered by a GPU page fault.
- Page Fault: An exception raised when a GPU thread accesses a virtual address whose physical page is not resident in GPU memory. The UVM driver handles this fault by migrating the page.
- Benefit: Enables memory overcommit, allowing applications to allocate more memory than the GPU's physical capacity, with only actively used "hot" pages occupying fast memory.
- Overhead: Frequent page faults and migrations can introduce significant latency, requiring careful data access pattern design.
Memory Tiering
Memory tiering is a system architecture that organizes heterogeneous memory types (e.g., HBM, GDDR, DDR, NVMe) into a performance hierarchy. UVM acts as the software abstraction that manages data placement and movement across these tiers.
- Tiers: Fast, small capacity (GPU HBM) → Slower, larger capacity (CPU DDR) → Very slow, vast capacity (NVMe Storage).
- UVM's Role: The UVM driver, often with hints from the application or hardware counters, automatically promotes "hot" data to faster tiers and demotes "cold" data to slower ones.
- Goal: Maximize performance-per-dollar and effective capacity by keeping the working set in the fastest possible tier.
Peer-to-Peer (P2P) Access & NVLink
Peer-to-Peer (P2P) access allows multiple GPUs in a system to directly read/write each other's memory without routing through host RAM. NVLink is NVIDIA's high-bandwidth interconnect that makes P2P extremely fast. UVM extends this model.
- With UVM: A unified virtual address space can span multiple GPUs. A pointer can reference memory physically located on another GPU; access triggers a P2P transfer over NVLink/PCIe.
- Benefit: Dramatically simplifies multi-GPU programming. Developers can allocate memory without knowing its physical location, and the UVM runtime handles efficient cross-GPU access.
- Requirement: Requires compatible hardware (GPUs connected via NVLink or PCIe with P2P support).
Stream-Ordered Memory Allocator
A stream-ordered memory allocator is a GPU memory management scheme where allocations are tied to a specific CUDA stream. Memory is automatically reused or freed based on the completion of work in that stream, minimizing fragmentation.
- Problem it Solves: Traditional
cudaMalloc/cudaFreecause fragmentation and global synchronization. UVM introduces similar challenges for managing the unified address space. - Synergy with UVM: Modern allocators like
cudaMallocAsyncwork with UVM, allowing for asynchronous, stream-ordered allocation of unified memory. This is critical for high-throughput inference servers using techniques like continuous batching. - Outcome: Reduces allocation latency and fragmentation, leading to more predictable performance in dynamic, multi-tenant GPU environments.

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