1
1

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.
Этот коммит содержится в:
Edgar Gabriel 2004-08-05 18:52:14 +00:00
родитель c5626a6300
Коммит cd2a23898b
4 изменённых файлов: 23 добавлений и 20 удалений

Просмотреть файл

@ -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,