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
2cacd20f
authored
8 years ago
by
Marcus Winter
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mtapi_c: added interface to set worker thread priorities
parent
62c77d0a
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
119 additions
and
7 deletions
+119
-7
mtapi_c/include/embb/mtapi/c/mtapi.h
+84
-1
mtapi_c/src/embb_mtapi_node_t.c
+0
-0
mtapi_c/src/embb_mtapi_scheduler_t.c
+19
-2
mtapi_c/src/embb_mtapi_thread_context_t.c
+5
-2
mtapi_c/src/embb_mtapi_thread_context_t.h
+5
-2
mtapi_c/src/mtapi_node_attributes_t.c
+6
-0
No files found.
mtapi_c/include/embb/mtapi/c/mtapi.h
View file @
2cacd20f
...
...
@@ -244,6 +244,7 @@
#include <stdint.h>
#include <embb/base/c/core_set.h>
#include <embb/base/c/thread.h>
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -529,6 +530,82 @@ enum mtapi_notification_enum {
typedef
enum
mtapi_notification_enum
mtapi_notification_t
;
/**< runtime notification */
enum
mtapi_worker_priority_type_enum
{
MTAPI_WORKER_PRIORITY_END
=
0
,
MTAPI_WORKER_PRIORITY_DEFAULT
=
1
,
MTAPI_WORKER_PRIORITY_WORKER
=
100
,
MTAPI_WORKER_PRIORITY_WORKER_0
=
MTAPI_WORKER_PRIORITY_WORKER
+
0
,
MTAPI_WORKER_PRIORITY_WORKER_1
=
MTAPI_WORKER_PRIORITY_WORKER
+
1
,
MTAPI_WORKER_PRIORITY_WORKER_2
=
MTAPI_WORKER_PRIORITY_WORKER
+
2
,
MTAPI_WORKER_PRIORITY_WORKER_3
=
MTAPI_WORKER_PRIORITY_WORKER
+
3
,
MTAPI_WORKER_PRIORITY_WORKER_4
=
MTAPI_WORKER_PRIORITY_WORKER
+
4
,
MTAPI_WORKER_PRIORITY_WORKER_5
=
MTAPI_WORKER_PRIORITY_WORKER
+
5
,
MTAPI_WORKER_PRIORITY_WORKER_6
=
MTAPI_WORKER_PRIORITY_WORKER
+
6
,
MTAPI_WORKER_PRIORITY_WORKER_7
=
MTAPI_WORKER_PRIORITY_WORKER
+
7
,
MTAPI_WORKER_PRIORITY_WORKER_8
=
MTAPI_WORKER_PRIORITY_WORKER
+
8
,
MTAPI_WORKER_PRIORITY_WORKER_9
=
MTAPI_WORKER_PRIORITY_WORKER
+
9
,
MTAPI_WORKER_PRIORITY_WORKER_10
=
MTAPI_WORKER_PRIORITY_WORKER
+
10
,
MTAPI_WORKER_PRIORITY_WORKER_11
=
MTAPI_WORKER_PRIORITY_WORKER
+
11
,
MTAPI_WORKER_PRIORITY_WORKER_12
=
MTAPI_WORKER_PRIORITY_WORKER
+
12
,
MTAPI_WORKER_PRIORITY_WORKER_13
=
MTAPI_WORKER_PRIORITY_WORKER
+
13
,
MTAPI_WORKER_PRIORITY_WORKER_14
=
MTAPI_WORKER_PRIORITY_WORKER
+
14
,
MTAPI_WORKER_PRIORITY_WORKER_15
=
MTAPI_WORKER_PRIORITY_WORKER
+
15
,
MTAPI_WORKER_PRIORITY_WORKER_16
=
MTAPI_WORKER_PRIORITY_WORKER
+
16
,
MTAPI_WORKER_PRIORITY_WORKER_17
=
MTAPI_WORKER_PRIORITY_WORKER
+
17
,
MTAPI_WORKER_PRIORITY_WORKER_18
=
MTAPI_WORKER_PRIORITY_WORKER
+
18
,
MTAPI_WORKER_PRIORITY_WORKER_19
=
MTAPI_WORKER_PRIORITY_WORKER
+
19
,
MTAPI_WORKER_PRIORITY_WORKER_20
=
MTAPI_WORKER_PRIORITY_WORKER
+
20
,
MTAPI_WORKER_PRIORITY_WORKER_21
=
MTAPI_WORKER_PRIORITY_WORKER
+
21
,
MTAPI_WORKER_PRIORITY_WORKER_22
=
MTAPI_WORKER_PRIORITY_WORKER
+
22
,
MTAPI_WORKER_PRIORITY_WORKER_23
=
MTAPI_WORKER_PRIORITY_WORKER
+
23
,
MTAPI_WORKER_PRIORITY_WORKER_24
=
MTAPI_WORKER_PRIORITY_WORKER
+
24
,
MTAPI_WORKER_PRIORITY_WORKER_25
=
MTAPI_WORKER_PRIORITY_WORKER
+
25
,
MTAPI_WORKER_PRIORITY_WORKER_26
=
MTAPI_WORKER_PRIORITY_WORKER
+
26
,
MTAPI_WORKER_PRIORITY_WORKER_27
=
MTAPI_WORKER_PRIORITY_WORKER
+
27
,
MTAPI_WORKER_PRIORITY_WORKER_28
=
MTAPI_WORKER_PRIORITY_WORKER
+
28
,
MTAPI_WORKER_PRIORITY_WORKER_29
=
MTAPI_WORKER_PRIORITY_WORKER
+
29
,
MTAPI_WORKER_PRIORITY_WORKER_30
=
MTAPI_WORKER_PRIORITY_WORKER
+
30
,
MTAPI_WORKER_PRIORITY_WORKER_31
=
MTAPI_WORKER_PRIORITY_WORKER
+
31
,
MTAPI_WORKER_PRIORITY_WORKER_32
=
MTAPI_WORKER_PRIORITY_WORKER
+
32
,
MTAPI_WORKER_PRIORITY_WORKER_33
=
MTAPI_WORKER_PRIORITY_WORKER
+
33
,
MTAPI_WORKER_PRIORITY_WORKER_34
=
MTAPI_WORKER_PRIORITY_WORKER
+
34
,
MTAPI_WORKER_PRIORITY_WORKER_35
=
MTAPI_WORKER_PRIORITY_WORKER
+
35
,
MTAPI_WORKER_PRIORITY_WORKER_36
=
MTAPI_WORKER_PRIORITY_WORKER
+
36
,
MTAPI_WORKER_PRIORITY_WORKER_37
=
MTAPI_WORKER_PRIORITY_WORKER
+
37
,
MTAPI_WORKER_PRIORITY_WORKER_38
=
MTAPI_WORKER_PRIORITY_WORKER
+
38
,
MTAPI_WORKER_PRIORITY_WORKER_39
=
MTAPI_WORKER_PRIORITY_WORKER
+
39
,
MTAPI_WORKER_PRIORITY_WORKER_40
=
MTAPI_WORKER_PRIORITY_WORKER
+
40
,
MTAPI_WORKER_PRIORITY_WORKER_41
=
MTAPI_WORKER_PRIORITY_WORKER
+
41
,
MTAPI_WORKER_PRIORITY_WORKER_42
=
MTAPI_WORKER_PRIORITY_WORKER
+
42
,
MTAPI_WORKER_PRIORITY_WORKER_43
=
MTAPI_WORKER_PRIORITY_WORKER
+
43
,
MTAPI_WORKER_PRIORITY_WORKER_44
=
MTAPI_WORKER_PRIORITY_WORKER
+
44
,
MTAPI_WORKER_PRIORITY_WORKER_45
=
MTAPI_WORKER_PRIORITY_WORKER
+
45
,
MTAPI_WORKER_PRIORITY_WORKER_46
=
MTAPI_WORKER_PRIORITY_WORKER
+
46
,
MTAPI_WORKER_PRIORITY_WORKER_47
=
MTAPI_WORKER_PRIORITY_WORKER
+
47
,
MTAPI_WORKER_PRIORITY_WORKER_48
=
MTAPI_WORKER_PRIORITY_WORKER
+
48
,
MTAPI_WORKER_PRIORITY_WORKER_49
=
MTAPI_WORKER_PRIORITY_WORKER
+
49
,
MTAPI_WORKER_PRIORITY_WORKER_50
=
MTAPI_WORKER_PRIORITY_WORKER
+
50
,
MTAPI_WORKER_PRIORITY_WORKER_51
=
MTAPI_WORKER_PRIORITY_WORKER
+
51
,
MTAPI_WORKER_PRIORITY_WORKER_52
=
MTAPI_WORKER_PRIORITY_WORKER
+
52
,
MTAPI_WORKER_PRIORITY_WORKER_53
=
MTAPI_WORKER_PRIORITY_WORKER
+
53
,
MTAPI_WORKER_PRIORITY_WORKER_54
=
MTAPI_WORKER_PRIORITY_WORKER
+
54
,
MTAPI_WORKER_PRIORITY_WORKER_55
=
MTAPI_WORKER_PRIORITY_WORKER
+
55
,
MTAPI_WORKER_PRIORITY_WORKER_56
=
MTAPI_WORKER_PRIORITY_WORKER
+
56
,
MTAPI_WORKER_PRIORITY_WORKER_57
=
MTAPI_WORKER_PRIORITY_WORKER
+
57
,
MTAPI_WORKER_PRIORITY_WORKER_58
=
MTAPI_WORKER_PRIORITY_WORKER
+
58
,
MTAPI_WORKER_PRIORITY_WORKER_59
=
MTAPI_WORKER_PRIORITY_WORKER
+
59
,
MTAPI_WORKER_PRIORITY_WORKER_60
=
MTAPI_WORKER_PRIORITY_WORKER
+
60
,
MTAPI_WORKER_PRIORITY_WORKER_61
=
MTAPI_WORKER_PRIORITY_WORKER
+
61
,
MTAPI_WORKER_PRIORITY_WORKER_62
=
MTAPI_WORKER_PRIORITY_WORKER
+
62
,
MTAPI_WORKER_PRIORITY_WORKER_63
=
MTAPI_WORKER_PRIORITY_WORKER
+
63
};
typedef
enum
mtapi_worker_priority_type_enum
mtapi_worker_priority_type_t
;
struct
mtapi_worker_priority_entry_struct
{
mtapi_worker_priority_type_t
type
;
embb_thread_priority_t
priority
;
};
typedef
struct
mtapi_worker_priority_entry_struct
mtapi_worker_priority_entry_t
;
/**
* Node attributes, to be extended for implementation specific attributes
...
...
@@ -554,7 +631,8 @@ enum mtapi_node_attributes_enum {
allowed by the node */
MTAPI_NODE_MAX_PRIORITIES
,
/**< maximum number of priorities
allowed by the node */
MTAPI_NODE_REUSE_MAIN_THREAD
/**< reuse main thread as worker */
MTAPI_NODE_REUSE_MAIN_THREAD
,
/**< reuse main thread as worker */
MTAPI_NODE_WORKER_PRIORITIES
/**< set worker priorites */
};
/** size of the \a MTAPI_NODE_CORE_AFFINITY attribute */
#define MTAPI_NODE_CORE_AFFINITY_SIZE sizeof(embb_core_set_t)
...
...
@@ -580,6 +658,8 @@ enum mtapi_node_attributes_enum {
#define MTAPI_NODE_MAX_PRIORITIES_SIZE sizeof(mtapi_uint_t)
/** size of the \a MTAPI_NODE_REUSE_MAIN_THREAD attribute */
#define MTAPI_NODE_REUSE_MAIN_THREAD_SIZE sizeof(mtapi_boolean_t)
/** size of the \a MTAPI_NODE_WORKER_PRIORITIES attribute */
#define MTAPI_NODE_WORKER_PRIORITIES_SIZE 0
/* example attribute value */
#define MTAPI_NODE_TYPE_SMP 1
...
...
@@ -693,6 +773,9 @@ struct mtapi_node_attributes_struct {
mtapi_uint_t
max_priorities
;
/**< stores MTAPI_NODE_MAX_PRIORITIES */
mtapi_boolean_t
reuse_main_thread
;
/**< stores
MTAPI_NODE_REUSE_MAIN_THREAD */
mtapi_worker_priority_entry_t
*
worker_priorities
;
/**< stores
MTAPI_NODE_WORKER_PRIORITIES */
};
/**
...
...
This diff is collapsed.
Click to expand it.
mtapi_c/src/embb_mtapi_node_t.c
View file @
2cacd20f
This diff is collapsed.
Click to expand it.
mtapi_c/src/embb_mtapi_scheduler_t.c
View file @
2cacd20f
...
...
@@ -503,8 +503,25 @@ mtapi_boolean_t embb_mtapi_scheduler_initialize_with_mode(
}
core_num
++
;
}
isinit
&=
embb_mtapi_thread_context_initialize_with_node_worker_and_core
(
&
that
->
worker_contexts
[
ii
],
node
,
ii
,
core_num
);
embb_thread_priority_t
priority
=
EMBB_THREAD_PRIORITY_NORMAL
;
if
(
NULL
!=
node
->
attributes
.
worker_priorities
)
{
mtapi_worker_priority_entry_t
*
entry
=
node
->
attributes
.
worker_priorities
;
mtapi_worker_priority_type_t
type
=
entry
->
type
;
while
(
type
!=
MTAPI_WORKER_PRIORITY_END
)
{
if
(
type
==
MTAPI_WORKER_PRIORITY_DEFAULT
)
{
priority
=
entry
->
priority
;
}
else
if
(
type
==
(
mtapi_worker_priority_type_t
)(
MTAPI_WORKER_PRIORITY_WORKER
+
ii
))
{
priority
=
entry
->
priority
;
break
;
}
entry
++
;
type
=
entry
->
type
;
}
}
isinit
&=
embb_mtapi_thread_context_initialize
(
&
that
->
worker_contexts
[
ii
],
node
,
ii
,
core_num
,
priority
);
}
if
(
!
isinit
)
{
return
MTAPI_FALSE
;
...
...
This diff is collapsed.
Click to expand it.
mtapi_c/src/embb_mtapi_thread_context_t.c
View file @
2cacd20f
...
...
@@ -38,11 +38,12 @@
/* ---- CLASS MEMBERS ------------------------------------------------------ */
mtapi_boolean_t
embb_mtapi_thread_context_initialize
_with_node_worker_and_core
(
mtapi_boolean_t
embb_mtapi_thread_context_initialize
(
embb_mtapi_thread_context_t
*
that
,
embb_mtapi_node_t
*
node
,
mtapi_uint_t
worker_index
,
mtapi_uint_t
core_num
)
{
mtapi_uint_t
core_num
,
embb_thread_priority_t
priority
)
{
mtapi_uint_t
ii
;
mtapi_boolean_t
result
=
MTAPI_TRUE
;
...
...
@@ -54,6 +55,7 @@ mtapi_boolean_t embb_mtapi_thread_context_initialize_with_node_worker_and_core(
that
->
core_num
=
core_num
;
that
->
priorities
=
node
->
attributes
.
max_priorities
;
that
->
is_initialized
=
MTAPI_FALSE
;
that
->
thread_priority
=
priority
;
that
->
is_main_thread
=
(
worker_index
==
0
)
?
node
->
attributes
.
reuse_main_thread
:
MTAPI_FALSE
;
embb_atomic_store_int
(
&
that
->
run
,
0
);
...
...
@@ -142,6 +144,7 @@ mtapi_boolean_t embb_mtapi_thread_context_start(
"create thread %d on core %d
\n
"
,
that
->
worker_index
,
that
->
core_num
);
return
MTAPI_FALSE
;
}
embb_thread_set_priority
(
&
that
->
thread
,
that
->
thread_priority
);
/* wait for worker to come up */
while
(
0
==
embb_atomic_load_int
(
&
that
->
run
))
{
embb_thread_yield
();
...
...
This diff is collapsed.
Click to expand it.
mtapi_c/src/embb_mtapi_thread_context_t.h
View file @
2cacd20f
...
...
@@ -69,6 +69,8 @@ struct embb_mtapi_thread_context_struct {
mtapi_status_t
status
;
mtapi_boolean_t
is_initialized
;
mtapi_boolean_t
is_main_thread
;
embb_thread_priority_t
thread_priority
;
};
#include <embb_mtapi_thread_context_t_fwd.h>
...
...
@@ -78,11 +80,12 @@ struct embb_mtapi_thread_context_struct {
* \memberof embb_mtapi_thread_context_struct
* \returns MTAPI_TRUE if successful, MTAPI_FALSE on error
*/
mtapi_boolean_t
embb_mtapi_thread_context_initialize
_with_node_worker_and_core
(
mtapi_boolean_t
embb_mtapi_thread_context_initialize
(
embb_mtapi_thread_context_t
*
that
,
embb_mtapi_node_t
*
node
,
mtapi_uint_t
worker_index
,
mtapi_uint_t
core_num
);
mtapi_uint_t
core_num
,
embb_thread_priority_t
priority
);
/**
* Destructor.
...
...
This diff is collapsed.
Click to expand it.
mtapi_c/src/mtapi_node_attributes_t.c
View file @
2cacd20f
...
...
@@ -53,6 +53,7 @@ void mtapi_nodeattr_init(
attributes
->
max_actions_per_job
=
MTAPI_NODE_MAX_ACTIONS_PER_JOB_DEFAULT
;
attributes
->
max_priorities
=
MTAPI_NODE_MAX_PRIORITIES_DEFAULT
;
attributes
->
reuse_main_thread
=
MTAPI_FALSE
;
attributes
->
worker_priorities
=
NULL
;
embb_core_set_init
(
&
attributes
->
core_affinity
,
1
);
attributes
->
num_cores
=
embb_core_set_count
(
&
attributes
->
core_affinity
);
...
...
@@ -149,6 +150,11 @@ void mtapi_nodeattr_set(
&
attributes
->
reuse_main_thread
,
attribute
,
attribute_size
);
break
;
case
MTAPI_NODE_WORKER_PRIORITIES
:
local_status
=
MTAPI_SUCCESS
;
attributes
->
worker_priorities
=
(
mtapi_worker_priority_entry_t
*
)
attribute
;
break
;
default:
/* attribute unknown */
local_status
=
MTAPI_ERR_ATTR_NUM
;
...
...
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