X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6ee7e9c2e455536ab817ae0136acfbb53822eecd..fbd4fe2f3be7345d4e37fe02ce25b4a3a9f24a2f:/src/surf/cpu_ti.c diff --git a/src/surf/cpu_ti.c b/src/surf/cpu_ti.c index 1ad3060837..30a42b0787 100644 --- a/src/surf/cpu_ti.c +++ b/src/surf/cpu_ti.c @@ -156,17 +156,17 @@ static cpu_ti_t cpu_ti_new(char *name, double power_peak, s_tmgr_event_t val; cpu_ti_t cpu = xbt_new0(s_cpu_ti_t, 1); s_surf_action_cpu_ti_t ti_action; - xbt_assert1(!surf_model_resource_by_name(surf_cpu_model, name), + xbt_assert(!surf_cpu_resource_by_name(name), "Host '%s' declared several times in the platform file", name); - xbt_assert0(core==1,"Multi-core not handled with this model yet"); + xbt_assert(core==1,"Multi-core not handled with this model yet"); cpu->action_set = xbt_swag_new(xbt_swag_offset(ti_action, cpu_list_hookup)); cpu->generic_resource.model = surf_cpu_model; cpu->generic_resource.name = name; cpu->generic_resource.properties = cpu_properties; cpu->power_peak = power_peak; - xbt_assert0(cpu->power_peak > 0, "Power has to be >0"); + xbt_assert(cpu->power_peak > 0, "Power has to be >0"); XBT_DEBUG("power scale %lf", power_scale); cpu->power_scale = power_scale; cpu->avail_trace = cpu_ti_parse_trace(power_trace, power_scale); @@ -185,8 +185,7 @@ static cpu_ti_t cpu_ti_new(char *name, double power_peak, cpu->avail_trace->last_time, 0, cpu); } } - xbt_dict_set(surf_model_resource_set(surf_cpu_model), name, cpu, - surf_resource_free); + xbt_lib_set(host_lib, name, SURF_CPU_LEVEL, cpu); return cpu; } @@ -206,7 +205,7 @@ static void parse_cpu_ti_init(void) power_trace = tmgr_trace_new(A_surfxml_host_availability_file); surf_parse_get_int(&core, A_surfxml_host_core); - xbt_assert0((A_surfxml_host_state == A_surfxml_host_state_ON) || + xbt_assert((A_surfxml_host_state == A_surfxml_host_state_ON) || (A_surfxml_host_state == A_surfxml_host_state_OFF), "Invalid state"); if (A_surfxml_host_state == A_surfxml_host_state_ON) @@ -215,10 +214,10 @@ static void parse_cpu_ti_init(void) state_initial = SURF_RESOURCE_OFF; state_trace = tmgr_trace_new(A_surfxml_host_state_file); - current_property_set = xbt_dict_new(); cpu_ti_new(xbt_strdup(A_surfxml_host_id), power_peak, power_scale, power_trace, core, state_initial, state_trace, current_property_set); + current_property_set = NULL; } @@ -236,10 +235,10 @@ static void add_traces_cpu_ti(void) /* connect all traces relative to hosts */ xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) { tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name); - cpu_ti_t cpu = surf_model_resource_by_name(surf_cpu_model, elm); + cpu_ti_t cpu = surf_cpu_resource_by_name(elm); - xbt_assert1(cpu, "Host %s undefined", elm); - xbt_assert1(trace, "Trace %s undefined", trace_name); + xbt_assert(cpu, "Host %s undefined", elm); + xbt_assert(trace, "Trace %s undefined", trace_name); if (cpu->state_event) { XBT_DEBUG("Trace already configured for this CPU(%s), ignoring it", @@ -252,10 +251,10 @@ static void add_traces_cpu_ti(void) xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) { tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name); - cpu_ti_t cpu = surf_model_resource_by_name(surf_cpu_model, elm); + cpu_ti_t cpu = surf_cpu_resource_by_name(elm); - xbt_assert1(cpu, "Host %s undefined", elm); - xbt_assert1(trace, "Trace %s undefined", trace_name); + xbt_assert(cpu, "Host %s undefined", elm); + xbt_assert(trace, "Trace %s undefined", trace_name); XBT_DEBUG("Add power trace: %s to CPU(%s)", trace_name, elm); if (cpu->avail_trace) @@ -281,7 +280,7 @@ static void add_traces_cpu_ti(void) static void cpu_ti_define_callbacks(const char *file) { - surfxml_add_callback(STag_surfxml_host_cb_list, parse_cpu_ti_init); + surfxml_add_callback(ETag_surfxml_host_cb_list, parse_cpu_ti_init); surfxml_add_callback(ETag_surfxml_platform_cb_list, &add_traces_cpu_ti); } @@ -583,7 +582,7 @@ static surf_action_t cpu_ti_execute(void *cpu, double size) surf_action_cpu_ti_t action = NULL; cpu_ti_t CPU = cpu; - XBT_IN_F("(%s,%g)", surf_resource_name(CPU), size); + XBT_IN("(%s,%g)", surf_resource_name(CPU), size); action = surf_action_new(sizeof(s_surf_action_cpu_ti_t), size, surf_cpu_model, CPU->state_current != SURF_RESOURCE_ON); @@ -597,7 +596,7 @@ static surf_action_t cpu_ti_execute(void *cpu, double size) action->suspended = 0; /* Should be useless because of the calloc but it seems to help valgrind... */ - XBT_OUT; + XBT_OUT(); return (surf_action_t) action; } @@ -613,7 +612,7 @@ static surf_action_t cpu_ti_action_sleep(void *cpu, double duration) if (duration > 0) duration = MAX(duration, MAXMIN_PRECISION); - XBT_IN_F("(%s,%g)", surf_resource_name(cpu), duration); + XBT_IN("(%s,%g)", surf_resource_name(cpu), duration); action = (surf_action_cpu_ti_t) cpu_ti_execute(cpu, 1.0); action->generic_action.max_duration = duration; action->suspended = 2; @@ -625,30 +624,30 @@ static surf_action_t cpu_ti_action_sleep(void *cpu, double duration) cpu_ti_running_action_set_that_does_not_need_being_checked; xbt_swag_insert(action, ((surf_action_t) action)->state_set); } - XBT_OUT; + XBT_OUT(); return (surf_action_t) action; } static void cpu_ti_action_suspend(surf_action_t action) { - XBT_IN_F("(%p)", action); + XBT_IN("(%p)", action); if (((surf_action_cpu_ti_t) action)->suspended != 2) { ((surf_action_cpu_ti_t) action)->suspended = 1; xbt_heap_remove(cpu_ti_action_heap, ((surf_action_cpu_ti_t) action)->index_heap); xbt_swag_insert(ACTION_GET_CPU(action), cpu_ti_modified_cpu); } - XBT_OUT; + XBT_OUT(); } static void cpu_ti_action_resume(surf_action_t action) { - XBT_IN_F("(%p)", action); + XBT_IN("(%p)", action); if (((surf_action_cpu_ti_t) action)->suspended != 2) { ((surf_action_cpu_ti_t) action)->suspended = 0; xbt_swag_insert(ACTION_GET_CPU(action), cpu_ti_modified_cpu); } - XBT_OUT; + XBT_OUT(); } static int cpu_ti_action_is_suspended(surf_action_t action) @@ -662,7 +661,7 @@ static void cpu_ti_action_set_max_duration(surf_action_t action, surf_action_cpu_ti_t ACT = (surf_action_cpu_ti_t) action; double min_finish; - XBT_IN_F("(%p,%g)", action, duration); + XBT_IN("(%p,%g)", action, duration); action->max_duration = duration; @@ -683,26 +682,26 @@ static void cpu_ti_action_set_max_duration(surf_action_t action, } xbt_heap_push(cpu_ti_action_heap, ACT, min_finish); - XBT_OUT; + XBT_OUT(); } static void cpu_ti_action_set_priority(surf_action_t action, double priority) { - XBT_IN_F("(%p,%g)", action, priority); + XBT_IN("(%p,%g)", action, priority); action->priority = priority; xbt_swag_insert(ACTION_GET_CPU(action), cpu_ti_modified_cpu); - XBT_OUT; + XBT_OUT(); } static double cpu_ti_action_get_remains(surf_action_t action) { - XBT_IN_F("(%p)", action); + XBT_IN("(%p)", action); cpu_ti_update_remaining_amount((cpu_ti_t) ((surf_action_cpu_ti_t) action)->cpu, surf_get_clock()); return action->remains; - XBT_OUT; + XBT_OUT(); } static e_surf_resource_state_t cpu_ti_get_state(void *cpu) @@ -734,7 +733,7 @@ static double surf_cpu_ti_get_power_scale(surf_cpu_ti_tgmr_t trace, point = surf_cpu_ti_binary_search(trace->trace->time_points, reduced_a, 0, trace->trace->nb_points - 1); - xbt_dynar_get_cpy(trace->power_trace->event_list, 0, &val); + xbt_dynar_get_cpy(trace->power_trace->event_list, point, &val); return val.value; } @@ -755,21 +754,24 @@ static void cpu_ti_create_resource(char *name, double power_peak, tmgr_trace_t state_trace, xbt_dict_t cpu_properties) { - xbt_assert0(core==1,"Multi-core not handled with this model yet"); + xbt_assert(core==1,"Multi-core not handled with this model yet"); cpu_ti_new(name, power_peak, power_scale, power_trace, core, state_initial, state_trace, cpu_properties); } static void cpu_ti_finalize(void) { - void *cpu; - xbt_dict_cursor_t cursor; + void **cpu; + xbt_lib_cursor_t cursor; char *key; - xbt_dict_foreach(surf_model_resource_set(surf_cpu_model), cursor, key, - cpu) { - cpu_ti_t CPU = cpu; - xbt_swag_free(CPU->action_set); - surf_cpu_ti_free_tmgr(CPU->avail_trace); + + xbt_lib_foreach(host_lib, cursor, key, cpu){ + if(cpu[SURF_CPU_LEVEL]) + { + cpu_ti_t CPU = cpu[SURF_CPU_LEVEL]; + xbt_swag_free(CPU->action_set); + surf_cpu_ti_free_tmgr(CPU->avail_trace); + } } surf_model_exit(surf_cpu_model); @@ -1101,18 +1103,24 @@ static double surf_cpu_ti_solve_trace_simple(surf_cpu_ti_trace_t trace, static int surf_cpu_ti_binary_search(double *array, double a, int low, int high) { - int mid = low + (high - low) / 2; - XBT_DEBUG("a %lf low %d high %d mid %d value %lf", a, low, high, mid, - array[mid]); - /* a == array[mid] */ - if (array[mid] == a) - return mid; - /* a is between mid and mid+1 */ - if (array[mid] < a && array[mid + 1] > a) - return mid; - - if (array[mid] < a) - return surf_cpu_ti_binary_search(array, a, mid + 1, high); - else - return surf_cpu_ti_binary_search(array, a, low, mid - 1); + xbt_assert(low a) + return mid; + + if (array[mid] < a) + low = mid + 1; + else + high = mid - 1; + } + return mid; }