Hi again. I adapted my testing program by overwriting the window buffer complete with 1. This allows me to see at which places OpenMPI writes. The result is:
*** -DO1=1 -DV1=1 *** (displ 3,2,1,0 , MPI_Type_create_indexed_block) mem[0] = { 0.0000, 0.0000, 0.0000} mem[1] = { 0.0000, 0.0000, 0.0000} mem[2] = { 0.0000, 0.0000, 0.0000} mem[3] = { nan, nan, nan} mem[4] = { nan, nan, nan} mem[5] = { nan, nan, nan} mem[6] = { nan, nan, nan} mem[7] = { nan, nan, nan} mem[8] = { nan, nan, nan} mem[9] = { nan, nan, nan} *** -DO1=1 -DV2=1 *** MPI_Type_contiguous(4, mpi_double3, &mpit) mem[0] = { 0.0000, 1.0000, 2.0000} mem[1] = { 3.0000, 4.0000, 5.0000} mem[2] = { 6.0000, 7.0000, 8.0000} mem[3] = { 9.0000, 10.0000, 11.0000} mem[4] = { nan, nan, nan} mem[5] = { nan, nan, nan} mem[6] = { nan, nan, nan} mem[7] = { nan, nan, nan} mem[8] = { nan, nan, nan} mem[9] = { nan, nan, nan} *** -DO2=1 -DV1=1 *** (displ 0,1,2,3 , MPI_Type_create_indexed_block) mem[0] = { 0.0000, 0.0000, 0.0000} mem[1] = { 0.0000, 0.0000, 0.0000} mem[2] = { 0.0000, 0.0000, 0.0000} mem[3] = { 0.0000, 0.0000, 0.0000} mem[4] = { nan, nan, nan} mem[5] = { nan, nan, nan} mem[6] = { nan, nan, nan} mem[7] = { nan, nan, nan} mem[8] = { nan, nan, nan} mem[9] = { nan, nan, nan} *** -DO2=1 -DV2=1 *** MPI_Type_contiguous(4, mpi_double3, &mpit) mem[0] = { 0.0000, 1.0000, 2.0000} mem[1] = { 3.0000, 4.0000, 5.0000} mem[2] = { 6.0000, 7.0000, 8.0000} mem[3] = { 9.0000, 10.0000, 11.0000} mem[4] = { nan, nan, nan} mem[5] = { nan, nan, nan} mem[6] = { nan, nan, nan} mem[7] = { nan, nan, nan} mem[8] = { nan, nan, nan} mem[9] = { nan, nan, nan} Note that for the reversed ordering (3,2,1,0) only 3 lines are written. If I use displacements 3,2,1,8 I get *** -DO1=1 -DV1=1 *** mem[0] = { 0.0000, 0.0000, 0.0000} mem[1] = { 0.0000, 0.0000, 0.0000} mem[2] = { 0.0000, 0.0000, 0.0000} mem[3] = { nan, nan, nan} mem[4] = { nan, nan, nan} mem[5] = { nan, nan, nan} mem[6] = { nan, nan, nan} mem[7] = { nan, nan, nan} mem[8] = { 0.0000, 0.0000, 0.0000} mem[9] = { nan, nan, nan} but 3,2,8,1 yields *** -DO1=1 -DV1=1 *** mem[0] = { 0.0000, 0.0000, 0.0000} mem[1] = { 0.0000, 0.0000, 0.0000} mem[2] = { 0.0000, 0.0000, 0.0000} mem[3] = { nan, nan, nan} mem[4] = { nan, nan, nan} mem[5] = { nan, nan, nan} mem[6] = { nan, nan, nan} mem[7] = { nan, nan, nan} mem[8] = { nan, nan, nan} mem[9] = { nan, nan, nan} Dorian > -----Ursprüngliche Nachricht----- > Von: "Dorian Krause" <doriankra...@web.de> > Gesendet: 12.12.08 13:49:25 > An: Open MPI Users <us...@open-mpi.org> > Betreff: Re: [OMPI users] Onesided + derived datatypes > Thanks George (and Brian :)). > > The MPI_Put error is gone. Did you take a look at the problem > that with the block_indexed type the PUT doesn't work? I'm > still getting the following output (V1 corresponds to the datatype > created with MPI_Type_create_indexed_block while the V2 type > is created with MPI_Type_contiguous, the ordering doesn't care anymore after > your fix) which confuses me > because I remember that (on one machine) MPI_Put with MPI_Type_create_indexed > worked until the invalid datatype error showed up (after a couple of > timesteps). > > *** -DO1=1 -DV1=1 *** > mem[0] = { 0.0000, 0.0000, 0.0000} > mem[1] = { 0.0000, 0.0000, 0.0000} > mem[2] = { 0.0000, 0.0000, 0.0000} > mem[3] = { 0.0000, 0.0000, 0.0000} > mem[4] = { 0.0000, 0.0000, 0.0000} > mem[5] = { 0.0000, 0.0000, 0.0000} > mem[6] = { 0.0000, 0.0000, 0.0000} > mem[7] = { 0.0000, 0.0000, 0.0000} > mem[8] = { 0.0000, 0.0000, 0.0000} > mem[9] = { 0.0000, 0.0000, 0.0000} > *** -DO1=1 -DV2=1 *** > mem[0] = { 5.0000, 0.0000, 0.0000} > mem[1] = { 0.0000, 0.0000, -1.0000} > mem[2] = { 0.0000, 0.0000, 0.0000} > mem[3] = { 0.0000, 0.0000, 0.0000} > mem[4] = { 0.0000, 0.0000, 0.0000} > mem[5] = { 0.0000, 0.0000, 0.0000} > mem[6] = { 0.0000, 0.0000, 0.0000} > mem[7] = { 0.0000, 0.0000, 0.0000} > mem[8] = { 0.0000, 0.0000, 0.0000} > mem[9] = { 0.0000, 0.0000, 0.0000} > *** -DO2=1 -DV1=1 *** > mem[0] = { 0.0000, 0.0000, 0.0000} > mem[1] = { 0.0000, 0.0000, 0.0000} > mem[2] = { 0.0000, 0.0000, 0.0000} > mem[3] = { 0.0000, 0.0000, 0.0000} > mem[4] = { 0.0000, 0.0000, 0.0000} > mem[5] = { 0.0000, 0.0000, 0.0000} > mem[6] = { 0.0000, 0.0000, 0.0000} > mem[7] = { 0.0000, 0.0000, 0.0000} > mem[8] = { 0.0000, 0.0000, 0.0000} > mem[9] = { 0.0000, 0.0000, 0.0000} > *** -DO2=1 -DV2=1 *** > mem[0] = { 5.0000, 0.0000, 0.0000} > mem[1] = { 0.0000, 0.0000, -1.0000} > mem[2] = { 0.0000, 0.0000, 0.0000} > mem[3] = { 0.0000, 0.0000, 0.0000} > mem[4] = { 0.0000, 0.0000, 0.0000} > mem[5] = { 0.0000, 0.0000, 0.0000} > mem[6] = { 0.0000, 0.0000, 0.0000} > mem[7] = { 0.0000, 0.0000, 0.0000} > mem[8] = { 0.0000, 0.0000, 0.0000} > mem[9] = { 0.0000, 0.0000, 0.0000} > > > Thanks for your help. > > Dorian > > > > -----Ursprüngliche Nachricht----- > > Von: "George Bosilca" <bosi...@eecs.utk.edu> > > Gesendet: 12.12.08 01:35:57 > > An: Open MPI Users <us...@open-mpi.org> > > Betreff: Re: [OMPI users] Onesided + derived datatypes > > > > Dorian, > > > > You are right, the datatype generated using the block_index function > > is a legal data-type. We wrongly determined some overlapping regions > > in the description [which is illegal based on the MPI standard]. The > > detection of such overlapping regions being a very expensive process > > if we don't want any false positives (such as your datatype), I prefer > > to remove it completely. > > > > To keep it short I just committed a patch (r20120) in the trunk, and > > I'll take care to move it in the 1.3 and the 1.2.9. > > > > Thanks for your help, > > george. > > > > On Dec 10, 2008, at 18:07 , doriankrause wrote: > > > > > Hi List, > > > > > > I have a MPI program which uses one sided communication with derived > > > datatypes (MPI_Type_create_indexed_block). I developed the code with > > > MPICH2 and unfortunately didn't thought about trying it out with > > > OpenMPI. Now that I'm "porting" the Application to OpenMPI I'm facing > > > some problems. On the most machines I get an SIGSEGV in MPI_Win_fence, > > > sometimes an invalid datatype shows up. I ran the program in Valgrind > > > and didn't get anything valuable. Since I can't see a reason for this > > > problem (at least if I understand the standard correctly), I wrote the > > > attached testprogram. > > > > > > Here are my experiences: > > > > > > * If I compile without ONESIDED defined, everything works and V1 and > > > V2 > > > give the same results > > > * If I compile with ONESIDED and V2 defined (MPI_Type_contiguous) it > > > works. > > > * ONESIDED + V1 + O2: No errors but obviously nothing is send? (Am I > > > in > > > assuming that V1+O2 and V2 should be equivalent?) > > > * ONESIDED + V1 + O1: > > > [m02:03115] *** An error occurred in MPI_Put > > > [m02:03115] *** on win > > > [m02:03115] *** MPI_ERR_TYPE: invalid datatype > > > [m02:03115] *** MPI_ERRORS_ARE_FATAL (goodbye) > > > > > > I didn't get a segfault as in the "real life example" but if > > > ompitest.cc > > > is correct it means that OpenMPI is buggy when it comes to onesided > > > communication and (some) derived datatypes, so that it is probably not > > > of problem in my code. > > > > > > I'm using OpenMPI-1.2.8 with the newest gcc 4.3.2 but the same > > > behaviour > > > can be be seen with gcc-3.3.1 and intel 10.1. > > > > > > Please correct me if ompitest.cc contains errors. Otherwise I would be > > > glad to hear how I should report these problems to the develepors (if > > > they don't read this). > > > > > > Thanks + best regards > > > > > > Dorian > > > > > > > > > > > > > > > <ompitest.tar.gz>_______________________________________________ > > > users mailing list > > > us...@open-mpi.org > > > http://www.open-mpi.org/mailman/listinfo.cgi/users > > > > _______________________________________________ > > users mailing list > > us...@open-mpi.org > > http://www.open-mpi.org/mailman/listinfo.cgi/users > > > > > ____________________________________________________________________ > Psssst! Schon vom neuen WEB.DE MultiMessenger gehört? > Der kann`s mit allen: http://www.produkte.web.de/messenger/?did=3123 > > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users > ____________________________________________________________________ Psssst! Schon vom neuen WEB.DE MultiMessenger gehört? Der kann`s mit allen: http://www.produkte.web.de/messenger/?did=3123