Browse Source

mpi/src/starpu_mpi_collective.c: only allocate memory if needed

Nathalie Furmento 12 years ago
parent
commit
e3df31128b
1 changed files with 25 additions and 35 deletions
  1. 25 35
      mpi/src/starpu_mpi_collective.c

+ 25 - 35
mpi/src/starpu_mpi_collective.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2011, 2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * 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
@@ -42,26 +42,23 @@ int starpu_mpi_scatter_detached(starpu_data_handle_t *data_handles, int count, i
 {
 	int rank;
 	int x;
-	struct _callback_arg *callback_arg;
-	void (*callback_func)(void *);
+	struct _callback_arg *callback_arg = NULL;
+	void (*callback_func)(void *) = NULL;
+	void (*callback)(void *);
 
 	MPI_Comm_rank(comm, &rank);
 
-	callback_func = _callback_collective;
-	callback_arg = malloc(sizeof(struct _callback_arg));
-	callback_arg->count = 0;
-	callback_arg->nb = 0;
-	callback_arg->callback = (rank == root) ? scallback : rcallback;
-	callback_arg->arg = (rank == root) ? sarg : rarg;
-	if (callback_arg->callback == NULL)
+	callback = (rank == root) ? scallback : rcallback;
+	if (callback)
 	{
-		free(callback_arg);
-		callback_arg = NULL;
-		callback_func = NULL;
-	}
+		callback_func = _callback_collective;
+		callback_arg = malloc(sizeof(struct _callback_arg));
+		callback_arg->count = 0;
+		callback_arg->nb = 0;
+		callback_arg->callback = (rank == root) ? scallback : rcallback;
+		callback_arg->arg = (rank == root) ? sarg : rarg;
+		if (callback_arg->callback == NULL)
 
-	if (callback_arg)
-	{
 		for(x = 0; x < count ; x++)
 		{
 			if (data_handles[x])
@@ -107,29 +104,23 @@ int starpu_mpi_gather_detached(starpu_data_handle_t *data_handles, int count, in
 {
 	int rank;
 	int x;
-	struct _callback_arg *callback_arg;
-	void (*callback_func)(void *);
+	struct _callback_arg *callback_arg = NULL;
+	void (*callback_func)(void *) = NULL;
+	void (*callback)(void *);
 
 	MPI_Comm_rank(comm, &rank);
 
-#ifdef STARPU_DEVEL
-#warning TODO: callback_arg needs to be free-ed
-#endif
-	callback_func = _callback_collective;
-	callback_arg = malloc(sizeof(struct _callback_arg));
-	callback_arg->count = 0;
-	callback_arg->nb = 0;
-	callback_arg->callback = (rank == root) ? scallback : rcallback;
-	callback_arg->arg = (rank == root) ? sarg : rarg;
-	if (callback_arg->callback == NULL)
+	callback = (rank == root) ? scallback : rcallback;
+	if (callback)
 	{
-		free(callback_arg);
-		callback_arg = NULL;
-		callback_func = NULL;
-	}
+		callback_func = _callback_collective;
+
+		callback_arg = malloc(sizeof(struct _callback_arg));
+		callback_arg->count = 0;
+		callback_arg->nb = 0;
+		callback_arg->callback = callback;
+		callback_arg->arg = (rank == root) ? sarg : rarg;
 
-	if (callback_arg)
-	{
 		for(x = 0; x < count ; x++)
 		{
 			if (data_handles[x])
@@ -170,4 +161,3 @@ int starpu_mpi_gather_detached(starpu_data_handle_t *data_handles, int count, in
 	}
 	return 0;
 }
-