1
1
openmpi/ompi/mca/coll/self/coll_self_allgatherv.c
George Bosilca 31390c0074 We should take in account the extent of the datatype when we compute
the initial displacement in bytes. Thanks to Daniel G. Hyams for the fix.

This commit was SVN r17165.
2008-01-19 05:34:53 +00:00

53 строки
1.8 KiB
C

/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2005 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "ompi_config.h"
#include "ompi/constants.h"
#include "ompi/datatype/datatype.h"
#include "coll_self.h"
/*
* allgatherv_intra
*
* Function: - allgather
* Accepts: - same as MPI_Allgatherv()
* Returns: - MPI_SUCCESS or error code
*/
int mca_coll_self_allgatherv_intra(void *sbuf, int scount,
struct ompi_datatype_t *sdtype,
void * rbuf, int *rcounts, int *disps,
struct ompi_datatype_t *rdtype,
struct ompi_communicator_t *comm,
struct mca_coll_base_module_1_1_0_t *module)
{
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] * extent, rcounts[0], rdtype);
}
}