IP Library Granted Patent US 10,534,639
Granted Patent B2
US 10,534,639 · App. 15/643,428 · Granted Jan 14, 2020

Virtualization of multiple coprocessors

Inventors: Mazhar Memon (Austin, TX); Subramanian Rama (Austin, TX); Maciej Bajkowski (Austin, TX)
Assignee: Bitfusion.io, Inc.
G06F9/485G06F8/61G06F9/4881G06F11/3024G06F11/3414
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 10,534,639
App. No.
15/643,428
Granted
Jan 14, 2020
Kind
B2
Abstract

In a data processing system running at least one application on a hardware platform that includes at least one processor and a plurality of coprocessors, at least one kernel dispatched by an application is intercepted by an intermediate software layer running logically between the application and the system software. Compute functions are determined within kernel(s), and data dependencies are determined among the compute functions. The compute functions are dispatched to selected ones of the coprocessors based at least in part on the determined data dependencies and kernel results are returned to the application that dispatched the respective kernel.

Claims (57)

1. A data processing method comprising:

running at least one application, via system software, on a hardware platform that includes at least one processor and a plurality of coprocessors;

installing an intermediate software layer in a non-privileged, user space to run logically between the application and the system software, without modification of the application or of the system software running on the hardware platform;

intercepting, by the intermediate software layer, at least one kernel, comprising a plurality of kernel tasks, dispatched within a data and command stream issued by the application;

each said kernel corresponding to instructions to an intended one of the coprocessors for execution on that intended coprocessor;

determining compute functions within the at least one kernel;

automatically, and transparent to the application, determining data dependencies among the compute functions;

dispatching the compute functions to at least one selected coprocessor based at least in part on the determined data dependencies, wherein the at least one selected coprocessor may but need not include the intended coprocessor; and

returning kernel results to the at least one application that dispatched the respective kernel.

2. The method of claim 1 , in which at least two kernels are intercepted, each of the plurality of kernel tasks being defined by a respective one of the at least two kernels, whereby determining data dependencies among the compute functions is performed at kernel level granularity.

3. The method of claim 1 , in which the plurality of kernel tasks comprises at least two sub-tasks defined within a single one of the at least one kernel.

4. The method of claim 1 , wherein the step of determining data dependencies among the compute functions includes determining the input-output relationships of parameters of different ones of the compute functions.

5. The method of claim 4 , further comprising determining the input-output relationships by tracking system memory changes.

6. The method of claim 1 , further comprising identifying the compute functions by examination of kernel code and therein identifying a name of each function and parameter data types of each function.

7. The method of claim 1 , further comprising selecting which of the coprocessors to dispatch each compute function to as a function of relative performance characteristics of the respective coprocessors.

8. The method of claim 7 , in which the function of relative performance characteristics includes a measure of processable work units per time unit.

9. The method of claim 7 , in which the function of relative performance characteristics includes a measure of processing cost of data transfer to and from each coprocessor.

10. The method of claim 7 , in which the function of relative performance characteristics includes a measure of current workload of each coprocessor.

11. The method of claim 7 , further comprising compiling run-time performance data for the coprocessors as they receive and process dispatched compute functions, and adjusting subsequent coprocessor selection for processing of subsequent kernels as a function of the compiled run-time performance data.

12. The method of claim 1 , further comprising, before intercepting the at least one kernel:

identifying the coprocessors and storing corresponding system information in at least one library that is accessible to the intermediate software layer;

identifying the at least one application and storing corresponding application identifying information in the at least one library;

from the system information and application identifying information stored in the at least one library, identifying kernels used by each application and matching said kernels with corresponding coprocessors.

13. The method of claim 1 , said data dependencies comprising dependent output-to-input relationships, such that an output of at least one of the dispatched compute functions comprises an input to at least one other of the dispatched compute functions.

14. A data processing system comprising:

a hardware platform that includes at least one processor and a plurality of coprocessors;

at least one application running on the hardware platform, via system software;

a hardware abstraction layer installed in a non-privileged, user space and running logically between the application and the system software without corresponding modification of the application or of the system software running on the hardware platform;

said hardware abstraction layer being provided for intercepting at least one kernel, comprising a plurality of kernel tasks, dispatched within a data and command stream issued by the at least one application, each said kernel corresponding to instructions to an intended one of the coprocessors for execution on that intended coprocessor;

said hardware abstraction layer including an analysis module provided for automatically, and transparent to the application, determining compute functions within the at least one kernel and for automatically, and transparent to the application, determining data dependencies among the compute functions;

a scheduler provided for dispatching the compute functions to at least one selected coprocessor based at least in part on the determined data dependencies, wherein the at least one selected coprocessor may but need not include the intended coprocessor; and

said hardware abstraction layer being further provided for returning kernel results to the at least one application that dispatched the respective kernel.

15. The system of claim 14 , said hardware abstraction layer being provided for intercepting at least two kernels, each of the plurality of kernel tasks being defined by a respective one of the at least two kernels, whereby determining data dependencies among the compute functions is performed at kernel level granularity.

16. The system of claim 14 , in which the plurality of kernel tasks comprises at least two sub-tasks defined within a single one of the at least one kernel.

17. The system of claim 14 , wherein the data dependencies comprise input-output relationships of parameters of different ones of the compute functions.

18. The system of claim 17 , wherein the analysis module is provided for determining the input-output relationships by tracking system memory changes.

19. The system of claim 14 , wherein the hardware abstraction layer is provided for identifying the compute functions by examination of kernel code and therein identifying a name of each function and parameter data types of each function.

20. The system of claim 14 , wherein the scheduler is provided for selecting which of the coprocessors to dispatch each compute function to as a function of relative performance characteristics of the respective coprocessors.

21. The system of claim 20 , in which the function of relative performance characteristics includes a measure of processable work units per time unit.

22. The system of claim 20 , in which the function of relative performance characteristics includes a measure of processing cost of data transfer to and from each coprocessor.

23. The system of claim 20 , in which the function of relative performance characteristics includes a measure of current workload of each coprocessor.

24. The system of claim 20 , wherein the hardware abstraction layer is provided for compiling run-time performance data for the coprocessors as they receive and process dispatched compute functions, and adjusting subsequent coprocessor selection for processing of subsequent kernels as a function of the compiled run-time performance data.

25. The system of claim 14 , wherein the hardware abstraction layer is provided for, before intercepting the at least one kernel:

identifying the coprocessors and storing corresponding system information in at least one library that is accessible to the intermediate software layer;

identifying the at least one application and storing corresponding application identifying information in the at least one library;

from the system information and application identifying information stored in the at least one library, identifying kernels used by each application and matching said kernels with corresponding coprocessors.

26. The system of claim 14 , said data dependencies comprising dependent output-to-input relationships, such that an output of at least one of the dispatched compute functions comprises an input to at least one other of the dispatched compute functions.

27. A data processing method comprising:

running at least one application, via system software, on a hardware platform that includes at least one processor and a plurality of coprocessors;

installing an intermediate software layer in a non-privileged, user space, without modification of the application or of the system software;

intercepting, by the intermediate software layer running logically between the application and the system software, at least two kernels dispatched within a data and command stream issued by the application, each said kernel defining at least one of a plurality of dispatched kernel tasks;

each said kernel corresponding to instructions to an intended one of the coprocessors for execution on that intended coprocessor;

automatically, and transparent to the application, determining compute functions within the at least one kernel;

automatically, and transparent to the application, determining data dependencies among the compute functions, including determining the input-output relationships of parameters of different ones of the compute functions by tracking system memory changes, said data dependencies comprising dependent output-to-input relationships, such that an output of at least one of the dispatched compute functions comprises an input to at least one other of the dispatched compute functions;

dispatching the compute functions to at least one selected coprocessors based at least in part on the determined data dependencies and relative performance characteristics of the respective coprocessors, wherein the at least one selected coprocessor may but need not include the intended coprocessor;

at least one of said relative performance characteristics being chosen from the group of a measure of processable work units per time unit, a measure of processing cost of data transfer to and from each coprocessor, and a measure of current workload of each coprocessor; and

returning kernel results to the at least one application that dispatched the respective kernel.

Assignments (3)
CHANGE OF NAME Recorded Apr 15, 2024
From: VMWARE, INC.
To: VMWARE LLC
Reel/Frame 067102/0395 →
NUNC PRO TUNC ASSIGNMENT Recorded Mar 23, 2020
From: BITFUSION.IO INC.
To: VMWARE, INC.
Reel/Frame 052194/0165 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 6, 2017
From: MEMON, MAZHAR; RAMA, SUBRAMANIAN; BAJKOWSKI, MACIEJ
To: BITFUSION.IO, INC.
Reel/Frame 042927/0485 →
Continuity (1)
Related Publication 20190012197A1 · Jan 10, 2019
Cited By (1)
US 12,293,198