[Mlir-commits] [mlir] [MLIR][OpenMP] Improve Generic-SPMD kernel detection (PR #137307)

Johannes Doerfert llvmlistbot at llvm.org
Fri May 16 09:43:23 PDT 2025


jdoerfert wrote:

I tried to replicate the issue in C, but that doesn't seem to work. Maybe we should compare the IR. What I did is:
```
#include <stdio.h>

void multi_parallel() {
  int M = 2, N = 3;
  int v[M][N];
  for (int i = 0; i < M; ++i)
    for (int j = 0; j < N; ++j)
      v[i][j] = 0;

  #pragma omp target teams distribute
  for (int i = 0; i < M; ++i) {
    #pragma omp parallel for
    for (int j = 0; j < N; ++j) {
      v[i][j] = v[i][j] + 1;
    }
    v[i][0] = v[i][0] + 1;
    #pragma omp parallel for
    for (int j = 0; j < N; ++j) {
      v[i][j] = v[i][j] + 1;
    }
  }

  for (int i = 0; i < M; ++i)
    for (int j = 0; j < N; ++j)
      printf("v[%i][%i] = %i\n", i, j, v[i][j]);
}

int main() {
  multi_parallel();
}
```

```
clang -fopenmp --offload-arch=native -L /p/vast1/doerfert/build/llvm/lib generic.c -o generic.O0 -O0
clang -fopenmp --offload-arch=native -L /p/vast1/doerfert/build/llvm/lib generic.c -o generic.O1 -O1
clang -fopenmp --offload-arch=native -L /p/vast1/doerfert/build/llvm/lib generic.c -o generic.O2 -O2
clang -fopenmp --offload-arch=native -L /p/vast1/doerfert/build/llvm/lib generic.c -o generic.O3 -O3
```

All resulting in
```
v[0][0] = 3
v[0][1] = 2
v[0][2] = 2
v[1][0] = 3
v[1][1] = 2
v[1][2] = 2
```

https://github.com/llvm/llvm-project/pull/137307


More information about the Mlir-commits mailing list