Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
SWIFT
SWIFTsim
Commits
02379f18
Commit
02379f18
authored
Jun 26, 2013
by
Pedro Gonnet
Browse files
assign queues according to proximity of the cpuid when affinity is set.
Former-commit-id: 79f6a5f294829fbf0a5f119d89d5ebefa4b8e5f7
parent
e031bc48
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/engine.c
View file @
02379f18
...
...
@@ -798,13 +798,20 @@ void engine_init ( struct engine *e , struct space *s , float dt , int nr_thread
if
(
pthread_create
(
&
e
->
runners
[
k
].
thread
,
NULL
,
&
runner_main
,
&
e
->
runners
[
k
]
)
!=
0
)
error
(
"Failed to create runner thread."
);
#if defined(HAVE_SETAFFINITY)
/* Set a reasonable queue ID. */
e
->
runners
[
k
].
qid
=
cpuid
[
k
]
*
nr_queues
/
nr_threads
;
/* Set the cpu mask to zero | e->id. */
CPU_ZERO
(
&
cpuset
);
CPU_SET
(
cpuid
[
e
->
runners
[
k
].
id
]
,
&
cpuset
);
CPU_SET
(
cpuid
[
k
]
,
&
cpuset
);
/* Apply this mask to the runner's pthread. */
if
(
pthread_setaffinity_np
(
e
->
runners
[
k
].
thread
,
sizeof
(
cpu_set_t
)
,
&
cpuset
)
!=
0
)
error
(
"Failed to set thread affinity."
);
#else
e
->
runners
[
k
].
qid
=
k
%
nr_queues
;
#endif
}
...
...
src/runner.c
View file @
02379f18
...
...
@@ -768,7 +768,7 @@ void *runner_main ( void *data ) {
struct
runner
*
r
=
(
struct
runner
*
)
data
;
struct
engine
*
e
=
r
->
e
;
struct
scheduler
*
sched
=
&
e
->
sched
;
int
threadID
=
r
->
id
;
int
qid
=
r
->
q
id
;
struct
task
*
t
;
struct
cell
*
ci
,
*
cj
;
...
...
@@ -783,7 +783,7 @@ void *runner_main ( void *data ) {
/* Get a task, how and from where depends on the policy. */
TIMER_TIC
t
=
scheduler_gettask
(
sched
,
threadID
);
t
=
scheduler_gettask
(
sched
,
qid
);
TIMER_TOC
(
timer_getpair
);
/* Did I get anything? */
...
...
src/runner.h
View file @
02379f18
...
...
@@ -62,6 +62,9 @@ struct runner {
/* The thread which it is running. */
pthread_t
thread
;
/* The queue to use to get tasks. */
int
qid
;
/* The underlying runner. */
struct
engine
*
e
;
...
...
Write
Preview
Supports
Markdown
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