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>さんのメール:
>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>さんのメール:
>
>
>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
>
>

Reply via email to