Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] Should order of implementation matter for MPI_reduce?
From: George Bosilca (bosilca_at_[hidden])
Date: 2013-03-04 18:05:29


All the MPI_Reduce are using datatypes with the same signature (1 x MPI_DOUBLE), so this code should not generate any MPI related errors. However, based on the fact that in the else branch the code is summing intensity with intensity2 (and the ice-versa), that's the place I would start investigating…

  George.

PS: The result of the code you posted, is to sum on rank 0 the local intensity with all the intensity2 of all the other nodes. With the change you propose in the else branch you will be summing intensity on rank 0 with intensity on all the other ranks.

On Mar 4, 2013, at 23:48 , "Jeff Squyres (jsquyres)" <jsquyres_at_[hidden]> wrote:

> Based on your description, it sounds like there might be something else wrong in your code (George's point was that you need to call all collectives with the same signature in all processes on the communicator, but just lipping the output buffer from intensity to intensity2 -- or vice versa -- shouldn't affect that).
>
> Perhaps try with a memory-checking debugger...?
>
>
> On Mar 4, 2013, at 5:16 PM, Andrew J Gomes <a-gomes_at_[hidden]> wrote:
>
>> I have the following code which does not give the expected result:
>> if (mpi_rank!=0)
>> { MPI_Reduce(&intensity,&intensity ,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
>> MPI_Reduce(&intensity2,&intensity2 ,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD); }
>> else
>> {
>> MPI_Reduce(MPI_IN_PLACE,&intensity2 ,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
>> MPI_Reduce(MPI_IN_PLACE,&intensity ,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);}
>>
>> However if I change the the order of the else block (reduction of intensity variable before intensity2 variable) to :
>> else
>> {
>> MPI_Reduce(MPI_IN_PLACE,&intensity ,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
>> MPI_Reduce(MPI_IN_PLACE,&intensity2 ,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);}
>>
>> I get the expected result. This surprised me. Is there a reason the order of the else block should match the order of the if block? Is there a more robust way of implementing this type of code. Thank you
>>
>> Andrew
>> _______________________________________________
>> users mailing list
>> users_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/users
>
>
> --
> Jeff Squyres
> jsquyres_at_[hidden]
> For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/
>
>
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users