|
@@ -61,11 +61,16 @@ static double fifo_estimated_load(struct starpu_sched_component * component)
|
|
|
starpu_pthread_mutex_t * mutex = &data->mutex;
|
|
|
double relative_speedup = 0.0;
|
|
|
double load = starpu_sched_component_estimated_load(component);
|
|
|
+ const int relaxed_state = _starpu_worker_get_observation_safe_state();
|
|
|
if(STARPU_SCHED_COMPONENT_IS_HOMOGENEOUS(component))
|
|
|
{
|
|
|
int first_worker = starpu_bitmap_first(component->workers_in_ctx);
|
|
|
relative_speedup = starpu_worker_get_relative_speedup(starpu_worker_get_perf_archtype(first_worker, component->tree->sched_ctx_id));
|
|
|
+ if (!relaxed_state)
|
|
|
+ _starpu_worker_enter_section_safe_for_observation();
|
|
|
STARPU_PTHREAD_MUTEX_LOCK(mutex);
|
|
|
+ if (!relaxed_state)
|
|
|
+ _starpu_worker_leave_section_safe_for_observation();
|
|
|
load += fifo->ntasks / relative_speedup;
|
|
|
STARPU_PTHREAD_MUTEX_UNLOCK(mutex);
|
|
|
return load;
|
|
@@ -79,7 +84,11 @@ static double fifo_estimated_load(struct starpu_sched_component * component)
|
|
|
relative_speedup += starpu_worker_get_relative_speedup(starpu_worker_get_perf_archtype(i, component->tree->sched_ctx_id));
|
|
|
relative_speedup /= starpu_bitmap_cardinal(component->workers_in_ctx);
|
|
|
STARPU_ASSERT(!_STARPU_IS_ZERO(relative_speedup));
|
|
|
+ if (!relaxed_state)
|
|
|
+ _starpu_worker_enter_section_safe_for_observation();
|
|
|
STARPU_PTHREAD_MUTEX_LOCK(mutex);
|
|
|
+ if (!relaxed_state)
|
|
|
+ _starpu_worker_leave_section_safe_for_observation();
|
|
|
load += fifo->ntasks / relative_speedup;
|
|
|
STARPU_PTHREAD_MUTEX_UNLOCK(mutex);
|
|
|
}
|
|
@@ -94,8 +103,12 @@ static int fifo_push_local_task(struct starpu_sched_component * component, struc
|
|
|
struct _starpu_fifo_taskq * fifo = data->fifo;
|
|
|
starpu_pthread_mutex_t * mutex = &data->mutex;
|
|
|
int ret = 0;
|
|
|
-
|
|
|
+ const int relaxed_state = _starpu_worker_get_observation_safe_state();
|
|
|
+ if (!relaxed_state)
|
|
|
+ _starpu_worker_enter_section_safe_for_observation();
|
|
|
STARPU_PTHREAD_MUTEX_LOCK(mutex);
|
|
|
+ if (!relaxed_state)
|
|
|
+ _starpu_worker_leave_section_safe_for_observation();
|
|
|
double exp_len;
|
|
|
if(!isnan(task->predicted))
|
|
|
exp_len = fifo->exp_len + task->predicted;
|