MSG_error_t MSG_task_get(m_task_t * task, m_channel_t channel);
MSG_error_t MSG_task_put(m_task_t task, m_host_t dest,
m_channel_t channel);
+MSG_error_t MSG_task_put_bounded(m_task_t task,
+ m_host_t dest, m_channel_t channel,
+ long double max_rate);
MSG_error_t MSG_task_execute(m_task_t task);
int MSG_task_Iprobe(m_channel_t channel);
int MSG_task_probe_from(m_channel_t channel);
char *name = NULL;
void *workstation = NULL;
- surf_workstation_resource_init_CLM03(file);
+/* surf_workstation_resource_init_CLM03(file); */
+ surf_workstation_resource_init_KCCFLN05(file);
xbt_dict_foreach(workstation_set, cursor, name, workstation) {
__MSG_host_create(name, workstation, NULL);
/* Transfer */
t_simdata->using++;
+
t_simdata->comm = surf_workstation_resource->extension_public->
communicate(MSG_process_get_host(t_simdata->sender)->simdata->host,
- h->simdata->host, t_simdata->message_size);
+ h->simdata->host, t_simdata->message_size,t_simdata->rate);
+
surf_workstation_resource->common_public->action_set_data(t_simdata->comm,t);
if(__MSG_process_isBlocked(t_simdata->sender))
if(remote_host->simdata->sleeping[channel])
__MSG_process_unblock(remote_host->simdata->sleeping[channel]);
- else {
+/* else { */
process->simdata->put_host = dest;
process->simdata->put_channel = channel;
while(!(task_simdata->comm))
__MSG_process_block();
process->simdata->put_host = NULL;
process->simdata->put_channel = -1;
- }
+/* } */
do {
__MSG_task_wait_event(process, task);
else MSG_RETURN(MSG_TRANSFER_FAILURE);
}
+MSG_error_t MSG_task_put_bounded(m_task_t task,
+ m_host_t dest, m_channel_t channel,
+ long double max_rate)
+{
+ task->simdata->rate=max_rate;
+ return(MSG_task_put(task, dest, channel));
+}
+
/** \ingroup msg_gos_functions
* \brief Executes a task and waits for its termination.
*
"Got a problem in deciding which action to choose !");
simdata->suspended = 1;
if(simdata_task->compute)
- surf_workstation_resource->extension_public->suspend(simdata_task->compute);
+ surf_workstation_resource->common_public->suspend(simdata_task->compute);
else
- surf_workstation_resource->extension_public->suspend(simdata_task->comm);
+ surf_workstation_resource->common_public->suspend(simdata_task->comm);
} else {
m_task_t dummy = MSG_TASK_UNINITIALIZED;
dummy = MSG_task_create("suspended", 0.0, 0, NULL);
simdata = process->simdata;
simdata->suspended = 1;
__MSG_task_execute(process,dummy);
- surf_workstation_resource->extension_public->suspend(dummy->simdata->compute);
+ surf_workstation_resource->common_public->suspend(dummy->simdata->compute);
__MSG_wait_for_computation(process,dummy);
simdata->suspended = 0;
if(simdata_task->compute)
- surf_workstation_resource->extension_public->resume(simdata_task->compute);
+ surf_workstation_resource->common_public->resume(simdata_task->compute);
else
- surf_workstation_resource->extension_public->resume(simdata_task->comm);
+ surf_workstation_resource->common_public->resume(simdata_task->comm);
MSG_RETURN(MSG_OK);
}
process->simdata->blocked=1;
__MSG_task_execute(process,dummy);
- surf_workstation_resource->extension_public->suspend(dummy->simdata->compute);
+ surf_workstation_resource->common_public->suspend(dummy->simdata->compute);
__MSG_wait_for_computation(process,dummy);
process->simdata->blocked=0;
xbt_assert0(simdata->blocked,"Process not blocked");
- surf_workstation_resource->extension_public->resume(simdata_task->compute);
+ surf_workstation_resource->common_public->resume(simdata_task->compute);
MSG_RETURN(MSG_OK);
}
double computation_amount; /* Computation size */
xbt_dynar_t sleeping; /* process to wake-up */
m_process_t sender;
+ double rate;
int using;
} s_simdata_task_t;
simdata->sleeping = xbt_dynar_new(sizeof(m_process_t),NULL);
simdata->computation_amount = compute_duration;
simdata->message_size = message_size;
+ simdata->rate = -1.0;
simdata->using = 1;
simdata->sender = NULL;
+
return task;
}