Browse Source

core: add starpu_task_wait_array()

This function allows to wait for an array of tasks. It can be used to
merge different calls to starpu_task_wait().
Samuel Pitoiset 10 years ago
parent
commit
dcbdbc6d85
3 changed files with 18 additions and 3 deletions
  1. 1 0
      include/starpu_task.h
  2. 14 0
      src/core/task.c
  3. 3 3
      tests/main/task_wait_api.c

+ 1 - 0
include/starpu_task.h

@@ -288,6 +288,7 @@ int starpu_task_submit_to_ctx(struct starpu_task *task, unsigned sched_ctx_id);
 int starpu_task_finished(struct starpu_task *task) STARPU_WARN_UNUSED_RESULT;
 
 int starpu_task_wait(struct starpu_task *task) STARPU_WARN_UNUSED_RESULT;
+int starpu_task_wait_array(struct starpu_task **tasks, unsigned nb_tasks) STARPU_WARN_UNUSED_RESULT;
 
 int starpu_task_wait_for_all(void);
 int starpu_task_wait_for_n_submitted(unsigned n);

+ 14 - 0
src/core/task.c

@@ -248,6 +248,20 @@ int starpu_task_wait(struct starpu_task *task)
 	return 0;
 }
 
+int starpu_task_wait_array(struct starpu_task **tasks, unsigned nb_tasks)
+{
+	unsigned i;
+	int ret;
+
+	for (i = 0; i < nb_tasks; i++)
+	{
+		ret = starpu_task_wait(tasks[i]);
+		if (ret)
+			return ret;
+	}
+	return 0;
+}
+
 #ifdef STARPU_OPENMP
 int _starpu_task_test_termination(struct starpu_task *task)
 {

+ 3 - 3
tests/main/task_wait_api.c

@@ -115,9 +115,9 @@ int main(int argc, char **argv)
 	ret = starpu_task_submit(taskK); STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 	ret = starpu_task_submit(taskL); STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
 
-	ret = starpu_task_wait(taskJ); STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_wait");
-	ret = starpu_task_wait(taskK); STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_wait");
-	ret = starpu_task_wait(taskL); STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_wait");
+	struct starpu_task *tasksJKL[3] = {taskJ, taskK, taskL};
+
+	ret = starpu_task_wait_array(tasksJKL, 3); STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_wait_array");
 
 	starpu_task_wait_for_all();