You could but you don’t need to. The datatype engine of Open MPI is doing a 
fair job of packing/unpacking the data on the flight, so you don’t have to.

  George.

> On Jan 16, 2015, at 11:32 , Diego Avesani <diego.aves...@gmail.com> wrote:
> 
> Dear all,
> 
> Could I use  MPI_PACK?
> 
> 
> Diego
> 
> 
> On 16 January 2015 at 16:26, Diego Avesani <diego.aves...@gmail.com 
> <mailto:diego.aves...@gmail.com>> wrote:
> Dear George, Dear all,
> 
> I have been studying. It's clear for 2D case QQ(:,:).
> 
> For example if 
> real :: QQ(npt,9) , with 9 the characteristic of each particles.
> 
> I can simple:
> 
>  call MPI_TYPE_VECTOR(QQ(1:50), 9, 9, MPI_REAL,  my_2D_type, ierr)
> 
> I send 50 element of QQ. I am in fortran so a two dimensional array is 
> organized in a 1D array and a new row start after the 9 elements of a colum
> 
> The problem is a 3D array. I belive that I have to create a sort of vector of 
> vectors.
> More or less like:
> 
> call MPI_TYPE_VECTOR(xxx, xxx, xxx, MPI_REAL,  my_row, ierr)
> 
>      and then 
> 
> call MPI_TYPE_VECTOR(xxx, xxx, xxx, my_row,  my_type, ierr).
> 
> You can note that in the second case I have  my_row instead of mpi_real.  
> 
> I found somethind about it in a tutorial but I am not able to find it again 
> in google. I think that is not convinient the use of struct in this case, I 
> have only real. Moreover, mpi_struct is think to emulate Fortran90 and C 
> structures, as Gus' suggestion.
> 
> Let's me look to that tutorial
> What do you think?
> 
> Thanks again
> 
> 
> 
> 
> 
> 
> Diego
> 
> 
> On 16 January 2015 at 16:02, George Bosilca <bosi...@icl.utk.edu 
> <mailto:bosi...@icl.utk.edu>> wrote:
> The operation you describe is a pack operation, agglomerating together in a 
> contiguous buffer originally discontinuous elements. As a result there is no 
> need to use the MPI_TYPE_VECTOR, but instead you can just use the type you 
> created so far (MPI_my_STRUCT) with a count.
> 
>   George.
> 
> 
> On Fri, Jan 16, 2015 at 5:32 AM, Diego Avesani <diego.aves...@gmail.com 
> <mailto:diego.aves...@gmail.com>> wrote:
> Dear All, 
> I'm sorry to insist, but I am not able to understand. Moreover, I have 
> realized that I have to explain myself better.
> 
> I try to explain in may program. Each CPU has npt particles. My program 
> understand how many particles each CPU has to send, according to their 
> positions. Then I can do:
> 
> icount=1
>  DO i=1,npt
>     IF(i is a particle to send)THEN
> 
>         DATASEND(icount)%ip     = PART(ip)%ip
>         DATASEND(icount)%mc     = PART(ip)%mc
>          
>         DATASEND(icount)%RP     = PART(ip)%RP
>         DATASEND(icount)%QQ     = PART(ip)%QQ
> 
>         icount=icount+1
>     ENDIF
>  ENDDO
> 
> After that, I can send DATASEND
> 
> I DATASEND is a   MPI_my_STRUCT. I can allocate it according to the number of 
> particles that I have to send:
> 
> TYPE(tParticle)  ,ALLOCATABLE,DIMENSION(:) :: DATASEND,DATARECV
> 
> This means that the number of particles which I have to send can change every 
> time.
> 
> After that, I compute for each particles, somethins called QQmls(:,:,:).
> QQmls has all real elements. Now I would like to to the same that I did with 
> PART, but in this case:
> 
> icount=1
> DO i=1,npt
>     IF(i is a particle to send)THEN
>    
>        DATASEND_REAL(:,icount,:)=QQmls(:,i,:)
>       icount=icount+1
> 
>     ENDIF
> ENDDO
> 
> I would like to have a sort  MPI_my_TYPE to do that (like   MPI_my_STRUCT) 
> and not to create every time MPI_TYPE_VECTOR because  DATASEND_REAL changes 
> size every time.
> 
> I hope to make myself clear.
> 
> So is it correct to use MPI_TYPE_VECTOR?, Can I do what I want?
> 
> In the meantime, I will study some examples.
> 
> Thanks again
> 
>  
> 
> 
> 
> Diego
> 
> 
> On 16 January 2015 at 07:39, George Bosilca <bosi...@icl.utk.edu 
> <mailto:bosi...@icl.utk.edu>> wrote:
>  The subarray creation is an multi-dimension extension of the vector type. 
> You can see it as a vector of vector of vector and so on, one vector per 
> dimension. The stride array is used to declare on each dimension what is the 
> relative displacement (in number of elements) from the beginning of the 
> dimension array.
> 
> It is important to use regular type creation when you can take advantage of 
> such regularity instead of resorting to use of struct or h*. This insure 
> better packing/unpacking performance, as well as possible future support for 
> one-sided communications.
> 
> George.
> 
> 
> 
> > On Jan 15, 2015, at 19:31, Gus Correa <g...@ldeo.columbia.edu 
> > <mailto:g...@ldeo.columbia.edu>> wrote:
> >
> > I never used MPI_Type_create_subarray, only MPI_Type_Vector.
> > What I like about MPI_Type_Vector is that you can define a stride,
> > hence you can address any regular pattern in memory.
> > However, it envisages the array layout in memory as a big 1-D array,
> > with a linear index progressing in either Fortran or C order.
> >
> > Somebody correct me please if I am wrong, but at first sight 
> > MPI_Type_Vector sounds more flexible to me than MPI_Type_create_subarray, 
> > exactly because the latter doesn't have strides.
> >
> > The downside is that you need to do some index arithmetic to figure
> > the right strides, etc, to match the corresponding
> > Fortran90 array sections.
> >
> > There are good examples in the "MPI - The complete reference" books I 
> > suggested to you before (actually in vol 1).
> >
> > Online I could find the two man pages (good information, but no example):
> >
> > http://www.open-mpi.org/doc/v1.8/man3/MPI_Type_vector.3.php 
> > <http://www.open-mpi.org/doc/v1.8/man3/MPI_Type_vector.3.php>
> > http://www.open-mpi.org/doc/v1.8/man3/MPI_Type_create_subarray.3.php 
> > <http://www.open-mpi.org/doc/v1.8/man3/MPI_Type_create_subarray.3.php>
> >
> > There is a very simple 2D example of MPI_Type_vector using strides here:
> >
> > https://computing.llnl.gov/tutorials/mpi/#Derived_Data_Types 
> > <https://computing.llnl.gov/tutorials/mpi/#Derived_Data_Types>
> >
> > and a similar one here:
> >
> > http://static.msi.umn.edu/tutorial/scicomp/general/MPI/content6.html 
> > <http://static.msi.umn.edu/tutorial/scicomp/general/MPI/content6.html>
> >
> > Gus Correa
> >
> >> On 01/15/2015 06:53 PM, Diego Avesani wrote:
> >> dear George, dear Gus, dear all,
> >> Could you please tell me where I can find a good example?
> >> I am sorry but I can not understand the 3D array.
> >>
> >>
> >> Really Thanks
> >>
> >> Diego
> >>
> >>
> >> On 15 January 2015 at 20:13, George Bosilca <bosi...@icl.utk.edu 
> >> <mailto:bosi...@icl.utk.edu>
> >> <mailto:bosi...@icl.utk.edu <mailto:bosi...@icl.utk.edu>>> wrote:
> >>
> >>
> >>>    On Jan 15, 2015, at 06:02 , Diego Avesani <diego.aves...@gmail.com 
> >>> <mailto:diego.aves...@gmail.com>
> >>>    <mailto:diego.aves...@gmail.com <mailto:diego.aves...@gmail.com>>> 
> >>> wrote:
> >>>
> >>>    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
> >>
> >>    Indeed, using the subarray is the right approach independent on the
> >>    number of dimensions of the data (you can use it instead of
> >>    MPI_TYPE_VECTOR as well).
> >>
> >>       George.
> >>
> >>
> >>>
> >>>
> >>>
> >>>
> >>>    Diego
> >>>
> >>>
> >>>    On 13 January 2015 at 19:04, Gus Correa <g...@ldeo.columbia.edu 
> >>> <mailto:g...@ldeo.columbia.edu>
> >>>    <mailto:g...@ldeo.columbia.edu <mailto: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-0>
> >>>        <http://mitpress.mit.edu/books/mpi-complete-reference-0 
> >>> <http://mitpress.mit.edu/books/mpi-complete-reference-0>>
> >>>        http://mitpress.mit.edu/books/__mpi-complete-reference-1 
> >>> <http://mitpress.mit.edu/books/__mpi-complete-reference-1>
> >>>        <http://mitpress.mit.edu/books/mpi-complete-reference-1 
> >>> <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 <mailto:us...@open-mpi.org> 
> >>> <mailto:us...@open-mpi.org <mailto:us...@open-mpi.org>>
> >>>            Subscription:
> >>>            http://www.open-mpi.org/__mailman/listinfo.cgi/users 
> >>> <http://www.open-mpi.org/__mailman/listinfo.cgi/users>
> >>>            <http://www.open-mpi.org/mailman/listinfo.cgi/users 
> >>> <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 
> >>> <http://www.open-mpi.org/__community/lists/users/2015/01/__26171.php>
> >>>            
> >>> <http://www.open-mpi.org/community/lists/users/2015/01/26171.php 
> >>> <http://www.open-mpi.org/community/lists/users/2015/01/26171.php>>
> >>>
> >>>
> >>>        _________________________________________________
> >>>        users mailing list
> >>>        us...@open-mpi.org <mailto:us...@open-mpi.org> 
> >>> <mailto:us...@open-mpi.org <mailto:us...@open-mpi.org>>
> >>>        Subscription:
> >>>        http://www.open-mpi.org/__mailman/listinfo.cgi/users 
> >>> <http://www.open-mpi.org/__mailman/listinfo.cgi/users>
> >>>        <http://www.open-mpi.org/mailman/listinfo.cgi/users 
> >>> <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 
> >>> <http://www.open-mpi.org/__community/lists/users/2015/01/__26172.php>
> >>>        <http://www.open-mpi.org/community/lists/users/2015/01/26172.php 
> >>> <http://www.open-mpi.org/community/lists/users/2015/01/26172.php>>
> >>>
> >>>
> >>>    _______________________________________________
> >>>    users mailing list
> >>>    us...@open-mpi.org <mailto:us...@open-mpi.org> 
> >>> <mailto:us...@open-mpi.org <mailto:us...@open-mpi.org>>
> >>>    Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users 
> >>> <http://www.open-mpi.org/mailman/listinfo.cgi/users>
> >>>    Link to this post:
> >>>    http://www.open-mpi.org/community/lists/users/2015/01/26184.php 
> >>> <http://www.open-mpi.org/community/lists/users/2015/01/26184.php>
> >>
> >>
> >>    _______________________________________________
> >>    users mailing list
> >>    us...@open-mpi.org <mailto:us...@open-mpi.org> 
> >> <mailto:us...@open-mpi.org <mailto:us...@open-mpi.org>>
> >>    Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users 
> >> <http://www.open-mpi.org/mailman/listinfo.cgi/users>
> >>    Link to this post:
> >>    http://www.open-mpi.org/community/lists/users/2015/01/26192.php 
> >> <http://www.open-mpi.org/community/lists/users/2015/01/26192.php>
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> users mailing list
> >> us...@open-mpi.org <mailto:us...@open-mpi.org>
> >> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users 
> >> <http://www.open-mpi.org/mailman/listinfo.cgi/users>
> >> Link to this post: 
> >> http://www.open-mpi.org/community/lists/users/2015/01/26193.php 
> >> <http://www.open-mpi.org/community/lists/users/2015/01/26193.php>
> >
> > _______________________________________________
> > users mailing list
> > us...@open-mpi.org <mailto:us...@open-mpi.org>
> > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users 
> > <http://www.open-mpi.org/mailman/listinfo.cgi/users>
> > Link to this post: 
> > http://www.open-mpi.org/community/lists/users/2015/01/26194.php 
> > <http://www.open-mpi.org/community/lists/users/2015/01/26194.php>
> _______________________________________________
> users mailing list
> us...@open-mpi.org <mailto:us...@open-mpi.org>
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users 
> <http://www.open-mpi.org/mailman/listinfo.cgi/users>
> Link to this post: 
> http://www.open-mpi.org/community/lists/users/2015/01/26195.php 
> <http://www.open-mpi.org/community/lists/users/2015/01/26195.php>
> 
> 
> _______________________________________________
> users mailing list
> us...@open-mpi.org <mailto:us...@open-mpi.org>
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users 
> <http://www.open-mpi.org/mailman/listinfo.cgi/users>
> Link to this post: 
> http://www.open-mpi.org/community/lists/users/2015/01/26197.php 
> <http://www.open-mpi.org/community/lists/users/2015/01/26197.php>
> 
> 
> _______________________________________________
> users mailing list
> us...@open-mpi.org <mailto:us...@open-mpi.org>
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users 
> <http://www.open-mpi.org/mailman/listinfo.cgi/users>
> Link to this post: 
> http://www.open-mpi.org/community/lists/users/2015/01/26199.php 
> <http://www.open-mpi.org/community/lists/users/2015/01/26199.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/26201.php 
> <http://www.open-mpi.org/community/lists/users/2015/01/26201.php>

Reply via email to