Sfoglia il codice sorgente

mpi/examples/comm: acquire a data before reading its value and release it once done

Nathalie Furmento 10 anni fa
parent
commit
8b5c5a0193
2 ha cambiato i file con 14 aggiunte e 0 eliminazioni
  1. 4 0
      mpi/examples/comm/comm.c
  2. 10 0
      mpi/examples/comm/mix_comm.c

+ 4 - 0
mpi/examples/comm/comm.c

@@ -103,14 +103,18 @@ int main(int argc, char **argv)
 		int *xx;
 
 		starpu_mpi_recv(data[0], 0, 12, newcomm, NULL);
+		starpu_data_acquire(data[0], STARPU_RW);
 		xx = (int *)starpu_variable_get_local_ptr(data[0]);
+		starpu_data_release(data[0]);
 		FPRINTF(stderr, "[%d][%d] received %d\n", rank, newrank, *xx);
 		STARPU_ASSERT_MSG(x==*xx, "Received value %d is incorrect (should be %d)\n", *xx, x);
 
 		starpu_variable_data_register(&data[1], -1, (uintptr_t)NULL, sizeof(unsigned));
 		starpu_mpi_data_register_comm(data[1], 22, 0, newcomm);
 		starpu_mpi_recv(data[0], 0, 22, newcomm, NULL);
+		starpu_data_acquire(data[0], STARPU_RW);
 		xx = (int *)starpu_variable_get_local_ptr(data[0]);
+		starpu_data_release(data[0]);
 		FPRINTF(stderr, "[%d][%d] received %d\n", rank, newrank, *xx);
 		STARPU_ASSERT_MSG(x==*xx, "Received value %d is incorrect (should be %d)\n", *xx, x);
 	}

+ 10 - 0
mpi/examples/comm/mix_comm.c

@@ -112,25 +112,33 @@ int main(int argc, char **argv)
 		int *xx;
 
 		starpu_mpi_recv(data[0], 0, 12, newcomm, NULL);
+		starpu_data_acquire(data[0], STARPU_RW);
 		xx = (int *)starpu_variable_get_local_ptr(data[0]);
+		starpu_data_release(data[0]);
 		FPRINTF(stderr, "[%d][%d] received %d\n", rank, newrank, *xx);
 		STARPU_ASSERT_MSG(x==*xx, "Received value %d is incorrect (should be %d)\n", *xx, x);
 
 		starpu_variable_data_register(&data[1], -1, (uintptr_t)NULL, sizeof(unsigned));
 		starpu_mpi_data_register_comm(data[1], 22, 0, newcomm);
 		starpu_mpi_recv(data[0], 0, 22, newcomm, NULL);
+		starpu_data_acquire(data[0], STARPU_RW);
 		xx = (int *)starpu_variable_get_local_ptr(data[0]);
+		starpu_data_release(data[0]);
 		FPRINTF(stderr, "[%d][%d] received %d\n", rank, newrank, *xx);
 		STARPU_ASSERT_MSG(x==*xx, "Received value %d is incorrect (should be %d)\n", *xx, x);
 	}
 
 	if (rank == 0)
 	{
+		starpu_data_acquire(data[2], STARPU_RW);
 		int value = *((int *)starpu_variable_get_local_ptr(data[2]));
+		starpu_data_release(data[2]);
 		FPRINTF_MPI(stderr, "sending value %d to %d and receiving from %d\n", value, 1, size-1);
 		starpu_mpi_send(data[2], 1, 44, MPI_COMM_WORLD);
 		starpu_mpi_recv(data[2], size-1, 44, MPI_COMM_WORLD, NULL);
+		starpu_data_acquire(data[2], STARPU_RW);
 		int *xx = (int *)starpu_variable_get_local_ptr(data[2]);
+		starpu_data_release(data[2]);
 		FPRINTF_MPI(stderr, "Value back is %d\n", *xx);
 		STARPU_ASSERT_MSG(*xx == value + (2*(size-1)), "Received value %d is incorrect (should be %d)\n", *xx, value + (2*(size-1)));
 	}
@@ -139,7 +147,9 @@ int main(int argc, char **argv)
 		int next = (rank == size-1) ? 0 : rank+1;
 		FPRINTF_MPI(stderr, "receiving from %d and sending to %d\n", rank-1, next);
 		starpu_mpi_recv(data[2], rank-1, 44, MPI_COMM_WORLD, NULL);
+		starpu_data_acquire(data[2], STARPU_RW);
 		int *xx = (int *)starpu_variable_get_local_ptr(data[2]);
+		starpu_data_release(data[2]);
 		*xx = *xx + 2;
 		starpu_mpi_send(data[2], next, 44, MPI_COMM_WORLD);
 	}