This fixes bug #1157 in coll/self module.
All vector functions had incorrect handling of the offset. This commit was SVN r16360.
Этот коммит содержится в:
родитель
f92154fc72
Коммит
ada43fef9e
@ -40,6 +40,12 @@ int mca_coll_self_allgatherv_intra(void *sbuf, int scount,
|
||||
if (MPI_IN_PLACE == sbuf) {
|
||||
return MPI_SUCCESS;
|
||||
} else {
|
||||
int err;
|
||||
ptrdiff_t lb, extent;
|
||||
err = ompi_ddt_get_extent(rdtype, &lb, &extent);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
return ompi_ddt_sndrcv(sbuf, scount, sdtype,
|
||||
((char *) rbuf) + disps[0], rcounts[0], rdtype);
|
||||
}
|
||||
|
@ -38,6 +38,18 @@ mca_coll_self_alltoallv_intra(void *sbuf, int *scounts, int *sdisps,
|
||||
struct ompi_communicator_t *comm,
|
||||
struct mca_coll_base_module_1_1_0_t *module)
|
||||
{
|
||||
return ompi_ddt_sndrcv(((char *) sbuf) + sdisps[0], scounts[0], sdtype,
|
||||
((char *) rbuf) + rdisps[0], rcounts[0], rdtype);
|
||||
int err;
|
||||
ptrdiff_t lb, rextent, sextent;
|
||||
err = ompi_ddt_get_extent(sdtype, &lb, &sextent);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
err = ompi_ddt_get_extent(rdtype, &lb, &rextent);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
return ompi_ddt_sndrcv(((char *) sbuf) + sdisps[0] * sextent,
|
||||
scounts[0], sdtype,
|
||||
((char *) rbuf) + rdisps[0] * rextent,
|
||||
rcounts[0], rdtype);
|
||||
}
|
||||
|
@ -37,6 +37,19 @@ int mca_coll_self_alltoallw_intra(void *sbuf, int *scounts, int *sdisps,
|
||||
struct ompi_communicator_t *comm,
|
||||
struct mca_coll_base_module_1_1_0_t *module)
|
||||
{
|
||||
return ompi_ddt_sndrcv(((char *) sbuf) + sdisps[0], scounts[0], sdtypes[0],
|
||||
((char *) rbuf) + rdisps[0], rcounts[0], rdtypes[0]);
|
||||
int err;
|
||||
ptrdiff_t lb, rextent, sextent;
|
||||
err = ompi_ddt_get_extent(sdtypes[0], &lb, &sextent);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
err = ompi_ddt_get_extent(rdtypes[0], &lb, &rextent);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
|
||||
return ompi_ddt_sndrcv(((char *) sbuf) + sdisps[0] * sextent,
|
||||
scounts[0], sdtypes[0],
|
||||
((char *) rbuf) + rdisps[0] * rextent,
|
||||
rcounts[0], rdtypes[0]);
|
||||
}
|
||||
|
@ -39,8 +39,15 @@ int mca_coll_self_gatherv_intra(void *sbuf, int scount,
|
||||
{
|
||||
if (MPI_IN_PLACE == sbuf) {
|
||||
return MPI_SUCCESS;
|
||||
} else {
|
||||
} else {
|
||||
int err;
|
||||
ptrdiff_t lb, extent;
|
||||
err = ompi_ddt_get_extent(rdtype, &lb, &extent);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
return ompi_ddt_sndrcv(sbuf, scount, sdtype,
|
||||
((char *) rbuf) + disps[0], rcounts[0], rdtype);
|
||||
((char *) rbuf) + disps[0]*extent,
|
||||
rcounts[0], rdtype);
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,13 @@ int mca_coll_self_scatterv_intra(void *sbuf, int *scounts,
|
||||
if (MPI_IN_PLACE == rbuf) {
|
||||
return MPI_SUCCESS;
|
||||
} else {
|
||||
return ompi_ddt_sndrcv(((char *) sbuf) + disps[0], scounts[0], sdtype,
|
||||
rbuf, rcount, rdtype);
|
||||
int err;
|
||||
ptrdiff_t lb, extent;
|
||||
err = ompi_ddt_get_extent(sdtype, &lb, &extent);
|
||||
if (OMPI_SUCCESS != err) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
return ompi_ddt_sndrcv(((char *) sbuf) + disps[0]*extent, scounts[0],
|
||||
sdtype, rbuf, rcount, rdtype);
|
||||
}
|
||||
}
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user