IP Library › Granted Patent US 12,299,766
Granted Patent B2
US 12,299,766 · App. 17/484,066 · Granted May 13, 2025

Providing native support for generic pointers in a graphics processing unit

Inventors: Joydeep Ray (Folsom, CA); Prathamesh Raghunath Shinde (Folsom, CA); Ben J. Ashbaugh (Folsom, CA); Wei-Yu Chen (San Jose, CA); Abhishek R. Appu (El Dorado Hills, CA); Vasanth Ranganathan (El Dorado Hills, CA); Dmitry Yurievich Babokin (San Jose, CA); Ankur N. Shah (Folsom, CA)
Assignee: Intel Corporation
G06T1/20G06F9/30043G06F9/3887G06F9/3888G06F9/38885G06T1/60
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,299,766
App. No.
17/484,066
Granted
May 13, 2025
Kind
B2
Abstract

Systems and methods for supporting generic pointers in hardware of a graphics processing unit (GPU) are provided. In various examples, a GPU includes multiple sub-cores each having a processing resource and a load/store pipeline. The processing resource is operable to receive a memory access message including a pointer and a memory type identifier indicative of the pointer representing a generic pointer. The processing resource is further operable to output a load or store operation to the load/store pipeline based on the memory access message, including computing an address for the load or store operation by adding a base address of a named memory type of a plurality of named memory types referenced by the generic pointer to an offset into a memory of the named memory type. The load/store pipeline is operable to, responsive to receipt of the load or store operation, access the memory at the address.

Claims (34)

1. A graphics processing unit (GPU) comprising:

a plurality of sub-cores each including a processing resource and a load/store pipeline;

the processing resource is operable to:

receive a memory access message including a memory type identifier and a pointer, wherein the memory type identifier is indicative of the pointer representing a generic pointer; and

output a load or store operation to the load/store pipeline based on the memory access message, including computing an address for the load or store operation by adding a base address of a named memory type of a plurality of named memory types referenced by the generic pointer to an offset into a memory of the named memory type; and

the load/store pipeline is operable to, responsive to receipt of the load or store operation, access the memory at the address.

2. The GPU of claim 1 , wherein the plurality of named memory types are selected from a group comprising a shared local memory, a private scratch memory, a constant memory, and a global memory.

3. The GPU of claim 2 , further comprising a local range register operable to be programmed by a graphics driver with a local memory generic base address and a size of the shared local memory.

4. The GPU of claim 3 , wherein when the generic pointer is being used to access the shared local memory, a generic linker symbol used as a placeholder by a compiler for the base address within a binary containing the memory access message is patched with the local memory generic base address.

5. The GPU of claim 2 , further comprising a scratch range register operable to be programmed by a graphics driver with a private generic base address and a size of the private scratch memory.

6. The GPU of claim 5 , wherein when the generic pointer is being used to access the private scratch memory, a generic linker symbol used as a placeholder by a compiler for the base address within a binary containing the memory access message is patched with the private generic base address.

7. The GPU of claim 1 , wherein the address comprises a first of a plurality of lane addresses for each of a plurality of Single Instruction Multiple Data (SIMD) or Single Instruction Multiple-Thread (SIMT) operands and the remainder of the plurality of lane addresses are calculated based on a predefined per-lane offset.

8. A method comprising:

receiving, by a processing resource of a sub-core of a plurality of sub-cores of a graphics processing unit (GPU), a memory access message including a memory type identifier and a pointer, wherein the memory type identifier is indicative of the pointer representing a generic pointer;

based on the memory access message, outputting, by the processing resource, a load or store operation to a load/store pipeline of the sub-core, including computing an address for the load or store operation by adding a base address of a named memory type of a plurality of named memory types referenced by the generic pointer to an offset into a memory of the named memory type;

responsive to receipt of the load or store operation, accessing, by the load/store pipeline, the memory at the address.

9. The method of claim 8 , wherein the plurality of named memory types are selected from a group comprising a shared local memory, a private scratch memory, a constant memory, and a global memory.

10. The method of claim 9 , further comprising receiving, by a local range register of the sub-core, a local memory generic base address and a size of the shared local memory.

11. The method of claim 10 , wherein when the generic pointer is being used to access the shared local memory, a binary containing the memory access message is patched by replacing a generic linker symbol that is used as a placeholder by a compiler for the base address with the local memory generic base address.

12. The method of claim 9 , further comprising receiving, by a scratch range register of the sub-core, a private generic base address and a size of the private scratch memory.

13. The method of claim 12 , wherein when the generic pointer is being used to access the private scratch memory, a binary containing the memory access message is patched by replacing a generic linker symbol that is used as a placeholder by a compiler for the base address with the private generic base address.

14. A system comprising:

a central processing unit (CPU); and

a graphics processing unit (GPU) coupled to the CPU, wherein the GPU includes a sub-core including a processing resource and a load/store pipeline;

the processing resource is operable to:

receive a memory access message including a memory type identifier and a pointer, wherein the memory type identifier is indicative of the pointer representing a generic pointer; and

output a load or store operation to the load/store pipeline based on the memory access message, including computing an address for the load or store operation by adding a base address of a named memory type of a plurality of named memory types referenced by the generic pointer to an offset into a memory of the named memory type; and

the load/store pipeline is operable to, responsive to receipt of the load or store operation, access the memory at the address.

15. The system of claim 14 , wherein the plurality of named memory types are selected from a group comprising a shared local memory, a private scratch memory, a constant memory, and a global memory.

16. The system of claim 15 , wherein the sub-core further includes a local range register operable to be programmed by a graphics driver with a local memory generic base address and a size of the shared local memory.

17. The system of claim 16 , wherein when the generic pointer is being used to access the shared local memory, a generic linker symbol used as a placeholder by a compiler for the base address within a binary containing the memory access message is patched with the local memory generic base address.

18. The system of claim 15 , wherein the sub-core further includes a scratch range register operable to be programmed by a graphics driver with a private generic base address and a size of the private scratch memory.

19. The system of claim 18 , wherein when the generic pointer is being used to access the private scratch memory, a generic linker symbol used as a placeholder by a compiler for the base address within a binary containing the memory access message is patched with the private generic base address.

20. The system of claim 14 , wherein the address comprises a first of a plurality of lane addresses for each of a plurality of Single Instruction Multiple Data (SIMD) or Single Instruction Multiple-Thread (SIMT) operands and the remainder of the plurality of lane addresses are calculated based on a predefined per-lane offset.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 11, 2022
From: RAY, JOYDEEP; SHINDE, PRATHAMESH RAGHUNATH; ASHBAUGH, BEN J.; CHEN, WEI-YU; APPU, ABHISHEK R.; RANGANATHAN, VASANTH; BABOKIN, DMITRY YURIEVICH; SHAH, ANKUR N.
To: INTEL CORPORATION
Reel/Frame 058621/0332 →
Continuity (1)
Related Publication 20230102538A1 · Mar 30, 2023
References Cited (8)
US 20150084975A1 · Heinrich · 2015 [cited by examiner]
US 20180293183A1 · Cooray · 2018 [cited by examiner]
US 20180293185A1 · Vembu · 2018 [cited by examiner]
US 20180293690A1 · Ray · 2018 [cited by examiner]
US 20180293701A1 · Appu · 2018 [cited by examiner]
US 20180299921A1 · Rajwani · 2018 [cited by examiner]
US 20190035452A1 · Borole · 2019 [cited by examiner]
US 20200201797A1 · Vu · 2020 [cited by examiner]