[mpich-discuss] MPI_Get on the same memory location

Michael L. Stokes Michael.Stokes at uah.edu
Fri Aug 22 09:37:00 CDT 2014


The MPI spec you reference gives an example of aliasing (bottom p.10, 
top p.11).  Would the following also
be considered aliasing?

#include <stdio.h>
#include <stdlib.h>

void copyIntBuffer( int *pin, int *pout, int len ) {
    int i;
    for(i=0; i<len; ++i)
        *pout++ = *pin++;
};

int main() {
    int array[10]={0,1,2,3,4,5,6,7,8,9};
    int *a = &array[0];
    int *b = &array[3];
    copyIntBuffer(a,b,3);
    return 0;
}

It is my belief that a definition of a term is much better than an 
example, albeit more difficult.

My $.05
Mike


On 08/22/2014 08:25 AM, Carsten Clauss wrote:
> MPI-3, Section 2.3, page 10: "Unless specified otherwise, an argument 
> of type OUT or type INOUT cannot be aliased with any other argument 
> passed to an MPI procedure."
>
> Cheers,
> Carsten
>
> On 08/22/2014 03:10 PM, Balaji, Pavan wrote:
>>
>> On Aug 22, 2014, at 7:59 AM, Balaji, Pavan <balaji at anl.gov> wrote:
>>
>>> On Aug 21, 2014, at 8:42 PM, Nick Radcliffe <nradclif at cray.com> wrote:
>>>
>>>>> If buffers overlap, use memmov and not memcpy:
>>>>
>>>> Good point, you would have to use memmov in general for overlapping 
>>>> source and target buffers. I was thinking of the special case where 
>>>> the source and target buffers are identical.
>>>>
>>>>> I don’t think so.  It’s an incorrect program to get from a buffer 
>>>>> to itself.  MPICH is being helpful is catching this user error.
>>>>
>>>> Do you know where in the standard this is specified? I'm having 
>>>> trouble finding it.
>>>
>>> The parameter in PUT is a “const void *”.  It’s read-only for MPI.
>>
>> It’s less clear for GET, but the standard says it’s equivalent to 
>> sending and receiving, which should imply overlapping buffers is 
>> invalid.  Either way, I can’t imagine that not being the intention of 
>> the RMA working group (I’m a part of it).
>>
>> In MPI-2, this was not a problem at all since we couldn’t send data 
>> from the local public window to a remote public window (two 
>> simultaneous locks were not allowed; FENCE didn’t allow load/store 
>> and PUT/GET in the same epoch, etc.).  In MPI-3 we allowed this, but 
>> forgot to make it clear that they shouldn’t overlap.
>>
>> We should try to make it clearer in the standard, though I don’t 
>> think it’s valid even in MPI-3.
>>
>>    — Pavan
>>
>> -- 
>> Pavan Balaji  ✉️
>> http://www.mcs.anl.gov/~balaji
>>
>> _______________________________________________
>> discuss mailing list     discuss at mpich.org
>> To manage subscription options or unsubscribe:
>> https://lists.mpich.org/mailman/listinfo/discuss
>>
>




More information about the discuss mailing list