Browse Source

mpi/examples/scatter_gather/mpi_scatter_gather.c: use starpu_data_get_rank to find out about data rank instead of the data distribution

Nathalie Furmento 14 years ago
parent
commit
76875c3d0f
1 changed files with 33 additions and 17 deletions
  1. 33 17
      mpi/examples/scatter_gather/mpi_scatter_gather.c

+ 33 - 17
mpi/examples/scatter_gather/mpi_scatter_gather.c

@@ -59,7 +59,7 @@ int main(int argc, char **argv)
 
 	unsigned i,j,x,y;
 
-	unsigned nblocks=2;
+	unsigned nblocks=4;
 	unsigned block_size=1;
 	unsigned size = nblocks*block_size;
 	unsigned ld = size / nblocks;
@@ -92,6 +92,7 @@ int main(int argc, char **argv)
 		}
 	}
 
+#if 0
 	// Print matrix
 	if (rank == 0)
 	{
@@ -111,6 +112,7 @@ int main(int argc, char **argv)
 			}
 		}
 	}
+#endif
 
 	/* Allocate data handles and register data to StarPU */
         data_handles = malloc(nblocks*sizeof(starpu_data_handle *));
@@ -138,7 +140,9 @@ int main(int argc, char **argv)
 				}
 			}
                         if (data_handles[x][y])
+			{
                                 starpu_data_set_rank(data_handles[x][y], mpi_rank);
+			}
                 }
         }
 
@@ -149,11 +153,14 @@ int main(int argc, char **argv)
 		{
 			for (y = 0; y < nblocks; y++)
 			{
-				int mpi_rank = my_distrib(x, y, nodes);
-				if (mpi_rank)
+				if (data_handles[x][y])
 				{
-					fprintf(stderr, "[%d] Sending data[%d][%d] to %d\n", rank, x, y, mpi_rank);
-					starpu_mpi_isend_detached(data_handles[x][y], mpi_rank, mpi_rank, MPI_COMM_WORLD, NULL, NULL);
+					int owner = starpu_data_get_rank(data_handles[x][y]);
+					if (owner != 0)
+					{
+						fprintf(stderr, "[%d] Sending data[%d][%d] to %d\n", rank, x, y, owner);
+						starpu_mpi_isend_detached(data_handles[x][y], owner, owner, MPI_COMM_WORLD, NULL, NULL);
+					}
 				}
 			}
 		}
@@ -163,11 +170,14 @@ int main(int argc, char **argv)
 		{
 			for (y = 0; y < nblocks; y++)
 			{
-				int mpi_rank = my_distrib(x, y, nodes);
-				if (mpi_rank)
+				if (data_handles[x][y])
 				{
-					fprintf(stderr, "[%d] Receiving data[%d][%d] from %d\n", rank, x, y, 0);
-					starpu_mpi_irecv_detached(data_handles[x][y], 0, mpi_rank, MPI_COMM_WORLD, NULL, NULL);
+					int owner = starpu_data_get_rank(data_handles[x][y]);
+					if (owner == rank)
+					{
+						fprintf(stderr, "[%d] Receiving data[%d][%d] from %d\n", rank, x, y, 0);
+						starpu_mpi_irecv_detached(data_handles[x][y], 0, rank, MPI_COMM_WORLD, NULL, NULL);
+					}
 				}
 			}
 		}
@@ -201,11 +211,14 @@ int main(int argc, char **argv)
 		{
 			for (y = 0; y < nblocks; y++)
 			{
-				int mpi_rank = my_distrib(x, y, nodes);
-				if (mpi_rank)
+				if (data_handles[x][y])
 				{
-					fprintf(stderr, "[%d] Receiving data[%d][%d] from %d\n", rank, x, y, mpi_rank);
-					starpu_mpi_irecv_detached(data_handles[x][y], mpi_rank, mpi_rank, MPI_COMM_WORLD, NULL, NULL);
+					int owner = starpu_data_get_rank(data_handles[x][y]);
+					if (owner != 0)
+					{
+						fprintf(stderr, "[%d] Receiving data[%d][%d] from %d\n", rank, x, y, owner);
+						starpu_mpi_irecv_detached(data_handles[x][y], owner, owner, MPI_COMM_WORLD, NULL, NULL);
+					}
 				}
 			}
 		}
@@ -215,11 +228,14 @@ int main(int argc, char **argv)
 		{
 			for (y = 0; y < nblocks; y++)
 			{
-				int mpi_rank = my_distrib(x, y, nodes);
-				if (mpi_rank)
+				if (data_handles[x][y])
 				{
-					fprintf(stderr, "[%d] Sending data[%d][%d] to %d\n", rank, x, y, 0);
-					starpu_mpi_isend_detached(data_handles[x][y], 0, mpi_rank, MPI_COMM_WORLD, NULL, NULL);
+					int owner = starpu_data_get_rank(data_handles[x][y]);
+					if (owner == rank)
+					{
+						fprintf(stderr, "[%d] Sending data[%d][%d] to %d\n", rank, x, y, 0);
+						starpu_mpi_isend_detached(data_handles[x][y], 0, rank, MPI_COMM_WORLD, NULL, NULL);
+					}
 				}
 			}
 		}