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 buffers, each input buffer being provided for buffering processing load input 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 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 buffers of the plurality of input 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 and communication path connectivity for the array of processing units, the operations comprising, for each iteration of a plurality of iterations,allocating, to each software application of at least a portion of the plurality of software applications as a plurality of active software applications, a number of units of the array of processing units at least in part in accordance with a plurality of demand expressions, each demand expression of the plurality of demand expressions corresponding to a different software application of the plurality of software applications, whereineach demand expression of the plurality of demand expressions is based at least in part on a measure of an amount of the processing load input at the one or more input buffers of the respective software application, wherein,allocating results in, for at least some of the plurality of software applications, a respective one or more allocated processing units of the array of processing units,obtaining, for each software application of the plurality of active software applications, identification of one or more tasks of the respective software application,assigning a respective task of the one or more tasks of each application of the plurality of active software applications to at least one respective processing unit of the respective one or more allocated processing units in accordance with the allocating, whereinfor at least a portion of the plurality of active software applications, the number of processing units allocated to the respective software application is less than a number of possible tasks of the respective software application available for assigning, andassigning comprises,for each software application of at least a portion of the plurality of active software applications, identifying at least one activating task of the one or more tasks of the respective software application not assigned to the array of processing units for execution for a current iteration of the plurality of iterations, andfor each activating task of each software application of the portion of the plurality of active software applications, identifying at least one available unit of the array of processing units, each available unit corresponding to a respective deactivating task of at least one software application of the plurality of software applications, each deactivating task not assigned to the array of processing units for execution for a next iteration of the plurality of iterations, andassigning the at least one activating task to the at least one available unit, andcausing connection, in accordance with the assigning, of the processing load input from each buffer of at least a portion of the plurality of input buffers to a different unit of the respective one or more allocated processing units to connect respective processing load input to a task of the one or more tasks of the respective software application that the respective processing load input is directed to;
wherein, for consecutive iterations of the plurality of iterations and for at least one software application of the plurality of active software applications,a number of the one or more allocated processing units allocated to the respective software application varies with the measure of the processing load input at the one or more input buffers of the respective software application for the respective iteration, andthe assigning comprises assigning a varying number of tasks of concurrent instances of the respective software application corresponding to variations in the number of processing units allocated to the respective software application between the consecutive iterations.
1 Assignment
Litigations
0 Petitions
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.
190 Citations
20 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 buffers, each input buffer being provided for buffering processing load input 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 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 buffers of the plurality of input 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 and communication path connectivity for the array of processing units, the operations comprising, for each iteration of a plurality of iterations, allocating, to each software application of at least a portion of the plurality of software applications as a plurality of active software applications, a number of units of the array of processing units at least in part in accordance with a plurality of demand expressions, each demand expression of the plurality of demand expressions corresponding to a different software application of the plurality of software applications, wherein each demand expression of the plurality of demand expressions is based at least in part on a measure of an amount of the processing load input at the one or more input buffers of the respective software application, wherein, allocating results in, for at least some of the plurality of software applications, a respective one or more allocated processing units of the array of processing units, obtaining, for each software application of the plurality of active software applications, identification of one or more tasks of the respective software application, assigning a respective task of the one or more tasks of each application of the plurality of active software applications to at least one respective processing unit of the respective one or more allocated processing units in accordance with the allocating, wherein for at least a portion of the plurality of active software applications, the number of processing units allocated to the respective software application is less than a number of possible tasks of the respective software application available for assigning, and assigning comprises, for each software application of at least a portion of the plurality of active software applications, identifying at least one activating task of the one or more tasks of the respective software application not assigned to the array of processing units for execution for a current iteration of the plurality of iterations, and for each activating task of each software application of the portion of the plurality of active software applications, identifying at least one available unit of the array of processing units, each available unit corresponding to a respective deactivating task of at least one software application of the plurality of software applications, each deactivating task not assigned to the array of processing units for execution for a next iteration of the plurality of iterations, and assigning the at least one activating task to the at least one available unit, and causing connection, in accordance with the assigning, of the processing load input from each buffer of at least a portion of the plurality of input buffers to a different unit of the respective one or more allocated processing units to connect respective processing load input to a task of the one or more tasks of the respective software application that the respective processing load input is directed to; wherein, for consecutive iterations of the plurality of iterations and for at least one software application of the plurality of active software applications, a number of the one or more allocated processing units allocated to the respective software application varies with the measure of the processing load input at the one or more input buffers of the respective software application for the respective iteration, and the assigning comprises assigning a varying number of tasks of concurrent instances of the respective software application corresponding to variations in the number of processing units allocated to the respective software application between the consecutive iterations. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8)
-
-
9. A method for repeatedly reconfiguring task assignment to an array of processing units and communication path connectivity for the array of processing units, the method comprising:
-
(a) allocating, by hardware logic and/or software logic to each software application of at least a portion of the plurality of software applications as a plurality of active software applications, a number of units of the array of processing units at least in part in accordance with a plurality of demand expressions, each demand expression of the plurality of demand expressions corresponding to a different software application of the plurality of software applications, wherein each demand expression of the plurality of demand expressions is based at least in part on a measure of an amount of the processing load input at one or more input buffers of the respective software application, wherein, each software application of the plurality of software applications is provided one or more input buffers of a plurality of input buffers, each input buffer being provided for buffering processing load input directed to a respective software application of the plurality of software applications and being dedicated to the respective software application, wherein a core fabric comprises the plurality of input buffers and the array of processing units, each buffer of the plurality of input buffers being deployed in the core fabric apart from the array of processing units, and allocating results in, for at least some of the plurality of software applications, a respective one or more allocated processing units of the array of processing units; (b) obtaining, by the hardware logic and/or software logic for each software application of the plurality of active software applications, identification of one or more tasks of the respective software application; (c) assigning, by the hardware logic and/or software logic, a respective task of the one or more tasks of each application of the plurality of active software applications to at least one respective processing unit of the respective one or more allocated processing units in accordance with the allocating, wherein for at least a portion of the plurality of active software applications, a number of the one or more allocated processing units allocated to the respective software application is less than a number of possible tasks of the respective software application available for assigning, and assigning comprises, for each software application of at least a portion of the plurality of active software applications, identifying at least one activating task of the one or more tasks of the respective software application not assigned to the array of processing units for execution during a current iteration a plurality of iterations, and for each activating task of each software application of the portion of the plurality of active software applications, identifying at least one available unit of the array of processing units, each available unit corresponding to a respective deactivating task of at least one software application of the plurality of software applications, each deactivating task not assigned to the array of processing units for execution for a next iteration of the plurality of iterations, and assigning the at least one activating task to the at least one available unit; and (d) causing connection, by the hardware logic and/or software logic in accordance with the assigning, of the processing load input from each buffer of at least a portion of the plurality of input buffers to a different unit of the one or more allocated processing units of the respective software application to connect respective processing load input to a task of the one or more tasks of the respective software application that the respective input data is directed to; wherein steps (a) through (d) are repeated for the plurality of iterations wherein, for consecutive iterations of the plurality of iterations and for at least one software application of the plurality of active software applications, a number of the one or more allocated processing units allocated to the respective software application varies with the measure of the processing load input at the one or more input buffers of the respective software application for the respective iteration, and the assigning comprises assigning a varying number of tasks of concurrent instances of the respective software application corresponding to variations in the number of processing units allocated to the respective application between the consecutive iterations. - View Dependent Claims (10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
-
Specification