X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/07c319ec54d6fc778ee3cc5e75a747242006723e..b5d3a43ce6f22275460e1cbeffd55dd0c70d6ca6:/src/simix/smx_host.c diff --git a/src/simix/smx_host.c b/src/simix/smx_host.c index e8d184a7a0..a85b8ffa56 100644 --- a/src/simix/smx_host.c +++ b/src/simix/smx_host.c @@ -8,6 +8,7 @@ #include "xbt/sysdep.h" #include "xbt/log.h" #include "xbt/dict.h" +#include "mc/mc.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_host, simix, "Logging specific to SIMIX (hosts)"); @@ -186,29 +187,25 @@ smx_action_t SIMIX_host_execute(const char *name, smx_host_t host, action->request_list = xbt_fifo_new(); action->state = SIMIX_RUNNING; action->execution.host = host; - + #ifdef HAVE_TRACING action->category = NULL; #endif -#ifdef HAVE_MC /* set surf's action */ - if(!_surf_do_model_check) -#endif - { - action->execution.surf_exec = - surf_workstation_model->extension.workstation.execute(host->host, - computation_amount); - surf_workstation_model->action_data_set(action->execution.surf_exec, action); + if (!MC_IS_ENABLED) { + action->execution.surf_exec = + surf_workstation_model->extension.workstation.execute(host->host, + computation_amount); + surf_workstation_model->action_data_set(action->execution.surf_exec, action); } - + #ifdef HAVE_TRACING TRACE_smx_host_execute(action); - TRACE_surf_action(action->execution.surf_exec, action->category); #endif DEBUG1("Create execute action %p", action); - + return action; } @@ -227,7 +224,7 @@ smx_action_t SIMIX_host_parallel_execute( const char *name, action->request_list = xbt_fifo_new(); action->state = SIMIX_RUNNING; action->execution.host = NULL; /* FIXME: do we need the list of hosts? */ - + #ifdef HAVE_TRACING action->category = NULL; #endif @@ -237,17 +234,14 @@ smx_action_t SIMIX_host_parallel_execute( const char *name, for (i = 0; i < host_nb; i++) workstation_list[i] = host_list[i]->host; -#ifdef HAVE_MC /* set surf's action */ - if(!_surf_do_model_check) -#endif - { - action->execution.surf_exec = - surf_workstation_model->extension.workstation. - execute_parallel_task(host_nb, workstation_list, computation_amount, - communication_amount, amount, rate); - - surf_workstation_model->action_data_set(action->execution.surf_exec, action); + if (!MC_IS_ENABLED) { + action->execution.surf_exec = + surf_workstation_model->extension.workstation. + execute_parallel_task(host_nb, workstation_list, computation_amount, + communication_amount, amount, rate); + + surf_workstation_model->action_data_set(action->execution.surf_exec, action); } DEBUG1("Create parallel execute action %p", action); @@ -263,11 +257,11 @@ void SIMIX_host_execution_destroy(smx_action_t action) xbt_fifo_free(action->request_list); - if (action->execution.surf_exec){ + if (action->execution.surf_exec) { surf_workstation_model->action_unref(action->execution.surf_exec); action->execution.surf_exec = NULL; } - + #ifdef HAVE_TRACING TRACE_smx_action_destroy(action); #endif @@ -278,15 +272,15 @@ void SIMIX_host_execution_cancel(smx_action_t action) { DEBUG1("Cancel action %p", action); - if(action->execution.surf_exec) + if (action->execution.surf_exec) surf_workstation_model->action_cancel(action->execution.surf_exec); } double SIMIX_host_execution_get_remains(smx_action_t action) { - double result = 0; - - if(action->state == SIMIX_RUNNING) + double result = 0.0; + + if (action->state == SIMIX_RUNNING) result = surf_workstation_model->get_remains(action->execution.surf_exec); return result; @@ -312,14 +306,12 @@ void SIMIX_pre_host_execution_wait(smx_req_t req) xbt_fifo_push(action->request_list, req); req->issuer->waiting_action = action; -#ifdef HAVE_MC /* set surf's action */ - if(_surf_do_model_check){ + if (MC_IS_ENABLED){ action->state = SIMIX_DONE; SIMIX_execution_finish(action); } -#endif - + /* If the action is already finished then perform the error handling */ if (action->state != SIMIX_RUNNING) SIMIX_execution_finish(action); @@ -327,12 +319,12 @@ void SIMIX_pre_host_execution_wait(smx_req_t req) void SIMIX_host_execution_suspend(smx_action_t action) { - surf_workstation_model->suspend(action->execution.surf_exec); + surf_workstation_model->suspend(action->execution.surf_exec); } void SIMIX_host_execution_resume(smx_action_t action) { - surf_workstation_model->suspend(action->execution.surf_exec); + surf_workstation_model->suspend(action->execution.surf_exec); } void SIMIX_execution_finish(smx_action_t action) @@ -348,7 +340,7 @@ void SIMIX_execution_finish(smx_action_t action) /* do nothing, action done*/ DEBUG0("SIMIX_execution_finished: execution successful"); break; - + case SIMIX_FAILED: TRY { DEBUG1("SIMIX_execution_finished: host '%s' failed", req->issuer->smx_host->name); @@ -358,7 +350,7 @@ void SIMIX_execution_finish(smx_action_t action) req->issuer->doexception = 1; } break; - + case SIMIX_CANCELED: TRY { DEBUG0("SIMIX_execution_finished: execution canceled"); @@ -368,7 +360,7 @@ void SIMIX_execution_finish(smx_action_t action) req->issuer->doexception = 1; } break; - + default: THROW_IMPOSSIBLE; } @@ -388,13 +380,25 @@ void SIMIX_post_host_execute(smx_action_t action) else action->state = SIMIX_DONE; - if (action->execution.surf_exec){ + if (action->execution.surf_exec) { surf_workstation_model->action_unref(action->execution.surf_exec); action->execution.surf_exec = NULL; } - + /* If there are requests associated with the action, then answer them */ if (xbt_fifo_size(action->request_list)) SIMIX_execution_finish(action); } + +#ifdef HAVE_TRACING +void SIMIX_set_category(smx_action_t action, const char *category) +{ + if (action->type == SIMIX_ACTION_EXECUTE){ + surf_workstation_model->set_category(action->execution.surf_exec, category); + }else if (action->type == SIMIX_ACTION_COMMUNICATE){ + surf_workstation_model->set_category(action->comm.surf_comm, category); + } +} +#endif +