Clune, Thomas L. (GSFC-6101)
2017-05-04 21:17:48 UTC
I have encountered a problem that seems well suited to dynamic windows with one-sided comunication. To verify my understanding, I put together a simple demo code (attached). My initial attempt consistently crashed until I stumbled upon passing the base address of the attached memory on the _target_ process to the sending process in advance of the MPI_Put() call. Previously, Iâd been specifying a displacement of 0 in the put.
The part I find confusing is that essentially the same example using MPI_Win_allocate() did _not_ require passing the displacement. I.e., MPI_Put() used a displacement of zero and my data ended up where I expected it on the target process. This would suggest that MPI_Put() must be used differently depending on whether or not a window is dynamic. I did not find this mentioned anywhere in the documentation, nor did I find any example code that demonstrated this extra communication for the displacement.
OTOH, this does help to explain another question I had about dynamic windows. The documentation states that there can me multiple (nonoverlapping) memory regions attached to a window, but does not mention how to target specific regions.
If Iâm right about all of this, then I guess this is just a request for the relevant parties to improve the documentation and the various examples found on the web. If Iâm wrong, then Iâd appreciate enlightenment.
I apologize in advance that the attached code is in Fortran (my native tongue). The code runs fine as-is. But if the commented out MPI_Put() call is substituted for the uncommented one, it will crash with a segmentation fault.
The part I find confusing is that essentially the same example using MPI_Win_allocate() did _not_ require passing the displacement. I.e., MPI_Put() used a displacement of zero and my data ended up where I expected it on the target process. This would suggest that MPI_Put() must be used differently depending on whether or not a window is dynamic. I did not find this mentioned anywhere in the documentation, nor did I find any example code that demonstrated this extra communication for the displacement.
OTOH, this does help to explain another question I had about dynamic windows. The documentation states that there can me multiple (nonoverlapping) memory regions attached to a window, but does not mention how to target specific regions.
If Iâm right about all of this, then I guess this is just a request for the relevant parties to improve the documentation and the various examples found on the web. If Iâm wrong, then Iâd appreciate enlightenment.
I apologize in advance that the attached code is in Fortran (my native tongue). The code runs fine as-is. But if the commented out MPI_Put() call is substituted for the uncommented one, it will crash with a segmentation fault.