Browse Source

mpi/tests/: posting mpi recv on null pointers is not possible

Nathalie Furmento 9 years ago
parent
commit
534abc76dc
3 changed files with 84 additions and 167 deletions
  1. 82 106
      mpi/tests/datatypes.c
  2. 1 30
      mpi/tests/mpi_earlyrecv2.c
  3. 1 31
      mpi/tests/mpi_earlyrecv2_sync.c

+ 82 - 106
mpi/tests/datatypes.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2013, 2014, 2015  CNRS
+ * Copyright (C) 2013, 2014, 2015, 2016  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -20,11 +20,6 @@
 
 typedef void (*check_func)(starpu_data_handle_t handle_s, starpu_data_handle_t handle_r, int *error);
 
-void check_void(starpu_data_handle_t handle_s, starpu_data_handle_t handle_r, int *error)
-{
-	FPRINTF_MPI(stderr, "Success with void value\n");
-}
-
 void check_variable(starpu_data_handle_t handle_s, starpu_data_handle_t handle_r, int *error)
 {
 	int ret;
@@ -197,133 +192,114 @@ int main(int argc, char **argv)
 
 	if (rank == 0)
 	{
-		MPI_Status status;
-
-		{
-			starpu_data_handle_t void_handle[2];
-			starpu_void_data_register(&void_handle[0]);
-			starpu_void_data_register(&void_handle[1]);
+		float v = 42.12;
+		starpu_data_handle_t variable_handle[2];
+		starpu_variable_data_register(&variable_handle[0], STARPU_MAIN_RAM, (uintptr_t)&v, sizeof(v));
+		starpu_variable_data_register(&variable_handle[1], -1, (uintptr_t)NULL, sizeof(v));
 
-			send_recv_and_check(rank, 1, void_handle[0], 0x42, void_handle[1], 0x1337, &error, check_void);
+		send_recv_and_check(rank, 1, variable_handle[0], 0x42, variable_handle[1], 0x1337, &error, check_variable);
 
-			starpu_data_unregister(void_handle[0]);
-			starpu_data_unregister(void_handle[1]);
-		}
-		{
-			float v = 42.12;
-			starpu_data_handle_t variable_handle[2];
-			starpu_variable_data_register(&variable_handle[0], STARPU_MAIN_RAM, (uintptr_t)&v, sizeof(v));
-			starpu_variable_data_register(&variable_handle[1], -1, (uintptr_t)NULL, sizeof(v));
+		starpu_data_unregister(variable_handle[0]);
+		starpu_data_unregister(variable_handle[1]);
+	}
+	else if (rank == 1)
+	{
+		starpu_data_handle_t variable_handle;
+		starpu_variable_data_register(&variable_handle, -1, (uintptr_t)NULL, sizeof(float));
+		send_recv_and_check(rank, 0, variable_handle, 0x42, NULL, 0x1337, NULL, NULL);
+		starpu_data_unregister(variable_handle);
+	}
 
-			send_recv_and_check(rank, 1, variable_handle[0], 0x42, variable_handle[1], 0x1337, &error, check_variable);
 
-			starpu_data_unregister(variable_handle[0]);
-			starpu_data_unregister(variable_handle[1]);
-		}
+	if (rank == 0)
+	{
+		int vector[4] = {1, 2, 3, 4};
+		starpu_data_handle_t vector_handle[2];
 
-		{
-			int vector[4] = {1, 2, 3, 4};
-			starpu_data_handle_t vector_handle[2];
+		starpu_vector_data_register(&vector_handle[0], STARPU_MAIN_RAM, (uintptr_t)vector, 4, sizeof(vector[0]));
+		starpu_vector_data_register(&vector_handle[1], -1, (uintptr_t)NULL, 4, sizeof(vector[0]));
 
-			starpu_vector_data_register(&vector_handle[0], STARPU_MAIN_RAM, (uintptr_t)vector, 4, sizeof(vector[0]));
-			starpu_vector_data_register(&vector_handle[1], -1, (uintptr_t)NULL, 4, sizeof(vector[0]));
+		send_recv_and_check(rank, 1, vector_handle[0], 0x43, vector_handle[1], 0x2337, &error, check_vector);
 
-			send_recv_and_check(rank, 1, vector_handle[0], 0x43, vector_handle[1], 0x2337, &error, check_vector);
+		starpu_data_unregister(vector_handle[0]);
+		starpu_data_unregister(vector_handle[1]);
+	}
+	else if (rank == 1)
+	{
+		starpu_data_handle_t vector_handle;
+		starpu_vector_data_register(&vector_handle, -1, (uintptr_t)NULL, 4, sizeof(int));
+		send_recv_and_check(rank, 0, vector_handle, 0x43, NULL, 0x2337, NULL, NULL);
+		starpu_data_unregister(vector_handle);
+	}
 
-			starpu_data_unregister(vector_handle[0]);
-			starpu_data_unregister(vector_handle[1]);
-		}
+	if (rank == 0)
+	{
+		char *matrix, n='a';
+		int x, y;
+		starpu_data_handle_t matrix_handle[2];
 
+		matrix = (char*)malloc(nx*ny*nz*sizeof(char));
+		assert(matrix);
+		for(y=0 ; y<ny ; y++)
 		{
-			char *matrix, n='a';
-			int x, y;
-			starpu_data_handle_t matrix_handle[2];
-
-			matrix = (char*)malloc(nx*ny*nz*sizeof(char));
-			assert(matrix);
-			for(y=0 ; y<ny ; y++)
+			for(x=0 ; x<nx ; x++)
 			{
-				for(x=0 ; x<nx ; x++)
-				{
-					matrix[(y*nx)+x] = n++;
-				}
+				matrix[(y*nx)+x] = n++;
 			}
+		}
 
-			starpu_matrix_data_register(&matrix_handle[0], STARPU_MAIN_RAM, (uintptr_t)matrix, nx, nx, ny, sizeof(char));
-			starpu_matrix_data_register(&matrix_handle[1], -1, (uintptr_t)NULL, nx, nx, ny, sizeof(char));
+		starpu_matrix_data_register(&matrix_handle[0], STARPU_MAIN_RAM, (uintptr_t)matrix, nx, nx, ny, sizeof(char));
+		starpu_matrix_data_register(&matrix_handle[1], -1, (uintptr_t)NULL, nx, nx, ny, sizeof(char));
 
-			send_recv_and_check(rank, 1, matrix_handle[0], 0x75, matrix_handle[1], 0x8555, &error, check_matrix);
+		send_recv_and_check(rank, 1, matrix_handle[0], 0x75, matrix_handle[1], 0x8555, &error, check_matrix);
 
-			starpu_data_unregister(matrix_handle[0]);
-			starpu_data_unregister(matrix_handle[1]);
-			free(matrix);
-		}
+		starpu_data_unregister(matrix_handle[0]);
+		starpu_data_unregister(matrix_handle[1]);
+		free(matrix);
+	}
+	else if (rank == 1)
+	{
+		starpu_data_handle_t matrix_handle;
+		starpu_matrix_data_register(&matrix_handle, -1, (uintptr_t)NULL, nx, nx, ny, sizeof(char));
+		send_recv_and_check(rank, 0, matrix_handle, 0x75, NULL, 0x8555, NULL, NULL);
+		starpu_data_unregister(matrix_handle);
+	}
 
-		{
-			float *block, n=1.0;
-			int x, y, z;
-			starpu_data_handle_t block_handle[2];
 
-			block = (float*)malloc(nx*ny*nz*sizeof(float));
-			assert(block);
-			for(z=0 ; z<nz ; z++)
+	if (rank == 0)
+	{
+		float *block, n=1.0;
+		int x, y, z;
+		starpu_data_handle_t block_handle[2];
+
+		block = (float*)malloc(nx*ny*nz*sizeof(float));
+		assert(block);
+		for(z=0 ; z<nz ; z++)
+		{
+			for(y=0 ; y<ny ; y++)
 			{
-				for(y=0 ; y<ny ; y++)
+				for(x=0 ; x<nx ; x++)
 				{
-					for(x=0 ; x<nx ; x++)
-					{
-						block[(z*nx*ny)+(y*nx)+x] = n++;
-					}
+					block[(z*nx*ny)+(y*nx)+x] = n++;
 				}
 			}
+		}
 
-			starpu_block_data_register(&block_handle[0], STARPU_MAIN_RAM, (uintptr_t)block, nx, nx*ny, nx, ny, nz, sizeof(float));
-			starpu_block_data_register(&block_handle[1], -1, (uintptr_t)NULL, nx, nx*ny, nx, ny, nz, sizeof(float));
+		starpu_block_data_register(&block_handle[0], STARPU_MAIN_RAM, (uintptr_t)block, nx, nx*ny, nx, ny, nz, sizeof(float));
+		starpu_block_data_register(&block_handle[1], -1, (uintptr_t)NULL, nx, nx*ny, nx, ny, nz, sizeof(float));
 
-			send_recv_and_check(rank, 1, block_handle[0], 0x73, block_handle[1], 0x8337, &error, check_block);
+		send_recv_and_check(rank, 1, block_handle[0], 0x73, block_handle[1], 0x8337, &error, check_block);
 
-			starpu_data_unregister(block_handle[0]);
-			starpu_data_unregister(block_handle[1]);
-			free(block);
-		}
+		starpu_data_unregister(block_handle[0]);
+		starpu_data_unregister(block_handle[1]);
+		free(block);
 	}
 	else if (rank == 1)
 	{
-		MPI_Status status;
-
-		{
-			starpu_data_handle_t void_handle;
-			starpu_void_data_register(&void_handle);
-			send_recv_and_check(rank, 0, void_handle, 0x42, NULL, 0x1337, NULL, NULL);
-			starpu_data_unregister(void_handle);
-		}
-		{
-			starpu_data_handle_t variable_handle;
-			starpu_variable_data_register(&variable_handle, -1, (uintptr_t)NULL, sizeof(float));
-			send_recv_and_check(rank, 0, variable_handle, 0x42, NULL, 0x1337, NULL, NULL);
-			starpu_data_unregister(variable_handle);
-		}
-
-		{
-			starpu_data_handle_t vector_handle;
-			starpu_vector_data_register(&vector_handle, -1, (uintptr_t)NULL, 4, sizeof(int));
-			send_recv_and_check(rank, 0, vector_handle, 0x43, NULL, 0x2337, NULL, NULL);
-			starpu_data_unregister(vector_handle);
-		}
-
-		{
-			starpu_data_handle_t matrix_handle;
-			starpu_matrix_data_register(&matrix_handle, -1, (uintptr_t)NULL, nx, nx, ny, sizeof(char));
-			send_recv_and_check(rank, 0, matrix_handle, 0x75, NULL, 0x8555, NULL, NULL);
-			starpu_data_unregister(matrix_handle);
-		}
-
-		{
-			starpu_data_handle_t block_handle;
-			starpu_block_data_register(&block_handle, -1, (uintptr_t)NULL, nx, nx*ny, nx, ny, nz, sizeof(float));
-			send_recv_and_check(rank, 0, block_handle, 0x73, NULL, 0x8337, NULL, NULL);
-			starpu_data_unregister(block_handle);
-		}
+		starpu_data_handle_t block_handle;
+		starpu_block_data_register(&block_handle, -1, (uintptr_t)NULL, nx, nx*ny, nx, ny, nz, sizeof(float));
+		send_recv_and_check(rank, 0, block_handle, 0x73, NULL, 0x8337, NULL, NULL);
+		starpu_data_unregister(block_handle);
 	}
 
 	starpu_mpi_shutdown();

+ 1 - 30
mpi/tests/mpi_earlyrecv2.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009, 2010, 2014-2015  Université de Bordeaux
- * Copyright (C) 2010, 2011, 2012, 2013, 2015  CNRS
+ * Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -140,29 +140,6 @@ int exchange_variable(int rank, int detached)
 	return ret;
 }
 
-void check_void(starpu_data_handle_t handle, int i, int rank, int *error)
-{
-}
-
-int exchange_void(int rank, int detached)
-{
-	int ret, i;
-	starpu_data_handle_t tab_handle[NB];
-
-	FPRINTF_MPI(stderr, "Exchanging void data with detached=%d\n", detached);
-
-	for(i=0 ; i<NB ; i++)
-	{
-		starpu_void_data_register(&tab_handle[i]);
-		starpu_mpi_data_register(tab_handle[i], i, rank);
-	}
-	ret = exchange(rank, tab_handle, check_void, detached);
-	for(i=0 ; i<NB ; i++)
-		starpu_data_unregister(tab_handle[i]);
-
-	return ret;
-}
-
 void check_complex(starpu_data_handle_t handle, int i, int rank, int *error)
 {
 	double *real = starpu_complex_get_real(handle);
@@ -229,12 +206,6 @@ int main(int argc, char **argv)
 	ret = exchange_variable(rank, 1);
 	if (ret != 0) global_ret = ret;
 
-	ret = exchange_void(rank, 0);
-	if (ret != 0) global_ret = ret;
-
-	ret = exchange_void(rank, 1);
-	if (ret != 0) global_ret = ret;
-
 	ret = exchange_complex(rank, 0);
 	if (ret != 0) global_ret = ret;
 

+ 1 - 31
mpi/tests/mpi_earlyrecv2_sync.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009, 2010  Université de Bordeaux
- * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015  CNRS
+ * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -129,33 +129,6 @@ int exchange_variable(int rank)
 	return ret;
 }
 
-int exchange_void(int rank)
-{
-	int ret, i;
-	starpu_data_handle_t tab_handle[NB];
-
-	ret = starpu_init(NULL);
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
-	ret = starpu_mpi_init(NULL, NULL, 0);
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_mpi_init");
-
-	FPRINTF_MPI(stderr, "Exchanging void data\n");
-
-	for(i=0 ; i<NB ; i++)
-	{
-		starpu_void_data_register(&tab_handle[i]);
-		starpu_mpi_data_register(tab_handle[i], i, rank);
-	}
-	ret = exchange(rank, tab_handle, NULL);
-	for(i=0 ; i<NB ; i++)
-		starpu_data_unregister(tab_handle[i]);
-
-	starpu_mpi_shutdown();
-	starpu_shutdown();
-
-	return ret;
-}
-
 void check_complex(starpu_data_handle_t handle, int i, int rank, int *error)
 {
 	double *real = starpu_complex_get_real(handle);
@@ -224,9 +197,6 @@ int main(int argc, char **argv)
 	ret = exchange_variable(rank);
 	if (ret != 0) global_ret = ret;
 
-	ret = exchange_void(rank);
-	if (ret != 0) global_ret = ret;
-
 	ret = exchange_complex(rank);
 	if (ret != 0) global_ret = ret;