Просмотр исходного кода

Do not wait for the termination of TAG*_SAVE when the data was processed localy

Cédric Augonnet лет назад: 15
Родитель
Сommit
7cec004adf
1 измененных файлов с 34 добавлено и 14 удалено
  1. 34 14
      mpi/examples/mpi_lu/pxlu.c

+ 34 - 14
mpi/examples/mpi_lu/pxlu.c

@@ -398,16 +398,16 @@ static void create_task_12_real(unsigned k, unsigned j)
 
 	task->cl_arg = create_debug_info(j, j, k);
 
-	int myrank;
-	MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
+	unsigned diag_block_is_local = (get_block_rank(k, k) == rank);
 
-	STARPU_ASSERT(myrank == rank);
+	starpu_tag_t tag_11_dep; 
 
 	/* which sub-data is manipulated ? */
 	starpu_data_handle diag_block;
-	if (get_block_rank(k, k) == rank)
+	if (diag_block_is_local)
 	{
 		diag_block = STARPU_PLU(get_block_handle)(k, k);
+		tag_11_dep = TAG11(k);
 	}
 	else 
 	{
@@ -416,6 +416,7 @@ static void create_task_12_real(unsigned k, unsigned j)
 #else
 		diag_block = STARPU_PLU(get_tmp_11_block_handle)(k);
 #endif
+		tag_11_dep = TAG11_SAVE(k);
 	}
 
 	task->buffers[0].handle = diag_block; 
@@ -441,10 +442,10 @@ static void create_task_12_real(unsigned k, unsigned j)
 
 	/* enforce dependencies ... */
 	if (k > 0) {
-		starpu_tag_declare_deps(TAG12(k, j), 2, TAG11_SAVE(k), TAG22(k-1, k, j));
+		starpu_tag_declare_deps(TAG12(k, j), 2, tag_11_dep, TAG22(k-1, k, j));
 	}
 	else {
-		starpu_tag_declare_deps(TAG12(k, j), 1, TAG11_SAVE(k));
+		starpu_tag_declare_deps(TAG12(k, j), 1, tag_11_dep);
 	}
 
 	starpu_submit_task(task);
@@ -556,12 +557,17 @@ static void create_task_21_real(unsigned k, unsigned i)
 	task->cl = &STARPU_PLU(cl12);
 
 	task->cl_arg = create_debug_info(i, i, k);
+
+	unsigned diag_block_is_local = (get_block_rank(k, k) == rank);
+
+	starpu_tag_t tag_11_dep; 
 	
 	/* which sub-data is manipulated ? */
 	starpu_data_handle diag_block;
-	if (get_block_rank(k, k) == rank)
+	if (diag_block_is_local)
 	{
 		diag_block = STARPU_PLU(get_block_handle)(k, k);
+		tag_11_dep = TAG11(k);
 	}
 	else 
 	{
@@ -570,6 +576,7 @@ static void create_task_21_real(unsigned k, unsigned i)
 #else
 		diag_block = STARPU_PLU(get_tmp_11_block_handle)(k);
 #endif
+		tag_11_dep = TAG11_SAVE(k);
 	}
 
 	task->buffers[0].handle = diag_block; 
@@ -580,7 +587,6 @@ static void create_task_21_real(unsigned k, unsigned i)
 	STARPU_ASSERT(task->buffers[0].handle != STARPU_POISON_PTR);
 	STARPU_ASSERT(task->buffers[1].handle != STARPU_POISON_PTR);
 
-
 	struct callback_arg *arg = malloc(sizeof(struct callback_arg));
 		arg->i = i;
 		arg->k = k;
@@ -594,10 +600,10 @@ static void create_task_21_real(unsigned k, unsigned i)
 
 	/* enforce dependencies ... */
 	if (k > 0) {
-		starpu_tag_declare_deps(TAG21(k, i), 2, TAG11_SAVE(k), TAG22(k-1, i, k));
+		starpu_tag_declare_deps(TAG21(k, i), 2, tag_11_dep, TAG22(k-1, i, k));
 	}
 	else {
-		starpu_tag_declare_deps(TAG21(k, i), 1, TAG11_SAVE(k));
+		starpu_tag_declare_deps(TAG21(k, i), 1, tag_11_dep);
 	}
 
 	starpu_submit_task(task);
@@ -649,23 +655,37 @@ static void create_task_22_real(unsigned k, unsigned i, unsigned j)
 	/* which sub-data is manipulated ? */
 
 	/* produced by TAG21_SAVE(k, i) */ 
+	unsigned block21_is_local = (get_block_rank(i, k) == rank);
+	starpu_tag_t tag_21_dep;
+
 	starpu_data_handle block21;
-	if (get_block_rank(i, k) == rank)
+	if (block21_is_local)
 	{
 		block21 = STARPU_PLU(get_block_handle)(i, k);
+		tag_21_dep = TAG21(k, i);
 	}
 	else 
+	{
 		block21 = STARPU_PLU(get_tmp_21_block_handle)(i);
+		tag_21_dep = TAG21_SAVE(k, i);
+	}
 
 	/* produced by TAG12_SAVE(k, j) */
+	unsigned block12_is_local = (get_block_rank(k, j) == rank);
+	starpu_tag_t tag_12_dep;
+
 	starpu_data_handle block12;
-	if (get_block_rank(k, j) == rank)
+	if (block12_is_local)
 	{
 	//	block12 = STARPU_PLU(get_block_handle)(j, k);
 		block12 = STARPU_PLU(get_block_handle)(k, j);
+		tag_12_dep = TAG12(k, j);
 	}
 	else 
+	{
 		block12 = STARPU_PLU(get_tmp_12_block_handle)(j);
+		tag_12_dep = TAG12_SAVE(k, j);
+	}
 
 
 
@@ -692,10 +712,10 @@ static void create_task_22_real(unsigned k, unsigned i, unsigned j)
 
 	/* enforce dependencies ... */
 	if (k > 0) {
-		starpu_tag_declare_deps(TAG22(k, i, j), 3, TAG22(k-1, i, j), TAG12_SAVE(k, j), TAG21_SAVE(k, i));
+		starpu_tag_declare_deps(TAG22(k, i, j), 3, TAG22(k-1, i, j), tag_12_dep, tag_21_dep);
 	}
 	else {
-		starpu_tag_declare_deps(TAG22(k, i, j), 2, TAG12_SAVE(k, j), TAG21_SAVE(k, i));
+		starpu_tag_declare_deps(TAG22(k, i, j), 2, tag_12_dep, tag_21_dep);
 	}
 
 	starpu_submit_task(task);