bug fixes for the MPI-2 extended collective operations. All inter-collectives
seem to pass now the test without coredumps etc. Checking for MPI_Alltollw(intra)...working Checking for MPI_Exscan: testing MPI_MAX...........working testing MPI_MIN...........working testing MPI_SUM...........working testing MPI_PROD..........working testing MPI_LAND..........working testing MPI_LOR...........working testing MPI_LXOR..........working testing MPI_BAND..........working testing MPI_BOR...........working testing MPI_BXOR..........working Checking for MPI_Bcast.............working Checking for MPI_Allreduce.........working Checking for MPI_Reduce............working Checking for MPI_Barrier...........working Checking for MPI_Gather............working Checking for MPI_Gatherv...........working Checking for MPI_Scatter...........working Checking for MPI_Scatterv..........working Checking for MPI_Allgather.........working Checking for MPI_Allgatherv........working Checking for MPI_Alltoall..........working Checking for MPI_Alltoallv.........working Checking for MPI_Alltollw(inter)...working Checking for MPI_Reduce_scatter....working Checking for MPI_Bcast.............working Checking for MPI_Allreduce.........working Checking for MPI_Reduce............working Checking for MPI_Barrier...........working Checking for MPI_Gather............working Checking for MPI_Gatherv...........working Checking for MPI_Scatter...........working Checking for MPI_Scatterv..........working Checking for MPI_Allgather.........working Checking for MPI_Allgatherv........working Checking for MPI_Alltoall..........working Checking for MPI_Alltoallv.........working Checking for MPI_Alltollw(inter)...working Checking for MPI_Reduce_scatter....working This commit was SVN r1903.
Этот коммит содержится в:
родитель
c5626a6300
Коммит
cd2a23898b
@ -104,7 +104,7 @@ int mca_coll_basic_allgather_inter(void *sbuf, int scount,
|
||||
return err;
|
||||
}
|
||||
|
||||
err = mca_pml.pml_wait(1, &req, NULL, MPI_STATUS_IGNORE);
|
||||
err = mca_pml.pml_wait_all(1, &req, MPI_STATUS_IGNORE);
|
||||
if (OMPI_SUCCESS != err ) {
|
||||
return err;
|
||||
}
|
||||
@ -156,7 +156,7 @@ int mca_coll_basic_allgather_inter(void *sbuf, int scount,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
err = mca_pml.pml_wait(1, &req, NULL, MPI_STATUS_IGNORE);
|
||||
err = mca_pml.pml_wait_all(1, &req, MPI_STATUS_IGNORE);
|
||||
if (OMPI_SUCCESS != err ) {
|
||||
goto exit;
|
||||
}
|
||||
|
@ -59,20 +59,22 @@ int mca_coll_basic_allgatherv_inter(void *sbuf, int scount,
|
||||
struct ompi_communicator_t *comm)
|
||||
{
|
||||
int size, rsize;
|
||||
int err;
|
||||
int err, i;
|
||||
int *scounts=NULL;
|
||||
int *sdisps=NULL;
|
||||
|
||||
rsize = ompi_comm_remote_size (comm);
|
||||
size = ompi_comm_size (comm);
|
||||
|
||||
scounts = (int *) calloc (rsize, sizeof(int) );
|
||||
scounts = (int *) malloc (rsize * sizeof(int) );
|
||||
sdisps = (int *) calloc (rsize, sizeof(int));
|
||||
if ( NULL == scounts || NULL == sdisps ) {
|
||||
return err;
|
||||
}
|
||||
|
||||
scounts[0] = scount;
|
||||
for ( i=0; i<rsize; i++) {
|
||||
scounts[i] = scount;
|
||||
}
|
||||
|
||||
err = comm->c_coll.coll_alltoallv (sbuf, scounts, sdisps, sdtype,
|
||||
rbuf, rcounts, disps, rdtype,
|
||||
|
@ -189,28 +189,23 @@ int mca_coll_basic_alltoall_inter(void *sbuf, int scount,
|
||||
|
||||
/* Post all receives first */
|
||||
for (i = 0; i < size; i++, ++rreq) {
|
||||
err = mca_pml.pml_irecv_init(prcv + (i * rcvinc), rcount, rdtype, i,
|
||||
err = mca_pml.pml_irecv(prcv + (i * rcvinc), rcount, rdtype, i,
|
||||
MCA_COLL_BASE_TAG_ALLTOALL, comm, rreq);
|
||||
if (MPI_SUCCESS != err) {
|
||||
mca_coll_basic_free_reqs(req, rreq - req);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
/* Now post all sends */
|
||||
for (i = 0; i < size; i++, ++sreq) {
|
||||
err = mca_pml.pml_isend_init(psnd + (i * sndinc), scount, sdtype, i,
|
||||
MCA_COLL_BASE_TAG_ALLTOALL,
|
||||
MCA_PML_BASE_SEND_STANDARD, comm, sreq);
|
||||
if (MPI_SUCCESS != err) {
|
||||
mca_coll_basic_free_reqs(req, sreq - req);
|
||||
err = mca_pml.pml_isend(psnd + (i * sndinc), scount, sdtype, i,
|
||||
MCA_COLL_BASE_TAG_ALLTOALL,
|
||||
MCA_PML_BASE_SEND_STANDARD, comm, sreq);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
/* Start your engines. This will never return an error. */
|
||||
mca_pml.pml_start(nreqs, req);
|
||||
|
||||
/* Wait for them all. If there's an error, note that we don't
|
||||
care what the error was -- just that there *was* an error. The
|
||||
PML will finish all requests, even if one or more of them fail.
|
||||
@ -219,9 +214,6 @@ int mca_coll_basic_alltoall_inter(void *sbuf, int scount,
|
||||
the error after we free everything. */
|
||||
err = mca_pml.pml_wait_all(nreqs, req, MPI_STATUSES_IGNORE);
|
||||
|
||||
/* Free the reqs */
|
||||
mca_coll_basic_free_reqs(req, nreqs);
|
||||
|
||||
/* All done */
|
||||
return err;
|
||||
}
|
||||
|
@ -236,8 +236,12 @@ int mca_coll_basic_reduce_scatter_inter(void *sbuf, void *rbuf, int *rcounts,
|
||||
has already the correct data AND we avoid a potential
|
||||
deadlock here.
|
||||
*/
|
||||
err = mca_pml.pml_irecv (rbuf, rcounts[rank], dtype, root,
|
||||
MCA_COLL_BASE_TAG_REDUCE_SCATTER,
|
||||
comm, &req);
|
||||
|
||||
tcount = 0;
|
||||
for ( i=1; i<rsize; i++ ) {
|
||||
for ( i=0; i<rsize; i++ ) {
|
||||
tbuf = (char *) tmpbuf + tcount *extent;
|
||||
err = mca_pml.pml_isend (tbuf, rcounts[i], dtype,i,
|
||||
MCA_COLL_BASE_TAG_REDUCE_SCATTER,
|
||||
@ -253,6 +257,11 @@ int mca_coll_basic_reduce_scatter_inter(void *sbuf, void *rbuf, int *rcounts,
|
||||
if ( OMPI_SUCCESS != err ) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
err = mca_pml.pml_wait_all (1, &req, MPI_STATUS_IGNORE);
|
||||
if ( OMPI_SUCCESS != err ) {
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
else {
|
||||
err = mca_pml.pml_recv (rbuf, rcounts[rank], dtype, root,
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user