xref: /llvm-project/openmp/docs/remarks/OMP100.rst (revision 6242f9b966978f6d4d5a15a7475bb3169fa2d3fd)
1.. _omp100:
2.. _omp_no_external_caller_in_target_region:
3
4Potentially unknown OpenMP target region caller `[OMP100]`
5==========================================================
6
7A function remark that indicates the function, when compiled for a GPU, is
8potentially called from outside the translation unit. Note that a remark is
9only issued if we tried to perform an optimization which would require us to
10know all callers on the GPU.
11
12To facilitate OpenMP semantics on GPUs we provide a runtime mechanism through
13which the code that makes up the body of a parallel region is shared with the
14threads in the team. Generally we use the address of the outlined parallel
15region to identify the code that needs to be executed. If we know all target
16regions that reach the parallel region we can avoid this function pointer
17passing scheme and often improve the register usage on the GPU. However, If a
18parallel region on the GPU is in a function with external linkage we may not
19know all callers statically. If there are outside callers within target
20regions, this remark is to be ignored. If there are no such callers, users can
21modify the linkage and thereby help optimization with a `static` or
22`__attribute__((internal))` function annotation. If changing the linkage is
23impossible, e.g., because there are outside callers on the host, one can split
24the function into an external visible interface which is not compiled for
25the target and an internal implementation which is compiled for the target
26and should be called from within the target region.
27