-/* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "src/simix/smx_private.hpp"
#include <algorithm>
-extern "C" {
-
/** @addtogroup m_task_management
*
* Since most scheduling algorithms rely on a concept of task that can be either <em>computed</em> locally or
msg_task_t MSG_parallel_task_create(const char *name, int host_nb, const msg_host_t * host_list,
double *flops_amount, double *bytes_amount, void *data)
{
- msg_task_t task = MSG_task_create(name, 0, 0, data);
+ // Task's flops amount is set to an arbitrary value > 0.0 to be able to distinguish, in
+ // MSG_task_get_remaining_work_ratio(), a finished task and a task that has not started yet.
+ msg_task_t task = MSG_task_create(name, 1.0, 0, data);
simdata_task_t simdata = task->simdata;
/* Simulator Data specific to parallel tasks */
simdata_task_t simdata = task->simdata;
if (simdata->compute) {
simcall_execution_cancel(simdata->compute);
- MSG_host_del_task(MSG_process_get_host(MSG_process_self()), task);
} else if (simdata->comm) {
simcall_comm_cancel(simdata->comm);
}
* to do: starts at 1 and goes to 0. Returns 0 if not started or finished.
*
* It works for either parallel or sequential tasks.
- * TODO: Improve this function by returning 1 if the task has not started
*/
double MSG_task_get_remaining_work_ratio(msg_task_t task) {
// Task in progress
return task->simdata->compute->remainingRatio();
} else {
- // Task not started or finished
- return 0;
+ // Task not started (flops_amount is > 0.0) or finished (flops_amount is set to 0.0)
+ return task->simdata->flops_amount > 0.0 ? 1.0 : 0.0;
}
}
if (task->simdata->compute)
simcall_execution_set_bound(task->simdata->compute, task->simdata->bound);
}
-}