indices are for derived datatype. in this case indexed datatype.

On Wed, Jun 6, 2012 at 1:24 PM, Ziaul Haque Olive <mzh.ol...@gmail.com>wrote:

> Hello Brian,
>
> Actually, I am not modifying the local communication buffer that contains
> the data. I am modifying the the buffer that contains the indices of the
> data buffer(source_disp and target_disp).
>
> in MPICH2 this is not a problem. I am not sure about Open MPI.
>
> Thanks,
> Ziaul
>
>
> On Wed, Jun 6, 2012 at 1:05 PM, Barrett, Brian W <bwba...@sandia.gov>wrote:
>
>> Ziaul -
>>
>> Your program is erroneous; you can not modify the local communication
>> buffer of an MPI_ACCUMULATE call until after the next synchronization call
>> (Section 11.3 of MPI 2.2).  In your example, that would be after the
>> MPI_FENCE call following the call to MPI_ACCUMULATE.
>>
>> Brian
>>
>> On 6/6/12 9:44 AM, "Ziaul Haque Olive" <mzh.ol...@gmail.com> wrote:
>>
>> >Hello,
>> >
>> >I am not sure, if my code is correct according to Open MPI(v1.6). the
>> > code is given as follows, I am doing MPI one-sided communication inside
>> > a function - data_transfer. this function is being called inside a
>> >fence epoch. inside data_transfer, I am allocating memory for
>> >non-contiguous data, creating derived data type, using this datatype in
>> >MPI_Accumulate, and after calling MPI_Accumulate, freeing the indexed
>> >data type and also freeing the memory containing indices for indexed
>> >data type. is it okay that I am freeing memory for derived datatype
>> >before the closing
>> >fence?
>> >
>> >I am getting segmentation fault with this code. if I comment out the
>> >MPI_Accumulate call, then no seg-fault occurs.
>> >
>> >
>> >
>> >void data_transfer(void *data, int
>> >*sources_disp, int *targets_disp, int *target, int size, int *blength,
>> >int func, MPI_Op op, MPI_Win win, MPI_Datatype dtype){
>> >
>> >    int i,j, index;
>> >    int tmp_target;
>> >    int *flag;
>> >    int *source_disp;
>> >    int *target_disp;
>> >    MPI_Datatype source_type, target_type;
>> >
>> >
>> >    MPI_Alloc_mem( size*sizeof(int), MPI_INFO_NULL, &source_disp);
>> >    MPI_Alloc_mem( size*sizeof(int), MPI_INFO_NULL, &target_disp);
>> >    MPI_Alloc_mem( size*sizeof(int), MPI_INFO_NULL, &flag );
>> >
>> >    memset(flag, 0, size*sizeof(int));
>> >
>> >    for(i=0;i<size;i++){
>> >        if(flag[i]==0){
>> >            tmp_target = target[i];
>> >
>> >            index = 0;
>> >            for(j=i; j<size; j++){
>> >                if(flag[j]==0 && tmp_target == target[j] ){
>> >                    source_disp[index] = sources_disp[j];
>> >                    target_disp[index] = targets_disp[j];
>> >                    //printf("src, target disp %d  %d\n", j, disp[j]);
>> >                    index++;
>> >                    flag[j] = 1;
>> >                 }
>> >            }
>> >
>> >            MPI_Type_indexed(index, blength , source_disp, dtype,
>> >&source_type);
>> >            MPI_Type_commit(&source_type);
>> >            MPI_Type_indexed(index, blength , target_disp, dtype,
>> >&target_type);
>> >            MPI_Type_commit(&target_type);
>> >
>> >
>> >            MPI_Accumulate( data, 1, source_type, tmp_target, 0, 1,
>> >target_type , op, win);
>> >
>> >            MPI_Type_free(&source_type);
>> >            MPI_Type_free(&target_type);
>> >        }
>> >    }
>> >    MPI_Free_mem(source_disp);
>> >    MPI_Free_mem(target_disp);
>> >    MPI_Free_mem(flag);
>> >
>> >}
>> >
>> >void main(){
>> >    int i;
>> >    while(i<N){
>> >             MPI_Win_fence(MPI_MODE_NOPRECEDE, queue2_win);
>> >
>> >             data_transfer();
>> >
>> >             MPI_Win_fence(MPI_MODE_NOSUCCEED, queue2_win);
>> >    }
>> >}
>> >
>> >thanks,
>> >Ziaul
>> >
>> >
>> >_______________________________________________
>> >users mailing list
>> >us...@open-mpi.org
>> >http://www.open-mpi.org/mailman/listinfo.cgi/users
>>
>>
>> --
>>  Brian W. Barrett
>>  Dept. 1423: Scalable System Software
>>  Sandia National Laboratories
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> users mailing list
>> us...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/users
>>
>
>

Reply via email to