Skip to content

cuda::clamp - #5516

Closed
fbusato wants to merge 1 commit into
NVIDIA:mainfrom
fbusato:cuda-clamp
Closed

fbusato wants to merge 1 commit into
NVIDIA:mainfrom
fbusato:cuda-clamp

Conversation

@fbusato

@fbusato fbusato commented Aug 13, 2025

Copy link
Copy Markdown
Contributor

Description

cuda::std::clamp is a widely used utility in CCCL and in general code. Unfortunately, it doesn't produce the optimal code for device code for the most common use cases: integer and floating-point types. The main reason is that cuda::std::clamp returns a reference instead of a value, which is not needed for primitive types.

The PR provides cuda::clamp to generate optimal code for integer and floating-point types.

Requires constexpr fmin/fmax.

@fbusato fbusato self-assigned this Aug 13, 2025
@fbusato fbusato added the 3.2.0 label Aug 13, 2025
@fbusato
fbusato requested a review from a team as a code owner August 13, 2025 01:12
@fbusato fbusato added this to CCCL Aug 13, 2025
@fbusato
fbusato requested a review from ericniebler August 13, 2025 01:12
@github-project-automation github-project-automation Bot moved this to Todo in CCCL Aug 13, 2025
@fbusato fbusato moved this from Todo to Blocked in CCCL Aug 13, 2025
@cccl-authenticator-app cccl-authenticator-app Bot moved this from Blocked to In Review in CCCL Aug 13, 2025
@fbusato
fbusato requested a review from miscco August 13, 2025 01:12
@github-actions

Copy link
Copy Markdown
Contributor
🟩 CI finished in 1h 16m: Pass: 100%/210 | Total: 1d 17h | Avg: 11m 54s | Max: 51m 47s | Hits: 95%/322859
  • 🟩 cub: Pass: 100%/50 | Total: 11h 39m | Avg: 13m 59s | Max: 41m 40s | Hits: 98%/52978

    🟩 cpu
      🟩 amd64              Pass: 100%/48  | Total: 11h 25m | Avg: 14m 16s | Max: 41m 40s | Hits:  98%/50398 
      🟩 arm64              Pass: 100%/2   | Total: 14m 40s | Avg:  7m 20s | Max:  8m 34s | Hits:  99%/2580  
    🟩 ctk
      🟩 12.0               Pass: 100%/5   | Total:  1h 02m | Avg: 12m 35s | Max: 33m 20s | Hits:  99%/6346  
      🟩 12.9               Pass: 100%/45  | Total: 10h 36m | Avg: 14m 08s | Max: 41m 40s | Hits:  98%/46632 
    🟩 cudacxx
      🟩 ClangCUDA19        Pass: 100%/2   | Total: 10m 46s | Avg:  5m 23s | Max:  5m 32s | Hits:  99%/2225  
      🟩 nvcc12.0           Pass: 100%/5   | Total:  1h 02m | Avg: 12m 35s | Max: 33m 20s | Hits:  99%/6346  
      🟩 nvcc12.9           Pass: 100%/43  | Total: 10h 25m | Avg: 14m 33s | Max: 41m 40s | Hits:  98%/44407 
    🟩 cudacxx_family
      🟩 ClangCUDA          Pass: 100%/2   | Total: 10m 46s | Avg:  5m 23s | Max:  5m 32s | Hits:  99%/2225  
      🟩 nvcc               Pass: 100%/48  | Total: 11h 28m | Avg: 14m 21s | Max: 41m 40s | Hits:  98%/50753 
    🟩 cxx
      🟩 Clang14            Pass: 100%/4   | Total: 26m 40s | Avg:  6m 40s | Max:  7m 08s | Hits:  99%/5162  
      🟩 Clang15            Pass: 100%/2   | Total: 13m 54s | Avg:  6m 57s | Max:  7m 11s | Hits:  99%/2577  
      🟩 Clang16            Pass: 100%/2   | Total: 14m 15s | Avg:  7m 07s | Max:  7m 27s | Hits:  99%/2577  
      🟩 Clang17            Pass: 100%/2   | Total: 13m 56s | Avg:  6m 58s | Max:  7m 09s | Hits:  99%/2577  
      🟩 Clang18            Pass: 100%/2   | Total: 13m 46s | Avg:  6m 53s | Max:  6m 56s | Hits:  99%/2577  
      🟩 Clang19            Pass: 100%/7   | Total:  1h 14m | Avg: 10m 42s | Max: 23m 44s | Hits:  99%/6091  
      🟩 GCC7               Pass: 100%/2   | Total: 17m 23s | Avg:  8m 41s | Max:  8m 46s | Hits:  99%/2580  
      🟩 GCC8               Pass: 100%/1   | Total:  8m 38s | Avg:  8m 38s | Max:  8m 38s | Hits:  99%/1290  
      🟩 GCC9               Pass: 100%/2   | Total: 18m 23s | Avg:  9m 11s | Max:  9m 45s | Hits:  99%/2580  
      🟩 GCC10              Pass: 100%/2   | Total: 17m 59s | Avg:  8m 59s | Max:  9m 09s | Hits:  99%/2581  
      🟩 GCC11              Pass: 100%/2   | Total: 18m 28s | Avg:  9m 14s | Max:  9m 26s | Hits:  99%/2577  
      🟩 GCC12              Pass: 100%/2   | Total: 19m 16s | Avg:  9m 38s | Max: 10m 00s | Hits:  99%/2577  
      🟩 GCC13              Pass: 100%/12  | Total:  3h 23m | Avg: 16m 58s | Max: 30m 50s | Hits:  94%/7743  
      🟩 MSVC14.29          Pass: 100%/2   | Total:  1h 08m | Avg: 34m 04s | Max: 34m 48s | Hits:  99%/2370  
      🟩 MSVC14.43          Pass: 100%/4   | Total:  2h 22m | Avg: 35m 43s | Max: 41m 40s | Hits:  93%/4740  
      🟩 NVHPC25.5          Pass: 100%/2   | Total: 27m 27s | Avg: 13m 43s | Max: 14m 00s | Hits:  98%/2379  
    🟩 cxx_family
      🟩 Clang              Pass: 100%/19  | Total:  2h 37m | Avg:  8m 17s | Max: 23m 44s | Hits:  99%/21561 
      🟩 GCC                Pass: 100%/23  | Total:  5h 03m | Avg: 13m 12s | Max: 30m 50s | Hits:  97%/21928 
      🟩 MSVC               Pass: 100%/6   | Total:  3h 31m | Avg: 35m 10s | Max: 41m 40s | Hits:  95%/7110  
      🟩 NVHPC              Pass: 100%/2   | Total: 27m 27s | Avg: 13m 43s | Max: 14m 00s | Hits:  98%/2379  
    🟩 gpu
      🟩 h100               Pass: 100%/3   | Total:  1h 17m | Avg: 25m 56s | Max: 30m 50s | Hits:  67%/1291  
      🟩 rtx2080            Pass: 100%/39  | Total:  7h 58m | Avg: 12m 16s | Max: 41m 40s | Hits:  99%/49107 
      🟩 rtxa6000           Pass: 100%/8   | Total:  2h 23m | Avg: 17m 52s | Max: 23m 44s | Hits:  99%/2580  
    🟩 jobs
      🟩 Build              Pass: 100%/42  | Total:  8h 46m | Avg: 12m 32s | Max: 41m 40s | Hits:  98%/52978 
      🟩 DeviceLaunch       Pass: 100%/1   | Total: 23m 26s | Avg: 23m 26s | Max: 23m 26s
      🟩 GraphCapture       Pass: 100%/1   | Total: 14m 36s | Avg: 14m 36s | Max: 14m 36s
      🟩 HostLaunch         Pass: 100%/3   | Total:  1h 10m | Avg: 23m 38s | Max: 24m 15s
      🟩 TestGPU            Pass: 100%/3   | Total:  1h 03m | Avg: 21m 18s | Max: 22m 43s
    🟩 sm
      🟩 90                 Pass: 100%/3   | Total:  1h 17m | Avg: 25m 56s | Max: 30m 50s | Hits:  67%/1291  
      🟩 90;90a             Pass: 100%/2   | Total: 38m 48s | Avg: 19m 24s | Max: 30m 44s | Hits:  93%/2476  
      🟩 100;120            Pass: 100%/2   | Total: 41m 17s | Avg: 20m 38s | Max: 33m 09s | Hits:  94%/2476  
    🟩 std
      🟩 17                 Pass: 100%/21  | Total:  4h 19m | Avg: 12m 20s | Max: 41m 40s | Hits:  99%/26480 
      🟩 20                 Pass: 100%/29  | Total:  7h 20m | Avg: 15m 11s | Max: 37m 19s | Hits:  97%/26498 
    
  • 🟩 thrust: Pass: 100%/50 | Total: 9h 44m | Avg: 11m 41s | Max: 43m 44s | Hits: 98%/84139

    🟩 cmake_options
      🟩 -DTHRUST_DISPATCH_TYPE=Force32bit Pass: 100%/2   | Total: 13m 34s | Avg:  6m 47s | Max:  8m 25s | Hits:  99%/1914  
    🟩 cpu
      🟩 amd64              Pass: 100%/48  | Total:  9h 32m | Avg: 11m 55s | Max: 43m 44s | Hits:  98%/80312 
      🟩 arm64              Pass: 100%/2   | Total: 12m 08s | Avg:  6m 04s | Max:  7m 01s | Hits:  99%/3827  
    🟩 ctk
      🟩 12.0               Pass: 100%/5   | Total: 54m 43s | Avg: 10m 56s | Max: 29m 56s | Hits:  99%/9560  
      🟩 12.9               Pass: 100%/45  | Total:  8h 49m | Avg: 11m 46s | Max: 43m 44s | Hits:  98%/74579 
    🟩 cudacxx
      🟩 ClangCUDA19        Pass: 100%/2   | Total: 10m 52s | Avg:  5m 26s | Max:  5m 29s | Hits: 100%/3826  
      🟩 nvcc12.0           Pass: 100%/5   | Total: 54m 43s | Avg: 10m 56s | Max: 29m 56s | Hits:  99%/9560  
      🟩 nvcc12.9           Pass: 100%/43  | Total:  8h 38m | Avg: 12m 04s | Max: 43m 44s | Hits:  98%/70753 
    🟩 cudacxx_family
      🟩 ClangCUDA          Pass: 100%/2   | Total: 10m 52s | Avg:  5m 26s | Max:  5m 29s | Hits: 100%/3826  
      🟩 nvcc               Pass: 100%/48  | Total:  9h 33m | Avg: 11m 57s | Max: 43m 44s | Hits:  98%/80313 
    🟩 cxx
      🟩 Clang14            Pass: 100%/4   | Total: 22m 37s | Avg:  5m 39s | Max:  6m 03s | Hits: 100%/7652  
      🟩 Clang15            Pass: 100%/2   | Total: 11m 58s | Avg:  5m 59s | Max:  6m 09s | Hits: 100%/3826  
      🟩 Clang16            Pass: 100%/2   | Total: 11m 59s | Avg:  5m 59s | Max:  6m 01s | Hits: 100%/3826  
      🟩 Clang17            Pass: 100%/2   | Total: 11m 40s | Avg:  5m 50s | Max:  5m 55s | Hits: 100%/3826  
      🟩 Clang18            Pass: 100%/2   | Total: 11m 40s | Avg:  5m 50s | Max:  5m 59s | Hits: 100%/3826  
      🟩 Clang19            Pass: 100%/7   | Total: 38m 59s | Avg:  5m 34s | Max:  6m 26s | Hits: 100%/9565  
      🟩 GCC7               Pass: 100%/2   | Total: 14m 11s | Avg:  7m 05s | Max:  7m 39s | Hits:  99%/3828  
      🟩 GCC8               Pass: 100%/1   | Total:  7m 54s | Avg:  7m 54s | Max:  7m 54s | Hits:  99%/1914  
      🟩 GCC9               Pass: 100%/2   | Total: 14m 47s | Avg:  7m 23s | Max:  7m 25s | Hits:  99%/3828  
      🟩 GCC10              Pass: 100%/2   | Total: 15m 13s | Avg:  7m 36s | Max:  7m 51s | Hits:  99%/3828  
      🟩 GCC11              Pass: 100%/2   | Total: 15m 20s | Avg:  7m 40s | Max:  7m 45s | Hits:  99%/3828  
      🟩 GCC12              Pass: 100%/2   | Total: 15m 52s | Avg:  7m 56s | Max:  7m 57s | Hits:  99%/3828  
      🟩 GCC13              Pass: 100%/11  | Total:  1h 50m | Avg: 10m 03s | Max: 43m 44s | Hits:  93%/13398 
      🟩 MSVC14.29          Pass: 100%/2   | Total: 59m 47s | Avg: 29m 53s | Max: 29m 56s | Hits:  99%/3812  
      🟩 MSVC14.43          Pass: 100%/5   | Total:  2h 41m | Avg: 32m 23s | Max: 39m 44s | Hits:  99%/9530  
      🟩 NVHPC25.5          Pass: 100%/2   | Total:  1h 00m | Avg: 30m 01s | Max: 31m 24s | Hits:  99%/3824  
    🟩 cxx_family
      🟩 Clang              Pass: 100%/19  | Total:  1h 48m | Avg:  5m 43s | Max:  6m 26s | Hits: 100%/32521 
      🟩 GCC                Pass: 100%/22  | Total:  3h 13m | Avg:  8m 48s | Max: 43m 44s | Hits:  97%/34452 
      🟩 MSVC               Pass: 100%/7   | Total:  3h 41m | Avg: 31m 40s | Max: 39m 44s | Hits:  99%/13342 
      🟩 NVHPC              Pass: 100%/2   | Total:  1h 00m | Avg: 30m 01s | Max: 31m 24s | Hits:  99%/3824  
    🟩 gpu
      🟩 h100               Pass: 100%/2   | Total: 13m 48s | Avg:  6m 54s | Max:  7m 45s | Hits:  99%/1914  
      🟩 rtx2080            Pass: 100%/38  | Total:  7h 30m | Avg: 11m 51s | Max: 43m 44s | Hits:  98%/72672 
      🟩 rtx4090            Pass: 100%/10  | Total:  2h 00m | Avg: 12m 01s | Max: 39m 44s | Hits:  99%/9553  
    🟩 jobs
      🟩 Build              Pass: 100%/43  | Total:  8h 32m | Avg: 11m 55s | Max: 43m 44s | Hits:  98%/82233 
      🟩 TestCPU            Pass: 100%/3   | Total: 48m 05s | Avg: 16m 01s | Max: 39m 44s | Hits:  99%/1906  
      🟩 TestGPU            Pass: 100%/4   | Total: 23m 53s | Avg:  5m 58s | Max:  7m 45s
    🟩 sm
      🟩 90                 Pass: 100%/2   | Total: 13m 48s | Avg:  6m 54s | Max:  7m 45s | Hits:  99%/1914  
      🟩 90;90a             Pass: 100%/2   | Total: 35m 18s | Avg: 17m 39s | Max: 27m 46s | Hits:  99%/3820  
      🟩 100;120            Pass: 100%/2   | Total: 37m 25s | Avg: 18m 42s | Max: 30m 30s | Hits:  99%/3820  
    🟩 std
      🟩 17                 Pass: 100%/21  | Total:  4h 33m | Avg: 13m 02s | Max: 43m 44s | Hits:  97%/40160 
      🟩 20                 Pass: 100%/27  | Total:  4h 57m | Avg: 11m 00s | Max: 39m 44s | Hits:  99%/42065 
    
  • 🟩 libcudacxx: Pass: 100%/48 | Total: 11h 59m | Avg: 14m 59s | Max: 51m 47s | Hits: 92%/169672

    🟩 cpu
      🟩 amd64              Pass: 100%/46  | Total: 11h 50m | Avg: 15m 26s | Max: 51m 47s | Hits:  91%/162085
      🟩 arm64              Pass: 100%/2   | Total:  9m 33s | Avg:  4m 46s | Max:  4m 53s | Hits:  99%/7587  
    🟩 ctk
      🟩 12.0               Pass: 100%/5   | Total: 49m 46s | Avg:  9m 57s | Max: 31m 03s | Hits:  99%/18605 
      🟩 12.9               Pass: 100%/43  | Total: 11h 10m | Avg: 15m 34s | Max: 51m 47s | Hits:  91%/151067
    🟩 cudacxx
      🟩 ClangCUDA19        Pass: 100%/2   | Total: 54m 55s | Avg: 27m 27s | Max: 28m 54s | Hits:  29%/7551  
      🟩 nvcc12.0           Pass: 100%/5   | Total: 49m 46s | Avg:  9m 57s | Max: 31m 03s | Hits:  99%/18605 
      🟩 nvcc12.9           Pass: 100%/41  | Total: 10h 15m | Avg: 15m 00s | Max: 51m 47s | Hits:  94%/143516
    🟩 cudacxx_family
      🟩 ClangCUDA          Pass: 100%/2   | Total: 54m 55s | Avg: 27m 27s | Max: 28m 54s | Hits:  29%/7551  
      🟩 nvcc               Pass: 100%/46  | Total: 11h 04m | Avg: 14m 27s | Max: 51m 47s | Hits:  95%/162121
    🟩 cxx
      🟩 Clang14            Pass: 100%/4   | Total: 20m 02s | Avg:  5m 00s | Max:  5m 36s | Hits:  99%/15058 
      🟩 Clang15            Pass: 100%/2   | Total: 12m 30s | Avg:  6m 15s | Max:  6m 59s | Hits:  97%/7547  
      🟩 Clang16            Pass: 100%/2   | Total: 12m 53s | Avg:  6m 26s | Max:  7m 42s | Hits:  97%/7547  
      🟩 Clang17            Pass: 100%/2   | Total: 10m 47s | Avg:  5m 23s | Max:  5m 42s | Hits:  99%/7547  
      🟩 Clang18            Pass: 100%/2   | Total: 10m 19s | Avg:  5m 09s | Max:  5m 13s | Hits:  99%/7547  
      🟩 Clang19            Pass: 100%/6   | Total:  1h 48m | Avg: 18m 06s | Max: 38m 22s | Hits:  76%/22684 
      🟩 GCC7               Pass: 100%/2   | Total:  9m 49s | Avg:  4m 54s | Max:  4m 57s | Hits:  99%/7483  
      🟩 GCC8               Pass: 100%/1   | Total:  4m 57s | Avg:  4m 57s | Max:  4m 57s | Hits:  99%/3752  
      🟩 GCC9               Pass: 100%/2   | Total:  9m 38s | Avg:  4m 49s | Max:  5m 01s | Hits:  99%/7495  
      🟩 GCC10              Pass: 100%/2   | Total: 11m 16s | Avg:  5m 38s | Max:  5m 41s | Hits:  99%/7549  
      🟩 GCC11              Pass: 100%/2   | Total: 10m 57s | Avg:  5m 28s | Max:  5m 54s | Hits:  99%/7545  
      🟩 GCC12              Pass: 100%/2   | Total: 10m 15s | Avg:  5m 07s | Max:  5m 09s | Hits:  99%/7549  
      🟩 GCC13              Pass: 100%/11  | Total:  3h 09m | Avg: 17m 11s | Max: 46m 13s | Hits:  99%/30687 
      🟩 MSVC14.29          Pass: 100%/2   | Total:  1h 09m | Avg: 34m 38s | Max: 38m 14s | Hits:  81%/7225  
      🟩 MSVC14.43          Pass: 100%/4   | Total:  2h 10m | Avg: 32m 38s | Max: 34m 48s | Hits:  99%/14924 
      🟩 NVHPC25.5          Pass: 100%/2   | Total:  1h 38m | Avg: 49m 21s | Max: 51m 47s | Hits:  30%/7533  
    🟩 cxx_family
      🟩 Clang              Pass: 100%/18  | Total:  2h 55m | Avg:  9m 43s | Max: 38m 22s | Hits:  91%/67930 
      🟩 GCC                Pass: 100%/22  | Total:  4h 06m | Avg: 11m 11s | Max: 46m 13s | Hits:  99%/72060 
      🟩 MSVC               Pass: 100%/6   | Total:  3h 19m | Avg: 33m 18s | Max: 38m 14s | Hits:  93%/22149 
      🟩 NVHPC              Pass: 100%/2   | Total:  1h 38m | Avg: 49m 21s | Max: 51m 47s | Hits:  30%/7533  
    🟩 gpu
      🟩 h100               Pass: 100%/2   | Total: 27m 24s | Avg: 13m 42s | Max: 22m 11s | Hits:  99%/7754  
      🟩 rtx2080            Pass: 100%/46  | Total: 11h 32m | Avg: 15m 03s | Max: 51m 47s | Hits:  91%/161918
    🟩 jobs
      🟩 Build              Pass: 100%/42  | Total:  8h 44m | Avg: 12m 29s | Max: 51m 47s | Hits:  91%/158166
      🟩 NVRTC              Pass: 100%/2   | Total:  1h 29m | Avg: 44m 36s | Max: 46m 13s | Hits:  90%/42    
      🟩 Test               Pass: 100%/3   | Total:  1h 44m | Avg: 34m 42s | Max: 43m 35s | Hits:  99%/11464 
      🟩 VerifyCodegen      Pass: 100%/1   | Total:  1m 43s | Avg:  1m 43s | Max:  1m 43s
    🟩 sm
      🟩 75                 Pass: 100%/2   | Total:  1h 29m | Avg: 44m 36s | Max: 46m 13s | Hits:  90%/42    
      🟩 90                 Pass: 100%/2   | Total: 27m 24s | Avg: 13m 42s | Max: 22m 11s | Hits:  99%/7754  
      🟩 90;90a             Pass: 100%/2   | Total: 36m 59s | Avg: 18m 29s | Max: 31m 13s | Hits:  99%/7701  
      🟩 100;120            Pass: 100%/2   | Total: 37m 13s | Avg: 18m 36s | Max: 31m 53s | Hits:  99%/7701  
    🟩 std
      🟩 17                 Pass: 100%/22  | Total:  5h 03m | Avg: 13m 48s | Max: 46m 56s | Hits:  91%/78377 
      🟩 20                 Pass: 100%/25  | Total:  6h 54m | Avg: 16m 34s | Max: 51m 47s | Hits:  93%/91295 
    
  • 🟩 cudax: Pass: 100%/28 | Total: 2h 58m | Avg: 6m 21s | Max: 28m 04s | Hits: 99%/15390

    🟩 cpu
      🟩 amd64              Pass: 100%/24  | Total:  2h 45m | Avg:  6m 54s | Max: 28m 04s | Hits:  99%/13018 
      🟩 arm64              Pass: 100%/4   | Total: 12m 25s | Avg:  3m 06s | Max:  3m 27s | Hits:  99%/2372  
    🟩 ctk
      🟩 12.0               Pass: 100%/3   | Total: 19m 46s | Avg:  6m 35s | Max: 13m 27s | Hits:  98%/1474  
      🟩 12.9               Pass: 100%/25  | Total:  2h 38m | Avg:  6m 19s | Max: 28m 04s | Hits:  99%/13916 
    🟩 cudacxx
      🟩 nvcc12.0           Pass: 100%/3   | Total: 19m 46s | Avg:  6m 35s | Max: 13m 27s | Hits:  98%/1474  
      🟩 nvcc12.9           Pass: 100%/25  | Total:  2h 38m | Avg:  6m 19s | Max: 28m 04s | Hits:  99%/13916 
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/28  | Total:  2h 58m | Avg:  6m 21s | Max: 28m 04s | Hits:  99%/15390 
    🟩 cxx
      🟩 Clang14            Pass: 100%/2   | Total:  6m 15s | Avg:  3m 07s | Max:  3m 26s | Hits: 100%/1188  
      🟩 Clang15            Pass: 100%/1   | Total:  3m 16s | Avg:  3m 16s | Max:  3m 16s | Hits: 100%/593   
      🟩 Clang16            Pass: 100%/1   | Total:  3m 28s | Avg:  3m 28s | Max:  3m 28s | Hits: 100%/593   
      🟩 Clang17            Pass: 100%/1   | Total:  3m 18s | Avg:  3m 18s | Max:  3m 18s | Hits: 100%/593   
      🟩 Clang18            Pass: 100%/1   | Total:  3m 12s | Avg:  3m 12s | Max:  3m 12s | Hits: 100%/593   
      🟩 Clang19            Pass: 100%/4   | Total: 18m 11s | Avg:  4m 32s | Max:  9m 04s | Hits: 100%/2372  
      🟩 GCC10              Pass: 100%/2   | Total:  7m 09s | Avg:  3m 34s | Max:  3m 39s | Hits:  99%/1188  
      🟩 GCC11              Pass: 100%/1   | Total:  3m 46s | Avg:  3m 46s | Max:  3m 46s | Hits:  99%/593   
      🟩 GCC12              Pass: 100%/1   | Total:  3m 59s | Avg:  3m 59s | Max:  3m 59s | Hits:  99%/593   
      🟩 GCC13              Pass: 100%/8   | Total: 56m 23s | Avg:  7m 02s | Max: 28m 04s | Hits:  99%/4744  
      🟩 MSVC14.39          Pass: 100%/1   | Total: 13m 27s | Avg: 13m 27s | Max: 13m 27s | Hits:  95%/288   
      🟩 MSVC14.43          Pass: 100%/3   | Total: 40m 43s | Avg: 13m 34s | Max: 13m 56s | Hits:  94%/870   
      🟩 NVHPC25.5          Pass: 100%/2   | Total: 14m 55s | Avg:  7m 27s | Max:  7m 36s | Hits:  97%/1182  
    🟩 cxx_family
      🟩 Clang              Pass: 100%/10  | Total: 37m 40s | Avg:  3m 46s | Max:  9m 04s | Hits: 100%/5932  
      🟩 GCC                Pass: 100%/12  | Total:  1h 11m | Avg:  5m 56s | Max: 28m 04s | Hits:  99%/7118  
      🟩 MSVC               Pass: 100%/4   | Total: 54m 10s | Avg: 13m 32s | Max: 13m 56s | Hits:  94%/1158  
      🟩 NVHPC              Pass: 100%/2   | Total: 14m 55s | Avg:  7m 27s | Max:  7m 36s | Hits:  97%/1182  
    🟩 gpu
      🟩 h100               Pass: 100%/2   | Total:  9m 59s | Avg:  4m 59s | Max:  6m 43s | Hits:  99%/1186  
      🟩 rtx2080            Pass: 100%/26  | Total:  2h 48m | Avg:  6m 27s | Max: 28m 04s | Hits:  99%/14204 
    🟩 jobs
      🟩 Build              Pass: 100%/25  | Total:  2h 14m | Avg:  5m 22s | Max: 13m 56s | Hits:  99%/13611 
      🟩 Test               Pass: 100%/3   | Total: 43m 51s | Avg: 14m 37s | Max: 28m 04s | Hits:  99%/1779  
    🟩 sm
      🟩 90                 Pass: 100%/2   | Total:  9m 59s | Avg:  4m 59s | Max:  6m 43s | Hits:  99%/1186  
      🟩 90;90a             Pass: 100%/2   | Total: 17m 35s | Avg:  8m 47s | Max: 13m 55s | Hits:  97%/883   
      🟩 100;120            Pass: 100%/2   | Total: 16m 36s | Avg:  8m 18s | Max: 12m 52s | Hits:  98%/883   
    🟩 std
      🟩 17                 Pass: 100%/3   | Total: 13m 44s | Avg:  4m 34s | Max:  7m 36s | Hits:  99%/1777  
      🟩 20                 Pass: 100%/25  | Total:  2h 44m | Avg:  6m 34s | Max: 28m 04s | Hits:  99%/13613 
    
  • 🟩 python: Pass: 100%/22 | Total: 3h 46m | Avg: 10m 17s | Max: 21m 59s

    🟩 cpu
      🟩 amd64              Pass: 100%/22  | Total:  3h 46m | Avg: 10m 17s | Max: 21m 59s
    🟩 ctk
      🟩 12.5               Pass: 100%/6   | Total: 44m 28s | Avg:  7m 24s | Max: 13m 57s
      🟩 12.8               Pass: 100%/2   | Total: 36m 52s | Avg: 18m 26s | Max: 18m 29s
      🟩 12.9               Pass: 100%/14  | Total:  2h 25m | Avg: 10m 21s | Max: 21m 59s
    🟩 cudacxx
      🟩 nvcc12.5           Pass: 100%/6   | Total: 44m 28s | Avg:  7m 24s | Max: 13m 57s
      🟩 nvcc12.8           Pass: 100%/2   | Total: 36m 52s | Avg: 18m 26s | Max: 18m 29s
      🟩 nvcc12.9           Pass: 100%/14  | Total:  2h 25m | Avg: 10m 21s | Max: 21m 59s
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/22  | Total:  3h 46m | Avg: 10m 17s | Max: 21m 59s
    🟩 cxx
      🟩 GCC13              Pass: 100%/22  | Total:  3h 46m | Avg: 10m 17s | Max: 21m 59s
    🟩 cxx_family
      🟩 GCC                Pass: 100%/22  | Total:  3h 46m | Avg: 10m 17s | Max: 21m 59s
    🟩 gpu
      🟩 h100               Pass: 100%/4   | Total: 43m 30s | Avg: 10m 52s | Max: 21m 59s
      🟩 l4                 Pass: 100%/18  | Total:  3h 02m | Avg: 10m 09s | Max: 19m 10s
    🟩 jobs
      🟩 Build cuda.cccl    Pass: 100%/2   | Total: 19m 20s | Avg:  9m 40s | Max:  9m 45s
      🟩 Test cuda.cccl.cooperative Pass: 100%/5   | Total:  1h 07m | Avg: 13m 24s | Max: 13m 57s
      🟩 Test cuda.cccl.examples Pass: 100%/5   | Total: 22m 16s | Avg:  4m 27s | Max:  4m 47s
      🟩 Test cuda.cccl.headers Pass: 100%/5   | Total: 21m 19s | Avg:  4m 15s | Max:  5m 02s
      🟩 Test cuda.cccl.parallel Pass: 100%/5   | Total:  1h 36m | Avg: 19m 16s | Max: 21m 59s
    🟩 py_version
      🟩 3.10               Pass: 100%/9   | Total:  1h 32m | Avg: 10m 16s | Max: 19m 10s
      🟩 3.13               Pass: 100%/13  | Total:  2h 13m | Avg: 10m 17s | Max: 21m 59s
    
  • 🟩 cccl_c_parallel: Pass: 100%/4 | Total: 48m 21s | Avg: 12m 05s | Max: 17m 02s | Hits: 98%/680

    🟩 cpu
      🟩 amd64              Pass: 100%/4   | Total: 48m 21s | Avg: 12m 05s | Max: 17m 02s | Hits:  98%/680   
    🟩 ctk
      🟩 12.9               Pass: 100%/4   | Total: 48m 21s | Avg: 12m 05s | Max: 17m 02s | Hits:  98%/680   
    🟩 cudacxx
      🟩 nvcc12.9           Pass: 100%/4   | Total: 48m 21s | Avg: 12m 05s | Max: 17m 02s | Hits:  98%/680   
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/4   | Total: 48m 21s | Avg: 12m 05s | Max: 17m 02s | Hits:  98%/680   
    🟩 cxx
      🟩 GCC13              Pass: 100%/4   | Total: 48m 21s | Avg: 12m 05s | Max: 17m 02s | Hits:  98%/680   
    🟩 cxx_family
      🟩 GCC                Pass: 100%/4   | Total: 48m 21s | Avg: 12m 05s | Max: 17m 02s | Hits:  98%/680   
    🟩 gpu
      🟩 h100               Pass: 100%/1   | Total: 15m 53s | Avg: 15m 53s | Max: 15m 53s | Hits:  98%/170   
      🟩 l4                 Pass: 100%/1   | Total: 17m 02s | Avg: 17m 02s | Max: 17m 02s | Hits:  98%/170   
      🟩 rtx2080            Pass: 100%/2   | Total: 15m 26s | Avg:  7m 43s | Max: 13m 22s | Hits:  98%/340   
    🟩 jobs
      🟩 Build              Pass: 100%/1   | Total:  2m 04s | Avg:  2m 04s | Max:  2m 04s | Hits:  98%/170   
      🟩 Test               Pass: 100%/3   | Total: 46m 17s | Avg: 15m 25s | Max: 17m 02s | Hits:  98%/510   
    
  • 🟩 packaging: Pass: 100%/4 | Total: 28m 51s | Avg: 7m 12s | Max: 8m 50s

    🟩 cpu
      🟩 amd64              Pass: 100%/4   | Total: 28m 51s | Avg:  7m 12s | Max:  8m 50s
    🟩 ctk
      🟩 12.0               Pass: 100%/2   | Total: 11m 12s | Avg:  5m 36s | Max:  8m 48s
      🟩 12.9               Pass: 100%/2   | Total: 17m 39s | Avg:  8m 49s | Max:  8m 50s
    🟩 cudacxx
      🟩 nvcc12.0           Pass: 100%/2   | Total: 11m 12s | Avg:  5m 36s | Max:  8m 48s
      🟩 nvcc12.9           Pass: 100%/2   | Total: 17m 39s | Avg:  8m 49s | Max:  8m 50s
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/4   | Total: 28m 51s | Avg:  7m 12s | Max:  8m 50s
    🟩 cxx
      🟩 Clang14            Pass: 100%/1   | Total:  2m 24s | Avg:  2m 24s | Max:  2m 24s
      🟩 Clang19            Pass: 100%/1   | Total:  8m 50s | Avg:  8m 50s | Max:  8m 50s
      🟩 GCC12              Pass: 100%/1   | Total:  8m 48s | Avg:  8m 48s | Max:  8m 48s
      🟩 GCC13              Pass: 100%/1   | Total:  8m 49s | Avg:  8m 49s | Max:  8m 49s
    🟩 cxx_family
      🟩 Clang              Pass: 100%/2   | Total: 11m 14s | Avg:  5m 37s | Max:  8m 50s
      🟩 GCC                Pass: 100%/2   | Total: 17m 37s | Avg:  8m 48s | Max:  8m 49s
    🟩 gpu
      🟩 rtx2080            Pass: 100%/4   | Total: 28m 51s | Avg:  7m 12s | Max:  8m 50s
    🟩 jobs
      🟩 Test               Pass: 100%/4   | Total: 28m 51s | Avg:  7m 12s | Max:  8m 50s
    
  • 🟩 stdpar: Pass: 100%/4 | Total: 15m 51s | Avg: 3m 57s | Max: 4m 02s

    🟩 cpu
      🟩 amd64              Pass: 100%/2   | Total:  8m 03s | Avg:  4m 01s | Max:  4m 02s
      🟩 arm64              Pass: 100%/2   | Total:  7m 48s | Avg:  3m 54s | Max:  4m 02s
    🟩 ctk
      🟩 12.9               Pass: 100%/4   | Total: 15m 51s | Avg:  3m 57s | Max:  4m 02s
    🟩 cudacxx
      🟩 nvcc12.9           Pass: 100%/4   | Total: 15m 51s | Avg:  3m 57s | Max:  4m 02s
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/4   | Total: 15m 51s | Avg:  3m 57s | Max:  4m 02s
    🟩 cxx
      🟩 NVHPC25.5          Pass: 100%/4   | Total: 15m 51s | Avg:  3m 57s | Max:  4m 02s
    🟩 cxx_family
      🟩 NVHPC              Pass: 100%/4   | Total: 15m 51s | Avg:  3m 57s | Max:  4m 02s
    🟩 gpu
      🟩 rtx2080            Pass: 100%/4   | Total: 15m 51s | Avg:  3m 57s | Max:  4m 02s
    🟩 jobs
      🟩 Build              Pass: 100%/4   | Total: 15m 51s | Avg:  3m 57s | Max:  4m 02s
    🟩 std
      🟩 17                 Pass: 100%/2   | Total:  7m 48s | Avg:  3m 54s | Max:  4m 02s
      🟩 20                 Pass: 100%/2   | Total:  8m 03s | Avg:  4m 01s | Max:  4m 02s
    

👃 Inspect Changes

Modifications in project?

Project
CCCL Infrastructure
CCCL Packaging
+/- libcu++
CUB
Thrust
CUDA Experimental
stdpar
python
CCCL C Parallel Library
Catch2Helper

Modifications in project or dependencies?

Project
CCCL Infrastructure
+/- CCCL Packaging
+/- libcu++
+/- CUB
+/- Thrust
+/- CUDA Experimental
+/- stdpar
+/- python
+/- CCCL C Parallel Library
+/- Catch2Helper

🏃‍ Runner counts (total jobs: 210)

# Runner
128 linux-amd64-cpu16
23 windows-amd64-cpu16
17 linux-amd64-gpu-l4-latest-1
12 linux-arm64-cpu16
11 linux-amd64-gpu-rtx2080-latest-1
10 linux-amd64-gpu-h100-latest-1
6 linux-amd64-gpu-rtxa6000-latest-1
3 linux-amd64-gpu-rtx4090-latest-1

{
if (!_CUDA_VSTD::__cccl_default_is_constant_evaluated())
{
NV_IF_TARGET(NV_IS_DEVICE, (return ::min(::max(__v, __lo), __hi);))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am wondering how this is an improvement at runtime?

Honestly this is more of an compiler bug if it generates bad code

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fbusato do you have a reproducer where bad code was produced? I think it would be worthwhile to file this to the compiler team.

@davebayer davebayer Aug 13, 2025 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wrote a reproducer here: https://godbolt.org/z/GTEqznbTa

I was able to achieve the min/max implementation by introducing a temporary:

const auto __tmp = (__v < __lo) ? __lo : __v;
return (__hi < __tmp) ? __hi : __tmp;

Unfortunately the min/max instructions are not emited when T is a floating point.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wrote a reproducer here: https://godbolt.org/z/WGbrzM9TT

Thanks! This is really unfortunate. I reported this to the team in charge of the compiler optimizer.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks @bernhardmgruber for following up with the compiler team, and thanks @davebayer for further investigating the issue.

Unfortunately the min/max instructions are not emited when T is a floating point.

the problem with floating point is with NaN, but we have a solution for that 🙂 #5034

{
NV_IF_TARGET(NV_IS_DEVICE, (return ::min(::max(__v, __lo), __hi);))
}
return __v < __lo ? __lo : __hi < __v ? __hi : __v;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note, we once saw that suboptimal code is generated because the compiler does not see through the nested ternary.

Could you please verify that there is change when writing this as:

Suggested change
return __v < __lo ? __lo : __hi < __v ? __hi : __v;
if (__v < __lo)
{
return __lo;
}
else if(__hi < __v)
{
return __hi;
}
else
{
return __v;
}

//
//===----------------------------------------------------------------------===//

#ifndef _CUDA___ALGORITHM_CLAMP_H

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The file needs to be included in <cuda/algorithm>

@bernhardmgruber

Copy link
Copy Markdown
Contributor

The biggest issue I see with this new API is that users will be confused when to use cuda::std::clamp or cuda::clamp and what the difference and implications are. I would feel better if this API was called T cuda::clamp_value(T value, T lower, T upper), because then it sets itself apart from std::clamp.

@fbusato

fbusato commented Aug 13, 2025

Copy link
Copy Markdown
Contributor Author

@bernhardmgruber entirely agree. Let see if we are able to fix the issue from the compiler side. If yes, I will close the PR

@fbusato fbusato moved this from In Review to Blocked in CCCL Aug 13, 2025
@fbusato

fbusato commented Jan 22, 2026

Copy link
Copy Markdown
Contributor Author

closing in favor of #7325

@fbusato fbusato closed this Jan 22, 2026
@github-project-automation github-project-automation Bot moved this from Blocked to Done in CCCL Jan 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants