[Openmp-commits] [PATCH] D110193: [RFC] Initial documentation for declare target indirect support.
Vyacheslav Zakharin via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Wed Sep 22 10:13:58 PDT 2021
vzakhari added inline comments.
================
Comment at: openmp/libomptarget/docs/declare_target_indirect.md:35
+
+FE generates runtime lookup code to match the function address against the key `host_ptr` and produce the new function address `tgt_ptr` that is then used for the indirect function call.
+
----------------
vzakhari wrote:
> jdoerfert wrote:
> > vzakhari wrote:
> > > If needed, we can isolate the lookup implementation into a device RTL API, so that FE just generates a lookup call to map the original function address to the device function address.
> > API, please: `fp()` -> `(lookupDevPtr(fp))()`
> Okay, I will add a definition for the lookup API.
If I just specify the device RTL API that FEs will be able to use, I think I should remove any mentioning of `__openmp_offload_function_ptr_map` symbol. This becomes an implementation detail of the API for a particular device, so different device compiler and device plugins will be able to implement this different ways.
I can describe `__openmp_offload_function_ptr_map` as one of the alternative implementations. Does it sound right?
================
Comment at: openmp/libomptarget/docs/declare_target_indirect.md:39
+
+Since all pointers are supposed to be translated/mapped, when program does not use **required unified_shared_memory**, it is possible to avoid generating the runtime dispatch code for indirect function calls. The mapping between host and device address of an indirect function will be established by `libomptarget` during processing of the offload entries table.
+
----------------
RaviNarayanaswamy wrote:
> vzakhari wrote:
> > jdoerfert wrote:
> > > How would we translate/map all pointers? I fail to see how we could even identify all (function) pointers (see below). Or did we add wording to the standard to forbid this?
> > >
> > > ```
> > > char data[sizeof(fp)];
> > > memcpy(data, &fp, sizeof(fp));
> > >
> > > #pragma omp target map(to:data[:sizeof(fp)])
> > > {
> > > void (*fpc)();
> > > memcpy(&fpc, data, sizeof(fp));
> > > fpc();
> > > }
> > > ```
> > >
> > > Modulo my syntax errors ;)
> > I agree that in this case there will be no translation. I will remove the words about non-unified_shared_memory "optimization". Does it sound right?
> > I agree that in this case there will be no translation. I will remove the words about non-unified_shared_memory "optimization". Does it sound right?
>
> We should get the spec to disallow copy/casting of host pointers and using it to allow the optimization.
I can move this to a TODO section at the end of the doc. Let's agree on the general case, first.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D110193/new/
https://reviews.llvm.org/D110193
More information about the Openmp-commits
mailing list