[all-commits] [llvm/llvm-project] 1525f5: [clang][OpenMP] Improve loop structure for distrib...

Robert Imschweiler via All-commits all-commits at lists.llvm.org
Thu Jun 4 12:29:15 PDT 2026


  Branch: refs/heads/users/ro-i/xteam-red-codegen
  Home:   https://github.com/llvm/llvm-project
  Commit: 1525f577471ca0fd19bd00a0dcd1977f9ad24de5
      https://github.com/llvm/llvm-project/commit/1525f577471ca0fd19bd00a0dcd1977f9ad24de5
  Author: Robert Imschweiler <robert.imschweiler at amd.com>
  Date:   2026-06-04 (Thu, 04 Jun 2026)

  Changed paths:
    M clang/include/clang/Basic/OpenMPKinds.h
    M clang/lib/CodeGen/CGOpenMPRuntime.cpp
    M clang/lib/CodeGen/CGStmtOpenMP.cpp
    M clang/test/OpenMP/amdgcn_target_device_vla.cpp
    M clang/test/OpenMP/amdgpu_target_with_aligned_attribute.c
    M clang/test/OpenMP/metadirective_device_arch_codegen.cpp
    M clang/test/OpenMP/nvptx_SPMD_codegen.cpp
    M clang/test/OpenMP/nvptx_distribute_parallel_generic_mode_codegen.cpp
    M clang/test/OpenMP/nvptx_target_teams_distribute_parallel_for_codegen.cpp
    M clang/test/OpenMP/nvptx_target_teams_distribute_parallel_for_simd_codegen.cpp
    M clang/test/OpenMP/nvptx_target_teams_generic_loop_codegen.cpp
    M clang/test/OpenMP/nvptx_target_teams_generic_loop_generic_mode_codegen.cpp
    M clang/test/OpenMP/target_teams_generic_loop_codegen.cpp
    M clang/test/OpenMP/target_teams_generic_loop_codegen_as_distribute.cpp
    M clang/test/OpenMP/target_teams_generic_loop_codegen_as_parallel_for.cpp
    M offload/test/offloading/gpupgo/pgo_atomic_teams.c

  Log Message:
  -----------
  [clang][OpenMP] Improve loop structure for distributed loops

This is a part of a series of patches that rework OpenMP cross-team
reductions.

This patches wires the existing
`kmp_sched_distr_static_chunk_sched_static_chunkone` to be used by
CodeGen.

Example of the intended change of this patch:
```
target teams distribute parallel for reduction(+:s)
  for (i = 0; i < N; i++) s += a[i];
```

Before:
```
__kmpc_distribute_static_init(91)
for (team_lb = team*nthreads; team_lb < N; team_lb += nteams*nthreads) {
  __kmpc_for_static_init(33)
  for (iv = team_lb + tid; iv < team_lb + nthreads; iv += nthreads) {
    priv += a[iv];
  }
  __kmpc_nvptx_parallel_reduce_nowait_v2
}
__kmpc_nvptx_teams_reduce_nowait_v2
```

After:
```
__kmpc_for_static_init(93)
for (iv = team*nthreads + tid;
     iv < N;
     iv += nteams*nthreads) {
    priv += a[iv];
}
__kmpc_nvptx_parallel_reduce_nowait_v2
__kmpc_nvptx_teams_reduce_nowait_v2
```

Performance:
All performance tests can be reproduced with
https://github.com/ro-i/xteam-test @ commit
6025e5afc14dd6e65ee2658e5001c16e9b9245ff. To reproduce, simply create a
`local.mk` file in the cloned directory with a suitable `OFFLOAD_ARCH`
for your machine and `CXX_trunk` + `CXX_trunk_cg` set to the paths of
the clang++ binaries for llvm/main and this patch. (llvm/main should
best be at the commit that is currently the base for this PR. At the
moment, this is 69f7aeb52e71ebb7d264bc9e613bc4bc90cb0c47). Then, run
`make trunk trunk_cg` to build the benchmark binaries for 208 and 10400
teams. Run them with `./run_bench.sh -rq -n10 red_trunk_208
red_trunk_cg_208 red_trunk_10400 red_trunk_cg_10400` to get the avg
performance numbers over 10 rounds. This tests multiple reduction
workloads, including reductions that run in the Generic-SPMD mode, with
208 teams and with 10400 teams, both à 512 threads, and with a reduction
array size of 177,777,777. I tested on a gfx942 and found the following
numbers showing the performance of this patch relative to the baseline:

```
red_comb_sep_arr_32    double   change for 208 teams:    +0.01%   change for 10400 teams:    +5.53%
red_sum_arr_32         double   change for 208 teams:  +570.47%   change for 10400 teams:    -2.23%
red_comb               double   change for 208 teams:  +350.30%   change for 10400 teams:    +0.72%
red_comb_sep           double   change for 208 teams:    +4.82%   change for 10400 teams:    +2.18%
red_dot                double   change for 208 teams:  +202.45%   change for 10400 teams:    +3.48%
red_indirect           double   change for 208 teams:  +239.33%   change for 10400 teams:    +4.63%
red_kernel_part        double   change for 208 teams:    +3.30%   change for 10400 teams:    +3.43%
red_max                double   change for 208 teams:  +273.46%   change for 10400 teams:    +5.12%
red_mult               double   change for 208 teams:  +239.50%   change for 10400 teams:    +5.23%
red_sum                double   change for 208 teams:  +239.47%   change for 10400 teams:    +5.15%
red_pi                 double   change for 208 teams:   +90.06%   change for 10400 teams:   +78.67%
red_comb_sep_arr_32    uint     change for 208 teams:    -0.16%   change for 10400 teams:   +26.98%
red_sum_arr_32         uint     change for 208 teams:  +139.64%   change for 10400 teams:   -14.55%
red_dot                uint     change for 208 teams:  +202.92%   change for 10400 teams:    +5.11%
red_max                uint     change for 208 teams:  +221.41%   change for 10400 teams:    +6.54%
red_sum                uint     change for 208 teams:  +220.83%   change for 10400 teams:    +7.80%
red_comb_sep_arr_32    ulong    change for 208 teams:    -0.19%   change for 10400 teams:    +5.80%
red_sum_arr_32         ulong    change for 208 teams:  +523.98%   change for 10400 teams:    -3.17%
red_dot                ulong    change for 208 teams:  +232.14%   change for 10400 teams:    +3.57%
red_max                ulong    change for 208 teams:  +279.87%   change for 10400 teams:    +6.17%
red_sum                ulong    change for 208 teams:  +261.54%   change for 10400 teams:    +5.72%
red_comb_sep_arr_32    Value    change for 208 teams:    +0.22%   change for 10400 teams:    +0.04%
red_sum_arr_32         Value    change for 208 teams:  +423.38%   change for 10400 teams:    +9.08%
red_dot                Value    change for 208 teams:  +153.87%   change for 10400 teams:    -2.62%
red_max                Value    change for 208 teams: +1097.62%   change for 10400 teams:  +261.16%
red_sum                Value    change for 208 teams:  +358.88%   change for 10400 teams:   +21.44%
```



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list