[mvapich-discuss] gather receive order
Andrew Senin
andrew.senin at itseez.com
Wed May 25 05:59:00 EDT 2011
Hi Krishna,
Thanks for your answer! I'm using mvapich2-1.6. And setting the variables
fixes the problem, that's exactly what I need!
Thanks again.
-Andrew
From: krishna.kandalla at gmail.com [mailto:krishna.kandalla at gmail.com] On
Behalf Of Krishna Kandalla
Sent: Wednesday, May 25, 2011 12:28 AM
To: Andrew Senin
Cc: mvapich-discuss at cse.ohio-state.edu
Subject: Re: [mvapich-discuss] gather receive order
Hello Andrew,
Thank you for reporting this issue. We have a fix for this in our
current development version. Can you please let us know which version of
mvapich2 you are using? I can generate a patch for your version and send it
over. Meanwhile, you can also try setting the following run-time flags to 0:
MV2_USE_DIRECT_GATHER
<http://mvapich.cse.ohio-state.edu/support/user_guide_mvapich2-1.7_alpha.htm
l#x1-20100011.75> and
MV2_USE_TWO_LEVEL_GATHER
<http://mvapich.cse.ohio-state.edu/support/user_guide_mvapich2-1.7_alpha.htm
l#x1-22300011.97> .
Regards,
Krishna
On Tue, May 24, 2011 at 6:02 AM, Andrew Senin <andrew.senin at itseez.com>
wrote:
Hello list,
I have an application which uses MPI_Gather. It worked perfectly with
openmpi-1.4.3 and mpich2-1.3.2p1. However when I switched to mvapich2 it
starts failing. After investigation I found that MPI_Gather does receives
array in rank order while the other 2 implementations do. Is this an issue
in mvapich2? The standard says that "The root process receives the messages
and stores them in rank order".
Here is the output I receive from 4 ranks:
rank 2 sent (4,5,)
rank 3 sent (6,7,)
rank 0 sent (0,1,)
rank 0 received 0 1 6 7 2 3 4 5 , expected 0 1 2 3 4 5 6 7
rank 1 sent (2,3,)
And the test which generates this output:
#include "mpi.h"
#include <string.h>
#include "stdio.h"
#define num_el 2
#define num_ranks 4
int main(int argc, char *argv[])
{
int i = 0;
int rank;
int size;
int gather_send[num_el] = {0};
int gather_recv[num_el * num_ranks] = {0};
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (size != num_ranks)
{
printf("This sample works with only %i ranks\n", num_ranks);
goto FreeMemory;
}
for (i = 0; i < num_el; i++)
{
gather_send[i] = num_el * rank + i;
}
MPI_Gather(gather_send, num_el, MPI_INT,
gather_recv, num_el, MPI_INT,
0, MPI_COMM_WORLD);
printf("rank %i sent (",rank);
for (i = 0; i < num_el; i++)
{
printf("%i,", gather_send[i]);
}
printf(")\n");
if (rank == 0)
{
int i = 0;
char buffer_received[10000] = {0};
char buffer_expected[10000] = {0};
for(i = 0; i < num_el * num_ranks; i++)
{
char temp_received[128] = {0};
char temp_expected[128] = {0};
sprintf(temp_received, "%i ", gather_recv[i]);
sprintf(temp_expected, "%i ", i);
strcat(buffer_expected, temp_expected);
strcat(buffer_received, temp_received);
}
printf("rank %i received %s, expected %s\n",
rank,
buffer_received,
buffer_expected);
}
FreeMemory:
MPI_Finalize();
return 0;
}
Thanks,
Andrew.
_______________________________________________
mvapich-discuss mailing list
mvapich-discuss at cse.ohio-state.edu
http://mail.cse.ohio-state.edu/mailman/listinfo/mvapich-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.cse.ohio-state.edu/pipermail/mvapich-discuss/attachments/20110525/75ea2f6c/attachment-0001.html
More information about the mvapich-discuss
mailing list