Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: [OMPI devel] Bug report: single processor MPI_Allgatherv
From: Daniel G. Hyams (Daniel-Hyams_at_[hidden])
Date: 2008-01-18 16:45:01

I don't think that the displacements (disps) are being handled correctly
in MPI_Allgatherv, for a single process case.
The disps are being handled as byte offsets, instead of 'item'
offsets...they need to be multiplied by the size, in bytes,
of the MPI_Datatype being sent.

This bug seems to be closely related this:
and probably is present in all of the routines listed there.

The following code demonstrates the problem; make sure you run it as one
process only. The input and output should
be the same, but that is not the case.


#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

void tcalloc(int **p,int n)
  *p = (int*)calloc(n,sizeof(int));

int main(int argc, char * argv[])
  int i;
  int nto_global = 0;
  int np = 1;
  int *propto_global = NULL;
  int *propto = NULL;
  int nto = 10;
  int counts[1];
  int displs[1];



  for (i = 1; i <= nto; i++) propto[i] = i;

  counts[0] = nto;
  displs[0] = 1;

  // BUG: if I set displs[0] above to 4, things work as expected. But,
the displacements
  // are supposed to be the number of items, not bytes.

  for (i = 0; i < np; i++)
      nto_global += counts[i];

  tcalloc(&propto_global, nto_global+1);

  for (i = 1; i <= nto; i++) printf("INPUT %d --> %d\n",i,propto[i]);


  for (i = 1; i <= nto_global; i++) printf("OUTPUT %d -->



 Daniel G. Hyams
 Associate Research Professor
 UT SimCenter at Chattanooga
 Email: Daniel-Hyams_at_[hidden]
 Phone: 423-425-5491
 Fax:   423-425-5517