浏览代码

add relax on the push side too

Olivier Aumage 8 年之前
父节点
当前提交
d19549790f
共有 2 个文件被更改,包括 6 次插入0 次删除
  1. 4 0
      src/core/workers.h
  2. 2 0
      src/sched_policies/eager_central_policy.c

+ 4 - 0
src/core/workers.h

@@ -924,6 +924,8 @@ static inline void _starpu_worker_relax_on(void)
 		return;
 	struct _starpu_worker *worker = _starpu_get_worker_struct(workerid);
 	STARPU_ASSERT(worker != NULL);
+	if (!worker->state_sched_op_pending)
+		return;
 	STARPU_PTHREAD_MUTEX_LOCK_SCHED(&worker->sched_mutex);
 	STARPU_ASSERT(!worker->state_safe_for_observation);
 	worker->state_safe_for_observation = 1;
@@ -938,6 +940,8 @@ static inline void _starpu_worker_relax_off(void)
 		return;
 	struct _starpu_worker *worker = _starpu_get_worker_struct(workerid);
 	STARPU_ASSERT(worker != NULL);
+	if (!worker->state_sched_op_pending)
+		return;
 	STARPU_PTHREAD_MUTEX_LOCK_SCHED(&worker->sched_mutex);
 	STARPU_ASSERT(worker->state_safe_for_observation);
 	worker->state_safe_for_observation = 0;

+ 2 - 0
src/sched_policies/eager_central_policy.c

@@ -75,7 +75,9 @@ static int push_task_eager_policy(struct starpu_task *task)
 	unsigned sched_ctx_id = task->sched_ctx;
 	struct _starpu_eager_center_policy_data *data = (struct _starpu_eager_center_policy_data*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 
+	_starpu_worker_relax_on();
 	STARPU_PTHREAD_MUTEX_LOCK(&data->policy_mutex);
+	_starpu_worker_relax_off();
 	starpu_task_list_push_back(&data->fifo->taskq,task);
 	data->fifo->ntasks++;
 	data->fifo->nprocessed++;