Browse Source

mpi/tests revert #17467 to enable posting mpi recv on null pointers

Nathalie Furmento 9 years ago
parent
commit
c5bdebeae5
3 changed files with 85 additions and 2 deletions
  1. 24 0
      mpi/tests/datatypes.c
  2. 30 1
      mpi/tests/mpi_earlyrecv2.c
  3. 31 1
      mpi/tests/mpi_earlyrecv2_sync.c

+ 24 - 0
mpi/tests/datatypes.c

@@ -20,6 +20,11 @@
 
 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;
@@ -192,6 +197,25 @@ int main(int argc, char **argv)
 
 	if (rank == 0)
 	{
+		starpu_data_handle_t void_handle[2];
+		starpu_void_data_register(&void_handle[0]);
+		starpu_void_data_register(&void_handle[1]);
+
+		send_recv_and_check(rank, 1, void_handle[0], 0x42, void_handle[1], 0x1337, &error, check_void);
+
+		starpu_data_unregister(void_handle[0]);
+		starpu_data_unregister(void_handle[1]);
+	}
+	else if (rank == 1)
+	{
+		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);
+	}
+
+	if (rank == 0)
+	{
 		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));

+ 30 - 1
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, 2016  CNRS
+ * Copyright (C) 2010, 2011, 2012, 2013, 2015  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,6 +140,29 @@ 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);
@@ -206,6 +229,12 @@ 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;
 

+ 31 - 1
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, 2016  CNRS
+ * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015  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,6 +129,33 @@ 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);
@@ -197,6 +224,9 @@ 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;