Hi,
> In general, even in your serial fortran code, you're already
> taking a performance hit using a derived type.
That is not generally true. The right statement is: "it depends".
Yes, sometimes derived data types and object orientation and so on can
lead to some performance hit; but current compiler usually can oprimise
alot.
E.g. consider http://www.terboven.com/download/OAbstractionsLA.pdf
(especially p.19).
So, I would not recommend to disturb the ready program in order to let
it be the old good f77 style. And let us not start a flame about
"assembler is faster but OO is easier"! :-)
Best wishes
Paul
> -----Original Message-----
> From: users-bounces_at_[hidden] [mailto:users-bounces_at_[hidden]] On Behalf Of Prentice Bisbal
> Sent: Wednesday, May 05, 2010 11:51 AM
> To: Open MPI Users
> Subject: Re: [OMPI users] Fortran derived types
>
> Vedran Coralic wrote:
>> Hello,
>>
>> In my Fortran 90 code I use several custom defined derived types.
>> Amongst them is a vector of arrays, i.e. v(:)%f(:,:,:). I am wondering
>> what the proper way of sending this data structure from one processor
>> to another is. Is the best way to just restructure the data by copying
>> it into a vector and sending that or is there a simpler way possible
>> by defining an MPI derived type that can handle it?
>>
>> I looked into the latter myself but so far, I have only found the
>> solution for a scalar fortran derived type and the methodology that
>> was suggested in that case did not seem naturally extensible to the vector case.
>>
>
> It depends on how your data is distributed in memory. If the arrays are evenly distributed, like what would happen in a multidimensional-array, the derived datatypes will work fine. If you can't guarantee the spacing between the arrays that make up the vector, then using MPI_Pack/MPI_Unpack (or whatever the Fortran equivalents are) is the best way to go.
>
> I'm not an expert MPI programmer, but I wrote a small program earlier this year that created a dynamically created array of dynamically created arrays. After doing some research into this same problem, it looked like packing/unpacking was the only way to go.
>
> Using Pack/Unpack is easy, but there is a performance hit since the data needs to be copied into the packed buffer before sending, and then copied out of the buffer after the receive.
>
>
> --
> Prentice
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users
>
--
Dipl.-Inform. Paul Kapinos - High Performance Computing,
RWTH Aachen University, Center for Computing and Communication
Seffenter Weg 23, D 52074 Aachen (Germany)
Tel: +49 241/80-24915
|