From 2177056d39279d30b965cf282972c16e305063ff Mon Sep 17 00:00:00 2001 From: alegrand Date: Fri, 10 Aug 2007 14:51:02 +0000 Subject: [PATCH] Use simple communications and computations whenever possible... git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@4070 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/simdag/sd_task.c | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/simdag/sd_task.c b/src/simdag/sd_task.c index 158184d935..1dacb6d02e 100644 --- a/src/simdag/sd_task.c +++ b/src/simdag/sd_task.c @@ -645,13 +645,38 @@ void __SD_task_really_run(SD_task_t task) { 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==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; -- 2.20.1