Browse Source

Cleanup/Simplify the cholesky example so that it does not use semaphore.

Cédric Augonnet 14 years ago
parent
commit
b4bc510cc9
2 changed files with 4 additions and 24 deletions
  1. 0 4
      examples/cholesky/dw_cholesky.c
  2. 4 20
      examples/cholesky/dw_cholesky_no_stride.c

+ 0 - 4
examples/cholesky/dw_cholesky.c

@@ -162,10 +162,6 @@ static void _dw_cholesky(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 */

+ 4 - 20
examples/cholesky/dw_cholesky_no_stride.c

@@ -35,12 +35,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);
-}
-
 /*
  *	Create the codelets
  */
@@ -63,7 +57,7 @@ static starpu_codelet cl11 =
 	.model = &chol_model_11
 };
 
-static struct starpu_task * create_task_11(unsigned k, unsigned nblocks, sem_t *sem)
+static struct starpu_task * create_task_11(unsigned k, unsigned nblocks)
 {
 //	printf("task 11 k = %d TAG = %llx\n", k, (TAG11(k)));
 
@@ -83,12 +77,6 @@ static struct starpu_task * create_task_11(unsigned k, unsigned nblocks, sem_t *
 		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;
 }
 
@@ -198,10 +186,6 @@ static void dw_cholesky_no_stride(void)
 	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 */
@@ -209,7 +193,7 @@ static void dw_cholesky_no_stride(void)
 
 	for (k = 0; k < nblocks; k++)
 	{
-		struct starpu_task *task = create_task_11(k, nblocks, &sem);
+		struct starpu_task *task = create_task_11(k, nblocks);
 		/* we defer the launch of the first task */
 		if (k == 0) {
 			entry_task = task;
@@ -235,8 +219,8 @@ static void dw_cholesky_no_stride(void)
 	starpu_task_submit(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));