[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