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
7b0d2c67
authored
8 years ago
by
Marcus Winter
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'embb546_low_performance_on_arm' into development
parents
6dc01f7b
24fae6c4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
13 deletions
+43
-13
mtapi_c/include/embb/mtapi/c/mtapi.h
+6
-1
mtapi_c/src/embb_mtapi_thread_context_t.c
+30
-12
mtapi_c/src/embb_mtapi_thread_context_t.h
+1
-0
mtapi_c/src/mtapi_node_attributes_t.c
+6
-0
No files found.
mtapi_c/include/embb/mtapi/c/mtapi.h
View file @
7b0d2c67
...
@@ -552,8 +552,9 @@ enum mtapi_node_attributes_enum {
...
@@ -552,8 +552,9 @@ enum mtapi_node_attributes_enum {
the node */
the node */
MTAPI_NODE_MAX_ACTIONS_PER_JOB
,
/**< maximum number of actions in a job
MTAPI_NODE_MAX_ACTIONS_PER_JOB
,
/**< maximum number of actions in a job
allowed by the node */
allowed by the node */
MTAPI_NODE_MAX_PRIORITIES
/**< maximum number of priorities
MTAPI_NODE_MAX_PRIORITIES
,
/**< maximum number of priorities
allowed by the node */
allowed by the node */
MTAPI_NODE_REUSE_MAIN_THREAD
/**< reuse main thread as worker */
};
};
/** size of the \a MTAPI_NODE_CORE_AFFINITY attribute */
/** size of the \a MTAPI_NODE_CORE_AFFINITY attribute */
#define MTAPI_NODE_CORE_AFFINITY_SIZE sizeof(embb_core_set_t)
#define MTAPI_NODE_CORE_AFFINITY_SIZE sizeof(embb_core_set_t)
...
@@ -577,6 +578,8 @@ enum mtapi_node_attributes_enum {
...
@@ -577,6 +578,8 @@ enum mtapi_node_attributes_enum {
#define MTAPI_NODE_MAX_ACTIONS_PER_JOB_SIZE sizeof(mtapi_uint_t)
#define MTAPI_NODE_MAX_ACTIONS_PER_JOB_SIZE sizeof(mtapi_uint_t)
/** size of the \a MTAPI_NODE_MAX_PRIORITIES attribute */
/** size of the \a MTAPI_NODE_MAX_PRIORITIES attribute */
#define MTAPI_NODE_MAX_PRIORITIES_SIZE sizeof(mtapi_uint_t)
#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)
/* example attribute value */
/* example attribute value */
#define MTAPI_NODE_TYPE_SMP 1
#define MTAPI_NODE_TYPE_SMP 1
...
@@ -688,6 +691,8 @@ struct mtapi_node_attributes_struct {
...
@@ -688,6 +691,8 @@ struct mtapi_node_attributes_struct {
mtapi_uint_t
max_actions_per_job
;
/**< stores
mtapi_uint_t
max_actions_per_job
;
/**< stores
MTAPI_NODE_MAX_ACTIONS_PER_JOB */
MTAPI_NODE_MAX_ACTIONS_PER_JOB */
mtapi_uint_t
max_priorities
;
/**< stores MTAPI_NODE_MAX_PRIORITIES */
mtapi_uint_t
max_priorities
;
/**< stores MTAPI_NODE_MAX_PRIORITIES */
mtapi_boolean_t
reuse_main_thread
;
/**< stores
MTAPI_NODE_REUSE_MAIN_THREAD */
};
};
/**
/**
...
...
This diff is collapsed.
Click to expand it.
mtapi_c/src/embb_mtapi_thread_context_t.c
View file @
7b0d2c67
...
@@ -54,6 +54,7 @@ mtapi_boolean_t embb_mtapi_thread_context_initialize_with_node_worker_and_core(
...
@@ -54,6 +54,7 @@ mtapi_boolean_t embb_mtapi_thread_context_initialize_with_node_worker_and_core(
that
->
core_num
=
core_num
;
that
->
core_num
=
core_num
;
that
->
priorities
=
node
->
attributes
.
max_priorities
;
that
->
priorities
=
node
->
attributes
.
max_priorities
;
that
->
is_initialized
=
MTAPI_FALSE
;
that
->
is_initialized
=
MTAPI_FALSE
;
that
->
is_main_thread
=
(
worker_index
==
0
)
?
node
->
attributes
.
reuse_main_thread
:
MTAPI_FALSE
;
embb_atomic_store_int
(
&
that
->
run
,
0
);
embb_atomic_store_int
(
&
that
->
run
,
0
);
that
->
queue
=
(
embb_mtapi_task_queue_t
**
)
embb_mtapi_alloc_allocate
(
that
->
queue
=
(
embb_mtapi_task_queue_t
**
)
embb_mtapi_alloc_allocate
(
...
@@ -121,17 +122,29 @@ mtapi_boolean_t embb_mtapi_thread_context_start(
...
@@ -121,17 +122,29 @@ mtapi_boolean_t embb_mtapi_thread_context_start(
embb_core_set_add
(
&
core_set
,
that
->
core_num
);
embb_core_set_add
(
&
core_set
,
that
->
core_num
);
/* create thread */
/* create thread */
err
=
embb_thread_create
(
&
that
->
thread
,
&
core_set
,
worker_func
,
that
);
if
(
that
->
is_main_thread
)
{
if
(
EMBB_SUCCESS
!=
err
)
{
/* reuse main thread */
embb_mtapi_log_error
(
that
->
thread
=
embb_thread_current
();
"embb_mtapi_ThreadContext_initializeWithNodeAndCoreNumber() could not "
err
=
embb_tss_create
(
&
that
->
tss_id
);
"create thread %d on core %d
\n
"
,
that
->
worker_index
,
that
->
core_num
);
if
(
EMBB_SUCCESS
!=
err
)
{
return
MTAPI_FALSE
;
/* report error to scheduler */
}
embb_atomic_store_int
(
&
that
->
run
,
-
1
);
return
MTAPI_FALSE
;
/* wait for worker to come up */
}
while
(
0
==
embb_atomic_load_int
(
&
that
->
run
))
{
embb_tss_set
(
&
(
that
->
tss_id
),
that
);
embb_thread_yield
();
embb_atomic_store_int
(
&
that
->
run
,
1
);
}
else
{
err
=
embb_thread_create
(
&
that
->
thread
,
&
core_set
,
worker_func
,
that
);
if
(
EMBB_SUCCESS
!=
err
)
{
embb_mtapi_log_error
(
"embb_mtapi_ThreadContext_initializeWithNodeAndCoreNumber() could not "
"create thread %d on core %d
\n
"
,
that
->
worker_index
,
that
->
core_num
);
return
MTAPI_FALSE
;
}
/* wait for worker to come up */
while
(
0
==
embb_atomic_load_int
(
&
that
->
run
))
{
embb_thread_yield
();
}
}
}
if
(
0
<
embb_atomic_load_int
(
&
that
->
run
))
{
if
(
0
<
embb_atomic_load_int
(
&
that
->
run
))
{
...
@@ -146,7 +159,9 @@ void embb_mtapi_thread_context_stop(embb_mtapi_thread_context_t* that) {
...
@@ -146,7 +159,9 @@ void embb_mtapi_thread_context_stop(embb_mtapi_thread_context_t* that) {
if
(
0
<
embb_atomic_load_int
(
&
that
->
run
))
{
if
(
0
<
embb_atomic_load_int
(
&
that
->
run
))
{
embb_atomic_store_int
(
&
that
->
run
,
0
);
embb_atomic_store_int
(
&
that
->
run
,
0
);
embb_condition_notify_one
(
&
that
->
work_available
);
embb_condition_notify_one
(
&
that
->
work_available
);
embb_thread_join
(
&
(
that
->
thread
),
&
result
);
if
(
MTAPI_FALSE
==
that
->
is_main_thread
)
{
embb_thread_join
(
&
(
that
->
thread
),
&
result
);
}
}
}
}
}
...
@@ -158,6 +173,9 @@ void embb_mtapi_thread_context_finalize(embb_mtapi_thread_context_t* that) {
...
@@ -158,6 +173,9 @@ void embb_mtapi_thread_context_finalize(embb_mtapi_thread_context_t* that) {
embb_mtapi_log_trace
(
"embb_mtapi_thread_context_finalize() called
\n
"
);
embb_mtapi_log_trace
(
"embb_mtapi_thread_context_finalize() called
\n
"
);
if
(
that
->
is_initialized
)
{
if
(
that
->
is_initialized
)
{
if
(
that
->
is_main_thread
)
{
embb_tss_delete
(
&
that
->
tss_id
);
}
embb_condition_destroy
(
&
that
->
work_available
);
embb_condition_destroy
(
&
that
->
work_available
);
embb_mutex_destroy
(
&
that
->
work_available_mutex
);
embb_mutex_destroy
(
&
that
->
work_available_mutex
);
}
}
...
...
This diff is collapsed.
Click to expand it.
mtapi_c/src/embb_mtapi_thread_context_t.h
View file @
7b0d2c67
...
@@ -68,6 +68,7 @@ struct embb_mtapi_thread_context_struct {
...
@@ -68,6 +68,7 @@ struct embb_mtapi_thread_context_struct {
embb_atomic_int
run
;
embb_atomic_int
run
;
mtapi_status_t
status
;
mtapi_status_t
status
;
mtapi_boolean_t
is_initialized
;
mtapi_boolean_t
is_initialized
;
mtapi_boolean_t
is_main_thread
;
};
};
#include <embb_mtapi_thread_context_t_fwd.h>
#include <embb_mtapi_thread_context_t_fwd.h>
...
...
This diff is collapsed.
Click to expand it.
mtapi_c/src/mtapi_node_attributes_t.c
View file @
7b0d2c67
...
@@ -52,6 +52,7 @@ void mtapi_nodeattr_init(
...
@@ -52,6 +52,7 @@ void mtapi_nodeattr_init(
attributes
->
max_jobs
=
MTAPI_NODE_MAX_JOBS_DEFAULT
;
attributes
->
max_jobs
=
MTAPI_NODE_MAX_JOBS_DEFAULT
;
attributes
->
max_actions_per_job
=
MTAPI_NODE_MAX_ACTIONS_PER_JOB_DEFAULT
;
attributes
->
max_actions_per_job
=
MTAPI_NODE_MAX_ACTIONS_PER_JOB_DEFAULT
;
attributes
->
max_priorities
=
MTAPI_NODE_MAX_PRIORITIES_DEFAULT
;
attributes
->
max_priorities
=
MTAPI_NODE_MAX_PRIORITIES_DEFAULT
;
attributes
->
reuse_main_thread
=
MTAPI_FALSE
;
embb_core_set_init
(
&
attributes
->
core_affinity
,
1
);
embb_core_set_init
(
&
attributes
->
core_affinity
,
1
);
attributes
->
num_cores
=
embb_core_set_count
(
&
attributes
->
core_affinity
);
attributes
->
num_cores
=
embb_core_set_count
(
&
attributes
->
core_affinity
);
...
@@ -143,6 +144,11 @@ void mtapi_nodeattr_set(
...
@@ -143,6 +144,11 @@ void mtapi_nodeattr_set(
&
attributes
->
max_priorities
,
attribute
,
attribute_size
);
&
attributes
->
max_priorities
,
attribute
,
attribute_size
);
break
;
break
;
case
MTAPI_NODE_REUSE_MAIN_THREAD
:
local_status
=
embb_mtapi_attr_set_mtapi_boolean_t
(
&
attributes
->
reuse_main_thread
,
attribute
,
attribute_size
);
break
;
default:
default:
/* attribute unknown */
/* attribute unknown */
local_status
=
MTAPI_ERR_ATTR_NUM
;
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