[Patch, Fortran] CAF dep (3/3): coarrays - pass may_require_tmp informtion for CAF_get/send/sendget to the library
Paul Richard Thomas
paul.richard.thomas@gmail.com
Sat Aug 30 19:44:00 GMT 2014
Dear Tobias,
This looks fine to me - OK for trunk.
Thanks for this massive effort!
Paul
On 28 August 2014 08:13, Tobias Burnus <burnus@net-b.de> wrote:
> This patch is based on 1/2 and 2/2 on the series. When the patch is
> approved, OpenCoarrays needs to be adapted; however, as surplus arguments of
> the callee are ignored, no immediate action is required. (And some delay
> avoids issues with compilers being older than the library.)
>
> The issue comes up in the context of having a coarray access on the same
> image, e.g. "a[this_image()] = a", where alias questions play a role. While
> one can leave the general handling to the library - such as switching to
> memmove in case of local memory access, this patch tries to help the library
> to decide whether it has to create a temporary variable or not. For that
> reason, it passes an may_require_temporary argument to the library.
>
> may_require_temporary is false if the source and target variables are
> disjunct, or if they are such overlapping that walking them in element order
> will not require a temporary (special case: identical). If the compiler
> cannot tell at compile time, the value is always one. Of course, if the
> memory access is for a different image than the current image (or for
> sendget: when the two image indexes are for different images), the library
> can ignore the argument "may_require_temporary" and use the normal remote
> memory access.
>
> Build and regtested on x86-64-gnu-linux.
> OK for the trunk?
>
> Tobias
>
> PS: I image code like the following in the library:
>
> if (image_index == this_image)
> {
> if (contiguous LHS and RHS):
> use memmove
> // With special case: LHS and RHS identical
> if (!may_require_temporary)
> for-loop assigning
> LHS = RHS in element order
> else
> {
> tmp = malloc()
> if (RHS contiguous or scalar)
> tmp = memcpy(RHS)
> else
> for loop assigning RHS to tmp
> if (LHS contiguous)
> LHS = memcpy(tmp)
> else
> for loop assigning tmp to LHS
> }
> } else {
> do normal remote-image assignment
> }
--
The knack of flying is learning how to throw yourself at the ground and miss.
--Hitchhikers Guide to the Galaxy
More information about the Gcc-patches
mailing list