IP Library › Granted Patent US 8,683,487
Granted Patent B2
US 8,683,487 · App. 13/792,427 · Granted Mar 25, 2014

Language level support for shared virtual memory

Inventors: Zhou Xiaocheng (Beijing, CN); Shoumeng Yan (Beijing, CN); Gao Ying (Beijing, CN); Hu Chen (Beijing, CN); Peinan Zhang (Beijing, CN); Mohan Rajagopalan (Mountain View, CA); Avi Mendelson (Haifa, IL); Bratin Saha (Santa Clara, CA)
Assignee: Intel Corporation
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 8,683,487
App. No.
13/792,427
Granted
Mar 25, 2014
Kind
B2
Abstract

Embodiments of the invention provide language support for CPU-GPU platforms. In one embodiment, code can be flexibly executed on both the CPU and GPU. CPU code can offload a kernel to the GPU. That kernel may in turn call preexisting libraries on the CPU, or make other calls into CPU functions. This allows an application to be built without requiring the entire call chain to be recompiled. Additionally, in one embodiment data may be shared seamlessly between CPU and GPU. This includes sharing objects that may have virtual functions. Embodiments thus ensure the right virtual function gets invoked on the CPU or the GPU if a virtual function is called by either the CPU or GPU.

Claims (77)

1. A computing system comprising:

a central processing unit (CPU);

a graphics processing unit (GPU);

a memory; and

circuitry configured to:

allow pointers to be passed and data structures to be shared between the CPU and GPU;

permit sharing of a sub-section of virtual address space in the memory between the CPU and the GPU, wherein:

in response to a GPU function including a call to a GPU function, cause performance of the call;

in response to a CPU function including a call to a GPU function, cause issuance of a remote call for performance by the GPU;

in response to a CPU function including a call to another CPU function, cause performance of the call; and

in response to a GPU function including a call to a CPU function, cause issuance of a remote call for performance by the CPU.

2. The system of claim 1 , further comprising:

in response to issuance of a remote call for performance by the GPU, buffer an instruction for performance by the GPU.

3. The system of claim 1 , further comprising:

in response to issuance of a remote call for performance by the CPU, buffer an instruction for performance by the CPU.

4. The system of claim 1 , wherein code that includes any call can be flexibly executed on both the CPU and GPU.

5. The system of claim 4 , wherein an attribute in the code is to indicate a function that is to be executed by the CPU or GPU.

6. The system of claim 1 , wherein issuance of a remote call for performance by the CPU comprises invocation of a runtime API for the remote call.

7. The system of claim 1 , wherein issuance of a remote call for performance by the GPU comprises invocation of a runtime API for the remote call.

8. The system of claim 1 , wherein the issuance of a remote call to the GPU comprises:

execution of compiler generated code to:

look up a jump table with a function name and obtain the function address;

pack arguments into an argument buffer in shared space between CPU and GPU; and

call a dispatch routine on the GPU side and pass the function address and argument buffer address.

9. The system of claim 1 , wherein the issuance of a remote call to the CPU comprises:

execution of compiler generated code to:

look up a jump table with a function name and obtain the function address;

pack arguments into an argument buffer in shared space between CPU and GPU; and

all a dispatch routine on the CPU side and pass the function address and argument buffer address.

10. The system of claim 1 , further comprising a frame buffer communicatively coupled to the GPU and a display communicatively coupled to the frame buffer.

11. A method comprising:

allowing pointers to be passed and data structures to be shared between a central processing unit (CPU) and a graphics processing unit (GPU);

sharing of a sub-section of virtual address space between the CPU and the GPU;

in response to a GPU function calling a GPU function, causing performance of the call;

in response to a CPU function including a call to a GPU function, causing issuance of a remote call for performance by the GPU;

in response to a CPU function calling another CPU function, causing performance of the call; and

in response to a GPU function including a call to a CPU function, causing issuance of a remote call for performance by the CPU.

12. The method of claim 11 , further comprising:

in response to issuance of a remote call for performance by the GPU, buffering an instruction for performance by the GPU.

13. The method of claim 11 , further comprising:

in response to issuance of a remote call for performance by the CPU, buffering an instruction for performance by the CPU.

14. The method of claim 11 , wherein code that includes any call can be flexibly executed on both the CPU and GPU.

15. The method of claim 14 , wherein an attribute in the code is to indicate a function that is to be executed by the CPU or GPU.

16. The method of claim 11 , wherein issuing a remote call comprises invoking a runtime API for the remote call.

17. At least one non-transitory computer readable medium storing instructions that, if executed, enable a processor-based system comprising a central processing unit (CPU) and a graphics processing unit (GPU) to:

allow pointers to be passed and data structures to be shared between a CPU and GPU;

permit sharing of a sub-section of virtual address space in the memory between the CPU and the GPU;

wherein:

in response to a GPU function including a call to a GPU function, cause performance of the call;

in response to a CPU function including a call to a GPU function, cause issuance of a remote call for performance by the GPU;

in response to a CPU function including a call to another CPU function, cause performance of the call; and

in response to a GPU function including a call to a CPU function, cause issuance of a remote call for performance by the CPU.

18. The medium of claim 17 , further comprising stored instructions that, if executed, enable a processor-based system to:

in response to issuance of a remote call for performance by the GPU, cause buffer of an instruction for performance by the GPU.

19. The medium of claim 17 , further comprising stored instructions that, if executed, enable a processor-based system to:

in response to issuance of a remote call for performance by the CPU, cause buffer of an instruction for performance by the CPU.

20. The medium of claim 17 , wherein the instructions can be flexibly executed on the CPU or the GPU.

21. The medium of claim 20 , wherein an attribute in the instructions is to indicate a function that is to be executed by the CPU or GPU.

22. The medium of claim 17 , wherein issuance of a remote call for performance by the CPU comprises invocation of a runtime API for the remote call.

23. The medium of claim 17 , wherein issuance of a remote call for performance by the GPU comprises invocation of a runtime API for the remote call.

24. The medium of claim 17 , wherein the issuance of a remote call to the GPU comprises:

execution of compiler generated code to:

look up a jump table with a function name and obtain the function address;

pack arguments into an argument buffer in shared space between CPU and GPU; and

call a dispatch routine on the GPU side and pass the function address and argument buffer address.

25. The medium of claim 17 , wherein the issuance of a remote call to the CPU comprises:

execution of compiler generated code to:

look up a jump table with a function name and obtain the function address;

pack arguments into an argument buffer in shared space between CPU and GPU; and

call a dispatch routine on the CPU side and pass the function address and argument buffer address.

26. The medium of claim 17 , further comprising stored instructions that, if executed, enable a processor-based system to:

offload a kernel to the GPU using CPU code; and

use the kernel to call preexisting libraries on the CPU, or make other calls into CPU functions.

27. The medium of claim 17 , further comprising stored instructions that, if executed, enable a processor-based system to:

identify data that is shared between the CPU and GPU with a shared keyword;

allocate global shared variables in a shared memory space; and

provide a function to allocate data in the shared memory.

Continuity (3)
Continuation 12317854 · Dec 30, 2008
Provisional Application 61199095 · Nov 13, 2008
Related Publication 20130187936A1 · Jul 25, 2013