Method and apparatus for a general-purpose, multiple-core system for implementing stream-based computations
First Claim
1. A programmable computing device comprising:
- a plurality of processing cores coupled to each other;
a memory storing stream-domain code, the stream-domain code including a plurality of modules and a stream construct defining a stream source module and a stream destination module, wherein each module has one or more input streams or one or more output streams and each module is convertible into a task either consuming data values from an input stream or producing data values in an output stream and wherein each module has an identifier sufficient to allow access to the module;
a compiler selecting the stream source module and the stream destination module from the plurality of modules, based on the stream construct and converting the stream source module into a stream source task, the stream destination module into a stream destination task and the stream construct into a data stream originating at the stream source task and terminating at the stream destination task; and
a runtime system to select one of the plurality of processing cores and schedule the stream source task for execution on the selected one of the plurality of processing cores, detect when data values placed into the data stream by the stream source task are available to the stream destination task, select another of the plurality of processing cores and schedule the stream destination task with the data values for parallel execution on the selected another one of the plurality of processing cores.
3 Assignments
0 Petitions
Accused Products
Abstract
A method and system of efficient use and programming of a multi-processing core device. The system includes a programming construct that is based on stream-domain code. A programmable core based computing device is disclosed. The computing device includes a plurality of processing cores coupled to each other. A memory stores stream-domain code including a stream defining a stream destination module and a stream source module. The stream source module places data values in the stream and the stream conveys data values from the stream source module to the stream destination module. A runtime system detects when the data values are available to the stream destination module and schedules the stream destination module for execution on one of the plurality of processing cores.
-
Citations
63 Claims
-
1. A programmable computing device comprising:
-
a plurality of processing cores coupled to each other; a memory storing stream-domain code, the stream-domain code including a plurality of modules and a stream construct defining a stream source module and a stream destination module, wherein each module has one or more input streams or one or more output streams and each module is convertible into a task either consuming data values from an input stream or producing data values in an output stream and wherein each module has an identifier sufficient to allow access to the module; a compiler selecting the stream source module and the stream destination module from the plurality of modules, based on the stream construct and converting the stream source module into a stream source task, the stream destination module into a stream destination task and the stream construct into a data stream originating at the stream source task and terminating at the stream destination task; and a runtime system to select one of the plurality of processing cores and schedule the stream source task for execution on the selected one of the plurality of processing cores, detect when data values placed into the data stream by the stream source task are available to the stream destination task, select another of the plurality of processing cores and schedule the stream destination task with the data values for parallel execution on the selected another one of the plurality of processing cores. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 61)
-
-
31. A method of programming a computer system including a plurality of processing cores, the method comprising:
-
providing stream-domain code for execution on the plurality of processing cores, the stream-domain code including a plurality of modules and a stream construct having an associated stream source module and a stream destination module, wherein each module has one or more input streams or one or more output streams and each module is convertible into a task either consuming data values from an input stream or producing data values in an output stream and wherein each module has an identifier sufficient to allow access to the module; selecting the stream source module and the stream destination module from the plurality of modules, based on the stream construct; converting the stream source module into a stream source task and the stream destination module into a stream destination task; converting the stream construct into a data stream originating at the stream source task and terminating at the stream destination task; selecting one of the plurality of processing cores and scheduling the stream source task for execution on the selected one of the plurality of processing cores via a runtime system; detecting when data values placed into the data stream by the stream source task are available to the stream destination task; and selecting another one of the plurality of processing cores and scheduling the stream destination task with the data values for parallel execution on the selected another one of the plurality of processing cores via the runtime system. - View Dependent Claims (32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60)
-
-
62. A method of programming a computer system having a plurality of processing cores, the method comprising:
-
receiving stream-domain code specifying a plurality of module instances and/or stream expressions and a stream, each module instance and each stream expression having one or more input streams and/or one or more output streams, wherein each module instance and stream expression is convertible into a task either consuming data values from an input stream or producing data values in an output stream and wherein each module instance and stream expression has an identifier sufficient to allow access to the module instance and the stream expression, and the stream having a stream source and a stream destination, the stream source being selected from among the module and stream-expression output streams and the stream destination being selected from the module and stream-expression input streams; converting the stream source module or stream expression into a first task running on a core selected from the plurality of cores; converting the stream destination module or stream expression into a second task; converting the streams in the stream-domain code into data streams originating at the first task and terminating at the second task, wherein the data streams are organized in the same pattern as the streams in the stream-domain code and allowing the tasks to pass data amongst each other; detecting when data values placed into the data stream by the first task are available to the second task; and running the second task with the data value in parallel with the first task on a different core selected from the plurality of cores.
-
-
63. A programmable computing device comprising:
-
a plurality of processing cores coupled to each other; a memory storing stream-domain code specifying a plurality of module instances and/or stream expressions and a stream, each module instance and each stream expression having one or more input streams and/or one or more output streams, wherein each module instance and stream expression is convertible into a task either consuming data values from an input stream or producing data values in an output stream and wherein each module instance and stream expression has an identifier sufficient to allow access to the module instance and the stream expression, and the stream having a stream source and a stream destination, the stream source being selected from among the module and stream-expression output streams and the stream destination being selected from the module and stream-expression input streams; a compiler converting the stream source module or stream expression into a first task, converting the stream destination module or stream expression into a second task, and converting the streams in the stream-domain code into data streams originating at the first task and terminating at the second task; and a runtime system to select a first processing core from the plurality of processing cores to execute the first task, detecting when data values placed into the data stream by the first task are available to the second task and select a second processing core from the plurality of processing cores to execute the second task with the data values in parallel with the first task, wherein the data streams are organized in the same pattern as the streams in the stream-domain code and allowing the tasks to pass data amongst each other.
-
Specification