# US 12,112,395 B2 · Unified memory systems and methods

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 12,112,395 B2
- Document ID: US12112395B2
- Status: Granted
- Kind: B2
- Application number: 16/919,954
- Filed: 2020-07-02
- Published: 2020-11-19
- Granted: 2024-10-08
- Earliest claimed: 2014-01-20
- Assignees: NVIDIA Corporation
- Applicants: Nvidia Corporation
- Inventors: Stephen Jones; Vivek Kini; Piotr Jaroszynski; Mark Hairgrove; David Fontaine; Cameron Buschardt; Lucien Dunning; John Hubbard
- Web page: https://patentgrep.com/patent/US12112395B2

## CPC

- G06T 1/20: Processor architectures; Processor configuration, e.g. pipelining
- G06F 9/5016: {the resource being the memory}
- G06F 12/109: for multiple virtual address spaces, e.g. segmentation (G06F12/1036 takes precedence)
- G06T 1/60: Memory management
- G06T: IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

The present invention facilitates efficient and effective utilization of unified virtual addresses across multiple components. In one exemplary implementation, an address allocation process comprises: establishing space for managed pointers across a plurality of memories, including allocating one of the managed pointers with a first portion of memory associated with a first one of a plurality of processors; and performing a process of automatically managing accesses to the managed pointers across the plurality of processors and corresponding memories. The automated management can include ensuring consistent information associated with the managed pointers is copied from the first portion of memory to a second portion of memory associated with a second one of the plurality of processors based upon initiation of an accesses to the managed pointers from the second one of the plurality of processors.

## Claims

### Claim 1

A method comprising:
allocating a pointer to a memory location of a first processing unit, the pointer accessible by a second processing unit; and
copying, without a user request, data indicated by the pointer from the memory location of the first processing unit to a memory location of the second processing unit.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
enabling a kernel mode that supports the copying of the data without the user request in response to an attempted access to the pointer.

### Claim 3 (depends on 1)

The method of claim 1, further comprising:
mapping virtual address spaces with physical memories of the first processing unit and of the second processing unit;
enabling the virtual address spaces as the memory location of the first processing unit and the memory location of the second processing unit;
causing an operation to be launched on the first processing unit;
flushing at least a page that was migrated to the second processing unit back to the first processing unit; and
unmapping a virtual address space mapped to the second processing unit.

### Claim 4 (depends on 1)

The method of claim 1, wherein the pointer is a first managed pointer in a reserved virtual address space of the first processing unit.

### Claim 5 (depends on 1)

The method of claim 1, further comprising:
creating a second managed pointer in a reserved virtual address space of the second processing unit in response to an attempted access to the pointer; and
allocating the second managed pointer to the memory location of the second processing unit.

### Claim 6 (depends on 1)

The method of claim 1, further comprising:
triggering a page fault in response to an attempted access to the pointer; and
handling the page fault using a driver in a kernel mode that supports the copying of the data without the user request in response to an attempted access to the pointer.

### Claim 7 (depends on 1)

The method of claim 1, further comprising:
using a call to a managed memory location to perform the allocating of the pointer to the memory location of the first processing unit.

### Claim 8 (depends on 1)

The method of claim 1, further comprising:
receiving a request to perform, on the first processing unit, an operation using altered data in the memory location of the second processing unit; and
copying, in the kernel mode, the altered data from the memory location of the second processing unit to the memory location of the first processing unit in response to the received request.

### Claim 9 (depends on 1)

The method of claim 1, wherein a kernel mode supports the copying of the data without the user request in response to an attempted access to the pointer, and wherein the kernel mode operates independently of user code operating on at least one of the first processing unit and the second processing unit.

### Claim 10 (depends on 1)

The method of claim 1, further comprising:
accessing, by the first processing unit, using the pointer, the memory location of the first processing unit; and
accessing, by the second processing unit, using the pointer, the data copied to the memory location of the second processing unit.

### Claim 11

A system comprising:
a first processing unit including a first memory location;
a second processing unit including a second memory location; and
a non-transitory computer-readable medium storing instructions executable by at least one of the first processing unit and the second processing unit to:
allocate a pointer to a memory location of a first processing unit, the pointer accessible by a second processing unit; and
copy, without a user request, data indicated by the pointer from the memory location of the first processing unit to a memory location of the second processing unit.

### Claim 12 (depends on 11)

The system of claim 11, wherein the instructions executable by the at least one of the first processing unit and the second processing unit are further configured to:
enable a kernel mode that supports the copying of the data without the user request in response to an attempted access to the pointer.

### Claim 13 (depends on 11)

The system of claim 11, wherein the instructions executable by the at least one of the first processing unit and the second processing unit are further configured to:
map virtual address spaces with physical memories of the first processing unit and of the second processing unit;
enable the virtual address spaces as the memory location of the first processing unit and the memory location of the second processing unit;
cause an operation to be launched on the first processing unit;
flush at least a page that was migrated to the second processing unit back to the first processing unit; and
unmap a virtual address space mapped to the second processing unit.

### Claim 14 (depends on 11)

The system of claim 11, wherein the pointer is a first managed pointer in a reserved virtual address space of the first processing unit.

### Claim 15 (depends on 11)

The system of claim 11, wherein the instructions executable by the at least one of the first processing unit and the second processing unit are further configured to:
create a second managed pointer in a reserved virtual address space of the second processing unit in response to an attempted access to the pointer; and
allocate the second managed pointer to the memory location of the second processing unit.

### Claim 16 (depends on 11)

The system of claim 11, wherein the instructions executable by the at least one of the first processing unit and the second processing unit are further configured to:
trigger a page fault in response to an attempted access to the pointer; and
handle the page fault using a driver in a kernel mode that supports the copying of the data without the user request in response to an attempted access to the pointer.

### Claim 17 (depends on 11)

The system of claim 11, wherein the instructions executable by the at least one of the first processing unit and the second processing unit are further configured to:
use a call to a managed memory location to perform the allocating of the pointer to the memory location of the first processing unit.

### Claim 18 (depends on 11)

The system of claim 11, wherein the instructions executable by the at least one of the first processing unit and the second processing unit are further configured to:
receive a request to perform, on the first processing unit, an operation using altered data in the memory location of the second processing unit; and
copy, in the kernel mode, the altered data from the memory location of the second processing unit to the memory location of the first processing unit in response to the received request.

### Claim 19 (depends on 18)

The system of claim 18, wherein the instructions executable by the at least one of the first processing unit and the second processing unit are further configured to:
create, using the second processing unit, the altered data based at least in part on the data.

### Claim 20

A computing device, comprising:
a first processing unit with a first memory location and having an allocated pointer that is accessible by a second processing unit having a second memory location; and
a driver to copy the data indicated by the pointer from the first memory location to the second memory location, without a user request for the copying.

### Claim 21 (depends on 11)

The system of claim 11, wherein a kernel mode supports the copying of the data without the user request in response to an attempted access to the pointer, and wherein the kernel mode operates independently of user code operating on at least one of the first processing unit and the second processing unit.

### Claim 22 (depends on 20)

The computing device of claim 20, further comprising:
a kernel mode that supports the copying of the data without the user request in response to an attempted access to the pointer.
