[mpich-discuss] mpich2-1.1.1p1/nemesis error
Rajeev Thakur
thakur at mcs.anl.gov
Sat Sep 19 11:37:41 CDT 2009
Thanks. We are looking into this bug.
Rajeev
> -----Original Message-----
> From: mpich-discuss-bounces at mcs.anl.gov
> [mailto:mpich-discuss-bounces at mcs.anl.gov] On Behalf Of Bryan Putnam
> Sent: Monday, September 14, 2009 10:42 AM
> To: mpich-discuss at mcs.anl.gov
> Subject: [mpich-discuss] mpich2-1.1.1p1/nemesis error
>
> Hi All,
>
> We've run across a piece of C code that appears to run
> successfully with mpich, mvapich2-1.4rc2, mpich2-1.1.1p1
> (built with ssm or sockets), but fails with mpich2-1.1.1p1
> (built with nemesis). The code is meant to be run with two
> processors, and it either hangs or give an error message in
> the case that the two processors are on separate nodes. It
> appears to work OK if both processors are on the same node.
> I've included it here for your enjoyment if you like to try it out.
>
> Thanks!
> Bryan
>
> =======================================================
>
>
>
>
>
> #include <stdio.h>
> #include <string.h>
> #include <mpi.h>
>
> double array[256][256][512];
>
> int main(int argc, char *argv[])
> {
> int myrank;
> MPI_Request req[2];
> MPI_Status status1, status2, stats[2];
> MPI_Datatype subarray1, subarray2, subarray3, subarray4;
> int array_size[] = {256, 256, 512};
> int array_subsize1[] = {128,128,512};
> int array_subsize2[] = {128,128,512};
>
> int array_start1[] = {0, 0, 0};
> int array_start2[] = {128, 128, 0};
> int i;
> double *ptr = (double *)array;
>
> MPI_Init(&argc, &argv);
> MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
>
> printf("MPI_Init okay...\n");
>
> if(myrank == 0)
> {
> /* Create a subarray datatype */
> MPI_Type_create_subarray(3, array_size,
> array_subsize1, array_start1, MPI_ORDER_C, MPI_DOUBLE, &subarray1);
> MPI_Type_commit(&subarray1);
> MPI_Type_create_subarray(3, array_size,
> array_subsize2, array_start2, MPI_ORDER_C, MPI_DOUBLE, &subarray2);
> MPI_Type_commit(&subarray2);
>
> for(i = 0; i < 256*256*512; i++)
> ptr[i] = 0.0;
>
> printf("data init ok\n");
> fflush(stdout);
>
> MPI_Send(array, 1, subarray1, 1, 123, MPI_COMM_WORLD);
>
> printf("sent ok\n");
> fflush(stdout);
>
> MPI_Recv(array, 1, subarray2, 1, 124,
> MPI_COMM_WORLD, &stats[1]);
>
> printf("received ok\n");
> printf("array: [0][0][0] = %f, [128][128][0]
> = %f\n", array[0][0][0], array[128][128][0]);
> fflush(stdout);
> }
> else
> {
> /* Create a subarray datatype */
> MPI_Type_create_subarray(3, array_size,
> array_subsize1, array_start1, MPI_ORDER_C, MPI_DOUBLE, &subarray3);
> MPI_Type_commit(&subarray3);
> MPI_Type_create_subarray(3, array_size,
> array_subsize2, array_start2, MPI_ORDER_C, MPI_DOUBLE, &subarray4);
> MPI_Type_commit(&subarray4);
>
> for(i = 0; i < 256*256*512; i++)
> ptr[i] = 1.0;
>
> printf("data init ok\n");
> fflush(stdout);
>
> MPI_Recv(array, 1, subarray3, 0, 123,
> MPI_COMM_WORLD, &stats[0]);
>
> printf("received ok\n");
> printf("array: [0][0][0] = %f, [128][128][0]
> = %f\n", array[0][0][0], array[128][128][0]);
> fflush(stdout);
>
> MPI_Send(array, 1, subarray4, 0, 124, MPI_COMM_WORLD);
>
> printf("sent ok\n");
>
> fflush(stdout);
> }
>
> MPI_Finalize();
> return 0;
> }
>
More information about the mpich-discuss
mailing list