The following code causes memory fault problem. The initial check shows
that it seemed caused by *ompi_comm_peer_lookup* with MPI_ANY_SOURCE, which
somehow messed up the allocated temporary buffer used in SendRecv.
any idea?
Dahai
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <sys/types.h>
#include <errno.h>
#include <unistd.h>
#include <values.h>
int main(int argc, char *argv[]) {
int local_rank;
int numtask, myrank;
int count;
MPI_Status status;
long long *msg_sizes_vec;
long long *mpi_buf;
long long host_buf[4];
int send_tag;
int recv_tag;
int malloc_size;
int dest;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
fprintf(stdout,"my RanK is %d\n",myrank);
MPI_Comm_size(MPI_COMM_WORLD, &numtask);
fprintf(stdout,"Num Task is %d\n",numtask);
malloc_size=32;
count = malloc_size / sizeof(long long);
dest = (myrank+1)%2;
fprintf(stdout,"my dest is %d\n",dest);
host_buf[0] = 100 + myrank;
host_buf[1] = 200 + myrank;
host_buf[2] = 300 + myrank;
host_buf[3] = 400 + myrank;
fprintf(stdout,"BEFORE %lld %lld %lld %lld
\n",host_buf[0],host_buf[1],host_buf[2],host_buf[3]);
fflush(stdout);
fprintf(stdout,"Doing sendrecv_replace with host buffer\n");
fflush(stdout);
MPI_Sendrecv_replace ( host_buf,
count,
MPI_LONG_LONG,
dest,
myrank,
MPI_ANY_SOURCE,
dest,
MPI_COMM_WORLD,
&status);
fprintf(stdout,"Back from doing sendrecv_replace with host buffer\n");
fprintf(stdout,"AFTER %lld %lld %lld %lld
\n",host_buf[0],host_buf[1],host_buf[2],host_buf[3]);
fflush(stdout);
MPI_Finalize();
exit(0);
}
_______________________________________________
devel mailing list
[email protected]
https://rfd.newmexicoconsortium.org/mailman/listinfo/devel