Dear Gus, Dear all,
Thanks a lot.
MPI_Type_Struct works well for the first part of my problem, so I am very
happy to be able to use it.

Regarding MPI_TYPE_VECTOR.

I have studied it and for simple case it is clear to me what id does (at
least I believe). Foe example if I have a matrix define as:
REAL, ALLOCATABLE (AA(:,:))
ALLOCATE AA(100,5)

I could send part of it defining

CALL MPI_TYPE_VECTOR(5,1,5,MPI_DOUBLE_PRECISION,*MY_NEW_TYPE*)

after that I can send part of it with

CALL MPI_SEND( AA(1:*10*,:), *10*, *MY_NEW_TYPE*, 1, 0, MPI_COMM_WORLD );

Have I understood correctly?

What I can do in case of three dimensional array? for example AA(:,:,:), I
am looking to MPI_TYPE_CREATE_SUBARRAY.
Is that the correct way?

Thanks again




Diego


On 13 January 2015 at 19:04, Gus Correa <g...@ldeo.columbia.edu> wrote:

> Hi Diego
> I guess MPI_Type_Vector is the natural way to send and receive Fortran90
> array sections (e.g. your QQMLS(:,50:100,:)).
> I used that before and it works just fine.
> I think that is pretty standard MPI programming style.
> I guess MPI_Type_Struct tries to emulate Fortran90 and C structures
> (as you did in your previous code, with all the surprises regarding
> alignment, etc), not array sections.
> Also, MPI type vector should be more easy going (and probably more
> efficient) than MPI type struct, with less memory alignment problems.
> I hope this helps,
> Gus Correa
>
> PS - These books have a quite complete description and several examples
> of all MPI objects and functions, including MPI types (native and user
> defined):
> http://mitpress.mit.edu/books/mpi-complete-reference-0
> http://mitpress.mit.edu/books/mpi-complete-reference-1
>
> [They cover MPI 1 and 2. I guess there is a new/upcoming book
> with MPI 3, but for what you're doing 1 and 2 are more than enough.]
>
>
> On 01/13/2015 09:22 AM, Diego Avesani wrote:
>
>> Dear all,
>>
>> I had some wonderful talking about MPI_type_create_struct adn
>> isend\irecv with
>> Gilles, Gustavo, George, Gus, Tom and Jeff. Now all is more clear and my
>> program works.
>>
>> Now I have another question. In may program I have matrix:
>>
>> /QQMLS(:,:,:) /that is allocate as
>>
>> /ALLOCATE(QQMLS(9,npt,18)/), where npt is the number of particles
>>
>> QQMLS is double precision.
>>
>> I would like to sent form a CPU to another part of it, for example,
>> sending QQMLS(:,50:100,:). I mean sending the QQMLS of the particles
>> between 50 to 100.
>> I suppose that i could use MPI_Type_vector but I am not sure. The
>> particle that I want to sent could be from 25 to 50 ecc.. ecc..so
>>   blocklength changes everytime.
>>
>> Do I have to use MPI_type_create_struct?
>> Do I have correctly understood MPI_Type_vector?
>>
>> Thanks a lot
>>
>>
>> Diego
>>
>>
>>
>> _______________________________________________
>> users mailing list
>> us...@open-mpi.org
>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users
>> Link to this post: http://www.open-mpi.org/community/lists/users/2015/01/
>> 26171.php
>>
>>
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users
> Link to this post: http://www.open-mpi.org/community/lists/users/2015/01/
> 26172.php
>

Reply via email to