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);
p_simdata->m_host,
simdata->computation_amount,
simdata->priority,
- simdata->bound);
+ simdata->bound,
+ simdata->affinity_mask
+ );
}
#ifdef HAVE_TRACING
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 !!!! *******/
simdata->source = NULL;
simdata->priority = 1.0;
simdata->bound = 0;
+ simdata->affinity_mask = 0;
simdata->rate = -1.0;
simdata->isused = 0;
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);
+}