IP Library Granted Patent US 9,304,730
Granted Patent B2
US 9,304,730 · App. 13/593,129 · Granted Apr 5, 2016

Direct communication between GPU and FPGA components

Inventors: Ray Bittner (Bothell, WA); Erik S. Ruf (Kirkland, WA)
Assignee: Microsoft Technology Licensing, LLC
G06F3/14G09G5/363G09G2360/06G09G2360/08
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 9,304,730
App. No.
13/593,129
Granted
Apr 5, 2016
Kind
B2
Abstract

A system may include a Graphics Processing Unit (GPU) and a Field Programmable Gate Array (FPGA). The system may further include a bus interface that is external to the FPGA, and that is configured to transfer data directly between the GPU and the FPGA without storing the data in a memory of a central processing unit (CPU) as an intermediary operation.

Claims (75)

1. A system comprising:

one or more processors located on a computing device;

at least one tangible computer-readable storage medium storing instructions executable by the one or more processors, the executable instructions configured to cause the computing device to:

obtain a virtual pointer identifying an address for directly accessing a memory of a Field Programmable Gate Array (FPGA);

initiate a transmission of the virtual pointer to a Graphics Processing Unit (GPU) driver associated with a GPU that is external to the FPGA; and

initiate a transfer of data directly between the GPU and the FPGA via a bus interface external to the FPGA without storing the data in a memory of a central processing unit (CPU) as an intermediary operation.

2. The system of claim 1 , wherein:

an FPGA driver is configured to generate the virtual pointer; and

the GPU driver that is associated with the GPU is configured to receive the virtual pointer via an application programming interface (API) associated with the GPU.

3. The system of claim 2 , wherein:

the API associated with the GPU is configured to generate one or more physical addresses of one or more locations in the memory of the FPGA, based on the virtual pointer; and

the transfer of the data includes one or more of:

a transfer of the data from a memory of the GPU to the memory of the FPGA, based on the one or more physical addresses of the one or more locations in the memory of the FPGA, or

a transfer of the data from the memory of the FPGA to the memory of the GPU, based on the one or more physical addresses of the one or more locations in the memory of the FPGA.

4. The system of claim 3 , wherein:

the transfer of the data includes one or more of:

a transfer of the data from the memory of the GPU to the memory of the FPGA, based on the one or more physical addresses of the one or more locations in the memory of the FPGA, based on a direct memory access (DMA) transfer from the memory of the GPU to the memory of the FPGA, or

a transfer of the data from the memory of the FPGA to the memory of the GPU, based on the one or more physical addresses of the one or more locations in the memory of the FPGA, based on a DMA transfer from the memory of the FPGA to the memory of the GPU.

5. The system of claim 1 , wherein:

the FPGA is included in the computing device as one or more of:

a production component, or

a prototype component.

6. A method comprising:

initiating a request to transfer data between a Graphics Processing Unit (GPU) and a Field Programmable Gate Array (FPGA); and

transferring the data directly between the GPU and the FPGA via a bus interface external to the FPGA without storing the data in a memory of a central processing unit (CPU) as an intermediary operation.

7. The method of claim 6 , wherein:

the bus interface includes a Peripheral Component Interconnect Express (PCIe) interface.

8. The method of claim 7 , wherein:

transferring the data includes transferring the data directly between the GPU and the FPGA via a PCIe switch.

9. The method of claim 6 , further comprising:

obtaining a virtual pointer identifying an address for directly accessing a memory of the FPGA; and

initiating a transmission of the virtual pointer to a GPU driver associated with the GPU that is external to the FPGA.

10. The method of claim 9 , further comprising:

generating one or more physical addresses of one or more locations in the memory of the FPGA, based on the virtual pointer, via an application programming interface (API) associated with the GPU, wherein:

transferring the data includes one or more of:

transferring the data from a memory of the GPU to the memory of the FPGA, based on the one or more physical addresses of the one or more locations in the memory of the FPGA, or

transferring the data from the memory of the FPGA to the memory of the GPU, based on the one or more physical addresses of the one or more locations in the memory of the FPGA.

11. The method of claim 6 , further comprising:

obtaining a virtual pointer identifying an address for directly accessing a memory of the GPU that is external to the FPGA; and

initiating a transmission of the virtual pointer to an FPGA driver associated with the FPGA.

12. The method of claim 11 , further comprising:

generating one or more physical addresses of one or more locations in the memory of the GPU, based on the virtual pointer, via an application programming interface (API) associated with the FPGA, wherein:

transferring the data includes one or more of:

transferring the data from a memory of the FPGA to the memory of the GPU, based on the one or more physical addresses of the one or more locations in the memory of the GPU, or

transferring the data from the memory of the GPU to the memory of the FPGA, based on the one or more physical addresses of the one or more locations in the memory of the GPU.

13. A system comprising:

a Graphics Processing Unit (GPU);

a Field Programmable Gate Array (FPGA); and

a bus interface that is external to the FPGA, and that is configured to transfer data directly between the GPU and the FPGA without storing the data in a memory of a central processing unit (CPU) as an intermediary operation.

14. The system of claim 13 , wherein:

the bus interface includes a Peripheral Component Interconnect Express (PCIe) interface.

15. The system of claim 13 , further comprising:

an FPGA driver configured to generate a virtual pointer identifying an address for directly accessing a memory of the FPGA; and

a GPU driver that is associated with the GPU and that is configured to obtain the virtual pointer via an application programming interface (API) associated with the GPU that is external to the FPGA.

16. The system of claim 15 , wherein:

the API associated with the GPU is configured to generate one or more physical addresses of one or more locations in the memory of the FPGA, based on the virtual pointer; and

the transfer of the data includes one or more of:

a transfer of the data from a memory of the GPU to the memory of the FPGA, based on the one or more physical addresses of the one or more locations in the memory of the FPGA, or

a transfer of the data from the memory of the FPGA to the memory of the GPU, based on the one or more physical addresses of the one or more locations in the memory of the FPGA.

17. The system of claim 16 , wherein:

the transfer of the data includes one or more of:

a transfer of the data from the memory of the GPU to the memory of the FPGA, based on the one or more physical addresses of the one or more locations in the memory of the FPGA, based on a direct memory access (DMA) transfer from the memory of the GPU to the memory of the FPGA, or

a transfer of the data from the memory of the FPGA to the memory of the GPU, based on the one or more physical addresses of the one or more locations in the memory of the FPGA, based on a DMA transfer from the memory of the FPGA to the memory of the GPU.

18. The system of claim 13 , further comprising:

a GPU driver that is associated with the GPU and that is configured to generate a virtual pointer identifying an address for directly accessing a memory of the GPU that is external to the FPGA; and

an FPGA driver that is associated with the FPGA and that is configured to obtain the virtual pointer via an API associated with the FPGA.

19. The system of claim 18 , wherein:

the API associated with the FPGA is configured to generate one or more physical addresses of one or more locations in the memory of the GPU, based on the virtual pointer; and

the transfer of the data includes one or more of:

a transfer of the data from a memory of the FPGA to the memory of the GPU, based on the one or more physical addresses of the one or more locations in the memory of the GPU, or

a transfer of the data from the memory of the GPU to the memory of the FPGA, based on the one or more physical addresses of the one or more locations in the memory of the GPU.

20. The system of claim 19 , wherein:

the transfer of the data includes one or more of:

a transfer of the data from the memory of the FPGA to the memory of the GPU, based on the one or more physical addresses of the one or more locations in the memory of the GPU, based on a direct memory access (DMA) transfer from the memory of the FPGA to the memory of the GPU, or

a transfer of the data from the memory of the GPU to the memory of the FPGA, based on the one or more physical addresses of the one or more locations in the memory of the GPU, based on a DMA transfer from the memory of the GPU to the memory of the FPGA.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 9, 2014
From: MICROSOFT CORPORATION
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 034544/0541 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 23, 2012
From: BITTNER, RAY; RUF, ERIK S.
To: MICROSOFT CORPORATION
Reel/Frame 028838/0796 →
Continuity (1)
Related Publication 20140055467A1 · Feb 27, 2014