瀏覽代碼

fix stupid bug fix

Simon Archipoff 11 年之前
父節點
當前提交
574fc8bd5d
共有 2 個文件被更改,包括 10 次插入4 次删除
  1. 2 1
      src/sched_policies/node_fifo.c
  2. 8 3
      src/sched_policies/node_work_stealing.c

+ 2 - 1
src/sched_policies/node_fifo.c

@@ -27,7 +27,8 @@ static double fifo_estimated_end(struct starpu_sched_node * node)
 	int card = starpu_bitmap_cardinal(node->workers_in_ctx);
 	STARPU_ASSERT(card != 0);
 	STARPU_PTHREAD_MUTEX_LOCK(mutex);
-	double estimated_end = (fifo->exp_start = starpu_timing_now()) + fifo->exp_len / card;
+	fifo->exp_start = STARPU_MAX(fifo->exp_start, starpu_timing_now());
+	double estimated_end = fifo->exp_start + fifo->exp_len / card;
 	STARPU_PTHREAD_MUTEX_UNLOCK(mutex);
 
 	return estimated_end;

+ 8 - 3
src/sched_policies/node_work_stealing.c

@@ -112,7 +112,10 @@ static struct starpu_task * pop_task(struct starpu_sched_node * node, unsigned s
 	if(task)
 	{
 		if(!isnan(task->predicted))
+		{
 			wsd->fifos[i]->exp_len -= task->predicted;
+			wsd->fifos[i]->exp_start = starpu_timing_now() + task->predicted;
+		}
 	}
 	else
 		wsd->fifos[i]->exp_len = 0.0;
@@ -143,18 +146,20 @@ double _ws_estimated_end(struct starpu_sched_node * node)
 	STARPU_ASSERT(starpu_sched_node_is_work_stealing(node));
 	struct _starpu_work_stealing_data * wsd = node->data;
 	double sum_len = 0.0;
-	double sum_end = 0.0;
+	double sum_start = 0.0;
 	int i;
 	for(i = 0; i < node->nchilds; i++)
 	{
 		STARPU_PTHREAD_MUTEX_LOCK(wsd->mutexes[i]);
 		sum_len += wsd->fifos[i]->exp_len;
+		wsd->fifos[i]->exp_start = STARPU_MAX(starpu_timing_now(), wsd->fifos[i]->exp_start);
+		sum_start += wsd->fifos[i]->exp_start;
 		STARPU_PTHREAD_MUTEX_UNLOCK(wsd->mutexes[i]);
-		sum_end += node->childs[i]->estimated_end(node->childs[i]);
+
 	}
 	int nb_workers = starpu_bitmap_cardinal(node->workers_in_ctx);
 
-	return sum_end / node->nchilds + sum_len / nb_workers;
+	return (sum_start + sum_len) / nb_workers;
 }
 
 double _ws_estimated_load(struct starpu_sched_node * node)