[mpich-discuss] MPI_Get on the same memory location

Balaji, Pavan balaji at anl.gov
Fri Aug 22 09:56:38 CDT 2014


That’s not “aliased” (as per the MPI standard), since the input and output buffers are not overlapping (I would have preferred saying “overlapping” to “aliased”).

Note that the example in the standard that shows overlapping uses copyIntBuffer(a,b,7), not copyIntBuffer(a,b,3).

  — Pavan

On Aug 22, 2014, at 9:37 AM, Michael L. Stokes <Michael.Stokes at uah.edu> wrote:

> 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
>>> 
>> 
> 
> _______________________________________________
> discuss mailing list     discuss at mpich.org
> To manage subscription options or unsubscribe:
> https://lists.mpich.org/mailman/listinfo/discuss

--
Pavan Balaji  ✉️
http://www.mcs.anl.gov/~balaji



More information about the discuss mailing list