Repository: NVIDIA/cccl
Pull request #4257: Implement `__fp_neg`
Author: login: davebayer
Created: 2025-03-25T21:21:02Z | Merged: 2025-03-26T10:01:51Z

This PR implement `__fp_neg` function and adds unary plus and minus operators of `__cccl_fp` type.


Diff:
diff --git a/libcudacxx/include/cuda/std/__floating_point/arithmetic.h b/libcudacxx/include/cuda/std/__floating_point/arithmetic.h
new file mode 100644
index 00000000000..8b597c4cb0e
--- /dev/null
+++ b/libcudacxx/include/cuda/std/__floating_point/arithmetic.h
@@ -0,0 +1,46 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of libcu++, the C++ Standard Library for your entire system,
+// under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+// SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCUDACXX___FLOATING_POINT_ARITHMETIC_H
+#define _LIBCUDACXX___FLOATING_POINT_ARITHMETIC_H
+
+#include <cuda/std/detail/__config>
+
+#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)
+#  pragma GCC system_header
+#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)
+#  pragma clang system_header
+#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)
+#  pragma system_header
+#endif // no system header
+
+#include <cuda/std/__floating_point/mask.h>
+#include <cuda/std/__floating_point/native_type.h>
+#include <cuda/std/__floating_point/storage.h>
+
+_LIBCUDACXX_BEGIN_NAMESPACE_STD
+
+template <class _Tp>
+_CCCL_NODISCARD _LIBCUDACXX_HIDE_FROM_ABI constexpr _Tp __fp_neg(const _Tp& __v) noexcept
+{
+  if constexpr (__fp_is_native_type_v<_Tp>)
+  {
+    return -__v;
+  }
+  else
+  {
+    const auto __res_storage = _CUDA_VSTD::__fp_get_storage(__v) ^ __fp_sign_mask_of_v<_Tp>;
+    return _CUDA_VSTD::__fp_from_storage<_Tp>(static_cast<__fp_storage_of_t<_Tp>>(__res_storage));
+  }
+}
+
+_LIBCUDACXX_END_NAMESPACE_STD
+
+#endif // _LIBCUDACXX___FLOATING_POINT_ARITHMETIC_H
diff --git a/libcudacxx/include/cuda/std/__floating_point/cccl_fp.h b/libcudacxx/include/cuda/std/__floating_point/cccl_fp.h
index af1aca0f000..2a9a381f5fb 100644
--- a/libcudacxx/include/cuda/std/__floating_point/cccl_fp.h
+++ b/libcudacxx/include/cuda/std/__floating_point/cccl_fp.h
@@ -22,6 +22,7 @@
 #endif // no system header
 
 #include <cuda/std/__concepts/concept_macros.h>
+#include <cuda/std/__floating_point/arithmetic.h>
 #include <cuda/std/__floating_point/conversion_rank_order.h>
 #include <cuda/std/__floating_point/format.h>
 #include <cuda/std/__floating_point/storage.h>
@@ -102,6 +103,19 @@ class __cccl_fp
   friend _LIBCUDACXX_HIDE_FROM_ABI constexpr __fp_storage_of_t<_Tp> __fp_get_storage(_Tp __v) noexcept;
 };
 
+template <__fp_format _Fmt>
+_CCCL_NODISCARD _LIBCUDACXX_HIDE_FROM_ABI constexpr __cccl_fp<_Fmt> operator+(__cccl_fp<_Fmt> __v) noexcept
+{
+  return __v;
+}
+
+_CCCL_TEMPLATE(__fp_format _Fmt)
+_CCCL_REQUIRES(__fp_is_signed_v<_Fmt>)
+_CCCL_NODISCARD _LIBCUDACXX_HIDE_FROM_ABI constexpr __cccl_fp<_Fmt> operator-(__cccl_fp<_Fmt> __v) noexcept
+{
+  return _CUDA_VSTD::__fp_neg(__v);
+}
+
 _LIBCUDACXX_END_NAMESPACE_STD
 
 #endif // _LIBCUDACXX___FLOATING_POINT_CCCL_FP_H
diff --git a/libcudacxx/include/cuda/std/__floating_point/fp.h b/libcudacxx/include/cuda/std/__floating_point/fp.h
index 388b871304a..817ab190303 100644
--- a/libcudacxx/include/cuda/std/__floating_point/fp.h
+++ b/libcudacxx/include/cuda/std/__floating_point/fp.h
@@ -21,6 +21,7 @@
 #  pragma system_header
 #endif // no system header
 
+#include <cuda/std/__floating_point/arithmetic.h>
 #include <cuda/std/__floating_point/cast.h>
 #include <cuda/std/__floating_point/cccl_fp.h>
 #include <cuda/std/__floating_point/common_type.h>
diff --git a/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/arithmetic/neg.pass.cpp b/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/arithmetic/neg.pass.cpp
new file mode 100644
index 00000000000..a4db8f874d7
--- /dev/null
+++ b/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/arithmetic/neg.pass.cpp
@@ -0,0 +1,90 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of libcu++, the C++ Standard Library for your entire system,
+// under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+// SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cuda/std/__floating_point/fp.h>
+#include <cuda/std/cassert>
+#include <cuda/std/type_traits>
+
+template <class T>
+__host__ __device__ constexpr void test_fp_neg()
+{
+  static_assert(cuda::std::is_same_v<decltype(cuda::std::__fp_neg(T{})), T>);
+  static_assert(noexcept(cuda::std::__fp_neg(T{})));
+
+  // todo: implement test once __fp_cast is implemented
+}
+
+__host__ __device__ constexpr bool test()
+{
+  // standard floating point types
+  test_fp_neg<float>();
+  test_fp_neg<double>();
+#if _CCCL_HAS_LONG_DOUBLE()
+  test_fp_neg<long double>();
+#endif // _CCCL_HAS_LONG_DOUBLE()
+
+  // extended nvidia floating point types
+#if _CCCL_HAS_NVFP16()
+  test_fp_neg<__half>();
+#endif // _CCCL_HAS_NVFP16()
+#if _CCCL_HAS_NVBF16()
+  test_fp_neg<__nv_bfloat16>();
+#endif // _CCCL_HAS_NVBF16()
+#if _CCCL_HAS_NVFP8_E4M3()
+  test_fp_neg<__nv_fp8_e4m3>();
+#endif // _CCCL_HAS_NVFP8_E4M3()
+#if _CCCL_HAS_NVFP8_E5M2()
+  test_fp_neg<__nv_fp8_e5m2>();
+#endif // _CCCL_HAS_NVFP8_E5M2()
+#if _CCCL_HAS_NVFP8_E8M0()
+  test_fp_neg<__nv_fp8_e8m0>();
+#endif // _CCCL_HAS_NVFP8_E8M0()
+#if _CCCL_HAS_NVFP6_E2M3()
+  test_fp_neg<__nv_fp6_e2m3>();
+#endif // _CCCL_HAS_NVFP6_E2M3()
+#if _CCCL_HAS_NVFP6_E3M2()
+  test_fp_neg<__nv_fp6_e3m2>();
+#endif // _CCCL_HAS_NVFP6_E3M2()
+#if _CCCL_HAS_NVFP4_E2M1()
+  test_fp_neg<__nv_fp4_e2m1>();
+#endif // _CCCL_HAS_NVFP4_E2M1()
+
+  // extended compiler floating point types
+#if _CCCL_HAS_FLOAT128()
+  test_fp_neg<__float128>();
+#endif // _CCCL_HAS_FLOAT128()
+
+  // extended cccl floating point types
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__binary16>>();
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__binary32>>();
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__binary64>>();
+#if _CCCL_HAS_INT128()
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__binary128>>();
+#endif // _CCCL_HAS_INT128()
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__bfloat16>>();
+#if _CCCL_HAS_INT128()
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__fp80_x86>>();
+#endif // _CCCL_HAS_INT128()
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__fp8_nv_e4m3>>();
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__fp8_nv_e5m2>>();
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__fp8_nv_e8m0>>();
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__fp6_nv_e2m3>>();
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__fp6_nv_e3m2>>();
+  test_fp_neg<cuda::std::__cccl_fp<cuda::std::__fp_format::__fp4_nv_e2m1>>();
+
+  return true;
+}
+
+int main(int, char**)
+{
+  test();
+  static_assert(test());
+  return 0;
+}
diff --git a/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/cccl_fp/arithmetic_operators/unary.minus.pass.cpp b/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/cccl_fp/arithmetic_operators/unary.minus.pass.cpp
new file mode 100644
index 00000000000..747f0beb712
--- /dev/null
+++ b/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/cccl_fp/arithmetic_operators/unary.minus.pass.cpp
@@ -0,0 +1,68 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of libcu++, the C++ Standard Library for your entire system,
+// under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+// SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cuda/std/__floating_point/fp.h>
+#include <cuda/std/cassert>
+#include <cuda/std/type_traits>
+
+template <typename T, typename = void>
+struct has_unary_minus : cuda::std::false_type
+{};
+
+template <typename T>
+struct has_unary_minus<T, cuda::std::void_t<decltype(-T{})>> : cuda::std::true_type
+{};
+
+template <cuda::std::__fp_format Fmt>
+__host__ __device__ constexpr void test_fp_unary_minus()
+{
+  using T = cuda::std::__cccl_fp<Fmt>;
+
+  if constexpr (cuda::std::__fp_is_signed_v<Fmt>)
+  {
+    static_assert(cuda::std::is_same_v<decltype(-T{}), T>);
+    static_assert(noexcept(-T{}));
+
+    // todo: implement test once __fp_cast is implemented
+  }
+  else
+  {
+    static_assert(!has_unary_minus<T>::value);
+  }
+}
+
+__host__ __device__ constexpr bool test()
+{
+  test_fp_unary_minus<cuda::std::__fp_format::__binary16>();
+  test_fp_unary_minus<cuda::std::__fp_format::__binary32>();
+  test_fp_unary_minus<cuda::std::__fp_format::__binary64>();
+#if _CCCL_HAS_INT128()
+  test_fp_unary_minus<cuda::std::__fp_format::__binary128>();
+#endif // _CCCL_HAS_INT128()
+  test_fp_unary_minus<cuda::std::__fp_format::__bfloat16>();
+#if _CCCL_HAS_INT128()
+  test_fp_unary_minus<cuda::std::__fp_format::__fp80_x86>();
+#endif // _CCCL_HAS_INT128()
+  test_fp_unary_minus<cuda::std::__fp_format::__fp8_nv_e4m3>();
+  test_fp_unary_minus<cuda::std::__fp_format::__fp8_nv_e5m2>();
+  test_fp_unary_minus<cuda::std::__fp_format::__fp8_nv_e8m0>();
+  test_fp_unary_minus<cuda::std::__fp_format::__fp6_nv_e2m3>();
+  test_fp_unary_minus<cuda::std::__fp_format::__fp6_nv_e3m2>();
+  test_fp_unary_minus<cuda::std::__fp_format::__fp4_nv_e2m1>();
+
+  return true;
+}
+
+int main(int, char**)
+{
+  test();
+  static_assert(test());
+  return 0;
+}
diff --git a/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/cccl_fp/arithmetic_operators/unary.plus.pass.cpp b/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/cccl_fp/arithmetic_operators/unary.plus.pass.cpp
new file mode 100644
index 00000000000..a5aa37129db
--- /dev/null
+++ b/libcudacxx/test/libcudacxx/libcxx/numerics/floating.point/cccl_fp/arithmetic_operators/unary.plus.pass.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of libcu++, the C++ Standard Library for your entire system,
+// under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+// SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cuda/std/__floating_point/fp.h>
+#include <cuda/std/cassert>
+#include <cuda/std/type_traits>
+
+template <cuda::std::__fp_format Fmt>
+__host__ __device__ constexpr void test_fp_unary_plus()
+{
+  using T = cuda::std::__cccl_fp<Fmt>;
+
+  static_assert(cuda::std::is_same_v<decltype(+T{}), T>);
+  static_assert(noexcept(+T{}));
+
+  // todo: implement test once __fp_cast is implemented
+}
+
+__host__ __device__ constexpr bool test()
+{
+  test_fp_unary_plus<cuda::std::__fp_format::__binary16>();
+  test_fp_unary_plus<cuda::std::__fp_format::__binary32>();
+  test_fp_unary_plus<cuda::std::__fp_format::__binary64>();
+#if _CCCL_HAS_INT128()
+  test_fp_unary_plus<cuda::std::__fp_format::__binary128>();
+#endif // _CCCL_HAS_INT128()
+  test_fp_unary_plus<cuda::std::__fp_format::__bfloat16>();
+#if _CCCL_HAS_INT128()
+  test_fp_unary_plus<cuda::std::__fp_format::__fp80_x86>();
+#endif // _CCCL_HAS_INT128()
+  test_fp_unary_plus<cuda::std::__fp_format::__fp8_nv_e4m3>();
+  test_fp_unary_plus<cuda::std::__fp_format::__fp8_nv_e5m2>();
+  test_fp_unary_plus<cuda::std::__fp_format::__fp8_nv_e8m0>();
+  test_fp_unary_plus<cuda::std::__fp_format::__fp6_nv_e2m3>();
+  test_fp_unary_plus<cuda::std::__fp_format::__fp6_nv_e3m2>();
+  test_fp_unary_plus<cuda::std::__fp_format::__fp4_nv_e2m1>();
+
+  return true;
+}
+
+int main(int, char**)
+{
+  test();
+  static_assert(test());
+  return 0;
+}


Reviews:
user: login: miscco
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T07:55:49Z
user: login: davebayer
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T08:28:50Z

Review comments:
diff_hunk: @@ -102,6 +103,19 @@ class __cccl_fp
   friend _LIBCUDACXX_HIDE_FROM_ABI constexpr __fp_storage_of_t<_Tp> __fp_get_storage(_Tp __v) noexcept;
 };
 
+template <__fp_format _Fmt>
+_CCCL_NODISCARD _LIBCUDACXX_HIDE_FROM_ABI constexpr __cccl_fp<_Fmt> operator+(__cccl_fp<_Fmt> __v) noexcept
+{
+  return __v;
+}
+
+_CCCL_TEMPLATE(__fp_format _Fmt)
+_CCCL_REQUIRES(__fp_is_signed_v<_Fmt>)
+_CCCL_NODISCARD _LIBCUDACXX_HIDE_FROM_ABI constexpr __cccl_fp<_Fmt> operator-(__cccl_fp<_Fmt> __v) noexcept
+{
+  return _CUDA_VSTD::__fp_neg(__v);
+}
+
path: libcudacxx/include/cuda/std/__floating_point/cccl_fp.h
user: login: miscco
body: Should those also be overloaded with `_Tp`
created_at: 2025-03-26T07:55:41Z
author_association: CONTRIBUTOR
diff_hunk: @@ -102,6 +103,19 @@ class __cccl_fp
   friend _LIBCUDACXX_HIDE_FROM_ABI constexpr __fp_storage_of_t<_Tp> __fp_get_storage(_Tp __v) noexcept;
 };
 
+template <__fp_format _Fmt>
+_CCCL_NODISCARD _LIBCUDACXX_HIDE_FROM_ABI constexpr __cccl_fp<_Fmt> operator+(__cccl_fp<_Fmt> __v) noexcept
+{
+  return __v;
+}
+
+_CCCL_TEMPLATE(__fp_format _Fmt)
+_CCCL_REQUIRES(__fp_is_signed_v<_Fmt>)
+_CCCL_NODISCARD _LIBCUDACXX_HIDE_FROM_ABI constexpr __cccl_fp<_Fmt> operator-(__cccl_fp<_Fmt> __v) noexcept
+{
+  return _CUDA_VSTD::__fp_neg(__v);
+}
+
path: libcudacxx/include/cuda/std/__floating_point/cccl_fp.h
user: login: davebayer
body: These operator overloads should be implemented only for our own `__cccl_fp` type, all of the other external types should implement their own operator overloads if they want to (e. g. nvfp types)
created_at: 2025-03-26T08:28:50Z
author_association: CONTRIBUTOR

PR comments:
user: login: copy-pr-bot[bot]
created_at: 2025-03-25T21:21:06Z
body: This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities [here](https://docs.gha-runners.nvidia.com/cpr/vetters).

Contributors can view more details about this message [here](https://docs.gha-runners.nvidia.com/cpr/contributors).

author_association: CONTRIBUTOR
user: login: miscco
created_at: 2025-03-26T07:56:40Z
body: /ok to test
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-03-26T09:54:20Z
body: <details><summary>🟩 CI finished in 1h 56m: Pass: 100%/162 | Total:  3d 22h | Avg: 35m 05s | Max:  1h 27m | Hits:  44%/253482</summary>

<ul>
<li>
<details><summary><h3>🟩 cub: Pass: 100%/45  | Total:  1d 22h | Avg:  1h 01m | Max:  1h 27m | Hits:  31%/53825 </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/43  | Total:  1d 20h | Avg:  1h 01m | Max:  1h 27m | Hits:  31%/51379 
  🟩 arm64              Pass: 100%/2   | Total:  2h 16m | Avg:  1h 08m | Max:  1h 08m | Hits:  16%/2446  
🟩 ctk
  🟩 12.0               Pass: 100%/5   | Total:  5h 53m | Avg:  1h 10m | Max:  1h 13m | Hits:  15%/5945  
  🟩 12.6               Pass: 100%/2   | Total:  2h 42m | Avg:  1h 21m | Max:  1h 24m | Hits:  12%/2262  
  🟩 12.8               Pass: 100%/38  | Total:  1d 13h | Avg: 59m 49s | Max:  1h 27m | Hits:  33%/45618 
🟩 cudacxx
  🟩 ClangCUDA18        Pass: 100%/2   | Total:  2h 11m | Avg:  1h 05m | Max:  1h 06m | Hits:  15%/2110  
  🟩 nvcc12.0           Pass: 100%/5   | Total:  5h 53m | Avg:  1h 10m | Max:  1h 13m | Hits:  15%/5945  
  🟩 nvcc12.6           Pass: 100%/2   | Total:  2h 42m | Avg:  1h 21m | Max:  1h 24m | Hits:  12%/2262  
  🟩 nvcc12.8           Pass: 100%/36  | Total:  1d 11h | Avg: 59m 29s | Max:  1h 27m | Hits:  34%/43508 
🟩 cudacxx_family
  🟩 ClangCUDA          Pass: 100%/2   | Total:  2h 11m | Avg:  1h 05m | Max:  1h 06m | Hits:  15%/2110  
  🟩 nvcc               Pass: 100%/43  | Total:  1d 20h | Avg:  1h 01m | Max:  1h 27m | Hits:  31%/51715 
🟩 cxx
  🟩 Clang14            Pass: 100%/4   | Total:  4h 25m | Avg:  1h 06m | Max:  1h 08m | Hits:  16%/4900  
  🟩 Clang15            Pass: 100%/2   | Total:  2h 29m | Avg:  1h 14m | Max:  1h 22m | Hits:  16%/2446  
  🟩 Clang16            Pass: 100%/2   | Total:  2h 20m | Avg:  1h 10m | Max:  1h 10m | Hits:  16%/2446  
  🟩 Clang17            Pass: 100%/2   | Total:  2h 20m | Avg:  1h 10m | Max:  1h 14m | Hits:  16%/2446  
  🟩 Clang18            Pass: 100%/7   | Total:  6h 20m | Avg: 54m 21s | Max:  1h 08m | Hits:  41%/8225  
  🟩 GCC7               Pass: 100%/2   | Total:  2h 19m | Avg:  1h 09m | Max:  1h 13m | Hits:  16%/2450  
  🟩 GCC8               Pass: 100%/1   | Total:  1h 13m | Avg:  1h 13m | Max:  1h 13m | Hits:  16%/1225  
  🟩 GCC9               Pass: 100%/2   | Total:  2h 24m | Avg:  1h 12m | Max:  1h 13m | Hits:  16%/2450  
  🟩 GCC10              Pass: 100%/2   | Total:  2h 12m | Avg:  1h 06m | Max:  1h 06m | Hits:  16%/2450  
  🟩 GCC11              Pass: 100%/2   | Total:  2h 14m | Avg:  1h 07m | Max:  1h 07m | Hits:  16%/2446  
  🟩 GCC12              Pass: 100%/2   | Total:  2h 19m | Avg:  1h 09m | Max:  1h 11m | Hits:  16%/2446  
  🟩 GCC13              Pass: 100%/11  | Total:  7h 47m | Avg: 42m 28s | Max:  1h 23m | Hits:  61%/13453 
  🟩 MSVC14.29          Pass: 100%/2   | Total:  2h 31m | Avg:  1h 15m | Max:  1h 18m | Hits:  12%/2090  
  🟩 MSVC14.42          Pass: 100%/2   | Total:  2h 47m | Avg:  1h 23m | Max:  1h 27m | Hits:  12%/2090  
  🟩 NVHPC25.1          Pass: 100%/2   | Total:  2h 42m | Avg:  1h 21m | Max:  1h 24m | Hits:  12%/2262  
🟩 cxx_family
  🟩 Clang              Pass: 100%/17  | Total: 17h 56m | Avg:  1h 03m | Max:  1h 22m | Hits:  26%/20463 
  🟩 GCC                Pass: 100%/22  | Total: 20h 31m | Avg: 55m 59s | Max:  1h 23m | Hits:  38%/26920 
  🟩 MSVC               Pass: 100%/4   | Total:  5h 18m | Avg:  1h 19m | Max:  1h 27m | Hits:  12%/4180  
  🟩 NVHPC              Pass: 100%/2   | Total:  2h 42m | Avg:  1h 21m | Max:  1h 24m | Hits:  12%/2262  
🟩 gpu
  🟩 h100               Pass: 100%/3   | Total:  1h 20m | Avg: 26m 43s | Max: 29m 00s | Hits:  71%/3669  
  🟩 rtx2080            Pass: 100%/34  | Total:  1d 16h | Avg:  1h 11m | Max:  1h 27m | Hits:  15%/40372 
  🟩 rtxa6000           Pass: 100%/8   | Total:  4h 40m | Avg: 35m 00s | Max:  1h 09m | Hits:  78%/9784  
🟩 jobs
  🟩 Build              Pass: 100%/37  | Total:  1d 19h | Avg:  1h 10m | Max:  1h 27m | Hits:  15%/44041 
  🟩 DeviceLaunch       Pass: 100%/1   | Total: 26m 29s | Avg: 26m 29s | Max: 26m 29s | Hits:  99%/1223  
  🟩 GraphCapture       Pass: 100%/1   | Total: 20m 36s | Avg: 20m 36s | Max: 20m 36s | Hits:  99%/1223  
  🟩 HostLaunch         Pass: 100%/3   | Total:  1h 20m | Avg: 26m 46s | Max: 27m 22s | Hits:  99%/3669  
  🟩 TestGPU            Pass: 100%/3   | Total:  1h 09m | Avg: 23m 09s | Max: 23m 47s | Hits:  99%/3669  
🟩 sm
  🟩 90                 Pass: 100%/3   | Total:  1h 20m | Avg: 26m 43s | Max: 29m 00s | Hits:  71%/3669  
  🟩 90;90a;100         Pass: 100%/1   | Total:  1h 23m | Avg:  1h 23m | Max:  1h 23m | Hits:  16%/1223  
🟩 std
  🟩 17                 Pass: 100%/20  | Total: 23h 51m | Avg:  1h 11m | Max:  1h 22m | Hits:  15%/23682 
  🟩 20                 Pass: 100%/25  | Total: 22h 37m | Avg: 54m 18s | Max:  1h 27m | Hits:  43%/30143 
```

</details>

<li>
<details><summary><h3>🟩 thrust: Pass: 100%/45  | Total:  1d 02h | Avg: 35m 02s | Max:  1h 15m | Hits:  56%/79911 </h3></summary>

```
🟩 cmake_options
  🟩 -DTHRUST_DISPATCH_TYPE=Force32bit Pass: 100%/2   | Total: 41m 30s | Avg: 20m 45s | Max: 29m 52s | Hits:  73%/3554  
🟩 cpu
  🟩 amd64              Pass: 100%/43  | Total:  1d 01h | Avg: 35m 12s | Max:  1h 15m | Hits:  56%/76358 
  🟩 arm64              Pass: 100%/2   | Total:  1h 03m | Avg: 31m 30s | Max: 33m 06s | Hits:  47%/3553  
🟩 ctk
  🟩 12.0               Pass: 100%/5   | Total:  3h 24m | Avg: 40m 58s | Max:  1h 04m | Hits:  43%/8876  
  🟩 12.6               Pass: 100%/2   | Total:  2h 22m | Avg:  1h 11m | Max:  1h 15m | Hits:  25%/3552  
  🟩 12.8               Pass: 100%/38  | Total: 20h 29m | Avg: 32m 22s | Max:  1h 11m | Hits:  59%/67483 
🟩 cudacxx
  🟩 ClangCUDA18        Pass: 100%/2   | Total: 58m 11s | Avg: 29m 05s | Max: 30m 00s | Hits:  48%/3552  
  🟩 nvcc12.0           Pass: 100%/5   | Total:  3h 24m | Avg: 40m 58s | Max:  1h 04m | Hits:  43%/8876  
  🟩 nvcc12.6           Pass: 100%/2   | Total:  2h 22m | Avg:  1h 11m | Max:  1h 15m | Hits:  25%/3552  
  🟩 nvcc12.8           Pass: 100%/36  | Total: 19h 31m | Avg: 32m 32s | Max:  1h 11m | Hits:  60%/63931 
🟩 cudacxx_family
  🟩 ClangCUDA          Pass: 100%/2   | Total: 58m 11s | Avg: 29m 05s | Max: 30m 00s | Hits:  48%/3552  
  🟩 nvcc               Pass: 100%/43  | Total:  1d 01h | Avg: 35m 19s | Max:  1h 15m | Hits:  56%/76359 
🟩 cxx
  🟩 Clang14            Pass: 100%/4   | Total:  2h 19m | Avg: 34m 46s | Max: 37m 23s | Hits:  56%/7104  
  🟩 Clang15            Pass: 100%/2   | Total:  1h 13m | Avg: 36m 43s | Max: 38m 38s | Hits:  48%/3552  
  🟩 Clang16            Pass: 100%/2   | Total:  1h 09m | Avg: 34m 52s | Max: 36m 29s | Hits:  48%/3552  
  🟩 Clang17            Pass: 100%/2   | Total:  1h 06m | Avg: 33m 09s | Max: 33m 48s | Hits:  48%/3552  
  🟩 Clang18            Pass: 100%/7   | Total:  2h 50m | Avg: 24m 21s | Max: 33m 13s | Hits:  64%/12432 
  🟩 GCC7               Pass: 100%/2   | Total:  1h 08m | Avg: 34m 23s | Max: 34m 27s | Hits:  57%/3554  
  🟩 GCC8               Pass: 100%/1   | Total: 35m 24s | Avg: 35m 24s | Max: 35m 24s | Hits:  47%/1777  
  🟩 GCC9               Pass: 100%/2   | Total:  1h 14m | Avg: 37m 04s | Max: 37m 16s | Hits:  56%/3554  
  🟩 GCC10              Pass: 100%/2   | Total:  1h 10m | Avg: 35m 09s | Max: 35m 46s | Hits:  47%/3554  
  🟩 GCC11              Pass: 100%/2   | Total:  1h 08m | Avg: 34m 27s | Max: 34m 47s | Hits:  47%/3554  
  🟩 GCC12              Pass: 100%/2   | Total:  1h 13m | Avg: 36m 39s | Max: 37m 41s | Hits:  47%/3554  
  🟩 GCC13              Pass: 100%/10  | Total:  3h 47m | Avg: 22m 42s | Max: 35m 38s | Hits:  74%/17770 
  🟩 MSVC14.29          Pass: 100%/2   | Total:  2h 08m | Avg:  1h 04m | Max:  1h 04m | Hits:  38%/3540  
  🟩 MSVC14.42          Pass: 100%/3   | Total:  2h 49m | Avg: 56m 25s | Max:  1h 11m | Hits:  50%/5310  
  🟩 NVHPC25.1          Pass: 100%/2   | Total:  2h 22m | Avg:  1h 11m | Max:  1h 15m | Hits:  25%/3552  
🟩 cxx_family
  🟩 Clang              Pass: 100%/17  | Total:  8h 39m | Avg: 30m 32s | Max: 38m 38s | Hits:  56%/30192 
  🟩 GCC                Pass: 100%/21  | Total: 10h 17m | Avg: 29m 25s | Max: 37m 41s | Hits:  62%/37317 
  🟩 MSVC               Pass: 100%/5   | Total:  4h 57m | Avg: 59m 34s | Max:  1h 11m | Hits:  45%/8850  
  🟩 NVHPC              Pass: 100%/2   | Total:  2h 22m | Avg:  1h 11m | Max:  1h 15m | Hits:  25%/3552  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 33m 35s | Avg: 16m 47s | Max: 21m 49s | Hits:  73%/3554  
  🟩 rtx2080            Pass: 100%/33  | Total: 21h 42m | Avg: 39m 27s | Max:  1h 15m | Hits:  48%/58604 
  🟩 rtx4090            Pass: 100%/10  | Total:  4h 00m | Avg: 24m 05s | Max:  1h 10m | Hits:  79%/17753 
🟩 jobs
  🟩 Build              Pass: 100%/38  | Total:  1d 00h | Avg: 39m 10s | Max:  1h 15m | Hits:  48%/67481 
  🟩 TestCPU            Pass: 100%/3   | Total: 44m 12s | Avg: 14m 44s | Max: 27m 56s | Hits:  99%/5323  
  🟩 TestGPU            Pass: 100%/4   | Total: 44m 10s | Avg: 11m 02s | Max: 11m 46s | Hits:  99%/7107  
🟩 sm
  🟩 90                 Pass: 100%/2   | Total: 33m 35s | Avg: 16m 47s | Max: 21m 49s | Hits:  73%/3554  
  🟩 90;90a;100         Pass: 100%/1   | Total: 31m 12s | Avg: 31m 12s | Max: 31m 12s | Hits:  75%/1777  
🟩 std
  🟩 17                 Pass: 100%/20  | Total: 14h 04m | Avg: 42m 12s | Max:  1h 15m | Hits:  47%/35511 
  🟩 20                 Pass: 100%/23  | Total: 11h 31m | Avg: 30m 02s | Max:  1h 10m | Hits:  62%/40846 
```

</details>

<li>
<details><summary><h3>🟩 libcudacxx: Pass: 100%/43  | Total: 17h 14m | Avg: 24m 02s | Max: 55m 36s | Hits:  37%/107566</h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/41  | Total: 16h 29m | Avg: 24m 08s | Max: 55m 36s | Hits:  37%/101683
  🟩 arm64              Pass: 100%/2   | Total: 44m 26s | Avg: 22m 13s | Max: 22m 53s | Hits:  39%/5883  
🟩 ctk
  🟩 12.0               Pass: 100%/5   | Total:  1h 41m | Avg: 20m 22s | Max: 22m 48s | Hits:  38%/14329 
  🟩 12.6               Pass: 100%/2   | Total:  1h 12m | Avg: 36m 02s | Max: 36m 38s | Hits:  30%/5830  
  🟩 12.8               Pass: 100%/36  | Total: 14h 20m | Avg: 23m 53s | Max: 55m 36s | Hits:  37%/87407 
🟩 cudacxx
  🟩 ClangCUDA18        Pass: 100%/2   | Total: 45m 13s | Avg: 22m 36s | Max: 24m 18s | Hits:  27%/5844  
  🟩 nvcc12.0           Pass: 100%/5   | Total:  1h 41m | Avg: 20m 22s | Max: 22m 48s | Hits:  38%/14329 
  🟩 nvcc12.6           Pass: 100%/2   | Total:  1h 12m | Avg: 36m 02s | Max: 36m 38s | Hits:  30%/5830  
  🟩 nvcc12.8           Pass: 100%/34  | Total: 13h 34m | Avg: 23m 58s | Max: 55m 36s | Hits:  38%/81563 
🟩 cudacxx_family
  🟩 ClangCUDA          Pass: 100%/2   | Total: 45m 13s | Avg: 22m 36s | Max: 24m 18s | Hits:  27%/5844  
  🟩 nvcc               Pass: 100%/41  | Total: 16h 28m | Avg: 24m 07s | Max: 55m 36s | Hits:  37%/101722
🟩 cxx
  🟩 Clang14            Pass: 100%/4   | Total:  1h 25m | Avg: 21m 20s | Max: 22m 04s | Hits:  42%/11656 
  🟩 Clang15            Pass: 100%/2   | Total: 45m 47s | Avg: 22m 53s | Max: 23m 03s | Hits:  38%/5840  
  🟩 Clang16            Pass: 100%/2   | Total: 49m 19s | Avg: 24m 39s | Max: 26m 36s | Hits:  38%/5840  
  🟩 Clang17            Pass: 100%/2   | Total: 47m 50s | Avg: 23m 55s | Max: 25m 21s | Hits:  38%/5840  
  🟩 Clang18            Pass: 100%/6   | Total:  2h 56m | Avg: 29m 20s | Max: 55m 36s | Hits:  33%/14625 
  🟩 GCC7               Pass: 100%/2   | Total: 39m 13s | Avg: 19m 36s | Max: 20m 00s | Hits:  39%/5777  
  🟩 GCC8               Pass: 100%/1   | Total: 20m 27s | Avg: 20m 27s | Max: 20m 27s | Hits:  44%/2899  
  🟩 GCC9               Pass: 100%/2   | Total: 42m 33s | Avg: 21m 16s | Max: 24m 22s | Hits:  39%/5789  
  🟩 GCC10              Pass: 100%/2   | Total: 49m 13s | Avg: 24m 36s | Max: 25m 23s | Hits:  33%/5846  
  🟩 GCC11              Pass: 100%/2   | Total: 47m 29s | Avg: 23m 44s | Max: 24m 18s | Hits:  33%/5842  
  🟩 GCC12              Pass: 100%/2   | Total: 51m 13s | Avg: 25m 36s | Max: 25m 41s | Hits:  33%/5842  
  🟩 GCC13              Pass: 100%/10  | Total:  3h 31m | Avg: 21m 09s | Max: 46m 28s | Hits:  41%/14886 
  🟩 MSVC14.29          Pass: 100%/2   | Total: 47m 12s | Avg: 23m 36s | Max: 24m 24s | Hits:  32%/5491  
  🟩 MSVC14.42          Pass: 100%/2   | Total: 48m 51s | Avg: 24m 25s | Max: 25m 27s | Hits:  39%/5563  
  🟩 NVHPC25.1          Pass: 100%/2   | Total:  1h 12m | Avg: 36m 02s | Max: 36m 38s | Hits:  30%/5830  
🟩 cxx_family
  🟩 Clang              Pass: 100%/16  | Total:  6h 44m | Avg: 25m 16s | Max: 55m 36s | Hits:  37%/43801 
  🟩 GCC                Pass: 100%/21  | Total:  7h 41m | Avg: 21m 59s | Max: 46m 28s | Hits:  38%/46881 
  🟩 MSVC               Pass: 100%/4   | Total:  1h 36m | Avg: 24m 00s | Max: 25m 27s | Hits:  35%/11054 
  🟩 NVHPC              Pass: 100%/2   | Total:  1h 12m | Avg: 36m 02s | Max: 36m 38s | Hits:  30%/5830  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 32m 02s | Avg: 16m 01s | Max: 18m 23s | Hits:  41%/3031  
  🟩 rtx2080            Pass: 100%/41  | Total: 16h 42m | Avg: 24m 26s | Max: 55m 36s | Hits:  37%/104535
🟩 jobs
  🟩 Build              Pass: 100%/37  | Total: 14h 44m | Avg: 23m 53s | Max: 36m 38s | Hits:  37%/107526
  🟩 NVRTC              Pass: 100%/2   | Total: 32m 00s | Avg: 16m 00s | Max: 16m 26s | Hits:  90%/40    
  🟩 Test               Pass: 100%/3   | Total:  1h 55m | Avg: 38m 34s | Max: 55m 36s
  🟩 VerifyCodegen      Pass: 100%/1   | Total:  2m 20s | Avg:  2m 20s | Max:  2m 20s
🟩 sm
  🟩 75                 Pass: 100%/2   | Total: 32m 00s | Avg: 16m 00s | Max: 16m 26s | Hits:  90%/40    
  🟩 90                 Pass: 100%/2   | Total: 32m 02s | Avg: 16m 01s | Max: 18m 23s | Hits:  41%/3031  
  🟩 90;90a;100         Pass: 100%/1   | Total: 31m 27s | Avg: 31m 27s | Max: 31m 27s | Hits:  29%/3031  
🟩 std
  🟩 17                 Pass: 100%/21  | Total:  8h 06m | Avg: 23m 08s | Max: 36m 38s | Hits:  35%/57507 
  🟩 20                 Pass: 100%/21  | Total:  9h 05m | Avg: 25m 58s | Max: 55m 36s | Hits:  39%/50059 
```

</details>

<li>
<details><summary><h3>🟩 cudax: Pass: 100%/22  | Total:  2h 54m | Avg:  7m 57s | Max: 15m 24s | Hits:  87%/11852 </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/18  | Total:  2h 20m | Avg:  7m 48s | Max: 15m 24s | Hits:  90%/9512  
  🟩 arm64              Pass: 100%/4   | Total: 34m 29s | Avg:  8m 37s | Max: 13m 22s | Hits:  75%/2340  
🟩 ctk
  🟩 12.0               Pass: 100%/1   | Total: 10m 42s | Avg: 10m 42s | Max: 10m 42s | Hits:  87%/282   
  🟩 12.6               Pass: 100%/2   | Total: 14m 30s | Avg:  7m 15s | Max:  7m 35s | Hits:  90%/754   
  🟩 12.8               Pass: 100%/19  | Total:  2h 29m | Avg:  7m 52s | Max: 15m 24s | Hits:  87%/10816 
🟩 cudacxx
  🟩 nvcc12.0           Pass: 100%/1   | Total: 10m 42s | Avg: 10m 42s | Max: 10m 42s | Hits:  87%/282   
  🟩 nvcc12.6           Pass: 100%/2   | Total: 14m 30s | Avg:  7m 15s | Max:  7m 35s | Hits:  90%/754   
  🟩 nvcc12.8           Pass: 100%/19  | Total:  2h 29m | Avg:  7m 52s | Max: 15m 24s | Hits:  87%/10816 
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/22  | Total:  2h 54m | Avg:  7m 57s | Max: 15m 24s | Hits:  87%/11852 
🟩 cxx
  🟩 Clang14            Pass: 100%/1   | Total:  4m 49s | Avg:  4m 49s | Max:  4m 49s | Hits:  95%/587   
  🟩 Clang15            Pass: 100%/1   | Total:  4m 36s | Avg:  4m 36s | Max:  4m 36s | Hits:  95%/585   
  🟩 Clang16            Pass: 100%/1   | Total:  4m 53s | Avg:  4m 53s | Max:  4m 53s | Hits:  95%/585   
  🟩 Clang17            Pass: 100%/1   | Total:  4m 41s | Avg:  4m 41s | Max:  4m 41s | Hits:  95%/585   
  🟩 Clang18            Pass: 100%/4   | Total: 43m 35s | Avg: 10m 53s | Max: 13m 22s | Hits:  76%/2340  
  🟩 GCC10              Pass: 100%/1   | Total:  4m 29s | Avg:  4m 29s | Max:  4m 29s | Hits:  95%/587   
  🟩 GCC11              Pass: 100%/1   | Total:  4m 33s | Avg:  4m 33s | Max:  4m 33s | Hits:  95%/585   
  🟩 GCC12              Pass: 100%/2   | Total: 20m 19s | Avg: 10m 09s | Max: 15m 24s | Hits:  95%/1170  
  🟩 GCC13              Pass: 100%/6   | Total: 46m 34s | Avg:  7m 45s | Max: 11m 49s | Hits:  82%/3510  
  🟩 MSVC14.39          Pass: 100%/1   | Total: 10m 42s | Avg: 10m 42s | Max: 10m 42s | Hits:  87%/282   
  🟩 MSVC14.42          Pass: 100%/1   | Total: 11m 13s | Avg: 11m 13s | Max: 11m 13s | Hits:  87%/282   
  🟩 NVHPC25.1          Pass: 100%/2   | Total: 14m 30s | Avg:  7m 15s | Max:  7m 35s | Hits:  90%/754   
🟩 cxx_family
  🟩 Clang              Pass: 100%/8   | Total:  1h 02m | Avg:  7m 49s | Max: 13m 22s | Hits:  86%/4682  
  🟩 GCC                Pass: 100%/10  | Total:  1h 15m | Avg:  7m 35s | Max: 15m 24s | Hits:  87%/5852  
  🟩 MSVC               Pass: 100%/2   | Total: 21m 55s | Avg: 10m 57s | Max: 11m 13s | Hits:  87%/564   
  🟩 NVHPC              Pass: 100%/2   | Total: 14m 30s | Avg:  7m 15s | Max:  7m 35s | Hits:  90%/754   
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 23m 32s | Avg: 11m 46s | Max: 11m 49s | Hits:  77%/1170  
  🟩 rtx2080            Pass: 100%/20  | Total:  2h 31m | Avg:  7m 34s | Max: 15m 24s | Hits:  88%/10682 
🟩 jobs
  🟩 Build              Pass: 100%/19  | Total:  2h 14m | Avg:  7m 05s | Max: 13m 22s | Hits:  85%/10097 
  🟩 Test               Pass: 100%/3   | Total: 40m 01s | Avg: 13m 20s | Max: 15m 24s | Hits:  98%/1755  
🟩 sm
  🟩 90                 Pass: 100%/3   | Total: 34m 41s | Avg: 11m 33s | Max: 11m 49s | Hits:  70%/1755  
  🟩 90a                Pass: 100%/1   | Total:  3m 48s | Avg:  3m 48s | Max:  3m 48s | Hits:  95%/585   
🟩 std
  🟩 17                 Pass: 100%/4   | Total: 35m 06s | Avg:  8m 46s | Max: 13m 02s | Hits:  72%/2132  
  🟩 20                 Pass: 100%/18  | Total:  2h 19m | Avg:  7m 46s | Max: 15m 24s | Hits:  90%/9720  
```

</details>

<li>
<details><summary><h3>🟩 stdpar: Pass: 100%/4   | Total: 20m 41s | Avg:  5m 10s | Max:  5m 25s</h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/2   | Total:  9m 51s | Avg:  4m 55s | Max:  4m 57s
  🟩 arm64              Pass: 100%/2   | Total: 10m 50s | Avg:  5m 25s | Max:  5m 25s
🟩 ctk
  🟩 12.6               Pass: 100%/4   | Total: 20m 41s | Avg:  5m 10s | Max:  5m 25s
🟩 cudacxx
  🟩 nvcc12.6           Pass: 100%/4   | Total: 20m 41s | Avg:  5m 10s | Max:  5m 25s
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/4   | Total: 20m 41s | Avg:  5m 10s | Max:  5m 25s
🟩 cxx
  🟩 NVHPC25.1          Pass: 100%/4   | Total: 20m 41s | Avg:  5m 10s | Max:  5m 25s
🟩 cxx_family
  🟩 NVHPC              Pass: 100%/4   | Total: 20m 41s | Avg:  5m 10s | Max:  5m 25s
🟩 gpu
  🟩 rtx2080            Pass: 100%/4   | Total: 20m 41s | Avg:  5m 10s | Max:  5m 25s
🟩 jobs
  🟩 Build              Pass: 100%/4   | Total: 20m 41s | Avg:  5m 10s | Max:  5m 25s
🟩 std
  🟩 17                 Pass: 100%/2   | Total: 10m 19s | Avg:  5m 09s | Max:  5m 25s
  🟩 20                 Pass: 100%/2   | Total: 10m 22s | Avg:  5m 11s | Max:  5m 25s
```

</details>

<li>
<details><summary><h3>🟩 cccl_c_parallel: Pass: 100%/2   | Total: 20m 10s | Avg: 10m 05s | Max: 17m 37s | Hits:  96%/328   </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/2   | Total: 20m 10s | Avg: 10m 05s | Max: 17m 37s | Hits:  96%/328   
🟩 ctk
  🟩 12.8               Pass: 100%/2   | Total: 20m 10s | Avg: 10m 05s | Max: 17m 37s | Hits:  96%/328   
🟩 cudacxx
  🟩 nvcc12.8           Pass: 100%/2   | Total: 20m 10s | Avg: 10m 05s | Max: 17m 37s | Hits:  96%/328   
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/2   | Total: 20m 10s | Avg: 10m 05s | Max: 17m 37s | Hits:  96%/328   
🟩 cxx
  🟩 GCC13              Pass: 100%/2   | Total: 20m 10s | Avg: 10m 05s | Max: 17m 37s | Hits:  96%/328   
🟩 cxx_family
  🟩 GCC                Pass: 100%/2   | Total: 20m 10s | Avg: 10m 05s | Max: 17m 37s | Hits:  96%/328   
🟩 gpu
  🟩 rtx2080            Pass: 100%/2   | Total: 20m 10s | Avg: 10m 05s | Max: 17m 37s | Hits:  96%/328   
🟩 jobs
  🟩 Build              Pass: 100%/1   | Total:  2m 33s | Avg:  2m 33s | Max:  2m 33s | Hits:  93%/164   
  🟩 Test               Pass: 100%/1   | Total: 17m 37s | Avg: 17m 37s | Max: 17m 37s | Hits:  98%/164   
```

</details>

<li>
<details><summary><h3>🟩 python: Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m</h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m
🟩 ctk
  🟩 12.8               Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m
🟩 cudacxx
  🟩 nvcc12.8           Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m
🟩 cxx
  🟩 GCC13              Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m
🟩 cxx_family
  🟩 GCC                Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m
🟩 gpu
  🟩 rtx2080            Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m
🟩 jobs
  🟩 Test               Pass: 100%/1   | Total:  1h 08m | Avg:  1h 08m | Max:  1h 08m
```

</details>

</ul>

<details><summary><h3>👃 Inspect Changes</h3></summary>

### Modifications in project?

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

### Modifications in project or dependencies?

|     | Project
|-----|---------
|     | CCCL Infrastructure
| +/- | libcu++
| +/- | CUB
| +/- | Thrust
| +/- | CUDA Experimental
| +/- | stdpar
| +/- | python
| +/- | CCCL C Parallel Library
| +/- | Catch2Helper
</details>


<details><summary><h2>🏃‍ Runner counts (total jobs: 162)</h2></summary>

|  #   | Runner
|------|------
|  113 | `linux-amd64-cpu16`
|   15 | `windows-amd64-cpu16`
|   12 | `linux-arm64-cpu16`
|    8 | `linux-amd64-gpu-rtx2080-latest-1`
|    6 | `linux-amd64-gpu-rtxa6000-latest-1`
|    5 | `linux-amd64-gpu-h100-latest-1`
|    3 | `linux-amd64-gpu-rtx4090-latest-1`


</details>

</details>

author_association: CONTRIBUTOR