Dear Gilles, Dear all, thanks, thanks a lot. Could you explain it to me, please?
I mean, when I print displacements I get: displacements(0)= 6922656 displacements(1)= 0 displacements(2)= 16 displacements(3)= 48 displacements(4)= 112 Why do I have 16 spaces in displacements(2), I have only an integer in dummy%ip? Why do you use dummy(1) and dummy(2)? Thanks a lot Diego On 5 January 2015 at 02:44, Gilles Gouaillardet < gilles.gouaillar...@iferc.org> wrote: > Diego, > > MPI_Get_address was invoked with parameters in the wrong order > > here is attached a fixed version > > Cheers, > > Gilles > > On 2015/01/05 2:32, Diego Avesani wrote: > > Dear Gilles, Dear all, > > It works. The only thing that is missed is: > > *CALL MPI_Finalize(MPI%iErr)* > > at the end of the program. > > Now, I have to test it sending some data from a processor to another. > I would like to ask you if you could explain me what you have done. > I wrote in the program: > > * IF(MPI%myrank==1)THEN* > * WRITE(*,*) DISPLACEMENTS* > * ENDIF* > > and the results is: > > *139835891001320 -139835852218120 -139835852213832* > * -139835852195016 8030673735967299609* > > I am not able to understand it. > > Thanks a lot. > > In the attachment you can find the program > > > > > > > > > Diego > > > On 4 January 2015 at 12:10, Gilles Gouaillardet > <gilles.gouaillar...@gmail.com> wrote: > > > Diego, > > here is an updated revision i will double check tomorrow > /* i dit not test it yet, so forgive me it it does not compile/work */ > > Cheers, > > Gilles > > On Sun, Jan 4, 2015 at 6:48 PM, Diego Avesani <diego.aves...@gmail.com> > <diego.aves...@gmail.com> > wrote: > > > Dear Gilles, Dear all, > > in the attachment you can find the program. > > What do you meam "remove mpi_get_address(dummy) from all displacements". > > Thanks for all your help > > Diego > > > > Diego > > > On 3 January 2015 at 00:45, Gilles Gouaillardet > <gilles.gouaillar...@gmail.com> wrote: > > > Diego, > > George gave you the solution, > > The snippet you posted has two mistakes > You did not remove mpi_get_address(dummy) from all displacements > (See my previous reply) > You pass incorrect values to mpi_type_create_resized > > Can you post a trimmed version of your program instead of a snippet ? > > Gus is right about using double precision vs real and -r8 > > Cheers, > > Gilles > > Diego Avesani <diego.aves...@gmail.com> <diego.aves...@gmail.com>さんのメー > ル: > Dear Gilles Dear all, > > I have done all that to avoid to pedding an integer, as suggested by > George. > I define tParticle as a common object. > I am using Intel fortran compiler. > > George suggests: > > *"" The displacements are relative to the benign of your particle type. > Thus the first one is not 0 but the displacement of “integer :: ip” due to > the fact that the compiler is allowed to introduce gaps in order to better > align.* > > * DISPLACEMENTS(1)=MPI_GET_ADDRESS(dummy%ip)* > * DISPLACEMENTS(2)=**MPI_GET_ADDRESS(dummy%RP[1])* > > * DISPLACEMENTS(3)=**MPI_GET_ADDRESS(dummy%QQ[1])* > > *and then remove the MPI_GET_ADDRESS(dummy) from all of them.* > > *3. After creating the structure type you need to resize it in order to > correctly determine the span of the entire structure, and how an array of > such structures lays in memory. Something like:* > *MPI_TYPE_CREATE_RESIZED(old type, DISPLACEMENT(1),* > * MPI_GET_ADDRESS(dummy[2]) - MPI_GET_ADDRESS(dummy[1]), newt) ""* > > What do you think? > George, Did i miss something? > > Thanks a lot > > > > Diego > > > On 2 January 2015 at 12:51, Gilles Gouaillardet > <gilles.gouaillar...@gmail.com> wrote: > > > Diego, > > First, i recommend you redefine tParticle and add a padding integer so > everything is aligned. > > > Before invoking MPI_Type_create_struct, you need to > call MPI_Get_address(dummy, base, MPI%err) > displacements = displacements - base > > MPI_Type_create_resized might be unnecessary if tParticle is aligned > And the lower bound should be zero. > > BTW, which compiler are you using ? > Is tParticle object a common ? > iirc, intel compiler aligns types automatically, but not commons, and > that means MPI_Type_create_struct is not aligned as it should most of the > time. > > Cheers, > > Gilles > > Diego Avesani <diego.aves...@gmail.com> <diego.aves...@gmail.com>さんのメー > ル: > > dear all, > > I have a problem with MPI_Type_Create_Struct and > MPI_TYPE_CREATE_RESIZED. > > I have this variable type: > > * TYPE tParticle* > * INTEGER :: ip* > * REAL :: RP(2)* > * REAL :: QQ(2)* > * ENDTYPE tParticle* > > Then I define: > > Nstruct=3 > *ALLOCATE(TYPES(Nstruct))* > *ALLOCATE(LENGTHS(Nstruct))* > *ALLOCATE(DISPLACEMENTS(Nstruct))* > *!set the types* > *TYPES(1) = MPI_INTEGER* > *TYPES(2) = MPI_DOUBLE_PRECISION* > *TYPES(3) = MPI_DOUBLE_PRECISION* > *!set the lengths* > *LENGTHS(1) = 1* > *LENGTHS(2) = 2* > *LENGTHS(3) = 2* > > As gently suggested by Nick Papior Andersen and George Bosilca some > months ago, I checked the variable adress to resize my struct variable to > avoid empty space and > to have a more general definition. > > * !* > * CALL MPI_GET_ADDRESS(dummy%ip, DISPLACEMENTS(1), MPI%iErr)* > * CALL MPI_GET_ADDRESS(dummy%RP(1), DISPLACEMENTS(2), MPI%iErr)* > * CALL MPI_GET_ADDRESS(dummy%QQ(1), DISPLACEMENTS(3), MPI%iErr)* > * !* > * CALL > MPI_Type_Create_Struct(Nstruct,LENGTHS,DISPLACEMENTS,TYPES,MPI_PARTICLE_TYPE_OLD,MPI%iErr)* > * CALL MPI_Type_Commit(MPI_PARTICLE_TYPE_OLD,MPI%iErr)* > * !* > * CALL MPI_TYPE_CREATE_RESIZED(MPI_PARTICLE_TYPE_OLD, > DISPLACEMENTS(1),DISPLACEMENTS(2) - DISPLACEMENTS(1), MPI_PARTICLE_TYPE)* > > > This does not work. When my program run, I get an error: > > *forrtl: severe (174): SIGSEGV, segmentation fault occurred.* > > I have read the manual but probably I am not able to understand > *MPI_TYPE_CREATE_RESIZED. * > > Someone could help me? > > > Thanks a lot > Diego > > > 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/26092.php > > > _______________________________________________ > users mailing listus...@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/26097.php > > > _______________________________________________ > users mailing listus...@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/26099.php > > > _______________________________________________ > users mailing listus...@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/26100.php > > > > _______________________________________________ > users mailing listus...@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/26101.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/26102.php >