[cfe-dev] Discussion about OpenMP 5.0 declare mapper runtime

Lingda Li via cfe-dev cfe-dev at lists.llvm.org
Thu Oct 3 15:17:10 PDT 2019


Thanks for the comments Johannes.

Anyone has comments?

On Thu, Oct 3, 2019 at 5:47 PM Doerfert, Johannes <jdoerfert at anl.gov> wrote:

> (I tried to collect the cross-posts from the cfe and openmp list here,
>  unsure if I got the latest ones though. No more cross posts and/or
>  dropping a list please.)
>
> > Ravi's email to cfe-dev
> >
> > Everytime we want to pass something new to the libomptarget runtime we
> > would need to add a new interface.  Why not pass a pointer to a
> > structure, 1st field says how many valid fields this structure
> > contains and populate the fields with info or null.  Run time can
> > check if the field is null or not and take appropriate action.
> >
> > Struct {
> >     Int Num_fields 2
> >     Int * mapper;
> >     Int * nowait_object
> >  }
> >
> > To support async (aka nowait)  we need an object to call back to the
> > libomp library.  This object can be passed in this struct.
>
> Initially, I thought this was a similarly good design. While fairly
> future prove, I have some problems I want to mention. First, however,
> I'd like to point out that new API functions alone are not really
> problematic though, especially if they are just wrappers around the
> newest version.
>
> Drawbacks of a "version struct":
>  - It makes the API backwards compatible, at least until runtime. I
>    mean, when you recompile a component of your application with a
>    (maybe newer) compiler it is unclear what version the rest of the
>    application, and the used structs, are using. If you assume the
>    struct passed around is at least of the current version, it will
>    break if it is not, silently at runtime. If you don't assume
>    anything, you need to emit dynamic checks and versioning when you
>    want to modify the code. The same situation with the "new API" model
>    will cause a link error if the runtime you link into is not as new
>    as the API calls you used. This allows you to rewrite the code based
>    on the API call semantic you know without versioning and fear of
>    silent miscompilation. I know this explanation is very abstract, let
>    me know if I should try to make it more concrete.
>

I agree. In this case, the runtime will need to check 'Num_fields' to make
sure it only uses what the struct contains. But I have to say Ravi's scheme
is quite extendable.


>  - We cannot remove arguments in a reasonable way. Please correct me if
>    I'm wrong here.
>

I agree. I think you can only add arguments in this case.


>
>
> On 10/01, Jon Chesterfield via cfe-dev wrote:
> > >
> > >
> > > I would like to bring your attention to the choice of 2 proposals for
> the
> > > declare mapper runtime interface:
> > >
> > > 1. The current design which creates new runtime functions for declare
> > > mappers. For example, right now we have `__tgt_target_teams(...)` which
> > > corresponds to the runtime interface for `omp target teams`. Now we add
> > > `__tgt_target_teams_mapper(..., void **mappers)` to replace it.
> > >
> >
> > New feature, new library call seems reasonable. The current interface can
> > presumably be reimplemented as a call to (the internals of) the proposed
> > interface.
>
> Yes, I mentioned that as well:
>   old(args) = new(args, nullptr)
>
> > > 2. Introduce a function `__tgt_push_mappers`, which should be called
> before
> > > every target function call (e.g., `__tgt_target_teams`) to pass the
> mapper
> > > argument for that function. The call of `__tgt_push_mappers` is
> implicitly
> > > bonded with the actual target call.
> > >
> >
> > This seems error prone to use and likely to degrade performance.
> >
> > Choice 1 seems more appealing to me.
>
> So far, most people seem to prefer choice 1. We should go with that one
> if there are no complaints soon.
>
>
> Cheers,
>   Johannes
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20191003/4528aa65/attachment.html>


More information about the cfe-dev mailing list