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
132011c6
authored
Aug 19, 2016
by
Tobias Langer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added global task queue.
parent
e3916b5a
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
32 additions
and
0 deletions
+32
-0
mtapi_c/src/embb_mtapi_node_t.c
+9
-0
mtapi_c/src/embb_mtapi_node_t.h
+7
-0
mtapi_c/src/embb_mtapi_scheduler_t.c
+12
-0
mtapi_c/src/embb_mtapi_scheduler_t.h
+4
-0
No files found.
mtapi_c/src/embb_mtapi_node_t.c
View file @
132011c6
...
@@ -126,6 +126,12 @@ void mtapi_initialize(
...
@@ -126,6 +126,12 @@ void mtapi_initialize(
local_status
=
MTAPI_ERR_NODE_INITFAILED
;
local_status
=
MTAPI_ERR_NODE_INITFAILED
;
}
}
#ifdef EMBB_HARD_REALTIME
embb_mtapi_task_queue_initialize_with_capacity
(
&
node
->
global_task_queue
,
node
->
attributes
.
max_tasks
);
#endif
if
(
local_status
==
MTAPI_SUCCESS
)
{
if
(
local_status
==
MTAPI_SUCCESS
)
{
/* initialize scheduler for local node */
/* initialize scheduler for local node */
node
->
scheduler
=
embb_mtapi_scheduler_new
();
node
->
scheduler
=
embb_mtapi_scheduler_new
();
...
@@ -200,6 +206,9 @@ void mtapi_finalize(MTAPI_OUT mtapi_status_t* status) {
...
@@ -200,6 +206,9 @@ void mtapi_finalize(MTAPI_OUT mtapi_status_t* status) {
}
}
embb_atomic_destroy_int
(
&
node
->
is_scheduler_running
);
embb_atomic_destroy_int
(
&
node
->
is_scheduler_running
);
#ifdef EMBB_HARD_REALTIME
embb_mtapi_task_queue_finalize
(
&
node
->
global_task_queue
);
#endif
/* free system instance */
/* free system instance */
embb_mtapi_alloc_deallocate
(
node
);
embb_mtapi_alloc_deallocate
(
node
);
...
...
mtapi_c/src/embb_mtapi_node_t.h
View file @
132011c6
...
@@ -32,6 +32,10 @@
...
@@ -32,6 +32,10 @@
#include <embb_mtapi_log.h>
#include <embb_mtapi_log.h>
#ifdef EMBB_HARD_REALTIME
#include <embb_mtapi_task_queue_t.h>
#endif
/*EMBB_HARD_REALTIME*/
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
#endif
#endif
...
@@ -71,6 +75,9 @@ struct embb_mtapi_node_struct {
...
@@ -71,6 +75,9 @@ struct embb_mtapi_node_struct {
embb_mtapi_queue_pool_t
*
queue_pool
;
embb_mtapi_queue_pool_t
*
queue_pool
;
embb_atomic_int
is_scheduler_running
;
embb_atomic_int
is_scheduler_running
;
mtapi_affinity_t
affinity_all
;
mtapi_affinity_t
affinity_all
;
#ifdef EMBB_HARD_REALTIME
embb_mtapi_task_queue_t
global_task_queue
;
#endif
/*EMBB_HARD_REALTIME*/
};
};
#include <embb_mtapi_node_t_fwd.h>
#include <embb_mtapi_node_t_fwd.h>
...
...
mtapi_c/src/embb_mtapi_scheduler_t.c
View file @
132011c6
...
@@ -37,6 +37,9 @@
...
@@ -37,6 +37,9 @@
#include <embb_mtapi_thread_context_t.h>
#include <embb_mtapi_thread_context_t.h>
#include <embb_mtapi_task_context_t.h>
#include <embb_mtapi_task_context_t.h>
#include <embb_mtapi_task_t.h>
#include <embb_mtapi_task_t.h>
#ifdef EMBB_HARD_REALTIME
#include <embb_mtapi_task_queue_t.h>
#endif
/*EMBB_HARD_REALTIME*/
#include <embb_mtapi_action_t.h>
#include <embb_mtapi_action_t.h>
#include <embb_mtapi_alloc.h>
#include <embb_mtapi_alloc.h>
#include <embb_mtapi_queue_t.h>
#include <embb_mtapi_queue_t.h>
...
@@ -631,6 +634,12 @@ mtapi_boolean_t embb_mtapi_scheduler_schedule_task(
...
@@ -631,6 +634,12 @@ mtapi_boolean_t embb_mtapi_scheduler_schedule_task(
assert
(
MTAPI_NULL
!=
node
);
assert
(
MTAPI_NULL
!=
node
);
#ifdef EMBB_HARD_REALTIME
if
(
scheduler
->
mode
==
GLOBAL_EDF
)
{
embb_mtapi_task_queue_push
(
&
node
->
global_task_queue
,
task
);
pushed
=
MTAPI_TRUE
;
}
else
{
#endif
/*EMBB_HARD_REALTIME*/
if
(
embb_mtapi_action_pool_is_handle_valid
(
if
(
embb_mtapi_action_pool_is_handle_valid
(
node
->
action_pool
,
task
->
action
))
{
node
->
action_pool
,
task
->
action
))
{
embb_mtapi_queue_t
*
local_queue
=
MTAPI_NULL
;
embb_mtapi_queue_t
*
local_queue
=
MTAPI_NULL
;
...
@@ -692,6 +701,9 @@ mtapi_boolean_t embb_mtapi_scheduler_schedule_task(
...
@@ -692,6 +701,9 @@ mtapi_boolean_t embb_mtapi_scheduler_schedule_task(
embb_atomic_fetch_and_add_int
(
&
local_action
->
num_tasks
,
-
1
);
embb_atomic_fetch_and_add_int
(
&
local_action
->
num_tasks
,
-
1
);
}
}
}
}
#ifdef EMBB_HARD_REALTIME
}
#endif
/*EMBB_HARD_REALTIME*/
return
pushed
;
return
pushed
;
}
}
mtapi_c/src/embb_mtapi_scheduler_t.h
View file @
132011c6
...
@@ -59,6 +59,10 @@ enum embb_mtapi_scheduler_mode_enum {
...
@@ -59,6 +59,10 @@ enum embb_mtapi_scheduler_mode_enum {
WORK_STEAL_VHPF
=
0
,
WORK_STEAL_VHPF
=
0
,
// Local First. Steal if all local queues are empty.
// Local First. Steal if all local queues are empty.
WORK_STEAL_LF
=
1
,
WORK_STEAL_LF
=
1
,
#ifdef EMBB_HARD_REALTIME
// Global EDF. No work stealing
GLOBAL_EDF
=
2
,
#endif
/*EMBB_HARD_REALTIME*/
NUM_SCHEDULER_MODES
NUM_SCHEDULER_MODES
};
};
...
...
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