{
char *optim = xbt_cfg_get_string(_sg_cfg_set, "cpu/optim");
- if (surf_cpu_model_pm)
- return;
+ xbt_assert(!surf_cpu_model_pm);
+ xbt_assert(!surf_cpu_model_vm);
if (!strcmp(optim, "TI")) {
surf_cpu_model_init_ti();
}
surf_cpu_model_pm = new CpuCas01Model();
+ surf_cpu_model_vm = new CpuCas01Model();
+
cpu_define_callbacks();
- ModelPtr model = static_cast<ModelPtr>(surf_cpu_model_pm);
- xbt_dynar_push(model_list, &model);
+ ModelPtr model_pm = static_cast<ModelPtr>(surf_cpu_model_pm);
+ ModelPtr model_vm = static_cast<ModelPtr>(surf_cpu_model_vm);
+ xbt_dynar_push(model_list, &model_pm);
+ xbt_dynar_push(model_list, &model_vm);
}
CpuCas01Model::CpuCas01Model() : CpuModel("cpu")
WorkstationVMModelPtr surf_vm_workstation_model = NULL;
void surf_vm_workstation_model_init_current_default(void){
- surf_vm_workstation_model = new WorkstationVMModel();
- xbt_dynar_push(model_list, &surf_vm_workstation_model);
- xbt_dynar_push(model_list_invoke, &surf_vm_workstation_model);
+ if (surf_cpu_model_vm) {
+ surf_vm_workstation_model = new WorkstationVMModel();
+ ModelPtr model = static_cast<ModelPtr>(surf_vm_workstation_model);
+
+ xbt_dynar_push(model_list, &model);
+ xbt_dynar_push(model_list_invoke, &model);
+ }
}
+
/*********
* Model *
*********/
WorkstationVMModel::WorkstationVMModel() : WorkstationModel("Virtual Workstation") {
+ p_cpuModel = surf_cpu_model_vm;
}
/* ind means ''indirect'' that this is a reference on the whole dict_elm
/* 0. Make sure that we already calculated the resource share at the physical
* machine layer. */
{
- unsigned int index_of_pm_ws_model = xbt_dynar_search(model_list_invoke, &surf_workstation_model);
- unsigned int index_of_vm_ws_model = xbt_dynar_search(model_list_invoke, &surf_vm_workstation_model);
+ ModelPtr ws_model = static_cast<ModelPtr>(surf_workstation_model);
+ ModelPtr vm_ws_model = static_cast<ModelPtr>(surf_vm_workstation_model);
+ unsigned int index_of_pm_ws_model = xbt_dynar_search(model_list_invoke, &ws_model);
+ unsigned int index_of_vm_ws_model = xbt_dynar_search(model_list_invoke, &vm_ws_model);
xbt_assert((index_of_pm_ws_model < index_of_vm_ws_model), "Cannot assume surf_workstation_model comes before");
/* Another option is that we call sub_ws->share_resource() here. The
xbt_cfg_setdefault_boolean(_sg_cfg_set, "network/crosstraffic", "yes");
surf_cpu_model_init_Cas01();
surf_network_model_init_LegrandVelho();
+ surf_workstation_model->p_cpuModel = surf_cpu_model_pm;
ModelPtr model = static_cast<ModelPtr>(surf_workstation_model);
xbt_dynar_push(model_list, &model);
double rate);
virtual xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst);
virtual ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate);
+ CpuModelPtr p_cpuModel;
};
/************
0.000015, NULL,
SURF_RESOURCE_ON, NULL,
SURF_LINK_FATPIPE, NULL));
+ p_cpuModel = surf_cpu_model_pm;
}
WorkstationL07Model::~WorkstationL07Model() {
surf_workstation_model = new WorkstationL07Model();
ModelPtr model = static_cast<ModelPtr>(surf_workstation_model);
xbt_dynar_push(model_list, &model);
+ xbt_dynar_push(model_list_invoke, &model);
}
xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst);
ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate);
void addTraces();
- CpuL07ModelPtr p_cpuModel;
NetworkL07ModelPtr p_networkModel;
};
tmgr_trace_t state_trace,
xbt_dict_t cpu_properties);
void addTraces() {DIE_IMPOSSIBLE;};
+
WorkstationL07ModelPtr p_workstationModel;
};