[Openmp-commits] [PATCH] D62393: [OPENMP][NVPTX]Mark parallel level counter as volatile.
Alexey Bataev via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Mon Sep 23 08:39:00 PDT 2019
ABataev added a comment.
In D62393#1679193 <https://reviews.llvm.org/D62393#1679193>, @protze.joachim wrote:
> It is probably not directly related to this patch, but I think the logic of `omp_in_parallel()` is not valid. It only works, because the level counting is also broken. This code
>
> int main(){
> #pragma omp target
> #pragma omp parallel if(0)
> if(omp_get_thread_num()==0) {
> printf("omp_in_parallel=%i\n", omp_in_parallel());
> printf("omp_get_level=%i\n", omp_get_level());
> printf("omp_get_active_level=%i\n", omp_get_active_level());
> }
> return 0;
> }
>
>
> should print (and does so with `env OMP_TARGET_OFFLOAD=disabled`):
>
> omp_in_parallel=0
> omp_get_level=1
> omp_get_active_level=0
>
>
> As I understand the code for `omp_in_parallel()`, the example code would print `omp_in_parallel=1` if the level would correctly be increased.
You're wrong. My output:
omp_in_parallel=0
omp_get_level=1
omp_get_active_level=0
So, `omp_in_parallel` works correctly on GPU.
If it does not work correctly with `OMP_TARGET_OFFLOAD=disabled`, the problem is definitely in `libomp`, not `libomptarget`. With disabled offloading the code is not offloaded to GPU.
Repository:
rOMP OpenMP
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62393/new/
https://reviews.llvm.org/D62393
More information about the Openmp-commits
mailing list