<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Automatic Software Synthesis of Static and Dynamic Dataflow Process Networks</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Omair Rafique</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Klaus Schneider</string-name>
          <email>schneiderg@cs.uni-kl.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Computer Science, University of Kaiserslautern</institution>
          ,
          <addr-line>Kaiserslautern</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <fpage>73</fpage>
      <lpage>80</lpage>
      <abstract>
        <p>-A general dataflow process network (DPN) consists of a network of actors that communicate with each other via statically determined point-to-point buffers. While the general model of computation (MoC) does not impose further restrictions, different classes of DPNs with precise MoCs have been introduced over time. These classes differ in the kinds of behaviors of the actors which affects on the one hand the expressiveness of the DPN class as well as the methods for their analysis and synthesis. A combination of particular classes of DPNs can be effectively used to model and synthesize heterogeneous parallel systems. There are design tools for synthesis that can be conveniently used for implementing individual classes of DPNs, however, they do not support the use of the combination of these DPNs. We therefore envisage a common model-based design flow that allows the modeling of a system based on a combination of particular classes of DPNs, and automatically synthesizes them for heterogeneous architectures. In this paper, we mainly present in detail how the proposed design flow facilitates the automatic synthesis of two individual classes of DPNs by using different code generators for the particular kinds of actors. We therefore first describe the proposed classes of DPNs and then present a common automatic synthesis that details the code generators and the runtime system. Finally, we demonstrate the use of our framework with a simple test case that has been modeled and synthesized individually for each employed class of DPN. Index Terms-model-based synthesis, models of computation, dataflow programming paradigm</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>
        A model of computation (MoC) precisely determines why,
when and which atomic action of a system is executed.
Dataflow process networks (DPN) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] can be used to
define such MoCs. In general, a DPN consists of a
network of autonomous process nodes (actors) that communicate
with each other via unidirectional First-In-First-Out (FIFO)
buffers. While the general model of computation does not
impose further restrictions, many different classes of DPNs
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]–[
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] have been introduced. Each class defines a specific
MoC by specifying a particular execution and communication
semantics. Based on that, these classes differ in the kinds of
behaviors of the actors which determines the expressiveness
of the DPN class as well as the methods for their analysis
(predictability) and synthesis (efficiency).
      </p>
      <p>
        A heterogeneous computing system can accompany
different devices including single-core and multi-core processors
with application-specific hardware. At the level of its software
architecture, it may consist of many components concurrently
running on these devices that interact with each other via
particular MoCs. To develop such systems using DPNs, a
heterogeneous combination of particular classes of DPNs can
be effectively used. There exist design tools for modeling like
Ptolemy [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] and FERAL [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] that support the use of a
combination of particular MoCs for the modeling and simulation
of heterogeneous architectures. However, the existing design
tools for synthesis generally incorporate a particular MoC,
usually restricted to a specific class of DPN. Each framework
is therefore dedicated to demonstrate the artifacts exhibited
by a specific MoC. For instance, a framework based on the
synchronous dataflow (SDF) can be conveniently used for
modeling and implementing synchronous behaviors. Similarly,
the others with a more generalized DPN MoC allow one
to capture more flexible behaviors. In order to model and
implement heterogeneous behaviors based on the combination
of these DPNs, a common synthesis design flow is needed.
      </p>
      <p>
        We therefore envision a common model-based design flow
that supports the modeling of a system based on a
heterogeneous combination of particular classes of DPNs, and
automatically synthesizes them to implementations for
crossvendor heterogeneous architectures. In a nutshell, we envision
a model-based automatic synthesis that implements models
using a combination of particular MoCs on heterogeneous
hardware. Based on this overall vision, in this paper, we present
in detail how the proposed synthesis design flow integrates
different individual classes of DPNs in a common framework.
The method mainly focuses on the software synthesis of two
different classes of DPNs that uses different code
generators for the particular kinds of actors. In general, efficiently
synthesizing DPNs for different architectures is a challenging
task as the architecture specification and the runtime for each
target hardware has to be taken into account. To this end, the
common abstraction provided by the open computing language
(OpenCL) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] for cross-vendor heterogeneous architectures
can be effectively used for implementing different classes of
DPNs. The proposed framework employs a subset of the CAL
actor language (CAL) [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] to model behaviors, and logically
uses OpenCL as an operating system (OS) to implement
modeled behaviors on any OpenCL abstracted target hardware.
      </p>
      <p>In summary, we make the following contributions in this
paper:</p>
      <p>We present a model-based design flow that allows us
to model and synthesize two different classes of DPNs,
namely the static (synchronous) dataflow (SDF) and the
dynamic dataflow (DDF).</p>
      <p>Using a formal description of a general dataflow network,
we elaborate the specific interpretations of the proposed
MoCs.</p>
      <p>We present the individual code generators of the proposed
SDF and the DDF actors.</p>
      <p>We demonstrate the applicability of our framework with
a simple test case, modeled and synthesized twice, once
based on the SDF and second using the DDF.</p>
      <p>We present experimental results to analyze and compare
the code size, the total network build time, and the total
execution time of synthesized implementations.</p>
      <p>
        Dynamic DPNs are more general in that the order in which
actors are triggered for execution, as well the number of
tokens produced/consumed by each actor on each execution
is decided dynamically at runtime. This allows conditional or
data dependent executions of actors, in particular, each actor
can produce and consume different numbers of tokens in every
firing. This generalization results in higher expressiveness and
flexibility, but makes the analysis more difficult. Examples
of dynamic DPNs are: Kahn process networks (KPN) [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ],
Boolean dataflow (BDF) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], and dynamic dataflow (DDF)
[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <sec id="sec-1-1">
        <title>B. Synthesis of Different Classes of DPNs</title>
      </sec>
      <sec id="sec-1-2">
        <title>A. Dataflow Process Networks</title>
        <p>II. BACKGROUND
This section first discusses in general the dataflow process
networks (DPNs) and their synthesis, and then presents the
related synthesis frameworks.</p>
        <p>
          Based on the stated contributions, this paper mainly
emphasizes on the modeling and software synthesis of behaviors
based on individual classes of DPNs. Nevertheless, it also
provides the basis for the future work to support behaviors
based on heterogeneous combination of these DPNs.
A dataflow process network (DPN) [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ], [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] models a system
as a directed graph that consists of nodes (actors) and edges
(FIFO buffers). Actors can be viewed as concurrent processes
that perform computations and exchange data only through the
unidirectional FIFO buffers. Each actor performs a
computation by firing, where it consumes data tokens from its input
buffers and produces data tokens for its output buffers. The
firing of an actor is generally triggered by the availability of
data.
        </p>
        <p>
          Although the general model of computation (MoC) does
not impose any further restrictions, many different classes of
DPNs have been introduced over time [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]–[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ], [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. Each class
specifies a particular execution and communication semantics
that governs the firing of actors and the communication over
FIFO buffers. To this end, these classes mainly differ based
on how each actor triggers an execution, and based on how
each actor execution consumes/produces data, i.e., either fixed
or dynamic. Based on these factors, these classes can be
categorized into static and dynamic ones.
        </p>
        <p>Static DPNs are generally characterized as the ones where
the number of tokens produced/consumed by each actor on
each execution is specified statically at compile time, and
hence actors can be scheduled statically at compile time. On</p>
      </sec>
      <sec id="sec-1-3">
        <title>C. Related Frameworks</title>
        <p>
          the one hand, these characteristics allow powerful design-time
analysis techniques (e.g. for predictability and decidability), In this section, we present a few examples of dataflow oriented
but on the other hand they limit the expressiveness by ex- synthesis frameworks:
cluding dynamic behaviors (like select and switch nodes). In [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], the HW/SW co-design methodology based on CAL
Examples of static DPNs are: synchronous dataflow (SDF) [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], is built as an Eclipse plug-in on top of ORCC [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. The final
homogeneous synchronous dataflow (HSDF) [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] and cyclo- implementations provided by this framework are based on a
static dataflow (CSDF) [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. dynamic DPN.
        </p>
        <p>
          As discussed, the existing classes of DPNs differ in the kinds
of behaviors of the actors which affects on the one hand the
expressiveness of the DPN class as well as the methods for
their analysis and synthesis. The design tools for modeling
like Ptolemy [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] and FERAL [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] support the modeling and
simulation of behaviors based on various MoCs, including
different classes of DPNs. These frameworks provide a common
platform to compose different models under the supervision
of software components called directors. On the contrary,
the design tools for synthesis are so far limited to specific
classes of DPNs i.e., each tool is dedicated to a particular
class of DPN. Each framework therefore allows one to model
and synthesize behaviors based on a specific MoC, i.e., the
underlying class of DPN. To this end, a design tool that
only supports a static class of DPN, can be conveniently
used for the modeling and synthesis of static (synchronous)
behaviors. Similarly, a design tool based on a dynamic class
of DPN, can be conveniently employed for dynamic and
asynchronous behaviors. However, in order to model and
synthesize heterogeneous behaviors based on the combination
of particular classes of DPNs, a common synthesis design flow
is still needed that can support these DPNs.
        </p>
        <p>We therefore propose the idea of a common automatic
synthesis design flow that allows us to model behaviors based
on particular classes of DPNs, and automatically synthesizes
them for heterogeneous architectures, mainly by using a
combination of different code generators. To this end, this
work presents in detail how the proposed approach supports
the synthesis of two different classes of DPNs, namely the
SDF from static DPNs and the DDF from dynamic DPNs.</p>
        <p>This paper mainly focuses on the individual code generators,
however, also forms the basis for the future work to use
the combination of these generators to support heterogeneous</p>
        <p>DPNs.</p>
        <p>
          The DAL framework [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] presents a scenario-based design
flow for mapping streaming applications onto heterogeneous
systems. Behaviors are modeled based on Kahn process
networks (KPNs) [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] and a finite state machine.
        </p>
        <p>
          The framework presented in [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ] introduces a design flow
for executing applications specified as synchronous dataflow
(SDF) graphs on heterogeneous systems using OpenCL.
Similarly, the work presented in [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] provides an approach to
translate behaviors modeled with CAL into programs running
some of the computations on OpenCL. The methodology
incorporates static analysis and confined to the synthesis of
behaviors modeled with the SDF MoC.
        </p>
        <p>
          Another dataflow oriented framework [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ], [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] proposes a
MoC as a symmetric-rate dataflow, a restriced form of SDF,
where the token production rate and the token consumption
rate per FIFO channel is symmetric.
        </p>
        <p>Therefore, the existing frameworks based on DPNs
generally provide a single dedicated code generator for supporting
synthesis of behaviors based on a particular MoC.</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>III. THE PROPOSED DESIGN FLOW</title>
      <sec id="sec-2-1">
        <title>A. Overview</title>
        <p>
          The proposed design flow is systematically organized in two
stages of modeling and synthesis, as shown in Fig. 1. At
first, the modeling stage employs a subset of the CAL actor
language (CAL) [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] to model behaviors. CAL is a dataflow
language that allows one to model behaviors as DPNs. The
main reason for choosing CAL is that it does not refer to any
particular class of DPN, and instead offers an abstract notion of
an actor to model a behavior based on various classes of DPNs
[
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]. Therefore, it is conveniently employed by the framework
to model behaviors based on the proposed classes of DPNs
(detailed in Section III-B). Since a general discussion of CAL
is out of scope for this paper, we refer to [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] for further
details.
        </p>
        <p>
          For the synthesis stage, the framework logically incorporates
the OpenCL specification as an operating system (OS) mainly
because of two reasons: First, it provides an abstraction for
heterogeneous hardware, and second, the framework uses this
abstraction in the composition of the synthesis where different
components implement different low-level details. To this end,
OpenCL distinguishes between a host and kernels where the
host is a centralized entity that is connected to one or more
compute devices (CPU, GPU etc.) and is responsible for the
execution of kernels. Kernels are C-like functions that actually
implement the abstract behavior of the system or part of the
system. Therefore, the framework adopts this idea of hosts and
kernels for the synthesis as shown in Fig 1. Since a general
discussion of OpenCL is out of scope for this paper, we refer
to [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] for further details.
        </p>
        <p>Overall, the modeled behavior based on any proposed class
of DPN is provided to the synthesis stage. The synthesis
stage incorporates an individual code generator for each DPN
class (detailed in Section III-C1), and uses a centralized host
(detailed in Section III-C2) that provides different components
(including the runtime system) to finally implement the
modeled behavior based on the underlying DPN class (MoC) on
the targeted OpenCL-abstracted hardware.</p>
      </sec>
      <sec id="sec-2-2">
        <title>B. The Proposed Models of Computation</title>
        <p>In this section, we first formally describe a general dataflow
network based on the used subset of CAL, which is then used
to specify the execution semantics of the proposed classes of
DPNs, namely the SDF MoC and the DDF MoC.</p>
      </sec>
      <sec id="sec-2-3">
        <title>1) Formal Description of the Proposed Model: A dataflow</title>
        <p>network is an an ordered pair @ = (F; A), consisting of
FIFO buffers F and actors A. F (fi; og N) are the
available input and output FIFO buffers. Every DPN has a
finite number of FIFO buffers F. Input FIFO buffers are defined
by Finput = F \ (fig N), and output FIFO buffers are
defined by Foutput = F \ (fog N). A is the finite set of
actors. Each actor (Fin,Fout; GA) 2 A also has a subset of
input FIFO buffers Fin Finput, a subset of output FIFO
buffers Fout Foutput, and an associated set of
guardedactions GA. The input and output FIFO buffers of an actor are
always mutually exclusive, i.e, Fin \Fout = . In general, each
DPN actor has firing rules that determine when enough tokens
are available to enable that actor. Also, a computation an actor
can perform is determined by a function that consumes a finite
number of input tokens and produces a finite number of output
tokens. To support the modeling of different kinds of behaviors
(e.g., synchronous and asynchronous), we further decompose
and organize these firing rules and computations of actors in a
set of what we call guarded-actions GA. Each guarded-action
ga (Fi; Fo; V~i; V~o; ; ) 2 GA has a subset of input FIFO
buffers Fi Fin, a subset of output FIFO buffers Fo Fout,
a set consisting of sequences of input token variables V~i of
Fi, a set consisting of sequences of output token variables V~o
of Fo, and two functions and .</p>
        <p>Explanation. The code template for a generic actor ’a’ is listed
in Listing 1: An actor ’a’ with ’m’ inputs and ’n’ outputs
is declared with a finite set of input FIFO buffers (Fin1 to
Finm ) and a finite set of output FIFO buffers (Fout1 to Foutn )
with a data type (Line 1). The behavior of this generic
actor is specified by a set of actions GA, where each action
ga upon execution can consume input tokens, perform some
computations on consumed tokens and produce output tokens.
For brevity, we list a single example action designated by ’ga1 ’
(Lines 3-12). The action is declared with a finite set of ’t’ input
FIFO buffers Fi = fFi1 , Fi2 ..., Fit g (Line 3), and a finite set
of ’l’ output FIFO buffers Fo = fFo1 , Fo2 , ..., Fol g (Line
4). Input FIFO buffers Fi are declared with their respective
sequences of input token variables V~i = fVi1 ; Vi2 ; :::; Vit g.
Each sequence Vij 2 V~i then consists of a finite number of
input token variables. For instance, if Fij has a sequence of
’p’ tokens per action execution, the corresponding set of local
variables is defined by Vij = fvij 1 ; vij 2 ; :::; vij p g (Line 3).
The number of variables (’p’ in this case) determines the token
consumption rate of Fij per execution of an action. Similarly,
output FIFO buffers Fo are declared with their respective
sequences of output token variables V~o = fVo1 ; Vo2 ; :::; Vol g.</p>
        <p>~
Each sequence Voj 2 Vo then consists of a finite number of
output token variables. For instance, if Foj has a sequence of
’h’ tokens per action execution, the corresponding set of local
variables is defined by Voj = fvoj 1 ; voj 2 ; :::; voj h g (Line 4).
The number of variables ’h’ denotes the token production rate
of Foj per execution of this action.</p>
        <p>Listing 1: Code template for a generic actor ’a’.
1 actor a() Fin1 , ... Finm ==&gt; Fout1 , ... Foutn :
2 //guarded action example
3 ga1 : action Fi1 :[vi1 1 , vi1 2 ... vi1 p ], ... Fit :[vit 1 , vit 2 ... vit q ]
4 ==&gt; Fo1 :[vo1 1 , vo1 2 ... vo1 g ], ... Fol :[vol 1 , vol 2 ... vol h ]
5 guard
6 vi1 1 &gt; 1 and vit q &lt; 0 and vit 1 ...
7 var
8 vo1 1 , vol h ...
9 do
10 .v..o1 1 := vi1 1 *2 + vi1 1 *vit 1 ...
11
12 end
13 ...
14 gax :
15 ...
16 end</p>
        <p>The function : EB(V ) ! B is a Boolean function of
an action that evaluates a finite set of Boolean expressions
EB = fEB1 ; EB2 ; :::; EBn g applied on the individual input token
variables, to a Boolean (B = f0; 1g), where V S V~i. :
Vi ~ jFoj is a firing function of an action that upon firing
~ jFij ! Vo
consumes tokens V~i from Fi and produces tokens V~o to Fo.</p>
        <p>Execution Conditions. There exist two minimal
conditions (mc) for any action ga to fire. (1) There should be
sufficient input tokens V~i available to bind Fi to appropriate
values. (2) There should be sufficient room for the output
tokens V~o in their respective output FIFO buffers Fo. For an
action ga that requires input tokens to have particular values,
an additional condition can be specified using a guard (Line
5). A guard consists of a set of Boolean expressions (EB) that
are applied on a set of individual input token variables V
(Line 6). The combined evaluation of EB is represented by
the function . The computations an action can perform in
the form of the firing function are defined within do/end
blocks (Lines 9-12).</p>
        <p>Restrictions. Based on the used subset of CAL, we also
consider following restrictions: (1) The actions (GA) are
always evaluated for execution sequentially in the same order of
their definitions. (2) Generally, Fi and Fo can be overlapping
across different actions, however, guard-conditions are always
exclusive. This ensures that for each execution of an actor, the
actions will never compete for an execution for any set of data
values (tokens).</p>
        <p>
          2) The SDF Execution Semantics: The SDF MoC [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]
allows one to model static (synchronous) behaviors. It is
a restricted class of DPN in the sense that each actor has
a constant consumption/production token rate per execution
(data rate) as well as the topology of data flow across actors
(data path) is fixed. For modeling static behaviors using the
proposed model, an additional restriction is considered in that
Fi and Fo across actions are always unique.
        </p>
        <p>Each actor (2 A) in @ is triggered for an execution if and
only if sufficient input data is available for all its
guardedactions and sufficient space is available for the outputs of
those actions. The data rate and the data path of an actor
in each execution remain the same. Upon an execution, for
each guarded-action (2 GA) of an actor, V~i is consumed,
and guard is evaluated using the function . In case if guard
holds, the corresponding action is executed which performs
a computation, and finally produces an output V~o of that
action based on the firing function . Overall, each actor
execution consumes a fixed number of tokens from all input
FIFO buffers (Fin), and produces a fixed number of tokens
for all output FIFO buffers (Fout). Hence, the proposed SDF
MoC is intrinsically deterministic.</p>
      </sec>
      <sec id="sec-2-4">
        <title>3) The DDF Execution Semantics: The DDF MoC [10]</title>
        <p>allows one to model dynamic and asynchronous actors. To
this end, each actor (2 A) in @ is triggered for an execution
if there is input data available for any input FIFO buffer and
if space is available for any output FIFO buffer of that actor.
The data rate and the data path of an actor can change per
execution depending on which action is executed. At first, for
all actions GA of an actor, V~i is peeked from Fi, and Fo
is checked for space based on V~o. Next, for each ga 2 GA
of an actor, guard is evaluated using the function , and an
additional implication ( ; mc) ) V is evaluated, where
represents a combined evaluation of all Boolean expressions,
and mc represents the evaluation of minimal conditions to
fire an action as discussed in Section III-B1. Based on that,
this implication that forms the basis of making decisions
dynamically at runtime about whether to execute an action
and consume/produce data tokens, is evaluated based on the
conditions as shown in Table I. In case if the implication is
evaluated to one, the corresponding action is executed which
consumes the peeked tokens from Fi, performs a computation,
and finally produces output tokens in Fo of that action. On
the contrary, if the implication is evaluated to zero i.e., if at
least one of the minimal conditions is false, the peeked tokens
from Fi are not consumed and the action is not executed.
Finally, if is evaluated as false for an action, the implication
is evaluated to a don’t-care state ’x’.</p>
        <p>As each actor upon execution is permitted to check Fin by
peeking before it can be finally consumed, thus allows a
nonblocking read. This makes the proposed MoC more flexible,
however, may lead to non-deterministic behaviors e.g., a
nondeterminate merge.</p>
        <p>Listing 2: SDF based generated code of an action from the
actor ’a’ as illustrated in Listing 1.</p>
        <p>/*ga by ga execution:*/
/* ga1 /*
/*step1: read all inputs for an action*/
fifoRead(Fi1 , buf Fi1 , p, gid, &amp;cnt Fi1 );
.v..i1 1 = buf Fi1 [gid*p + cnt Fi1 .current count];
fifoRead(Fit , buf Fit , q, gid, &amp;cnt Fit );
vit q = buf Fit [gid*q + cnt Fit .current count];
/*step 2: evaluate guard expressions EB*/
guard vi1 1 = (expression) ? true: false;
...
guard vit q = (expression) ? true: false;
/*step 3: execute guarded action*/
if(guard vi1 1 &amp;&amp; guard vit q &amp;&amp; ...) f
/*do end*/
vo1 1 = vi1 1 *2 + vi1 1 *vit 1 ... ;
bytes = fifoWrite(Fo1 , Vo1 , ..., gid, &amp;cnt Fo1 );
...</p>
        <p>g</p>
      </sec>
      <sec id="sec-2-5">
        <title>C. Synthesis</title>
        <p>As discussed, the synthesis stage uses different components, as
shown in Fig 1, and finally implements the modeled behavior
based on the underlying DPN class (MoC) on the targeted
OpenCL-abstracted hardware. This section explains in detail
different components of the synthesis stage.</p>
        <p>1) Code Generators: Each code generator is a core
component of the framework that generates code strictly based on
the semantics of the underlying DPN class and the OpenCL
specification. Based on the OpenCL paradigm, the code
generator supplied with a CAL description generates an OpenCL
kernel for each actor of the network, as shown in Fig 1. This
section explains the code generation of the kernels based on
the proposed classes of DPNs, namely the SDF and the DDF,
as were introduced in Section III-B.</p>
        <p>Fig. 3: The algorithm for the DDF MoC based code generation.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>a) Code Generation SDF: The algorithm for the code</title>
      <p>generation based on the proposed SDF MoC is shown in Fig. 2.</p>
      <p>Assuming that the generic actor ’a’ as illustrated in Listing 1,
is a synchronous (static) one, the generated code based on
this algorithm is depicted in Listing 2. For brevity, we only
show the generated code for the example action ’ga1 ’ from
Listing 1.</p>
      <p>(1) The code generator sequentially iterates through
available actions (GA) of an actor, where for each ga it proceeds as
follows: (2) It generates code that read (consume) all the input
tokens V~i from Fi. For this purpose, it inserts a fifoRead for
each input FIFO buffer for reading tokens, and generates code
that assign each token to its corresponding variable (Lines
38). (3) Next, the code generator generates code for evaluating
all the Boolean expressions EB of a guard (Lines 9-12). (4)
Finally, it generates code that evaluate the combined Boolean
result (Line 14), and if true, execute the corresponding action
where all the defined computations are performed including
writing output tokens to the associated output FIFO buffers
(Lines 15-18). For each output FIFO buffer, a fifoWrite is
inserted for writing tokens based on the specified output token
variables Voj . Overall, the code generator follows a ga-by-ga
execution scheme until there is no more ga left.</p>
      <p>b) Code Generation DDF: The algorithm for the DDF
MoC based code generation is shown in Fig. 3. Using this
algorithm, the generated code for the generic actor ’a’ as
illustrated in Listing 1, is listed in Listing 3. For brevity, we
only show the generated code related to the example action
’ga1 ’ from Listing 1.</p>
      <p>(1) The code generator first generates code that peek all
the input tokens V~i for all actions from all the input FIFO
buffers Fin. To this end, for each input FIFO buffer, it inserts a
fifoPeek (Line 2), and generates code that assign each token to
its corresponding token variable (Line 3). (2) It then generates
code that check if there is sufficient space available in each
output FIFO buffer based on the number of output token
variables. For this purpose, a CTRLBITDynamic with a
parameter ”get” is used for each output FIFO buffer (Lines 5-7).
(3) The code generator then proceeds in a ga-by-ga execution
scheme until there is no more ga left. For each ga in an actor,
the code generator works as follows: (4) It generates code that
evaluate all the Boolean expressions EB of a guard (Lines
1012). (5) Next, it generates code that determine the implication
( ; mc) ) V . For this purpose, the evalImplication( , mc)
is inserted that finally evaluates the implication (Lines 13-14).
(6) Next, the code generator generates code that execute an
action based on the evaluated implication from (5). To this
end, the generated code uses the results of the implication Fig. 4: Actor’s invocation-mechanism.
to decide whether to execute an action or not (Lines 15-27).</p>
      <p>If the final result evaluates to ’0’, it implies that although
holds true, at least one of the input/output FIFO buffers of object for each actor that provides the desired information
that action does not have sufficient data/space available. For to the host such as, the associated FIFO buffers, the actor’s
this purpose, a CTRLBITDynamic with a parameter ”auto” status (idle, running or blocked), the associated kernel, etc.
is used (Line 17), that determines whether each input/output Moreover, the host also creates a Device-Queue using the
FIFO buffer has sufficient data/space or not, and updates the OpenCL specification that lists all the available devices of
buffer accordingly. On the contrary, if the final result evaluates the target hardware. Each element of this queue provides a
to ’1’ (Line 20), it implies that an action is ready to execute. command queue of a device, where the actors can be mapped
To this end, the corresponding action is executed where all the for execution as shown in Fig. 4. Each command queue can
defined computations are performed including writing output represent a complete device (e.g., a CPU) or even a compute
tokens to the associated output FIFO buffers (Lines 21-26). For unit of that device (e.g., a CPU-core).
each output FIFO buffer, a fifoWrite is used for writing tokens The Runtime-Manager, as shown in Fig. 1 and Fig. 4,
based on the specified output token variables Voj (Line 23). is a part of the host that exploits different components and
Similarly for each input FIFO buffer, a CTRLBITDynamic provides: the schedulers for scheduling actors based on the
with a parameter ”clear” is used to update the buffer for proposed SDF and the DDF MoCs, the communication
mechconsumed tokens (Line 25). anism between the host and kernels, a dispatcher for mapping
actors to devices, and the status update mechanism using
Listing 3: DDF based generated code of an action from the specialized callbacks.
actor ’a’ as illustrated in Listing 1. Scheduling and dispatching. As the main vision of the
1 /*peek all input ports for all actions. Returns ctrl bits automatically*/ proposed design flow is to support the heterogeneous
com23 cvtir1l 1Vi=1 b=uffifFoPi1ee[gki(dF*ip1 +,bcunft FFii11,.cpu,rgreidn,t &amp;cocunntt]F; i1 ); bination of particular DPNs, we developed schedulers for the
4 ... used classes of DPNs using a common dynamic round robin
56 /c*tralllVoou1tpu=t CctTrlRbLitBsITfoDr ysnpaamceicc(hFeoc1k*,/”get”, Fo1 &gt;tail + gid, &amp;cnt Fo1 , g); scheduling scheme. Based on the used MoC, the
Runtime7 ... Manager invokes the corresponding scheduler that iterates
89 //**ggaa1 b/*y ga execution:*/ through the Actors-Queue in a round robin fashion, and looks
10 /*step 1: evaluate guard expressions EB and determine action implication*/ for an actor that is ready for execution. To this end, the
1112 .g..uard vi1 1 = (expression) ? true: false; scheduler based on the proposed SDF MoC examines each
13 ev impl g a 1 = evalImplication(guard vi1 1 &amp;&amp; guard vit q ..., actor based on the semantics explained in Section III-B2.
1154 /c*trslteVpi21: e&amp;x&amp;ecuctterlgVaitby&amp;(&amp;;cmtrlc)V)o1 V&amp;&amp;(incttrhleVoorld)e;r: ’0’, ’1’)*/ Similarly, the scheduler based on the proposed DDF MoC
16 if(ev impl g a 1 == ’0’)f tests each actor for execution based on the semantics discussed
1187 .C..TRLBITDynamic(Fi1 , ”auto”, Fi1 &gt;head + gid, &amp;cnt Fi1 , p); in Section III-B3. Following the underlying semantics, the
19 g invoked scheduler fetches a ready actor from the list.
Re2210 if(evviom1p1l =g vai11 1=*=2’1+’)vfi1 1 *vit 1 ... ; gardless of which scheduler is evoked, the Runtime-Manager
22 ... then examines the Device-Queue and finds the device with
2243 .b..ytes = fifoWrite(Fo1 , Vo1 , ..., gid, &amp;cnt Fo1 ); the least weight (i.e., a device assigned with least number of
25 CTRLBITDynamic(Fi1 , ”clear”, Fi1 &gt;head + gid, &amp;cnt Fi1 , p); actors), and dispatches the fetched actor on that device. The
2267 g ... goenntehreatuesdekdeMrneolCo.fAthsethdiissppaatpchereddoacetsonroist tfhoecnusexoencuptreedsebnatsinedg
2) Centralized Host: As shown in Fig. 1, the centralized efficient mapping of executions on devices, therefore, a simple
host of the framework is further composed of essential com- weighted dispatching scheme is employed.
ponents that work together for implementing low-level details Communication and the status update mechanism. The
such as the scheduling policy, the communication mechanism, communication between the host (FIFO buffers) and kernels is
resource allocation, etc. One of such components is a queue of realized using OpenCL buffers. For each bounded FIFO buffer,
actor objects denoted as Actors-Queue, generated by the code an OpenCL buffer is created with the same structure and size
generator for the host. The Actors-Queue contains a special of the FIFO buffer. Moreover, a status update mechanism is
developed using callbacks as shown in Fig. 4. The
RuntimeManager generates a callback interface each, for every existing
device in the Device-Queue. The scheduler sets up a callback
event for each fetched actor and links it with the callback
handler of the device where it is dispatched. Hence, the
completion of the kernel of the dispatched actor automatically
notifies the Runtime-Manager by invoking the callback handler
of the used device. The callback handler performs a set of tasks
including: retrieving data from the kernel (OpenCL buffers),
updating all the FIFO buffers of the actor, updating the
ActorsQueue as well as device’s load, updating the OpenCL buffers
and so on. The FIFO buffers are updated differently for the
proposed SDF and the DDF MoC. Based on the SDF MoC,
the data rate of an actor remains fixed in each execution, and
therefore each FIFO buffer is simply updated based on the
specified static data rate. On the contrary, based on the DDF
MoC, the data rate of an actor can change per execution.</p>
      <p>Therefore, the data rate of each FIFO buffer per execution
is first computed and finally each FIFO buffer of the actor is
updated accordingly.</p>
    </sec>
    <sec id="sec-4">
      <title>IV. TEST CASE: THE CONCEPTCAR</title>
      <p>The ConceptCar is an experimental vehicle with the objective
of testing and verifying modern future car features by
deploying different classes of applications. The ConceptCar currently
has 8 different ECUs, where each ECU is responsible for a
specific operation.</p>
      <sec id="sec-4-1">
        <title>A. Test Application: Dataflow Emulation of the Speedometer</title>
        <p>To validate the ability of the framework to produce
implementations based on employed MoCs, we present a preliminary test
case, namely the dataflow emulation of the Speedometer. The
Speedometer is an application originally developed for one of
the ECUs of the ConceptCar, namely the sensor board steering
ECU. The basic hardware design of this application is shown
in Fig. 5, where the main idea is to retrieve the frequency
of pulses from the sensors (photo-transistors) attached to the
front-right (FR) and rear-left (RL) wheel, and to compute
the current speed accordingly. The Speedometer accounts
for the over-speeding by turning the LED indicator on. The
dataflow model for emulating the Speedometer behavior is
shown in Fig. 6. The actors S1 and S2 provide sampled sensor
data, measured by the hardware counters of the sensor board
ECU, and collected through the centralized CAN bus of the</p>
        <p>Fig. 7: Code size and network build time.</p>
        <p>ConceptCar. Based on this data, the actor F1 computes the
current speed by using the algorithm developed for the sensor
board ECU. Next, the measured speed (in meters per second) is
tested by the actor F2 against a threshold value for identifying
over-speeding. Finally, the actor A1 displays the over-speeding
status based on the data values provided by F2. Each modeled
behavior of the Speedometer based on the individual class,
i.e., the SDF and the DDF, is then synthesized to the
corresponding implementation. The generated implementations are
executed on the OpenCL-abstracted target hardware and the
experimental results are collected.</p>
      </sec>
      <sec id="sec-4-2">
        <title>B. Experimental Results</title>
        <p>As discussed, dataflow behaviors of the Speedometer are
synthesized by the proposed framework to different
implementations based on the proposed SDF and the DDF MoC. This
preliminary test case thus allows us to observe and analyze
the generated implementations for the resulting code size, the
total network build time, and the total execution time taken
by the complete network for the specific sample sizes.</p>
        <p>To this end, the generated code size of each dataflow actor
and the total build time for the complete network is depicted
in Fig. 7. In contrast to the proposed SDF MoC, where the
data rate of each actor per execution is specified statically at
compile time, the proposed DDF MoC offers a more flexible
semantics, where the decisions on whether to execute actions
and consume/produce data are taken dynamically at runtime.
Consequently, the latter one accommodates additional code
for writing the consumption/production status of data tokens
Fig. 8: SDF vs DDF.
for each execution of an actor at runtime. This overhead
can therefore be observed from the number of lines of the
generated code for each actor and the total network build time
for each implementation, as shown in Fig. 7. The generated
code based on the DDF MoC for the complete network is
approximately 40% greater than based on the SDF MoC,
resulting in an additional build time overhead of more than
115%.</p>
        <p>Moreover, to analyze and to compare the performance of the
proposed MoCs of the framework, the total execution time (in
milliseconds) for the complete network is measured against the
number of samples (sensor data), as shown in Fig. 8. Based
on that, the additional runtime overhead associated with the
DDF MoC is propagated to the total execution time of the
network, resulting in elevated execution times. As the number
of samples increases, this effect induced by the overhead can
be clearly observed as shown in Fig. 8. The proposed DDF
MoC although offers semantics to model more flexible and
data dependent behaviors, but at the cost of the additional
runtime overhead. Therefore, it exhibits a trade-off between
flexibility and overall performance.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>V. CONCLUSIONS AND FUTURE WORK</title>
      <p>In this paper, we have presented an automatic model-based
design flow to provide synthesis of dataflow behaviors based
on the synchronous dataflow (SDF) and the dynamic dataflow
(DDF) MoC. The complete design flow including modeling,
synthesis and the execution has been explained in detail. To
this end, an abstract notion of a dataflow network is introduced
which then used differently to formally explain the proposed
classes of DPNs. An abstract notion of an actor is used
to describe in detail the code generators of the considered
MoCs. The complete synthesis scheme including the runtime
manager is explained, where all the low-level implementation
details are presented. We demonstrated the proposed synthesis
design flow by a preliminary test case based on an automotive
research platform. The experimental results are carried out
based on the code size, the network build time and the total
execution time for each implementation.</p>
      <p>Overall, the presented work emphasized on the synthesis
of individual classes of DPNs. Future work will support the
synthesis of heterogeneous DPNs, i.e., where a combination
of different DPN actors is allowed. Also, we plan to extend
the framework with further classes of DPNs.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>J.</given-names>
            <surname>Dennis</surname>
          </string-name>
          , “
          <article-title>First version of a data-flow procedure language,” in Programming Symposium, ser</article-title>
          . LNCS, B. Robinet, Ed., vol.
          <volume>19</volume>
          . France: Springer,
          <year>1974</year>
          , pp.
          <fpage>362</fpage>
          -
          <lpage>376</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>G.</given-names>
            <surname>Kahn</surname>
          </string-name>
          and D. MacQueen, “
          <article-title>Coroutines and networks of parallel processes</article-title>
          ,” in Information Processing,
          <string-name>
            <given-names>B.</given-names>
            <surname>Gilchrist</surname>
          </string-name>
          , Ed. North-Holland,
          <year>1977</year>
          , pp.
          <fpage>993</fpage>
          -
          <lpage>998</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.</given-names>
            <surname>Engels</surname>
          </string-name>
          , G. Bilsen,
          <string-name>
            <given-names>R.</given-names>
            <surname>Lauwereins</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Peperstraete</surname>
          </string-name>
          , “
          <article-title>Cyclo-static dataflow</article-title>
          ,” in International Conference on Acoustics, Speech and
          <string-name>
            <given-names>Signal</given-names>
            <surname>Processing</surname>
          </string-name>
          . Michigan, USA: IEEE Computer Society,
          <year>1995</year>
          , pp.
          <fpage>3255</fpage>
          -
          <lpage>3258</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>E.</given-names>
            <surname>Lee</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Messerschmitt</surname>
          </string-name>
          , “
          <article-title>Synchronous data flow</article-title>
          ,
          <source>” Proceedings of the IEEE</source>
          , vol.
          <volume>75</volume>
          , no.
          <issue>9</issue>
          , pp.
          <fpage>1235</fpage>
          -
          <lpage>1245</lpage>
          ,
          <year>September 1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>J.</given-names>
            <surname>Buck</surname>
          </string-name>
          , “
          <article-title>Scheduling dynamic dataflow graphs with bounded memory using the token flow model</article-title>
          ,
          <source>” Ph.D. dissertation</source>
          , University of California, California, USA,
          <year>1993</year>
          , phD.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Eker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Janneck</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Liu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Liu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Ludvig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Neuendorffer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Sachs</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Xiong</surname>
          </string-name>
          , “
          <article-title>Taming heterogeneity - the Ptolemy approach</article-title>
          ,
          <source>” Proceedings of the IEEE</source>
          , vol.
          <volume>91</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>127</fpage>
          -
          <lpage>144</lpage>
          ,
          <year>January 2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>T.</given-names>
            <surname>Kuhn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Forster</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Braun</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Gotzhein</surname>
          </string-name>
          , “
          <article-title>FERAL - framework for simulator coupling on requirements and architecture level,” in Formal Methods and Models for Codesign</article-title>
          . Portland, USA: IEEE Computer Society,
          <year>2013</year>
          , pp.
          <fpage>11</fpage>
          -
          <lpage>22</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>J.</given-names>
            <surname>Stone</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Gohara</surname>
          </string-name>
          , and G. Shi, “
          <article-title>OpenCL: A parallel programming standard for heterogeneous computing systems,” Computing in Science and Engineering</article-title>
          , vol.
          <volume>12</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>66</fpage>
          -
          <lpage>73</lpage>
          , May-June
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>J.</given-names>
            <surname>Eker</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Janneck</surname>
          </string-name>
          , “
          <article-title>CAL language report</article-title>
          ,” EECS Department, University of California at Berkeley, Berkeley, California, USA,
          <string-name>
            <given-names>ERL</given-names>
            <surname>Technical Memo</surname>
          </string-name>
          <string-name>
            <surname>UCB</surname>
          </string-name>
          /ERL M03/48,
          <year>December 2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>O.</given-names>
            <surname>Rafique</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Schneider</surname>
          </string-name>
          , “
          <article-title>A model-based synthesis framework for the execution of dynamic dataflow actors</article-title>
          ,” in Intern.
          <source>Conference on Internet of Things Embedded Systems and Communications. Hammamet, Tunisia: IEEE Computer Society</source>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>G.</given-names>
            <surname>Kahn</surname>
          </string-name>
          , “
          <article-title>The semantics of a simple language for parallel programming,” in Information Processing</article-title>
          , J. Rosenfeld, Ed. Stockholm, Sweden: North-Holland,
          <year>1974</year>
          , pp.
          <fpage>471</fpage>
          -
          <lpage>475</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>E.</given-names>
            <surname>Bezati</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Thavot</surname>
          </string-name>
          , G. Roquier, and
          <string-name>
            <given-names>M.</given-names>
            <surname>Mattavelli</surname>
          </string-name>
          , “
          <article-title>High-level dataflow design of signal processing systems for reconfigurable and multicore heterogeneous platforms</article-title>
          ,
          <source>” Journal of Real-Time Image Processing</source>
          , vol.
          <volume>9</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>251</fpage>
          -
          <lpage>262</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>H.</given-names>
            <surname>Yviquel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Lorence</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Jerbi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Cocherel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sanchez</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Raulet</surname>
          </string-name>
          , “
          <article-title>ORCC: multimedia development made easy</article-title>
          ,” in Intern. conference on Multimedia. Barcelona, Spain: ACM,
          <year>2013</year>
          , pp.
          <fpage>863</fpage>
          -
          <lpage>866</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>L.</given-names>
            <surname>Schor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Bacivarov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Rai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Yang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.-H.</given-names>
            <surname>Kang</surname>
          </string-name>
          , and L. Thiele, “
          <article-title>Scenario-based design flow for mapping streaming applications onto on-chip many-core systems</article-title>
          ,” in Compilers, Architecture, and
          <article-title>Synthesis for Embedded Systems</article-title>
          .
          <source>Finland: ACM</source>
          ,
          <year>2012</year>
          , pp.
          <fpage>71</fpage>
          -
          <lpage>80</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>L.</given-names>
            <surname>Schor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Tretter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Scherer</surname>
          </string-name>
          , and L. Thiele, “
          <article-title>Exploiting the parallelism of heterogeneous systems using dataflow graphs on top of OpenCL,” in IEEE Symposium on Embedded Systems for Real-time Multimedia</article-title>
          .
          <source>IEEE Computer Society</source>
          ,
          <year>2013</year>
          , pp.
          <fpage>41</fpage>
          -
          <lpage>50</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>W.</given-names>
            <surname>Lund</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kanur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Ersfolk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Tsiopoulos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lilius</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Haldin</surname>
          </string-name>
          , and U. Falk, “
          <article-title>Execution of dataflow process networks on OpenCL platforms</article-title>
          ,” in Euromicro International Conference on Parallel, Distributed, and
          <article-title>Network-Based Processing</article-title>
          . Turku, Finland: IEEE Computer Society,
          <year>2015</year>
          , pp.
          <fpage>618</fpage>
          -
          <lpage>625</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>J.</given-names>
            <surname>Boutellier</surname>
          </string-name>
          and
          <string-name>
            <surname>I. Hautala</surname>
          </string-name>
          , “
          <article-title>Executing dynamic data rate actor networks on OpenCL platforms,” in Signal Processing Systems</article-title>
          . TX, USA: IEEE Computer Society,
          <year>2016</year>
          , pp.
          <fpage>98</fpage>
          -
          <lpage>103</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>J.</given-names>
            <surname>Boutellier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Wu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Huttunen</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Bhattacharyya</surname>
          </string-name>
          , “PRUNE:
          <article-title>Dynamic and decidable dataflow for signal processing on heterogeneous platforms</article-title>
          ,
          <source>” IEEE Transactions on Signal Processing</source>
          , vol.
          <volume>66</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>654</fpage>
          -
          <lpage>665</lpage>
          ,
          <year>February 2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>C.</given-names>
            <surname>Lucarz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Mattavelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wipliez</surname>
          </string-name>
          , G. Roquier,
          <string-name>
            <given-names>M.</given-names>
            <surname>Raulet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Janneck</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Miller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>and D.</given-names>
            <surname>Parlour</surname>
          </string-name>
          , “
          <article-title>Dataflow/Actor-Oriented language for the design of complex signal processing systems</article-title>
          ,” in Conference on Design and
          <article-title>Architectures for Signal and Image Processing</article-title>
          , Bruxelles, Belgium,
          <year>2008</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>8</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>