IP Library Granted Patent US 10,235,207
Granted Patent B2
US 10,235,207 · App. 15/281,155 · Granted Mar 19, 2019

Method and system for preemptible coprocessing

Inventors: Stephen M. Hebert (Houston, TX); Leonardo E. Reiter (Allen, TX)
Assignee: Nimbix, Inc.
G06F9/5011G06F9/4812G06F9/4881G06F11/1438G06F2201/805
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,235,207
App. No.
15/281,155
Granted
Mar 19, 2019
Kind
B2
Abstract

Methods, computer program products, and systems supporting preemptible coprocessing are disclosed. The method includes executing at least a portion of a first compute job, and executing at least a portion of a second compute job. The method further includes, prior to completing execution of the at least the portion of the second compute job, interrupting the execution of the second compute job, and scheduling at least a portion of a third compute job.

Claims (113)

1. A method comprising:

executing at least a portion of a first compute job;

executing at least a portion of a second compute job, wherein

the at least the portion of the first compute job and the at least the portion of the second compute job are configured to be executed at a first compute node comprising a first computing resource and a second computing resource,

the first computing resource comprises a first hardware element,

the second computing resource comprises a second hardware element,

the first hardware element and the second hardware element are separate from one another,

the at least the portion of the first compute job is serviced by the first computing resource, and

the at least the portion of the second compute job is serviced by the second computing resource;

prior to completing execution of the at least the portion of the second compute job, interrupting the execution of the second compute job;

scheduling at least a portion of a third compute job, wherein

the at least the portion of the third compute job is scheduled to be serviced by the second computing resource;

in response to the interrupting, detecting a failure during the execution of the at least the portion of the second compute job; and

restarting servicing of the at least the portion of the second compute job, wherein

the restarting is accomplished by causing another computing resource to service the at least the portion of the second compute job, and

the at least the portion of the second compute job is scheduled to be serviced by the another computing resource at a point in time at which the another computing resource becomes available.

2. The method of claim 1 , wherein

execution of the at least the portion of the first compute job cannot be interrupted, and

execution of the at least the portion of the second compute job can be interrupted.

3. The method of claim 1 , wherein

the first computing resource comprises a central processing unit, and

the second computing resource comprises at least one of

a digital signal processor,

a graphics processing unit, or

a field-programmable gate array.

4. The method of claim 1 , further comprising:

scheduling the at least the portion of the second compute job to be serviced by a third computing resource, wherein

the at least the portion of the second compute job is serviced by the third computing resource substantially simultaneously with the servicing of the at least the portion of the third compute job by the second computing resource.

5. The method of claim 1 , wherein

the first compute job is unrelated to the second compute job,

the first computing resource, while executing the first compute job, does not have access to the second computing resource,

the first computing resource, while executing the first compute job, does not have visibility of results arising from the executing of the at least the portion of the second compute job by the second computing resource,

the second computing resource, while executing the second compute job, does not have access to the first computing resource, and

the second computing resource, while executing the second compute job, does not have visibility of results arising from the execution of the first compute job by the first computing resource.

6. The method of claim 1 , further comprising:

identifying the second computing resource as a resource that can be interrupted during execution of a compute job;

in response to the identifying, requesting interruption of the second compute job;

performing tear down of the second computing resource, as previously configured for the second compute job; and

after the performing, reserving the second computing resource to perform the third compute job.

7. The method of claim 1 , wherein

the first compute job is executed within a first container,

the second compute job is executed within a second container, and

the third compute job is executed within a third container.

8. The method of claim 1 , wherein

communications with the first computing resource occur via a first application program interface,

communications with the second computing resource occur via a second application program interface, and

the first application program interface and the second application program interface are different.

9. A computer system comprising:

one or more processors;

one or more coprocessors;

a system controller, coupled to the one or more processors and the one or more coprocessors;

a computer-readable storage medium coupled to the system controller; and

a plurality of instructions, encoded in the computer-readable storage medium and configured to

cause at least one of the one or more processors to execute at least a portion of a first compute job,

cause at least one of the one or more coprocessors to execute at least a portion of a second compute job, wherein

the at least the portion of the first compute job and the at least the portion of the second compute job are configured to be executed at a first compute node comprising the one or more processors and the one or more coprocessors, and

the one or more processors and the one or more coprocessors are separate from one another,

prior to the at least one of the one or more coprocessors completing execution of the at least the portion of the second compute job, cause interruption of the execution of the second compute job,

schedule execution of at least a portion of a third compute job, wherein

the at least the portion of the third compute job is scheduled to be executed by the at least one of the one or more coprocessors,

in response to interruption of the execution of the second compute job, detect a failure during the execution of the at least the portion of the second compute job; and

restart the execution of the at least the portion of the second compute job, wherein

the execution of the at least the portion of the second compute job is restarted by causing another coprocessor to execute the at least the portion of the second compute job, and

the at least the portion of the second compute job is scheduled to be executed by the another coprocessor at a point in time at which the another coprocessor becomes available.

10. The computer system of claim 9 , wherein

execution of the at least the portion of the first compute job cannot be interrupted, and

execution of the at least the portion of the second compute job can be interrupted.

11. The computer system of claim 9 , wherein

the at least one of the one or more processors is a general purpose processing unit, and

the at least one of the one or more processors is one of

a digital signal processor,

a graphics processing unit, or

a field-programmable gate array.

12. The computer system of claim 9 , wherein the plurality of instructions are further configured to:

schedule the at least the portion of the second compute job to be executed by another coprocessor, wherein

the at least the portion of the second compute job is executed by the another coprocessor substantially simultaneously with the execution of the at least the portion of the third compute job by the at least one of the one or more coprocessors.

13. The computer system of claim 12 , wherein

the computer system is coupled to another computer system comprising the another coprocessor.

14. The computer system of claim 9 , wherein

the computer system is coupled to another computer system comprising the another coprocessor.

15. The computer system of claim 9 , wherein

the first compute job is executed within a first container,

the second compute job is executed within a second container, and

the third compute job is executed within a third container.

16. The computer system of claim 9 , wherein the computer system further comprises:

one or more local memory units, wherein

the first compute job, the second compute job, and the third compute job are ones of a plurality of compute jobs, and

each of the one or more local memory units are coupled to a corresponding one of the one or more coprocessors such that each of the one or more coprocessors executes at least a portion of a corresponding compute job of the plurality of compute jobs separately.

17. The computer system of claim 9 , wherein the computer system further comprises:

a configuration memory, wherein

the first compute job, the second compute job, and the third compute job are ones of a plurality of compute jobs,

the at least one of the one or more processors is a field-programmable gate array,

the configuration memory is coupled to the field-programmable gate array,

the configuration memory is configured to store a bit stream, and

the bit stream corresponds to a compute job of the plurality of compute jobs by virtue of configuring the field-programmable gate array to execute at least a portion of the compute job.

18. A computer program product comprising:

a plurality of instructions, wherein

the plurality of instructions are configured to cause execution of a plurality of compute lobs at a first compute node that comprises

one or more processors, and

one or more coprocessors,

the one or more processors and the one or more coprocessors are separate from one another, and

the plurality of instructions comprise

a first set of instructions, executable on a computer system, configured to cause at least one of the one or more processors to execute at least a portion of a first compute job,

a second set of instructions, executable on the computer system, configured to cause at least one of the one or more coprocessors to execute at least a portion of a second compute job, wherein,

the at least the portion of the first compute job and the at least the portion of the second compute job are configured to be executed at the first compute node,

a third set of instructions, executable on the computer system, configured to, prior to the at least one of the one or more coprocessors completing execution of the at least the portion of the second compute job, cause interruption of the execution of the second compute job,

a fourth set of instructions, executable on the computer system, configured to schedule execution of at least a portion of a third compute job, wherein

the at least the portion of the third compute job is scheduled to be executed by the at least one of the one or more coprocessors,

a fifth set of instructions, executable on the computer system, configured to, in response to the interruption of the execution of the second compute job, detect a failure during the execution of the at least the portion of the second compute job, and

a fifth set of instructions, executable on the computer system, configured to restart the execution of the at least the portion of the second compute job, wherein

the execution of the at least the portion of the second compute job is restarted by causing another coprocessor to execute the at least the portion of the second compute job, and

the at least the portion of the second compute job is scheduled to be executed by the another coprocessor at a point in time at which the another coprocessor becomes available; and

a non-transitory computer-readable storage medium, wherein the instructions are encoded in the non-transitory computer-readable storage medium.

Assignments (4)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 11, 2025
From: NIMBIX, INC.
To: BULL SAS
Reel/Frame 070825/0354 →
RELEASE OF SECURITY INTEREST Recorded Jul 30, 2021
From: COMERICA BANK
To: NIMBIX, INC.
Reel/Frame 057040/0865 →
SECURITY INTEREST Recorded Jul 24, 2020
From: NIMBIX, INC.
To: COMERICA BANK
Reel/Frame 053299/0715 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 5, 2016
From: HEBERT, STEPHEN M.; REITER, LEONARDO E.
To: NIMBIX, INC.
Reel/Frame 040522/0529 →
Continuity (1)
Related Publication 20180095795A1 · Apr 5, 2018