Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check for missing inline on functions in public headers. #2570

Merged
merged 3 commits into from
Oct 28, 2024

Conversation

alliepiper
Copy link
Collaborator

We can test for missing inline markup by linking the header objects into the same target twice. By default CMake will eliminate duplicate link targets, but linking both the target and the $<TARGET_OBJECTS:target> bypasses the duplicate checks.

We can test for missing `inline` markup by linking the header objects into the same target twice.
By default CMake will eliminate duplicate link targets, but linking both the target and the $<TARGET_OBJECTS:target> bypasses the duplicate checks.
@alliepiper
Copy link
Collaborator Author

@robertmaynard I'm curious what your thoughts on this would be. Too hacky? Am I relying on a bug in the duplicate link target detection, or is this behavior intentional?

Copy link
Contributor

🟩 CI finished in 55m 09s: Pass: 100%/372 | Total: 1d 13h | Avg: 6m 01s | Max: 43m 16s | Hits: 99%/27949
  • 🟩 cub: Pass: 100%/104 | Total: 12h 07m | Avg: 6m 59s | Max: 43m 16s | Hits: 98%/2928

    🟩 cpu
      🟩 amd64              Pass: 100%/96  | Total: 11h 33m | Avg:  7m 13s | Max: 43m 16s | Hits:  98%/2928  
      🟩 arm64              Pass: 100%/8   | Total: 34m 49s | Avg:  4m 21s | Max:  5m 22s
    🟩 ctk
      🟩 11.1               Pass: 100%/15  | Total:  1h 51m | Avg:  7m 27s | Max: 43m 16s | Hits:  98%/732   
      🟩 11.8               Pass: 100%/3   | Total: 14m 16s | Avg:  4m 45s | Max:  5m 00s
      🟩 12.6               Pass: 100%/86  | Total: 10h 01m | Avg:  6m 59s | Max: 36m 51s | Hits:  98%/2196  
    🟩 cudacxx
      🟩 ClangCUDA18        Pass: 100%/2   | Total:  7m 40s | Avg:  3m 50s | Max:  3m 57s
      🟩 nvcc11.1           Pass: 100%/15  | Total:  1h 51m | Avg:  7m 27s | Max: 43m 16s | Hits:  98%/732   
      🟩 nvcc11.8           Pass: 100%/3   | Total: 14m 16s | Avg:  4m 45s | Max:  5m 00s
      🟩 nvcc12.6           Pass: 100%/84  | Total:  9h 54m | Avg:  7m 04s | Max: 36m 51s | Hits:  98%/2196  
    🟩 cudacxx_family
      🟩 ClangCUDA          Pass: 100%/2   | Total:  7m 40s | Avg:  3m 50s | Max:  3m 57s
      🟩 nvcc               Pass: 100%/102 | Total: 12h 00m | Avg:  7m 03s | Max: 43m 16s | Hits:  98%/2928  
    🟩 cxx
      🟩 Clang9             Pass: 100%/6   | Total: 28m 32s | Avg:  4m 45s | Max:  5m 42s
      🟩 Clang10            Pass: 100%/3   | Total: 16m 01s | Avg:  5m 20s | Max:  5m 32s
      🟩 Clang11            Pass: 100%/4   | Total: 19m 25s | Avg:  4m 51s | Max:  5m 13s
      🟩 Clang12            Pass: 100%/4   | Total: 19m 30s | Avg:  4m 52s | Max:  5m 08s
      🟩 Clang13            Pass: 100%/4   | Total: 18m 46s | Avg:  4m 41s | Max:  4m 45s
      🟩 Clang14            Pass: 100%/4   | Total: 20m 07s | Avg:  5m 01s | Max:  5m 23s
      🟩 Clang15            Pass: 100%/4   | Total: 18m 49s | Avg:  4m 42s | Max:  4m 47s
      🟩 Clang16            Pass: 100%/4   | Total: 19m 29s | Avg:  4m 52s | Max:  5m 09s
      🟩 Clang17            Pass: 100%/4   | Total: 19m 35s | Avg:  4m 53s | Max:  5m 19s
      🟩 Clang18            Pass: 100%/9   | Total:  1h 33m | Avg: 10m 22s | Max: 36m 51s
      🟩 GCC6               Pass: 100%/2   | Total:  8m 57s | Avg:  4m 28s | Max:  5m 17s
      🟩 GCC7               Pass: 100%/6   | Total: 25m 18s | Avg:  4m 13s | Max:  4m 52s
      🟩 GCC8               Pass: 100%/6   | Total: 26m 18s | Avg:  4m 23s | Max:  4m 49s
      🟩 GCC9               Pass: 100%/6   | Total:  1h 04m | Avg: 10m 48s | Max: 43m 16s
      🟩 GCC10              Pass: 100%/4   | Total: 18m 47s | Avg:  4m 41s | Max:  4m 54s
      🟩 GCC11              Pass: 100%/7   | Total: 32m 35s | Avg:  4m 39s | Max:  5m 00s
      🟩 GCC12              Pass: 100%/4   | Total: 19m 43s | Avg:  4m 55s | Max:  5m 05s
      🟩 GCC13              Pass: 100%/16  | Total:  3h 06m | Avg: 11m 38s | Max: 28m 45s
      🟩 Intel2023.2.0      Pass: 100%/3   | Total: 16m 37s | Avg:  5m 32s | Max:  5m 39s
      🟩 MSVC14.16          Pass: 100%/1   | Total: 15m 37s | Avg: 15m 37s | Max: 15m 37s | Hits:  98%/732   
      🟩 MSVC14.29          Pass: 100%/2   | Total: 25m 44s | Avg: 12m 52s | Max: 12m 53s | Hits:  98%/1464  
      🟩 MSVC14.39          Pass: 100%/1   | Total: 13m 48s | Avg: 13m 48s | Max: 13m 48s | Hits:  98%/732   
    🟩 cxx_family
      🟩 Clang              Pass: 100%/46  | Total:  4h 33m | Avg:  5m 56s | Max: 36m 51s
      🟩 GCC                Pass: 100%/51  | Total:  6h 22m | Avg:  7m 30s | Max: 43m 16s
      🟩 Intel              Pass: 100%/3   | Total: 16m 37s | Avg:  5m 32s | Max:  5m 39s
      🟩 MSVC               Pass: 100%/4   | Total: 55m 09s | Avg: 13m 47s | Max: 15m 37s | Hits:  98%/2928  
    🟩 gpu
      🟩 v100               Pass: 100%/104 | Total: 12h 07m | Avg:  6m 59s | Max: 43m 16s | Hits:  98%/2928  
    🟩 jobs
      🟩 Build              Pass: 100%/96  | Total:  8h 41m | Avg:  5m 25s | Max: 43m 16s | Hits:  98%/2928  
      🟩 DeviceLaunch       Pass: 100%/1   | Total: 21m 12s | Avg: 21m 12s | Max: 21m 12s
      🟩 GraphCapture       Pass: 100%/1   | Total: 20m 40s | Avg: 20m 40s | Max: 20m 40s
      🟩 HostLaunch         Pass: 100%/3   | Total:  1h 11m | Avg: 23m 59s | Max: 27m 22s
      🟩 TestGPU            Pass: 100%/3   | Total:  1h 32m | Avg: 30m 58s | Max: 36m 51s
    🟩 sm
      🟩 60;70;80;90        Pass: 100%/3   | Total: 14m 16s | Avg:  4m 45s | Max:  5m 00s
      🟩 90a                Pass: 100%/4   | Total: 14m 53s | Avg:  3m 43s | Max:  3m 53s
    🟩 std
      🟩 11                 Pass: 100%/28  | Total:  2h 47m | Avg:  5m 58s | Max: 28m 45s
      🟩 14                 Pass: 100%/27  | Total:  2h 23m | Avg:  5m 17s | Max: 15m 37s | Hits:  98%/1464  
      🟩 17                 Pass: 100%/26  | Total:  2h 51m | Avg:  6m 35s | Max: 43m 16s | Hits:  98%/732   
      🟩 20                 Pass: 100%/23  | Total:  4h 06m | Avg: 10m 42s | Max: 36m 51s | Hits:  98%/732   
    
  • 🟩 libcudacxx: Pass: 100%/104 | Total: 10h 47m | Avg: 6m 13s | Max: 34m 39s | Hits: 99%/11638

    🟩 cpu
      🟩 amd64              Pass: 100%/96  | Total: 10h 18m | Avg:  6m 26s | Max: 34m 39s | Hits:  99%/11638 
      🟩 arm64              Pass: 100%/8   | Total: 29m 39s | Avg:  3m 42s | Max:  4m 08s
    🟩 ctk
      🟩 11.1               Pass: 100%/15  | Total:  1h 02m | Avg:  4m 10s | Max: 19m 59s | Hits:  99%/2711  
      🟩 11.8               Pass: 100%/3   | Total: 11m 01s | Avg:  3m 40s | Max:  4m 09s
      🟩 12.6               Pass: 100%/86  | Total:  9h 34m | Avg:  6m 40s | Max: 34m 39s | Hits:  99%/8927  
    🟩 cudacxx
      🟩 ClangCUDA18        Pass: 100%/2   | Total: 36m 08s | Avg: 18m 04s | Max: 19m 02s
      🟩 nvcc11.1           Pass: 100%/15  | Total:  1h 02m | Avg:  4m 10s | Max: 19m 59s | Hits:  99%/2711  
      🟩 nvcc11.8           Pass: 100%/3   | Total: 11m 01s | Avg:  3m 40s | Max:  4m 09s
      🟩 nvcc12.6           Pass: 100%/84  | Total:  8h 57m | Avg:  6m 24s | Max: 34m 39s | Hits:  99%/8927  
    🟩 cudacxx_family
      🟩 ClangCUDA          Pass: 100%/2   | Total: 36m 08s | Avg: 18m 04s | Max: 19m 02s
      🟩 nvcc               Pass: 100%/102 | Total: 10h 11m | Avg:  5m 59s | Max: 34m 39s | Hits:  99%/11638 
    🟩 cxx
      🟩 Clang9             Pass: 100%/6   | Total: 26m 20s | Avg:  4m 23s | Max:  6m 05s
      🟩 Clang10            Pass: 100%/3   | Total: 16m 47s | Avg:  5m 35s | Max:  6m 07s
      🟩 Clang11            Pass: 100%/4   | Total: 17m 44s | Avg:  4m 26s | Max:  4m 48s
      🟩 Clang12            Pass: 100%/4   | Total: 17m 50s | Avg:  4m 27s | Max:  4m 44s
      🟩 Clang13            Pass: 100%/4   | Total: 17m 35s | Avg:  4m 23s | Max:  4m 51s
      🟩 Clang14            Pass: 100%/4   | Total: 17m 52s | Avg:  4m 28s | Max:  4m 56s
      🟩 Clang15            Pass: 100%/4   | Total: 17m 03s | Avg:  4m 15s | Max:  4m 33s
      🟩 Clang16            Pass: 100%/4   | Total: 18m 02s | Avg:  4m 30s | Max:  4m 45s
      🟩 Clang17            Pass: 100%/4   | Total: 17m 11s | Avg:  4m 17s | Max:  4m 46s
      🟩 Clang18            Pass: 100%/8   | Total:  1h 13m | Avg:  9m 14s | Max: 19m 02s
      🟩 GCC6               Pass: 100%/2   | Total:  5m 48s | Avg:  2m 54s | Max:  3m 04s
      🟩 GCC7               Pass: 100%/6   | Total: 20m 04s | Avg:  3m 20s | Max:  4m 04s
      🟩 GCC8               Pass: 100%/6   | Total: 21m 24s | Avg:  3m 34s | Max:  4m 12s
      🟩 GCC9               Pass: 100%/6   | Total: 21m 20s | Avg:  3m 33s | Max:  4m 29s
      🟩 GCC10              Pass: 100%/4   | Total: 16m 07s | Avg:  4m 01s | Max:  4m 32s
      🟩 GCC11              Pass: 100%/7   | Total: 27m 25s | Avg:  3m 55s | Max:  4m 38s
      🟩 GCC12              Pass: 100%/4   | Total: 16m 28s | Avg:  4m 07s | Max:  4m 21s
      🟩 GCC13              Pass: 100%/17  | Total:  3h 16m | Avg: 11m 34s | Max: 34m 39s
      🟩 Intel2023.2.0      Pass: 100%/3   | Total: 17m 39s | Avg:  5m 53s | Max:  6m 54s
      🟩 MSVC14.16          Pass: 100%/1   | Total: 19m 59s | Avg: 19m 59s | Max: 19m 59s | Hits:  99%/2711  
      🟩 MSVC14.29          Pass: 100%/2   | Total: 27m 49s | Avg: 13m 54s | Max: 14m 11s | Hits:  99%/5786  
      🟩 MSVC14.39          Pass: 100%/1   | Total: 16m 42s | Avg: 16m 42s | Max: 16m 42s | Hits:  99%/3141  
    🟩 cxx_family
      🟩 Clang              Pass: 100%/45  | Total:  4h 00m | Avg:  5m 20s | Max: 19m 02s
      🟩 GCC                Pass: 100%/52  | Total:  5h 25m | Avg:  6m 15s | Max: 34m 39s
      🟩 Intel              Pass: 100%/3   | Total: 17m 39s | Avg:  5m 53s | Max:  6m 54s
      🟩 MSVC               Pass: 100%/4   | Total:  1h 04m | Avg: 16m 07s | Max: 19m 59s | Hits:  99%/11638 
    🟩 gpu
      🟩 v100               Pass: 100%/104 | Total: 10h 47m | Avg:  6m 13s | Max: 34m 39s | Hits:  99%/11638 
    🟩 jobs
      🟩 Build              Pass: 100%/96  | Total:  7h 51m | Avg:  4m 54s | Max: 19m 59s | Hits:  99%/11638 
      🟩 NVRTC              Pass: 100%/4   | Total:  2h 02m | Avg: 30m 39s | Max: 34m 39s
      🟩 Test               Pass: 100%/3   | Total: 51m 12s | Avg: 17m 04s | Max: 18m 41s
      🟩 VerifyCodegen      Pass: 100%/1   | Total:  2m 21s | Avg:  2m 21s | Max:  2m 21s
    🟩 sm
      🟩 60;70;80;90        Pass: 100%/3   | Total: 11m 01s | Avg:  3m 40s | Max:  4m 09s
      🟩 90a                Pass: 100%/4   | Total: 16m 16s | Avg:  4m 04s | Max:  4m 48s
    🟩 std
      🟩 11                 Pass: 100%/28  | Total:  2h 12m | Avg:  4m 44s | Max: 21m 06s
      🟩 14                 Pass: 100%/28  | Total:  2h 47m | Avg:  5m 58s | Max: 32m 15s | Hits:  99%/5524  
      🟩 17                 Pass: 100%/27  | Total:  2h 51m | Avg:  6m 20s | Max: 34m 37s | Hits:  99%/2973  
      🟩 20                 Pass: 100%/20  | Total:  2h 54m | Avg:  8m 43s | Max: 34m 39s | Hits:  99%/3141  
    
  • 🟩 thrust: Pass: 100%/103 | Total: 11h 07m | Avg: 6m 28s | Max: 26m 51s | Hits: 99%/13165

    🟩 cpu
      🟩 amd64              Pass: 100%/95  | Total: 10h 27m | Avg:  6m 36s | Max: 26m 51s | Hits:  99%/13165 
      🟩 arm64              Pass: 100%/8   | Total: 40m 10s | Avg:  5m 01s | Max:  5m 29s
    🟩 ctk
      🟩 11.1               Pass: 100%/15  | Total:  1h 24m | Avg:  5m 38s | Max: 21m 54s | Hits:  99%/2633  
      🟩 11.8               Pass: 100%/3   | Total: 16m 30s | Avg:  5m 30s | Max:  5m 46s
      🟩 12.6               Pass: 100%/85  | Total:  9h 26m | Avg:  6m 39s | Max: 26m 51s | Hits:  99%/10532 
    🟩 cudacxx
      🟩 ClangCUDA18        Pass: 100%/2   | Total: 10m 45s | Avg:  5m 22s | Max:  5m 24s
      🟩 nvcc11.1           Pass: 100%/15  | Total:  1h 24m | Avg:  5m 38s | Max: 21m 54s | Hits:  99%/2633  
      🟩 nvcc11.8           Pass: 100%/3   | Total: 16m 30s | Avg:  5m 30s | Max:  5m 46s
      🟩 nvcc12.6           Pass: 100%/83  | Total:  9h 15m | Avg:  6m 41s | Max: 26m 51s | Hits:  99%/10532 
    🟩 cudacxx_family
      🟩 ClangCUDA          Pass: 100%/2   | Total: 10m 45s | Avg:  5m 22s | Max:  5m 24s
      🟩 nvcc               Pass: 100%/101 | Total: 10h 56m | Avg:  6m 30s | Max: 26m 51s | Hits:  99%/13165 
    🟩 cxx
      🟩 Clang9             Pass: 100%/6   | Total: 32m 06s | Avg:  5m 21s | Max:  6m 25s
      🟩 Clang10            Pass: 100%/3   | Total: 19m 30s | Avg:  6m 30s | Max:  6m 51s
      🟩 Clang11            Pass: 100%/4   | Total: 20m 48s | Avg:  5m 12s | Max:  5m 34s
      🟩 Clang12            Pass: 100%/4   | Total: 20m 32s | Avg:  5m 08s | Max:  5m 19s
      🟩 Clang13            Pass: 100%/4   | Total: 21m 31s | Avg:  5m 22s | Max:  6m 16s
      🟩 Clang14            Pass: 100%/4   | Total: 21m 01s | Avg:  5m 15s | Max:  5m 52s
      🟩 Clang15            Pass: 100%/4   | Total: 21m 22s | Avg:  5m 20s | Max:  5m 35s
      🟩 Clang16            Pass: 100%/4   | Total: 21m 25s | Avg:  5m 21s | Max:  5m 42s
      🟩 Clang17            Pass: 100%/4   | Total: 21m 25s | Avg:  5m 21s | Max:  5m 34s
      🟩 Clang18            Pass: 100%/9   | Total:  1h 01m | Avg:  6m 47s | Max: 17m 57s
      🟩 GCC6               Pass: 100%/2   | Total:  8m 20s | Avg:  4m 10s | Max:  4m 33s
      🟩 GCC7               Pass: 100%/6   | Total: 29m 03s | Avg:  4m 50s | Max:  5m 45s
      🟩 GCC8               Pass: 100%/6   | Total: 28m 32s | Avg:  4m 45s | Max:  5m 16s
      🟩 GCC9               Pass: 100%/6   | Total: 30m 08s | Avg:  5m 01s | Max:  5m 44s
      🟩 GCC10              Pass: 100%/4   | Total: 21m 03s | Avg:  5m 15s | Max:  5m 38s
      🟩 GCC11              Pass: 100%/7   | Total: 38m 48s | Avg:  5m 32s | Max:  5m 59s
      🟩 GCC12              Pass: 100%/4   | Total: 22m 37s | Avg:  5m 39s | Max:  6m 16s
      🟩 GCC13              Pass: 100%/14  | Total:  1h 41m | Avg:  7m 14s | Max: 18m 52s
      🟩 Intel2023.2.0      Pass: 100%/3   | Total: 21m 14s | Avg:  7m 04s | Max:  7m 17s
      🟩 MSVC14.16          Pass: 100%/1   | Total: 21m 54s | Avg: 21m 54s | Max: 21m 54s | Hits:  99%/2633  
      🟩 MSVC14.29          Pass: 100%/2   | Total: 35m 04s | Avg: 17m 32s | Max: 17m 37s | Hits:  99%/5266  
      🟩 MSVC14.39          Pass: 100%/2   | Total: 48m 18s | Avg: 24m 09s | Max: 26m 51s | Hits:  99%/5266  
    🟩 cxx_family
      🟩 Clang              Pass: 100%/46  | Total:  4h 20m | Avg:  5m 40s | Max: 17m 57s
      🟩 GCC                Pass: 100%/49  | Total:  4h 40m | Avg:  5m 42s | Max: 18m 52s
      🟩 Intel              Pass: 100%/3   | Total: 21m 14s | Avg:  7m 04s | Max:  7m 17s
      🟩 MSVC               Pass: 100%/5   | Total:  1h 45m | Avg: 21m 03s | Max: 26m 51s | Hits:  99%/13165 
    🟩 gpu
      🟩 v100               Pass: 100%/103 | Total: 11h 07m | Avg:  6m 28s | Max: 26m 51s | Hits:  99%/13165 
    🟩 jobs
      🟩 Build              Pass: 100%/96  | Total:  9h 24m | Avg:  5m 52s | Max: 21m 54s | Hits:  99%/10532 
      🟩 TestCPU            Pass: 100%/4   | Total: 50m 47s | Avg: 12m 41s | Max: 26m 51s | Hits:  99%/2633  
      🟩 TestGPU            Pass: 100%/3   | Total: 52m 18s | Avg: 17m 26s | Max: 18m 52s
    🟩 sm
      🟩 60;70;80;90        Pass: 100%/3   | Total: 16m 30s | Avg:  5m 30s | Max:  5m 46s
      🟩 90a                Pass: 100%/4   | Total: 19m 05s | Avg:  4m 46s | Max:  5m 10s
    🟩 std
      🟩 11                 Pass: 100%/28  | Total:  2h 30m | Avg:  5m 21s | Max: 15m 29s
      🟩 14                 Pass: 100%/27  | Total:  2h 51m | Avg:  6m 22s | Max: 21m 54s | Hits:  99%/5266  
      🟩 17                 Pass: 100%/26  | Total:  2h 37m | Avg:  6m 03s | Max: 17m 37s | Hits:  99%/2633  
      🟩 20                 Pass: 100%/22  | Total:  3h 07m | Avg:  8m 31s | Max: 26m 51s | Hits:  99%/5266  
    
  • 🟩 cudax: Pass: 100%/52 | Total: 2h 21m | Avg: 2m 43s | Max: 9m 38s | Hits: 90%/218

    🟩 cpu
      🟩 amd64              Pass: 100%/48  | Total:  2h 13m | Avg:  2m 46s | Max:  9m 38s | Hits:  90%/218   
      🟩 arm64              Pass: 100%/4   | Total:  8m 24s | Avg:  2m 06s | Max:  2m 57s
    🟩 ctk
      🟩 12.0               Pass: 100%/19  | Total: 51m 30s | Avg:  2m 42s | Max:  9m 38s | Hits:  90%/109   
      🟩 12.6               Pass: 100%/33  | Total:  1h 30m | Avg:  2m 43s | Max:  9m 38s | Hits:  90%/109   
    🟩 cudacxx
      🟩 nvcc12.0           Pass: 100%/19  | Total: 51m 30s | Avg:  2m 42s | Max:  9m 38s | Hits:  90%/109   
      🟩 nvcc12.6           Pass: 100%/33  | Total:  1h 30m | Avg:  2m 43s | Max:  9m 38s | Hits:  90%/109   
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/52  | Total:  2h 21m | Avg:  2m 43s | Max:  9m 38s | Hits:  90%/218   
    🟩 cxx
      🟩 Clang9             Pass: 100%/2   | Total:  4m 57s | Avg:  2m 28s | Max:  2m 43s
      🟩 Clang10            Pass: 100%/2   | Total:  4m 37s | Avg:  2m 18s | Max:  2m 22s
      🟩 Clang11            Pass: 100%/4   | Total: 10m 02s | Avg:  2m 30s | Max:  2m 49s
      🟩 Clang12            Pass: 100%/4   | Total:  8m 49s | Avg:  2m 12s | Max:  2m 25s
      🟩 Clang13            Pass: 100%/4   | Total:  9m 18s | Avg:  2m 19s | Max:  2m 27s
      🟩 Clang14            Pass: 100%/4   | Total: 11m 25s | Avg:  2m 51s | Max:  3m 48s
      🟩 Clang15            Pass: 100%/2   | Total:  5m 04s | Avg:  2m 32s | Max:  2m 50s
      🟩 Clang16            Pass: 100%/4   | Total:  9m 51s | Avg:  2m 27s | Max:  2m 57s
      🟩 Clang17            Pass: 100%/2   | Total:  4m 55s | Avg:  2m 27s | Max:  2m 31s
      🟩 Clang18            Pass: 100%/2   | Total:  6m 30s | Avg:  3m 15s | Max:  4m 10s
      🟩 GCC9               Pass: 100%/2   | Total:  4m 04s | Avg:  2m 02s | Max:  2m 04s
      🟩 GCC10              Pass: 100%/4   | Total:  8m 11s | Avg:  2m 02s | Max:  2m 15s
      🟩 GCC11              Pass: 100%/4   | Total:  8m 25s | Avg:  2m 06s | Max:  2m 11s
      🟩 GCC12              Pass: 100%/7   | Total: 20m 41s | Avg:  2m 57s | Max:  4m 33s
      🟩 GCC13              Pass: 100%/3   | Total:  5m 27s | Avg:  1m 49s | Max:  1m 59s
      🟩 MSVC14.36          Pass: 100%/1   | Total:  9m 38s | Avg:  9m 38s | Max:  9m 38s | Hits:  90%/109   
      🟩 MSVC14.39          Pass: 100%/1   | Total:  9m 38s | Avg:  9m 38s | Max:  9m 38s | Hits:  90%/109   
    🟩 cxx_family
      🟩 Clang              Pass: 100%/30  | Total:  1h 15m | Avg:  2m 30s | Max:  4m 10s
      🟩 GCC                Pass: 100%/20  | Total: 46m 48s | Avg:  2m 20s | Max:  4m 33s
      🟩 MSVC               Pass: 100%/2   | Total: 19m 16s | Avg:  9m 38s | Max:  9m 38s | Hits:  90%/218   
    🟩 gpu
      🟩 v100               Pass: 100%/52  | Total:  2h 21m | Avg:  2m 43s | Max:  9m 38s | Hits:  90%/218   
    🟩 jobs
      🟩 Build              Pass: 100%/47  | Total:  2h 01m | Avg:  2m 35s | Max:  9m 38s | Hits:  90%/218   
      🟩 Test               Pass: 100%/5   | Total: 19m 56s | Avg:  3m 59s | Max:  4m 33s
    🟩 sm
      🟩 90                 Pass: 100%/1   | Total:  2m 06s | Avg:  2m 06s | Max:  2m 06s
      🟩 90a                Pass: 100%/1   | Total:  1m 59s | Avg:  1m 59s | Max:  1m 59s
    🟩 std
      🟩 17                 Pass: 100%/28  | Total:  1h 07m | Avg:  2m 24s | Max:  4m 33s
      🟩 20                 Pass: 100%/24  | Total:  1h 14m | Avg:  3m 05s | Max:  9m 38s | Hits:  90%/218   
    
  • 🟩 cccl: Pass: 100%/6 | Total: 26m 59s | Avg: 4m 29s | Max: 5m 07s

    🟩 cpu
      🟩 amd64              Pass: 100%/6   | Total: 26m 59s | Avg:  4m 29s | Max:  5m 07s
    🟩 ctk
      🟩 11.1               Pass: 100%/2   | Total:  8m 04s | Avg:  4m 02s | Max:  4m 33s
      🟩 12.0               Pass: 100%/2   | Total:  8m 54s | Avg:  4m 27s | Max:  4m 42s
      🟩 12.6               Pass: 100%/2   | Total: 10m 01s | Avg:  5m 00s | Max:  5m 07s
    🟩 cudacxx
      🟩 nvcc11.1           Pass: 100%/2   | Total:  8m 04s | Avg:  4m 02s | Max:  4m 33s
      🟩 nvcc12.0           Pass: 100%/2   | Total:  8m 54s | Avg:  4m 27s | Max:  4m 42s
      🟩 nvcc12.6           Pass: 100%/2   | Total: 10m 01s | Avg:  5m 00s | Max:  5m 07s
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/6   | Total: 26m 59s | Avg:  4m 29s | Max:  5m 07s
    🟩 cxx
      🟩 Clang9             Pass: 100%/1   | Total:  4m 33s | Avg:  4m 33s | Max:  4m 33s
      🟩 Clang14            Pass: 100%/1   | Total:  4m 42s | Avg:  4m 42s | Max:  4m 42s
      🟩 Clang18            Pass: 100%/1   | Total:  5m 07s | Avg:  5m 07s | Max:  5m 07s
      🟩 GCC6               Pass: 100%/1   | Total:  3m 31s | Avg:  3m 31s | Max:  3m 31s
      🟩 GCC12              Pass: 100%/1   | Total:  4m 12s | Avg:  4m 12s | Max:  4m 12s
      🟩 GCC13              Pass: 100%/1   | Total:  4m 54s | Avg:  4m 54s | Max:  4m 54s
    🟩 cxx_family
      🟩 Clang              Pass: 100%/3   | Total: 14m 22s | Avg:  4m 47s | Max:  5m 07s
      🟩 GCC                Pass: 100%/3   | Total: 12m 37s | Avg:  4m 12s | Max:  4m 54s
    🟩 gpu
      🟩 v100               Pass: 100%/6   | Total: 26m 59s | Avg:  4m 29s | Max:  5m 07s
    🟩 jobs
      🟩 Infra              Pass: 100%/6   | Total: 26m 59s | Avg:  4m 29s | Max:  5m 07s
    
  • 🟩 cccl_c_parallel: Pass: 100%/2 | Total: 10m 56s | Avg: 5m 28s | Max: 8m 34s

    🟩 cpu
      🟩 amd64              Pass: 100%/2   | Total: 10m 56s | Avg:  5m 28s | Max:  8m 34s
    🟩 ctk
      🟩 12.5               Pass: 100%/2   | Total: 10m 56s | Avg:  5m 28s | Max:  8m 34s
    🟩 cudacxx
      🟩 nvcc12.5           Pass: 100%/2   | Total: 10m 56s | Avg:  5m 28s | Max:  8m 34s
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/2   | Total: 10m 56s | Avg:  5m 28s | Max:  8m 34s
    🟩 cxx
      🟩 GCC13              Pass: 100%/2   | Total: 10m 56s | Avg:  5m 28s | Max:  8m 34s
    🟩 cxx_family
      🟩 GCC                Pass: 100%/2   | Total: 10m 56s | Avg:  5m 28s | Max:  8m 34s
    🟩 gpu
      🟩 v100               Pass: 100%/2   | Total: 10m 56s | Avg:  5m 28s | Max:  8m 34s
    🟩 jobs
      🟩 Build              Pass: 100%/1   | Total:  2m 22s | Avg:  2m 22s | Max:  2m 22s
      🟩 Test               Pass: 100%/1   | Total:  8m 34s | Avg:  8m 34s | Max:  8m 34s
    
  • 🟩 pycuda: Pass: 100%/1 | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s

    🟩 cpu
      🟩 amd64              Pass: 100%/1   | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s
    🟩 ctk
      🟩 12.5               Pass: 100%/1   | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s
    🟩 cudacxx
      🟩 nvcc12.5           Pass: 100%/1   | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s
    🟩 cudacxx_family
      🟩 nvcc               Pass: 100%/1   | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s
    🟩 cxx
      🟩 GCC13              Pass: 100%/1   | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s
    🟩 cxx_family
      🟩 GCC                Pass: 100%/1   | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s
    🟩 gpu
      🟩 v100               Pass: 100%/1   | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s
    🟩 jobs
      🟩 Test               Pass: 100%/1   | Total: 17m 32s | Avg: 17m 32s | Max: 17m 32s
    

👃 Inspect Changes

Modifications in project?

Project
+/- CCCL Infrastructure
libcu++
CUB
Thrust
CUDA Experimental
pycuda
CCCL C Parallel Library

Modifications in project or dependencies?

Project
+/- CCCL Infrastructure
+/- libcu++
+/- CUB
+/- Thrust
+/- CUDA Experimental
+/- pycuda
+/- CCCL C Parallel Library

🏃‍ Runner counts (total jobs: 372)

# Runner
298 linux-amd64-cpu16
31 linux-amd64-gpu-v100-latest-1
28 linux-arm64-cpu16
15 windows-amd64-cpu16

@miscco
Copy link
Collaborator

miscco commented Oct 14, 2024

@robertmaynard I'm curious what your thoughts on this would be. Too hacky? Am I relying on a bug in the duplicate link target detection, or is this behavior intentional?

I would be more comfortable if we would just create a second .so and link that in

@alliepiper
Copy link
Collaborator Author

I would be more comfortable if we would just create a second .so and link that in

The issue with that is we'd need to compile all the headers twice, and I'd like to avoid that if possible. This approach allows us to only compile the header units once and then just link the same TUs twice, so long as we can rely on this behavior from $<TARGET_OBJECTS:>.

@miscco
Copy link
Collaborator

miscco commented Oct 14, 2024

The issue with that is we'd need to compile all the headers twice, and I'd like to avoid that if possible. This approach allows us to only compile the header units once and then just link the same TUs twice, so long as we can rely on this behavior from $<TARGET_OBJECTS:>.

We are using sccache with the header tests arent we? I would guess there is almost no cost do doing it like that

@robertmaynard
Copy link
Contributor

You can try creating a STATIC library that combines all the objects and also consuming that along side the original OBJECT library. That will give you two sets of the object files with only a single compilation

@alliepiper
Copy link
Collaborator Author

I did some more experiments, and using a static lib doesn't do what we want here, cmake still removes the duplicate objects unless $<TARGET_OBJECTS:...> is used.

AFAICT the current version of this patch is the only way to link the objects twice without doubling compilation overhead.

@alliepiper
Copy link
Collaborator Author

Sccache may help, though the duplicate header build rules may run in parallel and not benefit from caching. I'd still prefer to avoid redundant work if possible.

@miscco miscco merged commit 8f1691d into NVIDIA:main Oct 28, 2024
387 checks passed
@alliepiper alliepiper deleted the link_check branch October 28, 2024 18:02
pciolkosz pushed a commit to pciolkosz/cccl that referenced this pull request Oct 28, 2024
* Check for missing `inline` on functions in public headers.

We can test for missing `inline` markup by linking the header objects into the same target twice.
By default CMake will eliminate duplicate link targets, but linking both the target and the $<TARGET_OBJECTS:target> bypasses the duplicate checks.

* Add -fPIC, formatting.

* Switch link_check to executable to avoid -fPIC issues
fbusato pushed a commit to fbusato/cccl that referenced this pull request Nov 5, 2024
* Check for missing `inline` on functions in public headers.

We can test for missing `inline` markup by linking the header objects into the same target twice.
By default CMake will eliminate duplicate link targets, but linking both the target and the $<TARGET_OBJECTS:target> bypasses the duplicate checks.

* Add -fPIC, formatting.

* Switch link_check to executable to avoid -fPIC issues
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.

4 participants