IP Library Granted Patent US 12,499,052
Granted Patent B2
US 12,499,052 · App. 17/691,422 · Granted Dec 16, 2025

Method and apparatus for efficient access to multidimensional data structures and/or other large data blocks

Inventors: Alexander L. Minkin (Santa Clara, CA); Alan Kaatz (Santa Clara, CA); Olivier Giroux (Santa Clara, CA); Jack Choquette (Santa Clara, CA); Shirish Gadre (Santa Clara, CA); Manan Patel (Santa Clara, CA); John Tran (Santa Clara, CA); Ronny Krashinsky (Santa Clara, CA); Jeff Schottmiller (Santa Clara, CA)
Assignee: NVIDIA Corporation
G06F12/0875G06F9/544G06F12/02G06F2212/251G06F2212/254G06F2212/452G06F2212/62
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,499,052
App. No.
17/691,422
Granted
Dec 16, 2025
Kind
B2
Abstract

A parallel processing unit comprises a plurality of processors each being coupled to a memory access hardware circuitry. Each memory access hardware circuitry is configured to receive, from the coupled processor, a memory access request specifying a coordinate of a multidimensional data structure, wherein the memory access hardware circuit is one of a plurality of memory access circuitry each coupled to a respective one of the processors; and, in response to the memory access request, translate the coordinate of the multidimensional data structure into plural memory addresses for the multidimensional data structure and using the plural memory addresses, asynchronously transfer at least a portion of the multidimensional data structure for processing by at least the coupled processor. The memory locations may be in the shared memory of the coupled processor and/or an external memory.

Claims (44)

1 . A parallel processor comprising:

an interface to an external memory;

a plurality of multicore processors, each multicore processor having a respectively different shared memory; and

a plurality of memory access hardware circuits, each memory access hardware circuit being coupled to a multicore processor of the plurality of multicore processors and being configured to:

receive, from the coupled multicore processor, a memory access request for a block of data; and

in response to the memory access request, access the block of data at a source memory location in the respectively different shared memory of the coupled multicore processor or the external memory, and asynchronously transfer the block of data from the source memory location to a destination memory location in the respectively different shared memory of the coupled multicore processor or the external memory;

wherein the asynchronous transfer is from a location in the external memory to another location in the external memory, or from a location in the respectively different shared memory of the coupled multicore processor.

2 . A method performed in a parallel processing unit comprising a plurality of multiprocessors, the method comprising:

receiving by a memory access hardware circuit coupled to a multicore processor of the plurality of multicore processors, from the coupled multicore processor, a memory access request for a block of data, wherein each multicore processor includes a respectively different shared memory, wherein the memory access hardware circuit is one of a plurality of memory access circuitry each coupled to one of the multicore processors; and

in response to the memory access request, accessing the block of data at a source memory location in the respectively different shared memory of the coupled multicore processor or the external memory, and asynchronously transferring by the memory access hardware circuit, the block of data from the source memory location to a destination memory location in the respectively different shared memory of the coupled multicore processor and an external memory,

wherein the asynchronous transfer is from a location in the external memory to another location in the external memory, or from a location in the respectively different shared memory of the coupled multicore processor to another location in the respectively different shared memory of the coupled multicore processor.

3 . A method performed in a parallel processing unit comprising a plurality of multiprocessors, the method comprising:

receiving by a memory access hardware circuit coupled to a multicore processor of the plurality of multicore processors, from the coupled multicore processor, a memory access request for a block of data, wherein each multicore processor includes a respectively different non-cached shared memory, wherein the memory access hardware circuit is one of a plurality of memory access circuitry each coupled to one of the multicore processors; and

in response to the memory access request, accessing the block of data at a source memory location in the respectively different non-cached shared memory of the coupled multicore processor or the external memory, and asynchronously transferring by the memory access hardware circuit, the block of data from the source memory location to a destination memory location in the respectively different non-cached shared memory of the coupled multicore processor and an external memory, wherein

the asynchronous transfer is from a location in the external memory to another location in the external memory, or

the asynchronous transfer is from a location in the respectively different shared memory of the coupled multicore processor to another location in the respectively different shared memory of the coupled multicore processor.

4 . A memory access hardware circuit comprising:

an interface to an external memory;

a memory input/output interface to receive memory access requests from a multicore processor;

at least one memory interface to a respectively different shared memory at each of one or more other multicore processors and the multicore processor, wherein the respectively different shared memory is a non-cached shared memory; and

a processing pipeline configured to:

receive, from the multicore processor, a memory access request for a block of data; and

in response to the memory access request, access the block of data at a source memory location in the respectively different shared memory of the coupled multicore processor or the external memory, and asynchronously transfer the block of data from the source memory location to a destination memory location in the respectively different shared memory of the coupled multicore processor and the external memory, wherein

the asynchronous transfer is from a location in the external memory to another location in the external memory, or

the asynchronous transfer is from a location in the respectively different shared memory of the coupled multicore processor to another location in the respectively different shared memory of the coupled multicore processor.

5 . A parallel processor comprising:

an interface to an external memory;

a plurality of multicore processors, each multicore processor having a respectively different shared memory, wherein the respectively different shared memory is a non-cached shared memory; and

a plurality of memory access hardware circuits, each memory access hardware circuit being coupled to a multicore processor of the plurality of multicore processors and being configured to:

receive, from the coupled multicore processor, a memory access request for a block of data; and

in response to the memory access request, access the block of data at a source memory location in the respectively different shared memory of the coupled multicore processor or the external memory, and asynchronously transfer the block of data from the source memory location to a destination memory location in the respectively different shared memory of the coupled multicore processor or the external memory, wherein

the asynchronous transfer is from a location in the external memory to another location in the external memory, or

the asynchronous transfer is from a location in the respectively different shared memory of the coupled multicore processor to another location in the respectively different shared memory of the coupled multicore processor.

6 . The parallel processor according to claim 5 , wherein the asynchronous transfer is from a location in the external memory to another location in the external memory.

7 . The parallel processor according to claim 5 , wherein the asynchronous transfer is from a location in the respectively different shared memory of the coupled multicore processor to another location in the respectively different shared memory of the coupled multicore processor.

8 . The parallel processor according to claim 5 , wherein the memory access hardware circuit coupled to the multicore processor is configured to read and write to the respectively different shared memory of the multicore processor coupled to the memory access hardware circuit and to the external memory.

9 . The parallel processor according to claim 5 , wherein the memory access hardware circuit coupled to the multicore processor is configured to copy the data block from the external memory to the respectively different shared memory of the coupled multicore processor.

10 . The parallel processor according to claim 5 , wherein the asynchronous transfer is from a location in the respectively different shared memory of the coupled multicore processor to another location in the respectively different shared memory of the coupled multicore processor, and the memory access hardware circuit coupled to the multicore processor is further configured to perform said asynchronous transfer by directly writing the block of data from a first location in the respectively different shared memory to a second location in the respectively different shared memory wherein the first and second locations in the respectively different shared memory are accessible by respectively different multicore processors of the plurality of multicore processors, or wherein the asynchronous transfer is from a location in the external memory to another location in the external memory and the memory access hardware circuit coupled to the multicore processor is further configured to perform said asynchronous transfer by directly writing the block of data from a first location in the external memory to a second location in the external memory.

11 . The parallel processor according to claim 5 , wherein the memory access hardware circuit coupled to the multicore processor is further configured to perform said asynchronous transfer, irrespective of the size of the block of data, in response to said memory access request received in a single message.

12 . The parallel processor according to claim 5 , wherein the memory access hardware circuit coupled to the multicore processor is further configured to, for each sub-block of data in the data block, update a counter in the respectively different shared memory, wherein the multiprocessor comprises synchronization circuitry configured to monitor the counter for a predetermined value.

13 . The parallel processor according to claim 5 , wherein the memory access hardware circuit coupled to the multicore processor is further configured to read the block of data in the external memory and write the block of data to a location in the respectively different shared memory for each of a group of the plurality of multiprocessors.

14 . The parallel processor according to claim 5 , wherein the memory access hardware circuit coupled to the multicore processor comprises a request queue, a request generation circuitry, and a request completion tracking circuitry.

15 . The parallel processor according to claim 14 , wherein the request queue is configured to accept memory access requests for tensors and memory access requests for non-tensor data blocks.

16 . The parallel processor according to claim 5 , wherein each said multicore processor comprises plural parallel processing cores having different computing capabilities and/or precisions, the plural parallel processing cores accessing a common instruction cache memory.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 9, 2022
From: MINKIN, ALEXANDER L.; KAATZ, ALAN; GIROUX, OLIVIER; CHOQUETTE, JACK; GADRE, SHIRISH; PATEL, MANAN; TRAN, JOHN; KRASHINSKY, RONNY; SCHOTTMILLER, JEFF
To: NVIDIA CORPORATION
Reel/Frame 060148/0617 →
Continuity (1)
Related Publication 20230289292A1 · Sep 14, 2023
References Cited (23)
US 7680988B1 · Nickolls · 2010 [cited by examiner]
US 8826270B1 · Lewis · 2014 [cited by examiner]
US 10789544B2 · Fiedel · 2020 [cited by examiner]
US 12141082B2 · Minkin · 2024 [cited by examiner]
US 20020133747A1 · Ravid · 2002 [cited by examiner]
US 20040268049A1 · Madter · 2004 [cited by examiner]
US 20080282032A1 · Shen · 2008 [cited by examiner]
US 20090037658A1 · Sistla · 2009 [cited by examiner]
US 20110035555A1 · Wang · 2011 [cited by examiner]
US 20180143903A1 · Wu · 2018 [cited by examiner]
US 20180150222A1 · Booss · 2018 [cited by examiner]
US 20180329839A1 · Durbhakula · 2018 [cited by examiner]
US 20230090429A1 · Qi · 2023 [cited by examiner]
US 20230288471A1 · Duluk · 2023 [cited by applicant]
US 20230289189A1 · Bangalore Prabhakar · 2023 [cited by applicant]
US 20230289190A1 · Parle · 2023 [cited by applicant]
US 20230289211A1 · Hirota · 2023 [cited by applicant]
US 20230289212A1 · Duluk · 2023 [cited by applicant]
US 20230289215A1 · Palmer · 2023 [cited by applicant]
US 20230289242A1 · Guo · 2023 [cited by applicant]
US 20230289304A1 · Minkin · 2023 [cited by applicant]
US 20230289398A1 · Choquette · 2023 [cited by applicant]
US 20230315655A1 · Choquette · 2023 [cited by applicant]
Cited By (1)
US 12,719,713