| Call may contain unknown parallel regions. Use `__attribute__((assume("omp_no_parallelism")))` to override. [OMP133] |
| ==================================================================================================================== |
| |
| .. _omp133: |
| |
| This analysis remark identifies calls that prevented :ref:`OMP131 <omp131>` from |
| providing the generic-mode kernel with a fully specialized state machine. This |
| remark will identify each call that may contain unknown parallel regions that |
| caused the kernel to require a fallback. |
| |
| Examples |
| -------- |
| |
| This will occur for any generic-mode kernel that may contain unknown parallel |
| regions. This is typically coupled with the :ref:`OMP132 <omp132>` remark. |
| |
| .. code-block:: c++ |
| |
| extern void setup(); |
| |
| void foo() { |
| #pragma omp target |
| { |
| setup(); |
| #pragma omp parallel |
| { |
| work(); |
| } |
| } |
| } |
| |
| .. code-block:: console |
| |
| $ clang++ -fopenmp -fopenmp-targets=nvptx64 -O2 -Rpass-analysis=openmp-opt omp133.cpp |
| omp133.cpp:6:5: remark: Call may contain unknown parallel regions. Use |
| `__attribute__((assume("omp_no_parallelism")))` to override. [OMP133] |
| setup(); |
| ^ |
| |
| The remark suggests marking the function with the assumption that it contains no |
| parallel regions. If this is done then the kernel will be rewritten with a fully |
| specialized state machine. |
| |
| .. code-block:: c++ |
| |
| __attribute__((assume("omp_no_parallelism"))) extern void setup(); |
| |
| |
| void foo() { |
| #pragma omp target |
| { |
| setup(); |
| #pragma omp parallel |
| { |
| work(); |
| } |
| } |
| } |
| |
| .. code-block:: console |
| |
| $ clang++ -fopenmp -fopenmp-targets=nvptx64 -O2 -Rpass=openmp-opt omp133.cpp |
| omp133.cpp:4:1: remark: Rewriting generic-mode kernel with a customized state machine. [OMP131] |
| #pragma omp target |
| ^ |
| |
| Diagnostic Scope |
| ---------------- |
| |
| OpenMP target offloading analysis remark. |