From d944fb42733105c9de064b3a357c4009b8280d7e Mon Sep 17 00:00:00 2001 From: Takahiro Hirofuchi Date: Thu, 24 Oct 2013 12:15:55 +0200 Subject: [PATCH] Add the MSG function controlling CPU affinity --- include/msg/msg.h | 1 + src/msg/msg_gos.c | 4 +++- src/msg/msg_private.h | 1 + src/msg/msg_task.c | 16 ++++++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/msg/msg.h b/include/msg/msg.h index 73123a7c48..bda2f18529 100644 --- a/include/msg/msg.h +++ b/include/msg/msg.h @@ -215,6 +215,7 @@ XBT_PUBLIC(msg_error_t) MSG_task_execute(msg_task_t task); XBT_PUBLIC(msg_error_t) MSG_parallel_task_execute(msg_task_t task); XBT_PUBLIC(void) MSG_task_set_priority(msg_task_t task, double priority); XBT_PUBLIC(void) MSG_task_set_bound(msg_task_t task, double bound); +XBT_PUBLIC(void) MSG_task_set_affinity(msg_task_t task, msg_host_t host, unsigned long mask); XBT_PUBLIC(msg_error_t) MSG_process_sleep(double nb_sec); diff --git a/src/msg/msg_gos.c b/src/msg/msg_gos.c index e8112ed93a..8042c21c70 100644 --- a/src/msg/msg_gos.c +++ b/src/msg/msg_gos.c @@ -86,7 +86,9 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task) p_simdata->m_host, simdata->computation_amount, simdata->priority, - simdata->bound); + simdata->bound, + simdata->affinity_mask + ); } #ifdef HAVE_TRACING diff --git a/src/msg/msg_private.h b/src/msg/msg_private.h index 109ebbc1b3..611a026ebf 100644 --- a/src/msg/msg_private.h +++ b/src/msg/msg_private.h @@ -33,6 +33,7 @@ typedef struct simdata_task { double priority; double bound; /* Capping for CPU resource */ double rate; /* Capping for network resource */ + unsigned long affinity_mask; /* CPU affinity */ int isused; /* Indicates whether the task is used in SIMIX currently */ int host_nb; /* ==0 if sequential task; parallel task if not */ /******* Parallel Tasks Only !!!! *******/ diff --git a/src/msg/msg_task.c b/src/msg/msg_task.c index d95b1808cf..a35198abf1 100644 --- a/src/msg/msg_task.c +++ b/src/msg/msg_task.c @@ -63,6 +63,7 @@ msg_task_t MSG_task_create(const char *name, double compute_duration, simdata->source = NULL; simdata->priority = 1.0; simdata->bound = 0; + simdata->affinity_mask = 0; simdata->rate = -1.0; simdata->isused = 0; @@ -460,3 +461,18 @@ void MSG_task_set_bound(msg_task_t task, double bound) simcall_host_execution_set_bound(task->simdata->compute, task->simdata->bound); } + + +/** \ingroup m_task_management + * \brief Changes the CPU affinity of a computation task. + * + */ +void MSG_task_set_affinity(msg_task_t task, msg_host_t host, unsigned long mask) +{ + xbt_assert(task, "Invalid parameter"); + xbt_assert(task->simdata, "Invalid parameter"); + + task->simdata->affinity_mask = mask; + if (task->simdata->compute) + simcall_host_execution_set_affinity(task->simdata->compute, host, mask); +} -- 2.20.1