US 11,055,103 B2
Method and apparatus for a multi-core system for implementing stream-based computations having inputs from multiple streams
Frederick Furtek, Meno Park, CA (US); and Paul Master, Sunnyvale, CA (US)
Assigned to Cornami, Inc., Sunnyvale, CA (US)
Filed by Cornami, Inc, Sunnyvale, CA (US)
Filed on Sep. 10, 2018, as Appl. No. 16/126,918.
Application 16/126,918 is a continuation of application No. 14/492,705, filed on Sep. 22, 2014, granted, now 10,073,700.
Application 14/492,705 is a continuation of application No. 13/011,763, filed on Jan. 21, 2011, granted, now 8,843,928, issued on Sep. 23, 2014.
Claims priority of provisional application 61/297,139, filed on Jan. 21, 2010.
Prior Publication US 2019/0004813 A1, Jan. 3, 2019
This patent is subject to a terminal disclaimer.
Int. Cl. G06F 9/46 (2006.01); G06F 9/38 (2018.01); G06F 9/50 (2006.01); G06F 15/173 (2006.01); G06F 9/48 (2006.01)
CPC G06F 9/3885 (2013.01) [G06F 9/4881 (2013.01); G06F 9/505 (2013.01); G06F 9/5033 (2013.01); G06F 15/17362 (2013.01)] 15 Claims
OG exemplary drawing
 
1. A programmable computing device comprising:
a memory storing thread-domain code containing multiple threads, each thread including one or more stream-access operations, at least one operation of each thread including a task; and
a plurality of processing cores coupled to each other and the memory, wherein each of the threads is executed on one of the plurality of processing cores, wherein the task is one of a plurality of tasks associated with the thread-domain code, wherein the task is assigned to one of the processing cores, the task implementing an instance of the thread-domain code executed by the processing core, the computing device further comprising a task manager local to the assigned processing core managing the execution of the task assigned to the processing core;
wherein each stream-access operation:
specifies a programmer-declared output stream,
specifies a programmer-declared variable, and
causes a single current value of the programmer-declared variable to be inserted into the output stream; and
wherein an input stream of at least one other thread executed by one of the processing cores includes the single current values of at least two output streams of the stream-access operations of at least two threads; and
wherein, for each task of the plurality of tasks, the task manager maintains a consumer count for the input stream of a corresponding task reflecting the number of task input streams that are enabled, a producer count for an output stream of the corresponding task reflecting the number of task output streams that are enabled, an input count for the corresponding task that determines the number of task input streams that are required to be enabled in order for the corresponding task to be ready to run, an output count for the corresponding task that determines the number of task output streams that are required to be enabled in order for the corresponding task to be ready to run, and a ready to run queue of tasks ready to be executed based on comparing the consumer count with the input count and comparing the producer count with the output count for each corresponding task.