Task switching and inter-task communications for coordination of applications executing on a multi-user parallel processing architecture
DCFirst Claim
1. A system for managing execution of a plurality of software applications on an array of processing units, the system comprising:
- a core fabric comprisingthe array of processing units, anda plurality of input data buffers, each input data buffer being provided for buffering input data directed to a respective software application of the plurality of software applications and being dedicated to the respective software application, whereineach buffer of the plurality of input data buffers is deployed in the core fabric apart from the array of processing units, andeach software application of the plurality of software applications is provided one or more input data buffers of the plurality of input data buffers; and
a controller comprising hardware logic and/or software logic for performing operations for repeatedly reconfiguring task assignment to the array of processing units, the operations comprising, for each iteration of a plurality of iterations,identifying, for each software application of at least a portion of the plurality of software applications, an amount of input data at one or more input data buffers of the plurality of input data buffers buffering data for the respective software application,allocating, to each software application of the portion of the plurality of software applications, a number of processing units of the array of processing units based at least in part on the amount of input data buffered for the respective software application, andfor each software application of the portion,i) assigning one or more task instances of the respective software application for concurrent processing of the amount of input data to the number of processing units allocated to the respective software application by the allocating as one or more assigned instances, andii) adjusting, based at least in part on a change in a count of units between the number of processing units allocated to the respective software application and a number of previously allocated processing units allocated to the respective software application during a previous iteration of the plurality of iterations, a relative portion of the amount of input data to be processed by at least one assigned instance of the one or more assigned instances;
wherein, for one or more iterations of the plurality of iterations where a current number of the one or more processing units allocated to any given software application of the portion of the plurality of software applications is increased by the allocating, adjusting comprises relatively decreasing the portion of the amount of input data to be processed by at least one instance of the one or more assigned instances of the respective software application; and
wherein for one or more other iterations of the plurality of iterations where a present number of the one or more processing units allocated to any given software application of the portion of the plurality of software applications is decreased by the allocating, adjusting comprises relatively increasing the portion of the amount of input data to be processed by at least one instance of the one or more assigned instances of the respective software application.
1 Assignment
Litigations
1 Petition
Accused Products
Abstract
Systems and methods provide an extensible, multi-stage, realtime application program processing load adaptive, manycore data processing architecture shared dynamically among instances of parallelized and pipelined application software programs, according to processing load variations of said programs and their tasks and instances, as well as contractual policies. The invented techniques provide, at the same time, both application software development productivity, through presenting for software a simple, virtual static view of the actually dynamically allocated and assigned processing hardware resources, together with high program runtime performance, through scalable pipelined and parallelized program execution with minimized overhead, as well as high resource efficiency, through adaptively optimized processing resource allocation.
191 Citations
23 Claims
-
1. A system for managing execution of a plurality of software applications on an array of processing units, the system comprising:
-
a core fabric comprising the array of processing units, and a plurality of input data buffers, each input data buffer being provided for buffering input data directed to a respective software application of the plurality of software applications and being dedicated to the respective software application, wherein each buffer of the plurality of input data buffers is deployed in the core fabric apart from the array of processing units, and each software application of the plurality of software applications is provided one or more input data buffers of the plurality of input data buffers; and a controller comprising hardware logic and/or software logic for performing operations for repeatedly reconfiguring task assignment to the array of processing units, the operations comprising, for each iteration of a plurality of iterations, identifying, for each software application of at least a portion of the plurality of software applications, an amount of input data at one or more input data buffers of the plurality of input data buffers buffering data for the respective software application, allocating, to each software application of the portion of the plurality of software applications, a number of processing units of the array of processing units based at least in part on the amount of input data buffered for the respective software application, and for each software application of the portion, i) assigning one or more task instances of the respective software application for concurrent processing of the amount of input data to the number of processing units allocated to the respective software application by the allocating as one or more assigned instances, and ii) adjusting, based at least in part on a change in a count of units between the number of processing units allocated to the respective software application and a number of previously allocated processing units allocated to the respective software application during a previous iteration of the plurality of iterations, a relative portion of the amount of input data to be processed by at least one assigned instance of the one or more assigned instances; wherein, for one or more iterations of the plurality of iterations where a current number of the one or more processing units allocated to any given software application of the portion of the plurality of software applications is increased by the allocating, adjusting comprises relatively decreasing the portion of the amount of input data to be processed by at least one instance of the one or more assigned instances of the respective software application; and wherein for one or more other iterations of the plurality of iterations where a present number of the one or more processing units allocated to any given software application of the portion of the plurality of software applications is decreased by the allocating, adjusting comprises relatively increasing the portion of the amount of input data to be processed by at least one instance of the one or more assigned instances of the respective software application. - View Dependent Claims (2, 3, 4, 5, 6)
-
-
7. A system for managing execution of a plurality of software applications on an array of processing cores, the system comprising:
-
the array of processing cores; and a controller comprising hardware logic and/or software logic for performing operations for repeatedly reconfiguring task assignment to the array of processing cores, the operations comprising, for each iteration of a plurality of iterations, identifying, for each software application of at least a portion of the plurality of software applications, a processing load input at one or more input buffers provided for buffering information for the respective software application, allocating, to each software application of the portion of the plurality of software applications, one or more processing cores of the array of processing cores based at least in part on the processing load input for the respective software application, and for each software application of the portion, i) identifying one or more previously assigned task instances of the respective software application for processing of the processing load input of the respective software application, wherein the one or more previously assigned task instances were each assigned to a respective processing core of the array of processing cores during a previous iteration of the plurality of iterations, ii) assigning one or more task instances of the respective software application for processing of the processing load input to the one or more processing units allocated to the respective software application by the allocating as one or more assigned instances, wherein the one or more previously assigned task instances are prioritized in placing to the array of processing cores ahead of any other assigned instances of the respective software application; and iii) providing a portion of the processing load input to each task instance of the one or more assigned instances for concurrent processing of the processing load input; wherein, for one or more iterations of the plurality of iterations where a current number of the one or more processing cores allocated to any given software application of the portion of the plurality of software applications is increased by the allocating, providing the portion of the processing load input comprises relatively decreasing the portion of the processing load input to be processed by at least one of the assigned instances placed to at least one core of the one or more of processing cores allocated to the respective software application; and wherein, for one or more other iterations of the plurality of iterations where a present number of the one or more processing cores allocated to any given software application of the portion of the plurality of software applications is decreased by the allocating, providing the portion of the processing load input comprises relatively increasing the portion of the processing load input to be processed by at least one of the assigned instances placed to at least one core of the one or more of processing cores allocated to the respective software application. - View Dependent Claims (8, 9, 10, 11, 12, 13, 14)
-
-
15. A system for managing execution of a plurality of software programs on a plurality of processing units on behalf of a plurality of users, the system comprising:
-
the plurality of processing units; and a plurality of subsystems comprising hardware logic and/or software logic for performing operations for repeatedly reconfiguring task distribution on the array of processing units, the plurality of subsystems comprising a first subsystem comprising hardware logic and/or software logic for identifying, for each software program of at least a portion of the plurality of software programs, a processing load input at one or more input buffers provided for buffering information for the respective software program, a second subsystem comprising hardware logic and/or software logic for allocating, to each software program of the portion of the plurality of software programs, a number of processing units of the plurality of processing units based at least in part on the processing load input for the respective software program identified by the first subsystem, a third subsystem comprising hardware logic and/or software logic for assigning, for each software program of the portion of the plurality of software programs, one or more active task instances of the respective software program to one or more processing units of the plurality of processing units, wherein a count of the one or more active task instances equals the number of processing units allocated to the respective software program by the second subsystem, and the one or more active task instances are assigned for processing of the processing load input, and a fourth subsystem comprising hardware logic and/or software logic for providing, for each software program of the portion of the plurality of software programs, a portion of the processing load input of the respective software program to each task instance of the one or more active task instances of the respective software program for concurrent processing of the processing load input; wherein the identifying, the allocating, the assigning, and the providing are repeated for a plurality of iterations, wherein, for a given iteration of the plurality of iterations and a given program of the plurality of software programs, when the number of units allocated to the respective program is increased from a previous number of units allocated to the respective allocation during a previous iteration of the plurality of iterations, providing the portion of the processing load input comprises relatively decreasing a previously provided portion of the processing load input to at least one task instance of the one or more active task instances of the respective software program, and when the number of units allocated to the respective program is decreased from the previous number of units allocated to the respective allocation during the previous iteration of the plurality of iterations, providing the portion of the processing load input comprises relatively increasing a previously provided portion of the processing load input to at least one task instance of the one or more active task instances of the respective software program. - View Dependent Claims (16, 17, 18, 19, 20, 21, 22, 23)
-
Specification