소스 검색

Use the starpu_tag_wait function in the dw_factolu_tag example

Cédric Augonnet 16 년 전
부모
커밋
7576b974f1
1개의 변경된 파일4개의 추가작업 그리고 20개의 파일을 삭제
  1. 4 20
      examples/heat/dw_factolu_tag.c

+ 4 - 20
examples/heat/dw_factolu_tag.c

@@ -40,12 +40,6 @@ static struct starpu_task *create_task(starpu_tag_t id)
 	return task;
 }
 
-static void terminal_callback(void *argcb)
-{
-	sem_t *sem = argcb;
-	sem_post(sem);
-}
-
 static starpu_codelet cl11 = {
 	.where = ANY,
 	.core_func = dw_core_codelet_update_u11,
@@ -56,7 +50,7 @@ static starpu_codelet cl11 = {
 	.model = &model_11
 };
 
-static struct starpu_task *create_task_11(starpu_data_handle dataA, unsigned k, unsigned nblocks, sem_t *sem)
+static struct starpu_task *create_task_11(starpu_data_handle dataA, unsigned k)
 {
 //	printf("task 11 k = %d TAG = %llx\n", k, (TAG11(k)));
 
@@ -76,12 +70,6 @@ static struct starpu_task *create_task_11(starpu_data_handle dataA, unsigned k,
 		starpu_tag_declare_deps(TAG11(k), 1, TAG22(k-1, k, k));
 	}
 
-	/* the very last task must be notified */
-	if (k == nblocks -1) {
-		task->callback_func = terminal_callback;
-		task->callback_arg = sem;
-	}
-
 	return task;
 }
 
@@ -211,10 +199,6 @@ static void dw_codelet_facto_v3(starpu_data_handle dataA, unsigned nblocks)
 	struct timeval start;
 	struct timeval end;
 
-	/* create a new codelet */
-	sem_t sem;
-	sem_init(&sem, 0, 0U);
-
 	struct starpu_task *entry_task = NULL;
 
 	/* create all the DAG nodes */
@@ -222,7 +206,7 @@ static void dw_codelet_facto_v3(starpu_data_handle dataA, unsigned nblocks)
 
 	for (k = 0; k < nblocks; k++)
 	{
-		struct starpu_task *task = create_task_11(dataA, k, nblocks, &sem);
+		struct starpu_task *task = create_task_11(dataA, k);
 
 		/* we defer the launch of the first task */
 		if (k == 0) {
@@ -252,8 +236,8 @@ static void dw_codelet_facto_v3(starpu_data_handle dataA, unsigned nblocks)
 	starpu_submit_task(entry_task);
 
 	/* stall the application until the end of computations */
-	sem_wait(&sem);
-	sem_destroy(&sem);
+	starpu_tag_wait(TAG11(nblocks-1));
+
 	gettimeofday(&end, NULL);
 
 	double timing = (double)((end.tv_sec - start.tv_sec)*1000000 + (end.tv_usec - start.tv_usec));