Browse Source

bugs fixs

Simon Archipoff 12 years ago
parent
commit
768373c480

+ 8 - 3
src/sched_policies/node_fifo.c

@@ -16,10 +16,11 @@ static struct _starpu_task_execute_preds estimated_execute_preds(struct _starpu_
 	struct _starpu_task_execute_preds preds = node->childs[0]->estimated_execute_preds(node->childs[0],task);
 	struct _starpu_task_execute_preds preds = node->childs[0]->estimated_execute_preds(node->childs[0],task);
 
 
 	struct _starpu_fifo_taskq * fifo = node->data;
 	struct _starpu_fifo_taskq * fifo = node->data;
+//	printf("%p %f %f %f\n",fifo ,fifo->exp_start,fifo->exp_len,fifo->exp_end);
 
 
 	STARPU_PTHREAD_RWLOCK_RDLOCK(&node->mutex);
 	STARPU_PTHREAD_RWLOCK_RDLOCK(&node->mutex);
 	if(preds.state == PERF_MODEL)
 	if(preds.state == PERF_MODEL)
-		preds.expected_finish_time = _starpu_compute_expected_time(starpu_timing_now(),
+		preds.expected_finish_time = _starpu_compute_expected_time(fifo->exp_start = starpu_timing_now(),
 									   preds.expected_finish_time + fifo->exp_end,
 									   preds.expected_finish_time + fifo->exp_end,
 									   preds.expected_length + fifo->exp_len,
 									   preds.expected_length + fifo->exp_len,
 									   preds.expected_transfer_length);
 									   preds.expected_transfer_length);
@@ -51,8 +52,11 @@ static int push_task(struct _starpu_sched_node * node, struct starpu_task * task
 	STARPU_PTHREAD_RWLOCK_WRLOCK(&node->mutex);
 	STARPU_PTHREAD_RWLOCK_WRLOCK(&node->mutex);
 	struct _starpu_fifo_taskq * fifo = node->data;
 	struct _starpu_fifo_taskq * fifo = node->data;
 	int ret = _starpu_fifo_push_sorted_task(fifo, task);
 	int ret = _starpu_fifo_push_sorted_task(fifo, task);
-	fifo->exp_end += task->predicted/node->nworkers;
-	fifo->exp_len += task->predicted/node->nworkers;
+	if(!isnan(task->predicted))
+	{
+		fifo->exp_len += task->predicted/node->nworkers;
+		fifo->exp_end = fifo->exp_start + fifo->exp_end;
+	}
 	STARPU_PTHREAD_RWLOCK_UNLOCK(&node->mutex);
 	STARPU_PTHREAD_RWLOCK_UNLOCK(&node->mutex);
 	node->available(node);
 	node->available(node);
 	return ret;
 	return ret;
@@ -68,6 +72,7 @@ static struct starpu_task * pop_task(struct _starpu_sched_node * node, unsigned
 		fifo->exp_start = starpu_timing_now() + task->predicted;
 		fifo->exp_start = starpu_timing_now() + task->predicted;
 		if(!isnan(task->predicted))
 		if(!isnan(task->predicted))
 			fifo->exp_len -= task->predicted/node->nworkers;
 			fifo->exp_len -= task->predicted/node->nworkers;
+		fifo->exp_end = fifo->exp_start + fifo->exp_end;
 	}
 	}
 	STARPU_PTHREAD_RWLOCK_UNLOCK(&node->mutex);
 	STARPU_PTHREAD_RWLOCK_UNLOCK(&node->mutex);
 	if(task)
 	if(task)

+ 2 - 4
src/sched_policies/node_heft.c

@@ -53,7 +53,7 @@ static double compute_fitness_perf_model(struct _starpu_sched_node * child STARP
 
 
 static int push_task(struct _starpu_sched_node * node, struct starpu_task * task)
 static int push_task(struct _starpu_sched_node * node, struct starpu_task * task)
 {
 {
-	STARPU_PTHREAD_RWLOCK_RDLOCK(&node->mutex);
+ 	STARPU_PTHREAD_RWLOCK_RDLOCK(&node->mutex);
 	struct _starpu_task_execute_preds preds[node->nchilds];
 	struct _starpu_task_execute_preds preds[node->nchilds];
 	int i;
 	int i;
 	int calibrating = 0;
 	int calibrating = 0;
@@ -177,7 +177,7 @@ static void initialize_heft_center_policy(unsigned sched_ctx_id)
 	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	starpu_sched_ctx_create_worker_collection(sched_ctx_id, STARPU_WORKER_LIST);
 	struct _starpu_sched_tree *data = malloc(sizeof(struct _starpu_sched_tree));
 	struct _starpu_sched_tree *data = malloc(sizeof(struct _starpu_sched_tree));
 	STARPU_PTHREAD_RWLOCK_INIT(&data->mutex,NULL);
 	STARPU_PTHREAD_RWLOCK_INIT(&data->mutex,NULL);
-	data->root = _starpu_sched_node_heft_create(1,1,1,1);
+	data->root = _starpu_sched_node_heft_create(1.0,1.0,1.0,1.0);
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)data);
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)data);
 }
 }
 
 
@@ -245,8 +245,6 @@ struct _starpu_sched_node * _starpu_sched_node_heft_create(double alpha, double
 
 
 	node->data = data;
 	node->data = data;
 	node->push_task = push_task;
 	node->push_task = push_task;
-	data->alpha = data->beta = data->gamma = data->idle_power = 0.0;
-	//data->total_task_cnt = data->ready_task_cnt = 0;
 	node->add_child = add_child;
 	node->add_child = add_child;
 	node->remove_child = remove_child;
 	node->remove_child = remove_child;
 	node->destroy_node = destroy_heft_node;
 	node->destroy_node = destroy_heft_node;

+ 1 - 1
src/sched_policies/node_work_stealing.c

@@ -268,7 +268,7 @@ static int push_task(struct _starpu_sched_node * node, struct starpu_task * task
 			break;
 			break;
 		}
 		}
 	}
 	}
-	wsd->last_push_child = i;
+	wsd->last_push_child = (wsd->last_push_child + 1) % node->nchilds;
 	node->childs[i]->available(node->childs[i]);
 	node->childs[i]->available(node->childs[i]);
 	return ret;
 	return ret;
 }
 }