Overview¶
Tasks, Modules & Sockets¶
TODO.
Sequences and Pipelines¶
TODO.
Module States & Tasks Replicability¶
In StreamPU, there are modules that are either stateful or stateless.
stateful means that it is an instance of a class that inherits from
module::Stateful class. On the other hand, a stateless module is necessarily
an instance of the module::Stateless class. The module::Stateful and
module::Stateless classes both inherit directly from the module::Module
class. All stateless modules are clonable. This means that, by default,
stateless module tasks are replicable (i.e. they can be replicated within a
sequence or pipeline stage to increase the system throughput).
It gets a little bit more complex with stateful modules. By default, a module
of this type is non-clonable (i.e. it does not implement the
module::Stateful::clone() method). In this case, the tasks that make up the
module are, by default, non-replicable. However, the designer of a stateful
module can override the module::Stateful::clone() method (basically, the
designer has to expresses how to "copy" the module). When it is done, the module
becomes clonable and, automatically, the tasks that make up a clonable
module become replicable.
Sometimes one may want to force a replicable task to avoid being replicated.
For instance, 1) for testing purposes or 2) sometimes certain tasks could be
replicated, but in the way they are used it makes no sense and would lead to
application malfunction. For this purpose, the public
runtime::Task::set_replicability(bool) method gives control to the designer.
If the boolean is set to false, then the task is forced to be
non-replicable.
Warning
If the input boolean of the runtime::Task::set_replicability(bool) method
is set to true and the corresponding module is non-clonable, the method
will fail and will throw an exception. In any cases, it will be possible to
set the boolean to false (who can do more can do less).
To summarize:
-
statelessmodule:- Always
clonable - Tasks are by default
replicable - Tasks can be forced to be
non-replicableby the designer
- Always
-
statefulmodule:- By default
non-clonable - Designer can implement the
module::Stateful::clone()method to make the moduleclonable - By default, if the
module::Stateful::clone()method is not implemented, tasks arenon-replicable - If the
module::Stateful::clone()method is implemented, tasks becomereplicableand the designer can set the replicability totrueorfalse
- By default