A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
leaks -- with smp algos
[simgrid.git]
/
src
/
smpi
/
colls
/
reduce-mvapich-two-level.c
diff --git
a/src/smpi/colls/reduce-mvapich-two-level.c
b/src/smpi/colls/reduce-mvapich-two-level.c
index
8014a14
..
be67ddd
100644
(file)
--- a/
src/smpi/colls/reduce-mvapich-two-level.c
+++ b/
src/smpi/colls/reduce-mvapich-two-level.c
@@
-123,7
+123,7
@@
int smpi_coll_tuned_reduce_mvapich2_two_level( void *sendbuf,
if (stride <= MV2_INTRA_SHMEM_REDUCE_MSG &&
is_commutative == 1) {
if (local_rank == 0 ) {
if (stride <= MV2_INTRA_SHMEM_REDUCE_MSG &&
is_commutative == 1) {
if (local_rank == 0 ) {
- tmp_buf=(void *)
xbt_malloc
( count *
+ tmp_buf=(void *)
smpi_get_tmp_sendbuffer
( count *
(MAX(extent, true_extent)));
tmp_buf = (void *) ((char *) tmp_buf - true_lb);
}
(MAX(extent, true_extent)));
tmp_buf = (void *) ((char *) tmp_buf - true_lb);
}
@@
-191,7
+191,7
@@
int smpi_coll_tuned_reduce_mvapich2_two_level( void *sendbuf,
}
leader_comm_size = smpi_comm_size(leader_comm);
leader_comm_rank = smpi_comm_rank(leader_comm);
}
leader_comm_size = smpi_comm_size(leader_comm);
leader_comm_rank = smpi_comm_rank(leader_comm);
- tmp_buf=(void *)
xbt_malloc
(count *
+ tmp_buf=(void *)
smpi_get_tmp_sendbuffer
(count *
(MAX(extent, true_extent)));
tmp_buf = (void *) ((char *) tmp_buf - true_lb);
}
(MAX(extent, true_extent)));
tmp_buf = (void *) ((char *) tmp_buf - true_lb);
}
@@
-233,6
+233,7
@@
int smpi_coll_tuned_reduce_mvapich2_two_level( void *sendbuf,
intra_node_root, shmem_comm);
}
} else {
intra_node_root, shmem_comm);
}
} else {
+ smpi_free_tmp_buffer((void *) ((char *) tmp_buf + true_lb));
tmp_buf = in_buf;
}
tmp_buf = in_buf;
}
@@
-251,7
+252,7
@@
int smpi_coll_tuned_reduce_mvapich2_two_level( void *sendbuf,
out_buf = recvbuf;
} else {
out_buf = recvbuf;
} else {
- in_buf = (char *)
xbt_malloc
(count*
+ in_buf = (char *)
smpi_get_tmp_sendbuffer
(count*
smpi_datatype_get_extent(datatype));
smpi_datatype_copy(tmp_buf, count, datatype,
in_buf, count, datatype);
smpi_datatype_get_extent(datatype));
smpi_datatype_copy(tmp_buf, count, datatype,
in_buf, count, datatype);
@@
-259,7
+260,7
@@
int smpi_coll_tuned_reduce_mvapich2_two_level( void *sendbuf,
out_buf = recvbuf;
}
} else {
out_buf = recvbuf;
}
} else {
- in_buf = (char *)
xbt_malloc
(count*
+ in_buf = (char *)
smpi_get_tmp_sendbuffer
(count*
smpi_datatype_get_extent(datatype));
smpi_datatype_copy(tmp_buf, count, datatype,
in_buf, count, datatype);
smpi_datatype_get_extent(datatype));
smpi_datatype_copy(tmp_buf, count, datatype,
in_buf, count, datatype);
@@
-286,15
+287,23
@@
int smpi_coll_tuned_reduce_mvapich2_two_level( void *sendbuf,
smpi_mpi_send(tmp_buf, count, datatype, root,
COLL_TAG_REDUCE+1, comm);
}
smpi_mpi_send(tmp_buf, count, datatype, root,
COLL_TAG_REDUCE+1, comm);
}
-
if ((local_rank != 0) && (root == my_rank)) {
smpi_mpi_recv(recvbuf, count, datatype,
leader_of_root,
COLL_TAG_REDUCE+1, comm,
MPI_STATUS_IGNORE);
}
if ((local_rank != 0) && (root == my_rank)) {
smpi_mpi_recv(recvbuf, count, datatype,
leader_of_root,
COLL_TAG_REDUCE+1, comm,
MPI_STATUS_IGNORE);
}
+ smpi_free_tmp_buffer((void *) ((char *) tmp_buf + true_lb));
+
+ if (leader_comm_rank == leader_root) {
+ if (my_rank != root || (my_rank == root && tmp_buf == recvbuf)) {
+ smpi_free_tmp_buffer(in_buf);
+ }
+ }
}
}
+
+
fn_exit:
return mpi_errno;
}
fn_exit:
return mpi_errno;
}