US 11,748,152 B2
Virtualization of multiple coprocessors
Mazhar Memon, Austin, TX (US); Subramanian Rama, Austin, TX (US); and Maciej Bajkowski, Austin, TX (US)
Filed by VMware, Inc., Palo Alto, CA (US)
Filed on Oct. 18, 2021, as Appl. No. 17/503,998.
Application 17/503,998 is a continuation of application No. 16/737,655, filed on Jan. 8, 2020, granted, now 11,169,843.
Application 16/737,655 is a continuation of application No. 15/643,428, filed on Jul. 6, 2017, granted, now 10,534,639, issued on Jan. 14, 2020.
Prior Publication US 2022/0035654 A1, Feb. 3, 2022
This patent is subject to a terminal disclaimer.
Int. Cl. G06F 9/48 (2006.01); G06F 11/30 (2006.01); G06F 8/61 (2018.01); G06F 11/34 (2006.01)
CPC G06F 9/485 (2013.01) [G06F 8/61 (2013.01); G06F 9/4881 (2013.01); G06F 11/3024 (2013.01); G06F 11/3409 (2013.01); G06F 11/3414 (2013.01); G06F 2201/865 (2013.01)] 18 Claims
OG exemplary drawing
 
1. A data processing method carried out while an application is running, via system software, on a hardware platform that includes at least one processor and a plurality of coprocessors, the data processing method comprising:
intercepting, by an intermediate software layer, which is installed 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, first, second, and third kernels dispatched within a data and command stream issued by the application, each said kernel corresponding to instructions to the plurality of coprocessors;
automatically, and transparently to the application, determining data dependencies among the kernels including determining that an input to the first kernel is an output from the second kernel;
automatically, and transparently to the application, determining that the third kernel has no data dependencies on the first and second kernels;
selecting at least one coprocessor to which the first and second kernels are to be dispatched based at least in part on the determined data dependencies;
selecting another coprocessor to which the third kernel is to be dispatched based at least in part on the third kernel having no data dependencies on the first and second kernels;
dispatching the first and second kernels to the selected at least one coprocessor and the third kernel to the selected another coprocessor; and
returning kernel results to the application.