[mpich-discuss] Invalid buffer pointer - Buffers must not be aliased error from MPI_Reduce

Inghram, Kenneth Kenneth.Inghram at hp.com
Wed Oct 14 12:08:55 CDT 2009


Running mpich2-1.0.8 on x86_64 on RHEL 5.2 (2.6.18-124.el5.HOTFIX.IT239760)

Receiving the following error running the code below. The aliased pointer check should only occur on the receiving (root) node, should it not?

Looked through the changes up to 1.2, but I did not see anything that addressed this issue.

Is this a bug in 1.0.8?

-ken

> /opt/mpich2/bin/mpicc mpich2-bug.c -o bug-mpi
> export MPD_USE_ROOT_MPD=1
> /opt/mpich2/bin/mpiexec -n 2 ./bug-mpi

Fatal error in MPI_Reduce: Invalid buffer pointer, error stack:
MPI_Reduce(850): MPI_Reduce(sbuf=0x7fffffff5c60, rbuf=0x7fffffff5c60,
count=10, MPI_INT, MPI_SUM, root=0, MPI_COMM_WORLD) failed
MPI_Reduce(808): Buffers must not be aliased[cli_1]: aborting job:
Fatal error in MPI_Reduce: Invalid buffer pointer, error stack:
MPI_Reduce(850): MPI_Reduce(sbuf=0x7fffffff5c60, rbuf=0x7fffffff5c60,
count=10, MPI_INT, MPI_SUM, root=0, MPI_COMM_WORLD) failed
MPI_Reduce(808): Buffers must not be aliased

The simple work around is to change the MPI_Reduce line...

from 

MPI_Reduce(a,a,SIZE,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);

to

MPI_Reduce(a,NULL,SIZE,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD); 


------  mpich2-bug.c

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

#define SIZE 10

int main( int argc, char *argv[])
{

  MPI_Init( &argc, &argv);

  int rank, size;

  MPI_Comm_size( MPI_COMM_WORLD, &size);
  MPI_Comm_rank( MPI_COMM_WORLD, &rank);

  printf( "Hello from %4d of %4d\n", rank, size);

  int i, a[SIZE];

  for( i = 0; i < SIZE; i++)
    a[i] = 1;

  if( rank == 0)
    MPI_Reduce(MPI_IN_PLACE,a,SIZE,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);
  else
    MPI_Reduce(a,a,SIZE,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);

  if ( rank == 0)
    for( i = 0; i < SIZE; i++)
      printf( "%3d %6d %6d\n", i a[i], i * size);

  MPI_Finalize();

  return 0;
}


More information about the mpich-discuss mailing list