| .. _omp100: |
| .. _omp_no_external_caller_in_target_region: |
| |
| Potentially unknown OpenMP target region caller `[OMP100]` |
| ========================================================== |
| |
| A function remark that indicates the function, when compiled for a GPU, is |
| potentially called from outside the translation unit. Note that a remark is |
| only issued if we tried to perform an optimization which would require us to |
| know all callers on the GPU. |
| |
| To facilitate OpenMP semantics on GPUs we provide a runtime mechanism through |
| which the code that makes up the body of a parallel region is shared with the |
| threads in the team. Generally we use the address of the outlined parallel |
| region to identify the code that needs to be executed. If we know all target |
| regions that reach the parallel region we can avoid this function pointer |
| passing scheme and often improve the register usage on the GPU. However, If a |
| parallel region on the GPU is in a function with external linkage we may not |
| know all callers statically. If there are outside callers within target |
| regions, this remark is to be ignored. If there are no such callers, users can |
| modify the linkage and thereby help optimization with a `static` or |
| `__attribute__((internal))` function annotation. If changing the linkage is |
| impossible, e.g., because there are outside callers on the host, one can split |
| the function into an external visible interface which is not compiled for |
| the target and an internal implementation which is compiled for the target |
| and should be called from within the target region. |