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
Add a platform with tag config and explain how to change smpi factor.
[simgrid.git]
/
src
/
smpi
/
smpi_coll.c
diff --git
a/src/smpi/smpi_coll.c
b/src/smpi/smpi_coll.c
index
e0adcf7
..
7798de8
100644
(file)
--- a/
src/smpi/smpi_coll.c
+++ b/
src/smpi/smpi_coll.c
@@
-87,7
+87,7
@@
static void build_tree(int root, int rank, int size, proc_tree_t * tree)
* bcast
**/
static void tree_bcast(void *buf, int count, MPI_Datatype datatype,
* bcast
**/
static void tree_bcast(void *buf, int count, MPI_Datatype datatype,
-
int root,
MPI_Comm comm, proc_tree_t tree)
+ MPI_Comm comm, proc_tree_t tree)
{
int system_tag = 999; // used negative int but smpi_create_request() declares this illegal (to be checked)
int rank, i;
{
int system_tag = 999; // used negative int but smpi_create_request() declares this illegal (to be checked)
int rank, i;
@@
-125,7
+125,7
@@
static void tree_bcast(void *buf, int count, MPI_Datatype datatype,
* anti-bcast
**/
static void tree_antibcast(void *buf, int count, MPI_Datatype datatype,
* anti-bcast
**/
static void tree_antibcast(void *buf, int count, MPI_Datatype datatype,
-
int root,
MPI_Comm comm, proc_tree_t tree)
+ MPI_Comm comm, proc_tree_t tree)
{
int system_tag = 999; // used negative int but smpi_create_request() declares this illegal (to be checked)
int rank, i;
{
int system_tag = 999; // used negative int but smpi_create_request() declares this illegal (to be checked)
int rank, i;
@@
-171,7
+171,7
@@
void nary_tree_bcast(void *buf, int count, MPI_Datatype datatype, int root,
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
build_tree(root, rank, size, &tree);
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
build_tree(root, rank, size, &tree);
- tree_bcast(buf, count, datatype,
root,
comm, tree);
+ tree_bcast(buf, count, datatype, comm, tree);
free_tree(tree);
}
free_tree(tree);
}
@@
-187,8
+187,8
@@
void nary_tree_barrier(MPI_Comm comm, int arity)
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
build_tree(0, rank, size, &tree);
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
build_tree(0, rank, size, &tree);
- tree_antibcast(&dummy, 1, MPI_CHAR,
0,
comm, tree);
- tree_bcast(&dummy, 1, MPI_CHAR,
0,
comm, tree);
+ tree_antibcast(&dummy, 1, MPI_CHAR, comm, tree);
+ tree_bcast(&dummy, 1, MPI_CHAR, comm, tree);
free_tree(tree);
}
free_tree(tree);
}
@@
-196,6
+196,8
@@
void nary_tree_barrier(MPI_Comm comm, int arity)
* Alltoall Bruck
*
* Openmpi calls this routine when the message size sent to each rank < 2000 bytes and size < 12
* Alltoall Bruck
*
* Openmpi calls this routine when the message size sent to each rank < 2000 bytes and size < 12
+ * FIXME: uh, check smpi_pmpi again, but this routine is called for > 12, not
+ * less...
**/
int smpi_coll_tuned_alltoall_bruck(void *sendbuf, int sendcount,
MPI_Datatype sendtype, void *recvbuf,
**/
int smpi_coll_tuned_alltoall_bruck(void *sendbuf, int sendcount,
MPI_Datatype sendtype, void *recvbuf,
@@
-205,20
+207,21
@@
int smpi_coll_tuned_alltoall_bruck(void *sendbuf, int sendcount,
int system_tag = 777;
int i, rank, size, err, count;
MPI_Aint lb;
int system_tag = 777;
int i, rank, size, err, count;
MPI_Aint lb;
- MPI_Aint sendext
ent
= 0;
- MPI_Aint recvext
ent
= 0;
+ MPI_Aint sendext = 0;
+ MPI_Aint recvext = 0;
MPI_Request *requests;
// FIXME: check implementation
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
XBT_DEBUG("<%d> algorithm alltoall_bruck() called.", rank);
MPI_Request *requests;
// FIXME: check implementation
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
XBT_DEBUG("<%d> algorithm alltoall_bruck() called.", rank);
- err = smpi_datatype_extent(sendtype, &lb, &sendext
ent
);
- err = smpi_datatype_extent(recvtype, &lb, &recvext
ent
);
+ err = smpi_datatype_extent(sendtype, &lb, &sendext);
+ err = smpi_datatype_extent(recvtype, &lb, &recvext);
/* Local copy from self */
err =
/* Local copy from self */
err =
- smpi_datatype_copy(&((char *) sendbuf)[rank * sendextent], sendcount,
- sendtype, &((char *) recvbuf)[rank * recvextent],
+ smpi_datatype_copy((char *)sendbuf + rank * sendcount * sendext,
+ sendcount, sendtype,
+ (char *)recvbuf + rank * recvcount * recvext,
recvcount, recvtype);
if (err == MPI_SUCCESS && size > 1) {
/* Initiate all send/recv to/from others. */
recvcount, recvtype);
if (err == MPI_SUCCESS && size > 1) {
/* Initiate all send/recv to/from others. */
@@
-232,7
+235,7
@@
int smpi_coll_tuned_alltoall_bruck(void *sendbuf, int sendcount,
continue;
}
requests[count] =
continue;
}
requests[count] =
- smpi_irecv_init(
&((char *) recvbuf)[i * recvextent]
, recvcount,
+ smpi_irecv_init(
(char *)recvbuf + i * recvcount * recvext
, recvcount,
recvtype, i, system_tag, comm);
count++;
}
recvtype, i, system_tag, comm);
count++;
}
@@
-244,7
+247,7
@@
int smpi_coll_tuned_alltoall_bruck(void *sendbuf, int sendcount,
continue;
}
requests[count] =
continue;
}
requests[count] =
- smpi_isend_init(
&((char *) sendbuf)[i * sendextent]
, sendcount,
+ smpi_isend_init(
(char *)sendbuf + i * sendcount * sendext
, sendcount,
sendtype, i, system_tag, comm);
count++;
}
sendtype, i, system_tag, comm);
count++;
}
@@
-268,24
+271,20
@@
int smpi_coll_tuned_alltoall_basic_linear(void *sendbuf, int sendcount,
{
int system_tag = 888;
int i, rank, size, err, count;
{
int system_tag = 888;
int i, rank, size, err, count;
- MPI_Aint lb;
- MPI_Aint sendinc = 0;
- MPI_Aint recvinc = 0;
+ MPI_Aint lb = 0, sendext = 0, recvext = 0;
MPI_Request *requests;
/* Initialize. */
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
XBT_DEBUG("<%d> algorithm alltoall_basic_linear() called.", rank);
MPI_Request *requests;
/* Initialize. */
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
XBT_DEBUG("<%d> algorithm alltoall_basic_linear() called.", rank);
- err = smpi_datatype_extent(sendtype, &lb, &sendinc);
- err = smpi_datatype_extent(recvtype, &lb, &recvinc);
- sendinc *= sendcount;
- recvinc *= recvcount;
+ err = smpi_datatype_extent(sendtype, &lb, &sendext);
+ err = smpi_datatype_extent(recvtype, &lb, &recvext);
/* simple optimization */
/* simple optimization */
- err =
- smpi_datatype_copy(&((char *) sendbuf)[rank * sendinc], sendcount,
- sendtype, &((char *) recvbuf)[rank * recvinc],
- recvcount, recvtype);
+ err =
smpi_datatype_copy((char *)sendbuf + rank * sendcount * sendext,
+ sendcount, sendtype,
+ (char *)recvbuf + rank * recvcount * recvext,
+
recvcount, recvtype);
if (err == MPI_SUCCESS && size > 1) {
/* Initiate all send/recv to/from others. */
requests = xbt_new(MPI_Request, 2 * (size - 1));
if (err == MPI_SUCCESS && size > 1) {
/* Initiate all send/recv to/from others. */
requests = xbt_new(MPI_Request, 2 * (size - 1));
@@
-293,7
+292,7
@@
int smpi_coll_tuned_alltoall_basic_linear(void *sendbuf, int sendcount,
count = 0;
for (i = (rank + 1) % size; i != rank; i = (i + 1) % size) {
requests[count] =
count = 0;
for (i = (rank + 1) % size; i != rank; i = (i + 1) % size) {
requests[count] =
- smpi_irecv_init(
&((char *) recvbuf)[i * recvinc], recvcount,
+ smpi_irecv_init(
(char *)recvbuf + i * recvcount * recvext, recvcount,
recvtype, i, system_tag, comm);
count++;
}
recvtype, i, system_tag, comm);
count++;
}
@@
-302,10
+301,9
@@
int smpi_coll_tuned_alltoall_basic_linear(void *sendbuf, int sendcount,
* when messages actually arrive in the order in which they were posted.
* TODO: check the previous assertion
*/
* when messages actually arrive in the order in which they were posted.
* TODO: check the previous assertion
*/
- for (i = (rank + size - 1) % size; i != rank;
- i = (i + size - 1) % size) {
+ for (i = (rank + size - 1) % size; i != rank; i = (i + size - 1) % size) {
requests[count] =
requests[count] =
- smpi_isend_init(
&((char *) sendbuf)[i * sendinc]
, sendcount,
+ smpi_isend_init(
(char *)sendbuf + i * sendcount * sendext
, sendcount,
sendtype, i, system_tag, comm);
count++;
}
sendtype, i, system_tag, comm);
count++;
}
@@
-364,22
+362,20
@@
int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts,
{
int system_tag = 889;
int i, rank, size, err, count;
{
int system_tag = 889;
int i, rank, size, err, count;
- MPI_Aint lb;
- MPI_Aint sendextent = 0;
- MPI_Aint recvextent = 0;
+ MPI_Aint lb = 0, sendext = 0, recvext = 0;
MPI_Request *requests;
/* Initialize. */
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
XBT_DEBUG("<%d> algorithm basic_alltoallv() called.", rank);
MPI_Request *requests;
/* Initialize. */
rank = smpi_comm_rank(comm);
size = smpi_comm_size(comm);
XBT_DEBUG("<%d> algorithm basic_alltoallv() called.", rank);
- err = smpi_datatype_extent(sendtype, &lb, &sendext
ent
);
- err = smpi_datatype_extent(recvtype, &lb, &recvext
ent
);
+ err = smpi_datatype_extent(sendtype, &lb, &sendext);
+ err = smpi_datatype_extent(recvtype, &lb, &recvext);
/* Local copy from self */
err =
/* Local copy from self */
err =
- smpi_datatype_copy(
&((char *) sendbuf)[senddisps[rank] * sendextent],
+ smpi_datatype_copy(
(char *)sendbuf + senddisps[rank] * sendext,
sendcounts[rank], sendtype,
sendcounts[rank], sendtype,
- &((char *) recvbuf)[recvdisps[rank] * recvextent],
+ (char *)recvbuf + recvdisps[rank] * recvext,
recvcounts[rank], recvtype);
if (err == MPI_SUCCESS && size > 1) {
/* Initiate all send/recv to/from others. */
recvcounts[rank], recvtype);
if (err == MPI_SUCCESS && size > 1) {
/* Initiate all send/recv to/from others. */
@@
-394,7
+390,7
@@
int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts,
continue;
}
requests[count] =
continue;
}
requests[count] =
- smpi_irecv_init(
&((char *) recvbuf)[recvdisps[i] * recvextent],
+ smpi_irecv_init(
(char *)recvbuf + recvdisps[i] * recvext,
recvcounts[i], recvtype, i, system_tag, comm);
count++;
}
recvcounts[i], recvtype, i, system_tag, comm);
count++;
}
@@
-407,7
+403,7
@@
int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts,
continue;
}
requests[count] =
continue;
}
requests[count] =
- smpi_isend_init(
&((char *) sendbuf)[senddisps[i] * sendextent],
+ smpi_isend_init(
(char *)sendbuf + senddisps[i] * sendext,
sendcounts[i], sendtype, i, system_tag, comm);
count++;
}
sendcounts[i], sendtype, i, system_tag, comm);
count++;
}