- DEBUG0("Looking for next event");
- while ((next_event_date = tmgr_history_next_date(history)) != -1.0) {
- DEBUG1("Next TRACE event : %f", next_event_date);
- if ((min != -1.0) && (next_event_date > NOW + min))
- break;
- DEBUG0("Updating models");
+
+ if (surf_get_nthreads() > 1) {
+ /* parallel version */
+#ifdef CONTEXT_THREADS
+ xbt_parmap_apply(surf_parmap, (void_f_pvoid_t) surf_share_resources, model_list);
+#endif
+ }
+ else {
+ /* sequential version */
+ xbt_dynar_foreach(model_list, iter, model) {
+ surf_share_resources(model);
+ }
+ }
+
+ unsigned i;
+ for (i = 0; i < xbt_dynar_length(model_list); i++) {
+ if ((min < 0.0 || surf_mins[i] < min)
+ && surf_mins[i] >= 0.0) {
+ min = surf_mins[i];
+ }
+ }
+
+ XBT_DEBUG("Min for resources (remember that NS3 dont update that value) : %f", min);
+
+ XBT_DEBUG("Looking for next trace event");
+
+ do {
+ XBT_DEBUG("Next TRACE event : %f", next_event_date);
+
+ next_event_date = tmgr_history_next_date(history);
+
+ if(surf_network_model->name && !strcmp(surf_network_model->name,"network NS3")){
+ if(next_event_date!=-1.0 && min!=-1.0) {
+ min = MIN(next_event_date - NOW, min);
+ } else{
+ min = MAX(next_event_date - NOW, min);
+ }
+
+ XBT_DEBUG("Run for NS3 at most %f", min);
+ // run until min or next flow
+ model_next_action_end = surf_network_model->model_private->share_resources(min);
+
+ XBT_DEBUG("Min for NS3 : %f", model_next_action_end);
+ if(model_next_action_end>=0.0)
+ min = model_next_action_end;
+ }
+
+ if (next_event_date == -1.0) {
+ XBT_DEBUG("no next TRACE event. Stop searching for it");
+ break;
+ }
+
+ if ((min != -1.0) && (next_event_date > NOW + min)) break;
+
+ XBT_DEBUG("Updating models");