backward synchronization: blocking writes
demand-driven: a policy where an actor blocks on writes until the receiving actors are ready to receive
data-driven: a policy where an actor doesn't block on a write
Turing-complete: having the same expressiveness as a Turing Machine
delay: an initial token on an arc in a dataflow graph
strongly connected: having a directed arc to and from any other node
static schedule: a finite list of firings that is executed forever such that the firings on the list bring the graph back to its original state
quasi-static schedule: a finite list of annotated firings that is executed forever such that the annotations are Boolean conditions under which each firing should occur
dynamic schedule: run-time determination of which actor fires next
balance equation: an equation that relates the number of tokens produced to the number of tokens consumed along a dataflow graph arc

This implementation is dynamic => you don't know if deadlines will be met.
EXAMPLE:

P1 never blocking is legitimate but probably not useful.
What about threading on a processor via time slicing? Suppose P1 produces 10 tokens, P2 consumes 1 token. This is fair but won't execute in bounded memory.
EXAMPLE: Demand-driven
Should P1 and P2 submit demands at the same rate?
Analogy: Hole and electrons; electrons travel one way, holes the other
way to make room for the travelling electrons.
EXAMPLE: Data-driven
P1 and P2 can be fired arbitrarily.
Advantage of dataflow: there exists a firing function.
Is Homogeneous SDF Turing-complete? Note that switches and selects
are ruled out because of unpredictable consumption and production
rules.
EXAMPLE: Turing-completeness
What can you stick in the above actor to make this graph
Turing-complete? Side note: If an actor can have an unlimited number
of states then it's Turing-complete.
EXAMPLE: Implementation of a delay's initial token
Examples of stateless actors are sources and sinks.
EXAMPLE: FSM select (refer to slide lec15.fm, page 4)
Q: Is static scheduling possible for HDSDF?
A: No; It's impossible for
to have a static schedule with no delay but possible with an empty
sequence. Still, in general, no.
EXAMPLE: SDF scheduling
ABCACB... never returns to initial state.
Balance Equations
rA*1=rC*1
rA*1=rB*1
rB*2=rC*1
Solve the above set of equations. The trivial solution
rA=rB=rC=0 is the only solution.
This is unacceptable since the semantics say that there exists an
infinite stream of tokens.
No solution to the balance equations => No bounded memory solution
The denotational semantics imply an infinite sequence of tokens. The
operational semantics handle the production of a certain number of
tokens and the consumption of a certain number of tokens.
EXAMPLE: SDF scheduling
rA=rB
rB=rC
rC=rC
rA=rB=rC=i is a solution for each
i=1, 2, 3, etc. Therefore, the existence of a solution to the balance
equations is necessary but not sufficient for the existence of a
static schedule.
EXAMPLE: SDF scheduling
``enough'' initial tokens plus the existence of a non-trivial solution
=> the existence of a static schedule
Rule out negative solutions to the balance equations.
EXAMPLE: SDF scheduling
||: AABCDD :|| (using musical ``repeat'' notation) is a possible
static schedule. Multitasking is unecessary in a software
implementation of this.



Delays--Initial tokens

COMMON EXECUTION MODELS FOR DATAFLOW
SCHEDULERS
(refer to slide lec16.fm, page 2)
State of the graph is related to the number of tokens on each arc.



