Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
FORMUS3IC_LAS3
/
embb
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
b1ecc318
authored
Jun 21, 2016
by
Marcus Winter
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dataflow_cpp: added support for priorities and affinities
parent
ae4813ec
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
39 additions
and
11 deletions
+39
-11
dataflow_cpp/include/embb/dataflow/internal/node.h
+5
-0
dataflow_cpp/include/embb/dataflow/internal/process.h
+2
-2
dataflow_cpp/include/embb/dataflow/internal/scheduler.h
+9
-2
dataflow_cpp/include/embb/dataflow/internal/scheduler_mtapi.h
+15
-4
dataflow_cpp/include/embb/dataflow/internal/scheduler_sequential.h
+7
-2
dataflow_cpp/include/embb/dataflow/internal/sink.h
+1
-1
dataflow_cpp/include/embb/dataflow/network.h
+0
-0
No files found.
dataflow_cpp/include/embb/dataflow/internal/node.h
View file @
b1ecc318
...
...
@@ -29,6 +29,7 @@
#include <cstddef>
#include <embb/base/exceptions.h>
#include <embb/mtapi/execution_policy.h>
#include <embb/dataflow/internal/scheduler.h>
#include <embb/dataflow/internal/clock_listener.h>
...
...
@@ -58,10 +59,14 @@ class Node {
SetSlices
(
0
);
}
}
void
SetPolicy
(
embb
::
mtapi
::
ExecutionPolicy
const
&
policy
)
{
policy_
=
policy
;
}
protected
:
Scheduler
*
sched_
;
static
int
next_process_id_
;
embb
::
mtapi
::
ExecutionPolicy
policy_
;
static
int
GetNextProcessID
()
{
return
next_process_id_
++
;
}
virtual
void
SetSlices
(
int
/*slices*/
)
{}
...
...
dataflow_cpp/include/embb/dataflow/internal/process.h
View file @
b1ecc318
...
...
@@ -146,7 +146,7 @@ class Process< Serial, Inputs<I1, I2, I3, I4, I5>,
for
(
int
ii
=
clk
;
ii
<
clk_res
;
ii
++
)
{
const
int
idx
=
ii
%
slices_
;
action_
[
idx
]
=
Action
(
this
,
ii
);
sched_
->
Enqueue
(
queue_id_
,
action_
[
idx
]);
sched_
->
Enqueue
(
queue_id_
,
action_
[
idx
]
,
policy_
);
}
queued_clock_
.
Store
(
clk_res
);
retry
=
false
;
...
...
@@ -158,7 +158,7 @@ class Process< Serial, Inputs<I1, I2, I3, I4, I5>,
}
else
{
const
int
idx
=
clock
%
slices_
;
action_
[
idx
]
=
Action
(
this
,
clock
);
sched_
->
Start
(
action_
[
idx
]);
sched_
->
Start
(
action_
[
idx
]
,
policy_
);
}
}
...
...
dataflow_cpp/include/embb/dataflow/internal/scheduler.h
View file @
b1ecc318
...
...
@@ -27,6 +27,8 @@
#ifndef EMBB_DATAFLOW_INTERNAL_SCHEDULER_H_
#define EMBB_DATAFLOW_INTERNAL_SCHEDULER_H_
#include <embb/mtapi/execution_policy.h>
namespace
embb
{
namespace
dataflow
{
namespace
internal
{
...
...
@@ -37,8 +39,13 @@ class Scheduler {
public
:
Scheduler
()
{}
virtual
~
Scheduler
()
{}
virtual
void
Start
(
Action
&
action
)
=
0
;
virtual
void
Enqueue
(
int
process_id
,
Action
&
action
)
=
0
;
virtual
void
Start
(
Action
&
action
,
embb
::
mtapi
::
ExecutionPolicy
const
&
policy
)
=
0
;
virtual
void
Enqueue
(
int
process_id
,
Action
&
action
,
embb
::
mtapi
::
ExecutionPolicy
const
&
policy
)
=
0
;
virtual
void
WaitForSlice
(
int
slice
)
=
0
;
virtual
int
GetSlices
()
=
0
;
};
...
...
dataflow_cpp/include/embb/dataflow/internal/scheduler_mtapi.h
View file @
b1ecc318
...
...
@@ -96,14 +96,25 @@ class SchedulerMTAPI : public Scheduler {
embb
::
base
::
Allocation
::
Free
(
group_
);
embb
::
base
::
Allocation
::
Free
(
queue_
);
}
virtual
void
Start
(
Action
&
action
)
{
virtual
void
Start
(
Action
&
action
,
embb
::
mtapi
::
ExecutionPolicy
const
&
policy
)
{
const
int
idx
=
action
.
GetClock
()
%
slices_
;
group_
[
idx
].
Start
(
job_
,
&
action
,
static_cast
<
void
*>
(
NULL
));
embb
::
mtapi
::
TaskAttributes
task_attr
;
task_attr
.
SetPolicy
(
policy
);
group_
[
idx
].
Start
(
job_
,
&
action
,
static_cast
<
void
*>
(
NULL
),
task_attr
);
}
virtual
void
Enqueue
(
int
process_id
,
Action
&
action
)
{
virtual
void
Enqueue
(
int
process_id
,
Action
&
action
,
embb
::
mtapi
::
ExecutionPolicy
const
&
policy
)
{
const
int
idx
=
action
.
GetClock
()
%
slices_
;
const
int
queue_id
=
process_id
%
queue_count_
;
queue_
[
queue_id
].
Enqueue
(
&
action
,
static_cast
<
void
*>
(
NULL
),
group_
[
idx
]);
embb
::
mtapi
::
TaskAttributes
task_attr
;
task_attr
.
SetPolicy
(
policy
);
queue_
[
queue_id
].
Enqueue
(
&
action
,
static_cast
<
void
*>
(
NULL
),
task_attr
,
group_
[
idx
]);
}
virtual
void
WaitForSlice
(
int
slice
)
{
group_
[
slice
].
WaitAll
(
MTAPI_INFINITE
);
...
...
dataflow_cpp/include/embb/dataflow/internal/scheduler_sequential.h
View file @
b1ecc318
...
...
@@ -38,10 +38,15 @@ class SchedulerSequential : public Scheduler {
public
:
SchedulerSequential
()
{}
virtual
~
SchedulerSequential
()
{}
virtual
void
Start
(
Action
&
action
)
{
virtual
void
Start
(
Action
&
action
,
embb
::
mtapi
::
ExecutionPolicy
const
&
)
{
action
.
RunSequential
();
}
virtual
void
Enqueue
(
int
,
Action
&
action
)
{
virtual
void
Enqueue
(
int
,
Action
&
action
,
embb
::
mtapi
::
ExecutionPolicy
const
&
)
{
action
.
RunSequential
();
}
virtual
void
WaitForSlice
(
int
/*slice*/
)
{}
...
...
dataflow_cpp/include/embb/dataflow/internal/sink.h
View file @
b1ecc318
...
...
@@ -113,7 +113,7 @@ class Sink< Inputs<I1, I2, I3, I4, I5> >
for
(
int
ii
=
clk
;
ii
<
clk_res
;
ii
++
)
{
const
int
idx
=
ii
%
slices_
;
action_
[
idx
]
=
Action
(
this
,
ii
);
sched_
->
Enqueue
(
queue_id_
,
action_
[
idx
]);
sched_
->
Enqueue
(
queue_id_
,
action_
[
idx
]
,
policy_
);
}
queued_clock_
.
Store
(
clk_res
);
retry
=
false
;
...
...
dataflow_cpp/include/embb/dataflow/network.h
View file @
b1ecc318
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment