1
1

This fixes bug #1157 in coll/self module.

All vector functions had incorrect handling of the offset.

This commit was SVN r16360.
Этот коммит содержится в:
Jelena Pjesivac-Grbovic 2007-10-05 17:40:16 +00:00
родитель f92154fc72
Коммит ada43fef9e
5 изменённых файлов: 52 добавлений и 8 удалений

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

@ -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);
}
}