[Openmp-commits] [PATCH] D81054: [OpenMP] Introduce target memory manager

Joachim Protze via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Tue Nov 3 11:29:12 PST 2020


protze.joachim added a comment.

I tested this with older clang releases (at least back to clang 9.0) and could reproduce the assertion. The error doesn't seem to be related to this patch, but the test just reveals the issue.

I could reduce the issue to:

  #include <omp.h>
  #include <cassert>
  #include <iostream>
  #define N 10
  
  int main(int argc, char *argv[]) {
  #pragma omp parallel for num_threads(4)
    for (int i = 0; i < 16; ++i) {
      int buffer[N];
      printf("i=%i, n=%i, buffer=%p\n",i,N,buffer);
  #pragma omp critical
  #pragma omp target teams distribute parallel for              \
      map(from                                                  \
          : buffer)
      for (int j = 0; j < N; ++j) {
        buffer[j] = i;
      }
      for (int j = 0; j < N; ++j) {
        if(buffer[j] != i){
          printf("buffer[j=%i]=%i != i=%i, buffer=%p\n",j,buffer[j],i,buffer);
          assert(buffer[j] == i);
        }
      }
    }
    std::cout << "PASS\n";
    return 0;
  }

So I think, that the `map(from)` fails when executed from multiple threads. The issue goes away, if the initial test is executed with OMP_NUM_THREADS=1. Adding the critical does not solve the issue. So, I don't think that a race in libomptarget is causing the issue.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81054/new/

https://reviews.llvm.org/D81054



More information about the Openmp-commits mailing list