__SD_print_dependencies(dst); */
}
+/**
+ * \brief Indacates whether there is a dependency between two tasks.
+ *
+ * \param src a task
+ * \param dst a task depending on \a src
+ */
+int SD_task_dependency_exists(SD_task_t src, SD_task_t dst) {
+ xbt_dynar_t dynar;
+ int length;
+ int i;
+ SD_dependency_t dependency;
+
+ SD_CHECK_INIT_DONE();
+ xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
+
+ dynar = src->tasks_after;
+ length = xbt_dynar_length(dynar);
+
+ for (i = 0; i < length; i++) {
+ xbt_dynar_get_cpy(dynar, i, &dependency);
+ if (dependency->dst == dst) return 1;
+ }
+ return 0;
+}
+
/**
* \brief Remove a dependency between two tasks
*
surf_workstations[i] = task->workstation_list[i]->surf_workstation;
}
- task->surf_action = surf_workstation_resource->extension_public->
- execute_parallel_task(task->workstation_nb,
- surf_workstations,
- task->computation_amount,
- task->communication_amount,
- task->amount,
- task->rate);
+ task->surf_action = NULL;
+ if((task->workstation_nb==1) &&
+ (task->communication_amount[0]==0.0)) {
+ task->surf_action = surf_workstation_resource->extension_public->
+ execute(surf_workstations[0], task->computation_amount[0]);
+ } else if((task->workstation_nb==1) &&
+ (task->computation_amount[0]==0.0)) {
+ task->surf_action = surf_workstation_resource->extension_public->
+ communicate(surf_workstations[0], surf_workstations[0],
+ task->communication_amount[0],task->rate);
+ } else if((task->workstation_nb==2) &&
+ (task->computation_amount[0]==0.0)&&
+ (task->computation_amount[1]==0.0)) {
+ int nb=0;
+ double value=0.0;
+
+ for (i = 0; i < task->workstation_nb*task->workstation_nb; i++) {
+ if(task->communication_amount[i]>0.0) {
+ nb++;
+ value = task->communication_amount[i];
+ }
+ }
+ if(nb==1) {
+ task->surf_action = surf_workstation_resource->extension_public->
+ communicate(surf_workstations[0], surf_workstations[1],
+ value, task->rate);
+ }
+ }
+ if(!task->surf_action)
+ task->surf_action = surf_workstation_resource->extension_public->
+ execute_parallel_task(task->workstation_nb,
+ surf_workstations,
+ task->computation_amount,
+ task->communication_amount,
+ task->amount,
+ task->rate);
+
surf_workstation_resource->common_public->action_set_data(task->surf_action, task);
task->state_changed = 1;