Repository: NVIDIA/cccl
Pull request #4779: fix the late-bound customization of the `continues_on` algorithm
Author: login: ericniebler
Created: 2025-05-22T00:39:38Z | Merged: 2025-05-23T21:55:49Z

## Description

cplusplus/sender-receiver#337 describes a problem with the design of lazy algorithm customization in `std::execution`. i am writing a paper ([D3718](https://isocpp.org/files/papers/D3718R0.html)) that addresses the issue. this PR is an implementation of the "principled approach" described in that paper.

the tl;dr is that, due to an oversight, `connect` uses an incorrect domain tag to find late customizations of the `continues_on` algorithm. this makes execution transfers from, say, a GPU to a CPU rather rather impossible to do at `connect` time. (the GPU scheduler in stdexec uses early customization which is why the problem didn't crop up sooner.)

the solution is to recognize that every sender actually has (at least) two domains:
1. the domain of the execution context on which `start` is called on that sender's operation state, and
2. the domain of the execution context on which `set_value` is called on the receiver used to `connect` the sender.

Early customization should use the `set_value` domain of its predecessor. Late customization uses the `start` domain of the sender being `connect`-ed.

for most senders, the `start` and `set_value` domains are the same. but for `continues_on`, `let_value` and (the non-standard) `sequence` algorithms, they can be different.

this PR breaks the `get_domain` query into `get_domain<start_t>` and `get_domain<set_value_t>`, and it plumbs them through each of the sender algorithms.

## Checklist
<!-- TODO: - [ ] I am familiar with the [Contributing Guidelines](). -->
- [x] New or existing tests cover these changes.
- [x] The documentation is up to date with these changes.



Diff:
diff --git a/cudax/include/cuda/experimental/__detail/utility.cuh b/cudax/include/cuda/experimental/__detail/utility.cuh
index cfcdc588374..e0e01309dde 100644
--- a/cudax/include/cuda/experimental/__detail/utility.cuh
+++ b/cudax/include/cuda/experimental/__detail/utility.cuh
@@ -21,12 +21,18 @@
 #  pragma system_header
 #endif // no system header
 
+#include <cuda/std/__type_traits/type_list.h>
 #include <cuda/std/__utility/declval.h>
 
 #include <cuda/std/__cccl/prologue.h>
 
 namespace cuda::experimental
 {
+// NOLINTBEGIN(misc-unused-using-decls)
+using _CUDA_VSTD::__undefined;
+using _CUDA_VSTD::declval;
+// NOLINTEND(misc-unused-using-decls)
+
 namespace detail
 {
 // This is a helper type that can be used to ignore function arguments.
@@ -62,8 +68,6 @@ inline constexpr bool __is_specialization_of<_Template<_Args...>, _Template> = t
 template <class _Tp>
 using __identity_t _CCCL_NODEBUG_ALIAS = _Tp;
 
-using _CUDA_VSTD::declval;
-
 struct no_init_t
 {
   explicit no_init_t() = default;
diff --git a/cudax/include/cuda/experimental/__execution/completion_signatures.cuh b/cudax/include/cuda/experimental/__execution/completion_signatures.cuh
index 9b5de1ced6d..fc1a729d2f1 100644
--- a/cudax/include/cuda/experimental/__execution/completion_signatures.cuh
+++ b/cudax/include/cuda/experimental/__execution/completion_signatures.cuh
@@ -471,7 +471,7 @@ template <class _Sndr, class... _Env>
   {
     // Apply a lazy sender transform if one exists before computing the completion signatures:
     using _NewSndr _CCCL_NODEBUG_ALIAS =
-      _CUDA_VSTD::__call_result_t<transform_sender_t, domain_for_t<_Sndr, _Env...>, _Sndr, _Env...>;
+      _CUDA_VSTD::__call_result_t<transform_sender_t, __late_domain_of_t<_Sndr, _Env...>, _Sndr, _Env...>;
     return __get_completion_signatures_helper<_NewSndr, _Env...>();
   }
 }
diff --git a/cudax/include/cuda/experimental/__execution/conditional.cuh b/cudax/include/cuda/experimental/__execution/conditional.cuh
index e3ff5d781e2..1ed34b2416d 100644
--- a/cudax/include/cuda/experimental/__execution/conditional.cuh
+++ b/cudax/include/cuda/experimental/__execution/conditional.cuh
@@ -243,7 +243,7 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT conditional_t::__closure
   template <class _Sndr>
   _CCCL_TRIVIAL_API auto __mk_sender(_Sndr&& __sndr) -> __sndr_t<__closure, _Sndr>
   {
-    using __dom_t _CCCL_NODEBUG_ALIAS = domain_for_t<_Sndr>;
+    using __dom_t _CCCL_NODEBUG_ALIAS = __early_domain_of_t<_Sndr>;
     // If the incoming sender is non-dependent, we can check the completion signatures of
     // the composed sender immediately.
     if constexpr (!dependent_sender<_Sndr>)
@@ -270,7 +270,7 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT conditional_t::__closure
 template <class _Sndr, class _Pred, class _Then, class _Else>
 _CCCL_TRIVIAL_API constexpr auto conditional_t::operator()(_Sndr __sndr, _Pred __pred, _Then __then, _Else __else) const
 {
-  using __dom_t _CCCL_NODEBUG_ALIAS    = domain_for_t<_Sndr>;
+  using __dom_t _CCCL_NODEBUG_ALIAS    = __early_domain_of_t<_Sndr>;
   using __params_t _CCCL_NODEBUG_ALIAS = __closure<_Pred, _Then, _Else>;
   __params_t __params{static_cast<_Pred&&>(__pred), static_cast<_Then&&>(__then), static_cast<_Else&&>(__else)};
   return static_cast<__params_t&&>(__params).__mk_sender(static_cast<_Sndr&&>(__sndr));
diff --git a/cudax/include/cuda/experimental/__execution/continues_on.cuh b/cudax/include/cuda/experimental/__execution/continues_on.cuh
index 279ade5a6eb..396fd744196 100644
--- a/cudax/include/cuda/experimental/__execution/continues_on.cuh
+++ b/cudax/include/cuda/experimental/__execution/continues_on.cuh
@@ -68,7 +68,7 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT continues_on_t
     static_assert(__is_sender<_Sndr>);
     static_assert(__is_scheduler<_Sch>);
     // continues_on always dispatches based on the domain of the predecessor sender
-    using __dom_t _CCCL_NODEBUG_ALIAS = domain_for_t<_Sndr>;
+    using __dom_t _CCCL_NODEBUG_ALIAS = __early_domain_of_t<_Sndr>;
     return execution::transform_sender(__dom_t{}, __sndr_t<_Sndr, _Sch>{{{}, __sch, static_cast<_Sndr&&>(__sndr)}});
   }
 
diff --git a/cudax/include/cuda/experimental/__execution/cpos.cuh b/cudax/include/cuda/experimental/__execution/cpos.cuh
index d7d276026fb..224c29b624a 100644
--- a/cudax/include/cuda/experimental/__execution/cpos.cuh
+++ b/cudax/include/cuda/experimental/__execution/cpos.cuh
@@ -107,7 +107,7 @@ struct start_t
 struct connect_t
 {
   _CCCL_EXEC_CHECK_DISABLE
-  template <class _Sndr, class _Rcvr, class _Domain = domain_for_t<_Sndr, env_of_t<_Rcvr>>>
+  template <class _Sndr, class _Rcvr, class _Domain = __late_domain_of_t<_Sndr, env_of_t<_Rcvr>>>
   _CCCL_TRIVIAL_API static constexpr auto __do_transform(_Sndr&& __sndr, _Rcvr __rcvr) noexcept(
     noexcept(transform_sender(_Domain{}, declval<_Sndr>(), get_env(__rcvr)))) -> decltype(auto)
   {
diff --git a/cudax/include/cuda/experimental/__execution/domain.cuh b/cudax/include/cuda/experimental/__execution/domain.cuh
index 7643fe7849b..fdad5813e03 100644
--- a/cudax/include/cuda/experimental/__execution/domain.cuh
+++ b/cudax/include/cuda/experimental/__execution/domain.cuh
@@ -23,6 +23,7 @@
 
 #include <cuda/std/__execution/env.h>
 #include <cuda/std/__type_traits/is_nothrow_move_constructible.h>
+#include <cuda/std/__type_traits/type_list.h>
 
 #include <cuda/experimental/__detail/utility.cuh>
 #include <cuda/experimental/__execution/fwd.cuh>
@@ -107,46 +108,130 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT default_domain
   }
 };
 
+//////////////////////////////////////////////////////////////////////////////////////////
+// get_domain
+template <class _Tag>
+extern __undefined<_Tag> get_domain;
+
+// Used to query a sender's attributes for the domain on which `start` will be called,
+// if it knows. Also used to query a receiver's environment for the "current" domain,
+// if it knows.
+template <>
+struct get_domain_t<start_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<start_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<start_t>>{};
+    }
+    else
+    {
+      return default_domain{};
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template weirdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_domain_t<start_t> get_domain<start_t>{};
+
+// For querying a sender's attributes for the domain on which `set_value` will be called,
+// if it knows.
+template <>
+struct get_domain_t<set_value_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<set_value_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<set_value_t>>{};
+    }
+    else
+    {
+      // As a default, senders complete on the domain they start on
+      return get_domain<start_t>(__env);
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template weirdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_domain_t<set_value_t> get_domain<set_value_t>{};
+
 namespace __detail
 {
-// This function is used to determine the domain associated with a sender and
-// (optionally), an environment. It uses clues from the sender and environment to deduce
-// where the sender will execute (on what scheduler), and what the domain of that
-// scheduler is. It proceeds as follows:
-// 1. If the sender attributes has a domain, return it.
-// 2. Otherwise, if the sender has a completion scheduler, return its domain if any.
-// 3. Otherwise, if an environment is provided:
-//   - If the environment has a domain, return it.
-//   - If the environment has a scheduler, return its domain if any.
-// 4. Otherwise, return the default domain.
-template <class _GetScheduler, class _Env1, class _Env2 = _CUDA_STD_EXEC::prop<get_domain_t, default_domain>>
-_CCCL_TRIVIAL_API constexpr auto __domain_for() noexcept
+template <class _Env, class _GetScheduler, class _Tag>
+_CCCL_TRIVIAL_API _CCCL_CONSTEVAL auto __get_domain_impl() noexcept
 {
-  if constexpr (__queryable_with<_Env1, get_domain_t>)
+  if constexpr (__queryable_with<_Env, get_domain_t<_Tag>>)
   {
-    return __query_result_t<_Env1, get_domain_t>{};
+    return __query_result_t<_Env, get_domain_t<_Tag>>{};
   }
-  else if constexpr (__queryable_with<_Env1, _GetScheduler>)
+  else if constexpr (__queryable_with<_Env, _GetScheduler>)
   {
-    if constexpr (__queryable_with<__query_result_t<_Env1, _GetScheduler>, get_domain_t>)
+    if constexpr (__queryable_with<__query_result_t<_Env, _GetScheduler>, get_domain_t<_Tag>>)
     {
-      return __query_result_t<__query_result_t<_Env1, _GetScheduler>, get_domain_t>{};
+      return __query_result_t<__query_result_t<_Env, _GetScheduler>, get_domain_t<_Tag>>{};
     }
     else
     {
-      return __domain_for<get_scheduler_t, _Env2>();
+      return default_domain{};
     }
   }
   else
   {
-    return __domain_for<get_scheduler_t, _Env2>();
+    return default_domain{};
+  }
+  _CCCL_UNREACHABLE();
+}
+
+template <class _Sndr>
+_CCCL_TRIVIAL_API constexpr auto __get_domain_early() noexcept
+{
+  static_assert(!__sender_for<_Sndr, schedule_from_t>);
+  return __detail::__get_domain_impl<env_of_t<_Sndr>, get_completion_scheduler_t<set_value_t>, set_value_t>();
+}
+
+template <class _Sndr, class _Env>
+_CCCL_TRIVIAL_API constexpr auto __get_domain_late() noexcept
+{
+  if constexpr (__sender_for<_Sndr, schedule_from_t>)
+  {
+    // schedule_from always dispatches based on the domain of the scheduler
+    return __query_result_t<env_of_t<_Sndr>, get_domain_t<set_value_t>>{};
+  }
+  else if constexpr (__queryable_with<env_of_t<_Sndr>, get_domain_t<start_t>>)
+  {
+    return __query_result_t<env_of_t<_Sndr>, get_domain_t<start_t>>{};
+  }
+  else
+  {
+    return __detail::__get_domain_impl<_Env, get_scheduler_t, start_t>();
   }
 }
+
 } // namespace __detail
 
+template <class... _Ts>
+using __early_domain_of_t _CCCL_NODEBUG_ALIAS = decltype(__detail::__get_domain_early<_Ts...>());
+
+template <class... _Ts>
+using __late_domain_of_t _CCCL_NODEBUG_ALIAS = decltype(__detail::__get_domain_late<_Ts...>());
+
 template <class _Sndr, class... _Env>
-using domain_for_t _CCCL_NODEBUG_ALIAS =
-  decltype(__detail::__domain_for<get_completion_scheduler_t<set_value_t>, env_of_t<_Sndr>, _Env...>());
+using __domain_of_t _CCCL_NODEBUG_ALIAS =
+  _CUDA_VSTD::__type_call<_CUDA_VSTD::_If<sizeof...(_Env) == 0,
+                                          _CUDA_VSTD::__type_quote<__early_domain_of_t>,
+                                          _CUDA_VSTD::__type_quote<__late_domain_of_t>>,
+                          _Sndr,
+                          _Env...>;
 
 } // namespace cuda::experimental::execution
 
diff --git a/cudax/include/cuda/experimental/__execution/fwd.cuh b/cudax/include/cuda/experimental/__execution/fwd.cuh
index fd6c39637ee..213c80585d6 100644
--- a/cudax/include/cuda/experimental/__execution/fwd.cuh
+++ b/cudax/include/cuda/experimental/__execution/fwd.cuh
@@ -21,6 +21,8 @@
 #  pragma system_header
 #endif // no system header
 
+#include <cuda/std/__concepts/concept_macros.h>
+#include <cuda/std/__concepts/same_as.h>
 #include <cuda/std/__tuple_dir/ignore.h>
 #include <cuda/std/__type_traits/remove_reference.h>
 #include <cuda/std/__type_traits/type_list.h>
@@ -145,9 +147,10 @@ struct get_allocator_t;
 struct get_stop_token_t;
 struct get_scheduler_t;
 struct get_delegation_scheduler_t;
+struct get_forward_progress_guarantee_t;
 template <class _Tag>
 struct get_completion_scheduler_t;
-struct get_forward_progress_guarantee_t;
+template <class _Tag>
 struct get_domain_t;
 
 namespace __detail
@@ -167,6 +170,9 @@ template <class _Sndr>
 using tag_of_t _CCCL_NODEBUG_ALIAS =
   decltype(visit(declval<__detail::__get_tag&>(), declval<_Sndr>(), declval<int&>()));
 
+template <class _Sndr, class _Tag>
+_CCCL_CONCEPT __sender_for = _CCCL_REQUIRES_EXPR((_Sndr, _Tag))(_Same_as(_Tag) tag_of_t<_Sndr>{});
+
 namespace __detail
 {
 template <__disposition_t, class _Void = void>
diff --git a/cudax/include/cuda/experimental/__execution/let_value.cuh b/cudax/include/cuda/experimental/__execution/let_value.cuh
index 4460ede0244..3b1694031f7 100644
--- a/cudax/include/cuda/experimental/__execution/let_value.cuh
+++ b/cudax/include/cuda/experimental/__execution/let_value.cuh
@@ -227,9 +227,9 @@ private:
     {
       using __result_t _CCCL_NODEBUG_ALIAS = _CUDA_VSTD::__call_result_t<_Fn, _CUDA_VSTD::decay_t<_Ts>&...>;
       // ask the result sender if it knows where it will complete:
-      if constexpr (__queryable_with<env_of_t<__result_t>, get_domain_t>)
+      if constexpr (__queryable_with<env_of_t<__result_t>, get_domain_t<set_value_t>>)
       {
-        return __query_result_t<env_of_t<__result_t>, get_domain_t>{};
+        return __query_result_t<env_of_t<__result_t>, get_domain_t<set_value_t>>{};
       }
       else
       {
@@ -261,11 +261,11 @@ private:
     using __completions = completion_signatures_of_t<_Sndr>;
     if constexpr (__valid_completion_signatures<__completions>)
     {
-      return __completions{}.select(_SetTag()).transform_reduce(__domain_transform_fn<_Fn>{}, __domain_reduce_fn{});
+      return __completions{}.select(_SetTag{}).transform_reduce(__domain_transform_fn<_Fn>{}, __domain_reduce_fn{});
     }
     else
     {
-      return __nil();
+      return __nil{};
     }
   }
 
@@ -301,16 +301,26 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT __let_t<_Disposition>::__sndr_t
     template <class _SetTag>
     _CCCL_API auto query(get_completion_scheduler_t<_SetTag>) const = delete;
 
+    // Returns the domain on which the let sender will start:
+    _CCCL_TEMPLATE(class _Env = env_of_t<_Sndr>)
+    _CCCL_REQUIRES(__queryable_with<_Env, get_domain_t<start_t>>)
+    [[nodiscard]] _CCCL_API static constexpr auto query(get_domain_t<start_t>) noexcept
+      -> __query_result_t<_Env, get_domain_t<start_t>>
+    {
+      return {};
+    }
+
     // Returns the domain on which the let sender will complete:
     _CCCL_TEMPLATE(class _Sndr2 = _Sndr)
     _CCCL_REQUIRES((!_CUDA_VSTD::same_as<__completion_domain_of_t<_Sndr2, _Fn>, __nil>) )
-    [[nodiscard]] _CCCL_API static constexpr auto query(get_domain_t) noexcept -> __completion_domain_of_t<_Sndr2, _Fn>
+    [[nodiscard]] _CCCL_API static constexpr auto query(get_domain_t<set_value_t>) noexcept
+      -> __completion_domain_of_t<_Sndr2, _Fn>
     {
       return {};
     }
 
     _CCCL_TEMPLATE(class _Query)
-    _CCCL_REQUIRES(__forwarding_query<_Query> _CCCL_AND(!_CUDA_VSTD::same_as<_Query, get_domain_t>)
+    _CCCL_REQUIRES(__forwarding_query<_Query> _CCCL_AND(!detail::__is_specialization_of<_Query, get_domain_t>)
                      _CCCL_AND __queryable_with<env_of_t<_Sndr>, _Query>)
     [[nodiscard]] _CCCL_API auto query(_Query) const noexcept(__nothrow_queryable_with<env_of_t<_Sndr>, _Query>)
       -> __query_result_t<env_of_t<_Sndr>, _Query>
@@ -395,13 +405,13 @@ template <__disposition_t _Disposition>
 template <class _Sndr, class _Fn>
 _CCCL_TRIVIAL_API constexpr auto __let_t<_Disposition>::operator()(_Sndr __sndr, _Fn __fn) const
 {
-  using __dom_t _CCCL_NODEBUG_ALIAS = domain_for_t<_Sndr>;
   // If the incoming sender is non-dependent, we can check the completion signatures of
   // the composed sender immediately.
   if constexpr (!dependent_sender<_Sndr>)
   {
     __assert_valid_completion_signatures(get_completion_signatures<__sndr_t<_Sndr, _Fn>>());
   }
+  using __dom_t _CCCL_NODEBUG_ALIAS = __early_domain_of_t<_Sndr>;
   return transform_sender(__dom_t{}, __sndr_t<_Sndr, _Fn>{{}, static_cast<_Fn&&>(__fn), static_cast<_Sndr&&>(__sndr)});
 }
 
diff --git a/cudax/include/cuda/experimental/__execution/queries.cuh b/cudax/include/cuda/experimental/__execution/queries.cuh
index 3b12021bada..15646ab157f 100644
--- a/cudax/include/cuda/experimental/__execution/queries.cuh
+++ b/cudax/include/cuda/experimental/__execution/queries.cuh
@@ -41,10 +41,12 @@ _CCCL_SUPPRESS_DEPRECATED_POP
 
 namespace cuda::experimental::execution
 {
+// NOLINTBEGIN(misc-unused-using-decls)
 using _CUDA_STD_EXEC::__forwarding_query;
 using _CUDA_STD_EXEC::__queryable_with;
 using _CUDA_STD_EXEC::forwarding_query;
 using _CUDA_STD_EXEC::forwarding_query_t;
+// NOLINTEND(misc-unused-using-decls)
 
 //////////////////////////////////////////////////////////////////////////////////////////
 // get_allocator
@@ -121,7 +123,15 @@ struct get_completion_scheduler_t
 };
 
 template <class _Tag>
-_CCCL_GLOBAL_CONSTANT get_completion_scheduler_t<_Tag> get_completion_scheduler{};
+extern __undefined<_Tag> get_completion_scheduler;
+
+// Explicitly instantiate these because of variable template weirdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_completion_scheduler_t<set_value_t> get_completion_scheduler<set_value_t>{};
+template <>
+_CCCL_GLOBAL_CONSTANT get_completion_scheduler_t<set_error_t> get_completion_scheduler<set_error_t>{};
+template <>
+_CCCL_GLOBAL_CONSTANT get_completion_scheduler_t<set_stopped_t> get_completion_scheduler<set_stopped_t>{};
 
 template <class _Env, class _Tag = set_value_t>
 using __completion_scheduler_of_t _CCCL_NODEBUG_ALIAS =
@@ -198,29 +208,6 @@ _CCCL_GLOBAL_CONSTANT struct get_forward_progress_guarantee_t
   }
 } get_forward_progress_guarantee{};
 
-//////////////////////////////////////////////////////////////////////////////////////////
-// get_domain
-_CCCL_GLOBAL_CONSTANT struct get_domain_t
-{
-  _CCCL_EXEC_CHECK_DISABLE
-  template <class _Env>
-  [[nodiscard]] _CCCL_API constexpr auto operator()(const _Env& __env) const noexcept
-  {
-    if constexpr (__queryable_with<_Env, get_domain_t>)
-    {
-      static_assert(noexcept(__env.query(*this)));
-      return __env.query(*this);
-    }
-    else
-    {
-      return default_domain{};
-    }
-  }
-} get_domain{};
-
-template <class _Env>
-using __domain_of_t _CCCL_NODEBUG_ALIAS = __call_result_t<get_domain_t, _Env>;
-
 } // namespace cuda::experimental::execution
 
 #include <cuda/experimental/__execution/epilogue.cuh>
diff --git a/cudax/include/cuda/experimental/__execution/rcvr_ref.cuh b/cudax/include/cuda/experimental/__execution/rcvr_ref.cuh
index cf27a8199b1..d928836b560 100644
--- a/cudax/include/cuda/experimental/__execution/rcvr_ref.cuh
+++ b/cudax/include/cuda/experimental/__execution/rcvr_ref.cuh
@@ -31,6 +31,8 @@
 
 #include <cuda/experimental/__execution/prologue.cuh>
 
+_CCCL_NV_DIAG_SUPPRESS(114) // function "foo" was referenced but not defined
+
 namespace cuda::experimental::execution
 {
 template <class _Rcvr, class _Env = env_of_t<_Rcvr>>
@@ -126,10 +128,12 @@ template <class _Env = void, class _Rcvr>
 }
 
 template <class _Rcvr, class _Env = env_of_t<_Rcvr>>
-using __rcvr_ref_t _CCCL_NODEBUG_ALIAS = decltype(execution::__ref_rcvr<_Env>(declval<_Rcvr&>()));
+using __rcvr_ref_t _CCCL_NODEBUG_ALIAS = decltype(::cuda::experimental::execution::__ref_rcvr<_Env>(declval<_Rcvr&>()));
 
 } // namespace cuda::experimental::execution
 
+_CCCL_NV_DIAG_DEFAULT(114) // function "foo" was references but not defined
+
 #include <cuda/experimental/__execution/epilogue.cuh>
 
 #endif // __CUDAX_ASYNC_DETAIL_RCVR_REF
diff --git a/cudax/include/cuda/experimental/__execution/schedule_from.cuh b/cudax/include/cuda/experimental/__execution/schedule_from.cuh
index b6f2f9d93fa..94d81e0d6d1 100644
--- a/cudax/include/cuda/experimental/__execution/schedule_from.cuh
+++ b/cudax/include/cuda/experimental/__execution/schedule_from.cuh
@@ -84,16 +84,26 @@ struct __transfer_sndr_t
       return __self_->__sch_;
     }
 
+    // Returns the domain on which the schedule_from/continues_on sender will start:
+    _CCCL_TEMPLATE(class _Env = env_of_t<_Sndr>)
+    _CCCL_REQUIRES(__queryable_with<_Env, get_domain_t<start_t>>)
+    [[nodiscard]] _CCCL_API static constexpr auto query(get_domain_t<start_t>) noexcept
+      -> __query_result_t<_Env, get_domain_t<start_t>>
+    {
+      return {};
+    }
+
     // Returns the domain on which the schedule_from/continues_on sender will complete:
-    [[nodiscard]] _CCCL_API static constexpr auto query(get_domain_t) noexcept
+    [[nodiscard]] _CCCL_API static constexpr auto query(get_domain_t<set_value_t>) noexcept
     {
-      return _CUDA_VSTD::__call_result_t<get_domain_t, _Sch>{};
+      return _CUDA_VSTD::__call_result_t<get_domain_t<set_value_t>, _Sch>();
     }
 
     _CCCL_TEMPLATE(class _Query)
-    _CCCL_REQUIRES(__forwarding_query<_Query> _CCCL_AND __queryable_with<env_of_t<_Sndr>, _Query>)
-    [[nodiscard]] _CCCL_API auto query(_Query) const noexcept(__nothrow_queryable_with<env_of_t<_Sndr>, _Query>)
-      -> __query_result_t<env_of_t<_Sndr>, _Query>
+    _CCCL_REQUIRES(__forwarding_query<_Query> _CCCL_AND(!detail::__is_specialization_of<_Query, get_domain_t>)
+                     _CCCL_AND __queryable_with<env_of_t<_Sndr>, _Query>)
+    [[nodiscard]] _CCCL_API constexpr auto query(_Query) const
+      noexcept(__nothrow_queryable_with<env_of_t<_Sndr>, _Query>) -> __query_result_t<env_of_t<_Sndr>, _Query>
     {
       return execution::get_env(__self_->__sndr_).query(_Query{});
     }
@@ -284,7 +294,8 @@ public:
     static_assert(__is_sender<_Sndr>);
     static_assert(__is_scheduler<_Sch>);
     // schedule_from always dispatches based on the domain of the scheduler
-    return transform_sender(get_domain(__sch), __sndr_t<_Sndr, _Sch>{{{}, __sch, static_cast<_Sndr&&>(__sndr)}});
+    return transform_sender(get_domain<set_value_t>(__sch),
+                            __sndr_t<_Sndr, _Sch>{{{}, __sch, static_cast<_Sndr&&>(__sndr)}});
   }
 };
 
diff --git a/cudax/include/cuda/experimental/__execution/sequence.cuh b/cudax/include/cuda/experimental/__execution/sequence.cuh
index 3a73631caeb..61623638760 100644
--- a/cudax/include/cuda/experimental/__execution/sequence.cuh
+++ b/cudax/include/cuda/experimental/__execution/sequence.cuh
@@ -158,7 +158,7 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT sequence_t::__sndr_t
 template <class _Sndr1, class _Sndr2>
 _CCCL_TRIVIAL_API constexpr auto sequence_t::operator()(_Sndr1 __sndr1, _Sndr2 __sndr2) const
 {
-  using __dom_t _CCCL_NODEBUG_ALIAS  = domain_for_t<_Sndr1>;
+  using __dom_t _CCCL_NODEBUG_ALIAS  = __early_domain_of_t<_Sndr1>;
   using __sndr_t _CCCL_NODEBUG_ALIAS = sequence_t::__sndr_t<_Sndr1, _Sndr2>;
   return transform_sender(__dom_t{}, __sndr_t{{}, {}, static_cast<_Sndr1&&>(__sndr1), static_cast<_Sndr2&&>(__sndr2)});
 }
diff --git a/cudax/include/cuda/experimental/__execution/start_detached.cuh b/cudax/include/cuda/experimental/__execution/start_detached.cuh
index cc556c12b12..1996bee49ec 100644
--- a/cudax/include/cuda/experimental/__execution/start_detached.cuh
+++ b/cudax/include/cuda/experimental/__execution/start_detached.cuh
@@ -98,7 +98,7 @@ public:
   template <class _Sndr>
   _CCCL_TRIVIAL_API void operator()(_Sndr __sndr) const
   {
-    using __dom_t _CCCL_NODEBUG_ALIAS = domain_for_t<_Sndr>;
+    using __dom_t _CCCL_NODEBUG_ALIAS = __early_domain_of_t<_Sndr>;
     execution::apply_sender(__dom_t{}, *this, static_cast<_Sndr&&>(__sndr));
   }
 };
diff --git a/cudax/include/cuda/experimental/__execution/starts_on.cuh b/cudax/include/cuda/experimental/__execution/starts_on.cuh
index 62447a8ffd7..a16a755560e 100644
--- a/cudax/include/cuda/experimental/__execution/starts_on.cuh
+++ b/cudax/include/cuda/experimental/__execution/starts_on.cuh
@@ -143,9 +143,9 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT starts_on_t::__sndr_t
 template <class _Sch, class _Sndr>
 _CCCL_TRIVIAL_API constexpr auto starts_on_t::operator()(_Sch __sch, _Sndr __sndr) const
 {
-  using __dom_t _CCCL_NODEBUG_ALIAS  = __domain_of_t<_Sch>; // see [exec.starts.on]
   using __sndr_t _CCCL_NODEBUG_ALIAS = starts_on_t::__sndr_t<_Sch, _Sndr>;
-  return transform_sender(__dom_t{}, __sndr_t{{}, static_cast<_Sch&&>(__sch), static_cast<_Sndr&&>(__sndr)});
+  return transform_sender(get_domain<set_value_t>(__sch),
+                          __sndr_t{{}, static_cast<_Sch&&>(__sch), static_cast<_Sndr&&>(__sndr)});
 }
 
 template <class _Sch, class _Sndr>
diff --git a/cudax/include/cuda/experimental/__execution/sync_wait.cuh b/cudax/include/cuda/experimental/__execution/sync_wait.cuh
index 7ace91f2b2f..4ed451acbaf 100644
--- a/cudax/include/cuda/experimental/__execution/sync_wait.cuh
+++ b/cudax/include/cuda/experimental/__execution/sync_wait.cuh
@@ -255,14 +255,14 @@ public:
   template <class _Sndr, class _Env>
   _CCCL_HOST_API auto operator()(_Sndr&& __sndr, _Env&& __env) const
   {
-    using __dom_t = domain_for_t<_Sndr, __env_t<_Env>>;
+    using __dom_t = __late_domain_of_t<_Sndr, __env_t<_Env>>;
     return execution::apply_sender(__dom_t{}, *this, static_cast<_Sndr&&>(__sndr), static_cast<_Env&&>(__env));
   }
 
   template <class _Sndr, class... _Env>
   _CCCL_HOST_API auto operator()(_Sndr&& __sndr) const
   {
-    using __dom_t = domain_for_t<_Sndr, __env_t<env<>>>;
+    using __dom_t = __late_domain_of_t<_Sndr, __env_t<env<>>>;
     return execution::apply_sender(__dom_t{}, *this, static_cast<_Sndr&&>(__sndr));
   }
 };
diff --git a/cudax/include/cuda/experimental/__execution/then.cuh b/cudax/include/cuda/experimental/__execution/then.cuh
index 1784394feeb..c3dfe1081bb 100644
--- a/cudax/include/cuda/experimental/__execution/then.cuh
+++ b/cudax/include/cuda/experimental/__execution/then.cuh
@@ -307,7 +307,7 @@ template <__disposition_t _Disposition>
 template <class _Sndr, class _Fn>
 _CCCL_TRIVIAL_API constexpr auto __upon_t<_Disposition>::operator()(_Sndr __sndr, _Fn __fn) const
 {
-  using __dom_t _CCCL_NODEBUG_ALIAS = domain_for_t<_Sndr>;
+  using __dom_t _CCCL_NODEBUG_ALIAS = __early_domain_of_t<_Sndr>;
   // If the incoming sender is non-dependent, we can check the completion
   // signatures of the composed sender immediately.
   if constexpr (!dependent_sender<_Sndr>)
diff --git a/cudax/include/cuda/experimental/__execution/transform_sender.cuh b/cudax/include/cuda/experimental/__execution/transform_sender.cuh
index 91a6a9ca090..d9670df8a89 100644
--- a/cudax/include/cuda/experimental/__execution/transform_sender.cuh
+++ b/cudax/include/cuda/experimental/__execution/transform_sender.cuh
@@ -66,7 +66,8 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT transform_sender_t
     }
     else
     {
-      using __dom2_t _CCCL_NODEBUG_ALIAS = __transform_domain_t<domain_for_t<__result_t, _Env...>, __result_t, _Env...>;
+      using __dom2_t _CCCL_NODEBUG_ALIAS =
+        __transform_domain_t<__domain_of_t<__result_t, _Env...>, __result_t, _Env...>;
       using __result2_t _CCCL_NODEBUG_ALIAS = __transform_sender_result_t<__dom2_t, __result_t, _Env...>;
 
       if constexpr (_CUDA_VSTD::_IsSame<__result2_t&&, __result_t&&>::value)
@@ -113,7 +114,7 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT transform_sender_t
   {
     using __dom1_t _CCCL_NODEBUG_ALIAS    = __transform_domain_t<_Domain, _Sndr, _Env...>;
     using __result1_t _CCCL_NODEBUG_ALIAS = __transform_sender_result_t<__dom1_t, _Sndr, _Env...>;
-    using __dom2_t _CCCL_NODEBUG_ALIAS    = __transform_domain_t<domain_for_t<__result1_t>, __result1_t, _Env...>;
+    using __dom2_t _CCCL_NODEBUG_ALIAS = __transform_domain_t<__early_domain_of_t<__result1_t>, __result1_t, _Env...>;
     return (*this)(__dom2_t{}, __dom1_t{}.transform_sender(static_cast<_Sndr&&>(__sndr), __env...), __env...);
   }
 };
@@ -122,7 +123,7 @@ _CCCL_GLOBAL_CONSTANT transform_sender_t transform_sender{};
 
 template <class _Sndr, class... _Env>
 _CCCL_CONCEPT __has_sender_transform =
-  transform_sender_t::__get_transform_strategy<transform_sender_t, domain_for_t<_Sndr, _Env...>, _Sndr, _Env...>()
+  transform_sender_t::__get_transform_strategy<transform_sender_t, __domain_of_t<_Sndr, _Env...>, _Sndr, _Env...>()
     .__strategy_
   != transform_sender_t::__strategy::__passthru;
 
diff --git a/cudax/include/cuda/experimental/__execution/when_all.cuh b/cudax/include/cuda/experimental/__execution/when_all.cuh
index 2d3f1e4cc97..9944f7f19b6 100644
--- a/cudax/include/cuda/experimental/__execution/when_all.cuh
+++ b/cudax/include/cuda/experimental/__execution/when_all.cuh
@@ -488,12 +488,12 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT when_all_t::__sndr_t : _CUDA_VSTD::__tuple<
   {
     if constexpr (sizeof...(_Sndrs) == 0)
     {
-      return prop{get_domain, default_domain{}};
+      return prop{get_domain<start_t>, default_domain{}};
     }
     else
     {
-      using __dom_t _CCCL_NODEBUG_ALIAS = _CUDA_VSTD::common_type_t<domain_for_t<_Sndrs>...>;
-      return prop{get_domain, __dom_t{}};
+      using __dom_t _CCCL_NODEBUG_ALIAS = _CUDA_VSTD::common_type_t<__early_domain_of_t<_Sndrs>...>;
+      return prop{get_domain<start_t>, __dom_t{}};
     }
     _CCCL_UNREACHABLE();
   }
@@ -506,14 +506,14 @@ _CCCL_TRIVIAL_API constexpr auto when_all_t::operator()(_Sndrs... __sndrs) const
   {
     return __sndr_t{};
   }
-  else if constexpr (!__type_valid_v<_CUDA_VSTD::common_type_t, domain_for_t<_Sndrs>...>)
+  else if constexpr (!__type_valid_v<_CUDA_VSTD::common_type_t, __early_domain_of_t<_Sndrs>...>)
   {
-    static_assert(__type_valid_v<_CUDA_VSTD::common_type_t, domain_for_t<_Sndrs>...>,
+    static_assert(__type_valid_v<_CUDA_VSTD::common_type_t, __early_domain_of_t<_Sndrs>...>,
                   "when_all: all child senders must have the same domain");
   }
   else
   {
-    using __dom_t _CCCL_NODEBUG_ALIAS = _CUDA_VSTD::common_type_t<domain_for_t<_Sndrs>...>;
+    using __dom_t _CCCL_NODEBUG_ALIAS = _CUDA_VSTD::common_type_t<__early_domain_of_t<_Sndrs>...>;
     // If the incoming senders are non-dependent, we can check the completion
     // signatures of the composed sender immediately.
     if constexpr (((!dependent_sender<_Sndrs>) && ...))
diff --git a/cudax/test/execution/test_let_value.cu b/cudax/test/execution/test_let_value.cu
index f4155f72ff9..587ae7ae39d 100644
--- a/cudax/test/execution/test_let_value.cu
+++ b/cudax/test/execution/test_let_value.cu
@@ -11,10 +11,10 @@
 #include <cuda/experimental/execution.cuh>
 
 #include "common/checked_receiver.cuh"
-#include "common/error_scheduler.cuh"
+#include "common/error_scheduler.cuh" // IWYU pragma: keep
 #include "common/impulse_scheduler.cuh" // IWYU pragma: keep
-#include "common/inline_scheduler.cuh"
-#include "common/stopped_scheduler.cuh"
+#include "common/inline_scheduler.cuh" // IWYU pragma: keep
+#include "common/stopped_scheduler.cuh" // IWYU pragma: keep
 #include "common/utility.cuh"
 #include "testing.cuh" // IWYU pragma: keep
 
@@ -394,10 +394,11 @@ C2H_TEST("let_value keeps sends_stopped from input sender", "[adaptors][let_valu
 C2H_TEST("let_value can be customized", "[adaptors][let_value]")
 {
   // The customization will return a different value
-  auto sndr = ex::just(std::string{"hello"}) | write_attrs(ex::prop{ex::get_domain, let_value_test_domain{}})
-            | ex::let_value([](std::string& x) {
-                return ex::just(x + ", world");
-              });
+  auto sndr =
+    ex::just(std::string{"hello"}) | write_attrs(ex::prop{ex::get_domain<ex::set_value_t>, let_value_test_domain{}})
+    | ex::let_value([](std::string& x) {
+        return ex::just(x + ", world");
+      });
   wait_for_value(std::move(sndr), std::string{"hallo"});
 }
 
@@ -450,11 +451,11 @@ C2H_TEST("let_value can nest", "[adaptors][let_value]")
 
 C2H_TEST("let_value has the correct completion domain", "[adaptors][let_value]")
 {
-  auto attrs = ex::prop{ex::get_domain, let_value_test_domain{}};
+  auto attrs = ex::prop{ex::get_domain<ex::set_value_t>, let_value_test_domain{}};
   auto sndr  = ex::just() | ex::let_value([=] {
                 return write_attrs(ex::just(), attrs);
               });
-  auto dom   = ex::get_domain(ex::get_env(sndr));
+  auto dom   = ex::get_domain<ex::set_value_t>(ex::get_env(sndr));
   static_assert(_CUDA_VSTD::is_same_v<decltype(dom), let_value_test_domain>);
 }
 


Reviews:
user: login: ericniebler
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-22T21:59:38Z
user: login: miscco
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-23T07:39:38Z
user: login: ericniebler
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-23T15:42:54Z

Review comments:
diff_hunk: @@ -107,46 +108,130 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT default_domain
   }
 };
 
+//////////////////////////////////////////////////////////////////////////////////////////
+// get_domain
+template <class _Tag>
+extern __undefined<_Tag> get_domain;
+
+// Used to query a sender's attributes for the domain on which `start` will be called,
+// if it knows. Also used to query a receiver's environment for the "current" domain,
+// if it knows.
+template <>
+struct get_domain_t<start_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<start_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<start_t>>{};
+    }
+    else
+    {
+      return default_domain{};
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template wierdness in device code
path: cudax/include/cuda/experimental/__execution/domain.cuh
user: login: ericniebler
body: ```suggestion
// Explicitly instantiate this because of variable template weirdness in device code
```
created_at: 2025-05-22T21:58:56Z
author_association: CONTRIBUTOR
diff_hunk: @@ -107,46 +108,130 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT default_domain
   }
 };
 
+//////////////////////////////////////////////////////////////////////////////////////////
+// get_domain
+template <class _Tag>
+extern __undefined<_Tag> get_domain;
+
+// Used to query a sender's attributes for the domain on which `start` will be called,
+// if it knows. Also used to query a receiver's environment for the "current" domain,
+// if it knows.
+template <>
+struct get_domain_t<start_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<start_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<start_t>>{};
+    }
+    else
+    {
+      return default_domain{};
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template wierdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_domain_t<start_t> get_domain<start_t>{};
+
+// For querying a sender's attributes for the domain on which `set_[value|error|stopped]`
+// will be called, if it knows.
+template <>
+struct get_domain_t<set_value_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<set_value_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<set_value_t>>{};
+    }
+    else
+    {
+      // As a default, senders complete on the domain they start on
+      return get_domain<start_t>(__env);
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template wierdness in device code
path: cudax/include/cuda/experimental/__execution/domain.cuh
user: login: ericniebler
body: ```suggestion
// Explicitly instantiate this because of variable template weirdness in device code
```
created_at: 2025-05-22T21:59:14Z
author_association: CONTRIBUTOR
diff_hunk: @@ -121,7 +123,15 @@ struct get_completion_scheduler_t
 };
 
 template <class _Tag>
-_CCCL_GLOBAL_CONSTANT get_completion_scheduler_t<_Tag> get_completion_scheduler{};
+extern __undefined<_Tag> get_completion_scheduler;
+
+// Explicitly instantiate these because of variable template wierdness in device code
path: cudax/include/cuda/experimental/__execution/queries.cuh
user: login: ericniebler
body: ```suggestion
// Explicitly instantiate these because of variable template weirdness in device code
```
created_at: 2025-05-22T21:59:32Z
author_association: CONTRIBUTOR
diff_hunk: @@ -107,46 +108,130 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT default_domain
   }
 };
 
+//////////////////////////////////////////////////////////////////////////////////////////
+// get_domain
+template <class _Tag>
+extern __undefined<_Tag> get_domain;
+
+// Used to query a sender's attributes for the domain on which `start` will be called,
+// if it knows. Also used to query a receiver's environment for the "current" domain,
+// if it knows.
+template <>
+struct get_domain_t<start_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<start_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<start_t>>{};
+    }
+    else
+    {
+      return default_domain{};
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template weirdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_domain_t<start_t> get_domain<start_t>{};
path: cudax/include/cuda/experimental/__execution/domain.cuh
user: login: miscco
body: 😿 
created_at: 2025-05-23T07:22:42Z
author_association: CONTRIBUTOR
diff_hunk: @@ -107,46 +108,130 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT default_domain
   }
 };
 
+//////////////////////////////////////////////////////////////////////////////////////////
+// get_domain
+template <class _Tag>
+extern __undefined<_Tag> get_domain;
+
+// Used to query a sender's attributes for the domain on which `start` will be called,
+// if it knows. Also used to query a receiver's environment for the "current" domain,
+// if it knows.
+template <>
+struct get_domain_t<start_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<start_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<start_t>>{};
+    }
+    else
+    {
+      return default_domain{};
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template weirdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_domain_t<start_t> get_domain<start_t>{};
+
+// For querying a sender's attributes for the domain on which `set_[value|error|stopped]`
path: cudax/include/cuda/experimental/__execution/domain.cuh
user: login: miscco
body: Isnt this only applying to `set_value`?
created_at: 2025-05-23T07:23:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -107,46 +108,130 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT default_domain
   }
 };
 
+//////////////////////////////////////////////////////////////////////////////////////////
+// get_domain
+template <class _Tag>
+extern __undefined<_Tag> get_domain;
+
+// Used to query a sender's attributes for the domain on which `start` will be called,
+// if it knows. Also used to query a receiver's environment for the "current" domain,
+// if it knows.
+template <>
+struct get_domain_t<start_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<start_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<start_t>>{};
+    }
+    else
+    {
+      return default_domain{};
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template weirdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_domain_t<start_t> get_domain<start_t>{};
+
+// For querying a sender's attributes for the domain on which `set_[value|error|stopped]`
+// will be called, if it knows.
+template <>
+struct get_domain_t<set_value_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<set_value_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<set_value_t>>{};
+    }
+    else
+    {
+      // As a default, senders complete on the domain they start on
+      return get_domain<start_t>(__env);
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template weirdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_domain_t<set_value_t> get_domain<set_value_t>{};
+
 namespace __detail
 {
-// This function is used to determine the domain associated with a sender and
-// (optionally), an environment. It uses clues from the sender and environment to deduce
-// where the sender will execute (on what scheduler), and what the domain of that
-// scheduler is. It proceeds as follows:
-// 1. If the sender attributes has a domain, return it.
-// 2. Otherwise, if the sender has a completion scheduler, return its domain if any.
-// 3. Otherwise, if an environment is provided:
-//   - If the environment has a domain, return it.
-//   - If the environment has a scheduler, return its domain if any.
-// 4. Otherwise, return the default domain.
-template <class _GetScheduler, class _Env1, class _Env2 = _CUDA_STD_EXEC::prop<get_domain_t, default_domain>>
-_CCCL_TRIVIAL_API constexpr auto __domain_for() noexcept
+template <class _Env, class _GetScheduler, class _Tag>
+_CCCL_TRIVIAL_API constexpr auto __get_domain_impl() noexcept
path: cudax/include/cuda/experimental/__execution/domain.cuh
user: login: miscco
body: Nitpick: Could be `_CCCL_CONSTEVAL`
created_at: 2025-05-23T07:24:14Z
author_association: CONTRIBUTOR
diff_hunk: @@ -21,49 +21,119 @@
 #  pragma system_header
 #endif // no system header
 
+#include <cuda/std/__memory/addressof.h>
+#include <cuda/std/__type_traits/is_nothrow_copy_constructible.h>
+#include <cuda/std/__type_traits/is_same.h>
+
 #include <cuda/experimental/__execution/cpos.cuh>
 #include <cuda/experimental/__execution/env.cuh>
+#include <cuda/experimental/__execution/type_traits.cuh>
 
 #include <cuda/experimental/__execution/prologue.cuh>
 
+_CCCL_NV_DIAG_SUPPRESS(114) // function "foo" was referenced but not defined
+
 namespace cuda::experimental::execution
 {
 template <class _Rcvr, class _Env = env_of_t<_Rcvr>>
 struct _CCCL_TYPE_VISIBILITY_DEFAULT __rcvr_ref
 {
-  using receiver_concept _CCCL_NODEBUG_ALIAS = receiver_t;
-  _Rcvr& __rcvr_;
+  using receiver_concept = receiver_t;
+
+  _CCCL_API explicit constexpr __rcvr_ref(_Rcvr& __rcvr) noexcept
+      : __rcvr_{_CUDA_VSTD::addressof(__rcvr)}
+  {}
 
   _CCCL_EXEC_CHECK_DISABLE
   template <class... _As>
   _CCCL_TRIVIAL_API void set_value(_As&&... __as) noexcept
   {
-    static_cast<_Rcvr&&>(__rcvr_).set_value(static_cast<_As&&>(__as)...);
+    static_cast<_Rcvr&&>(*__rcvr_).set_value(static_cast<_As&&>(__as)...);
   }
 
   _CCCL_EXEC_CHECK_DISABLE
   template <class _Error>
   _CCCL_TRIVIAL_API void set_error(_Error&& __err) noexcept
   {
-    static_cast<_Rcvr&&>(__rcvr_).set_error(static_cast<_Error&&>(__err));
+    static_cast<_Rcvr&&>(*__rcvr_).set_error(static_cast<_Error&&>(__err));
   }
 
   _CCCL_EXEC_CHECK_DISABLE
   _CCCL_TRIVIAL_API void set_stopped() noexcept
   {
-    static_cast<_Rcvr&&>(__rcvr_).set_stopped();
+    static_cast<_Rcvr&&>(*__rcvr_).set_stopped();
   }
 
   _CCCL_API auto get_env() const noexcept -> _Env
   {
-    return execution::get_env(__rcvr_);
+    static_assert(_CUDA_VSTD::is_same_v<_Env, env_of_t<_Rcvr>>,
+                  "get_env() must return the same type as env_of_t<_Rcvr>");
+    return execution::get_env(*__rcvr_);
   }
+
+private:
+  _Rcvr* __rcvr_;
 };
 
+namespace __detail
+{
+template <class _Rcvr, size_t = sizeof(_Rcvr)>
+_CCCL_API constexpr auto __is_type_complete(int) noexcept
+{
+  return true;
+}
 template <class _Rcvr>
-_CCCL_HOST_DEVICE __rcvr_ref(_Rcvr&) -> __rcvr_ref<_Rcvr>;
+_CCCL_API constexpr auto __is_type_complete(long) noexcept
+{
+  return false;
+}
+} // namespace __detail
+
+// The __ref_rcvr function and its helpers are used to avoid wrapping a receiver in a
+// __rcvr_ref when that is possible. The logic goes as follows:
+//
+// 1. If the receiver is an instance of __rcvr_ref, return it.
+// 2. If the type is incomplete or an operation state, return a __rcvr_ref wrapping the
+//    receiver.
+// 3. If the receiver is nothrow copy constructible, return it.
+// 4. Otherwise, return a __rcvr_ref wrapping the receiver.
+template <class _Env = void, class _Rcvr>
+[[nodiscard]] _CCCL_TRIVIAL_API constexpr auto __ref_rcvr(_Rcvr& __rcvr) noexcept
+{
+  if constexpr (_CUDA_VSTD::is_same_v<_Env, void>)
+  {
+    return execution::__ref_rcvr<env_of_t<_Rcvr>>(__rcvr);
path: cudax/include/cuda/experimental/__execution/rcvr_ref.cuh
user: login: miscco
body: nitpick: we should always fully qualify
created_at: 2025-05-23T07:38:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -107,46 +108,130 @@ struct _CCCL_TYPE_VISIBILITY_DEFAULT default_domain
   }
 };
 
+//////////////////////////////////////////////////////////////////////////////////////////
+// get_domain
+template <class _Tag>
+extern __undefined<_Tag> get_domain;
+
+// Used to query a sender's attributes for the domain on which `start` will be called,
+// if it knows. Also used to query a receiver's environment for the "current" domain,
+// if it knows.
+template <>
+struct get_domain_t<start_t>
+{
+  _CCCL_EXEC_CHECK_DISABLE
+  template <class _Env>
+  [[nodiscard]] _CCCL_API constexpr auto operator()([[maybe_unused]] const _Env& __env) const noexcept
+  {
+    if constexpr (__queryable_with<_Env, get_domain_t<start_t>>)
+    {
+      static_assert(noexcept(__env.query(*this)));
+      return __query_result_t<_Env, get_domain_t<start_t>>{};
+    }
+    else
+    {
+      return default_domain{};
+    }
+  }
+};
+
+// Explicitly instantiate this because of variable template weirdness in device code
+template <>
+_CCCL_GLOBAL_CONSTANT get_domain_t<start_t> get_domain<start_t>{};
+
+// For querying a sender's attributes for the domain on which `set_[value|error|stopped]`
path: cudax/include/cuda/experimental/__execution/domain.cuh
user: login: ericniebler
body: Yes I'll fix the comment
created_at: 2025-05-23T15:42:54Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-05-22T03:03:25Z
body: <details><summary>🟨 CI finished in 2h 22m: Pass:  98%/187 | Total:  1d 16h | Avg: 13m 03s | Max:  1h 26m | Hits:  84%/288861</summary>

<ul>
<li>
<details><summary><h3>🟨 cudax: Pass:  92%/26  | Total:  3h 19m | Avg:  7m 40s | Max: 14m 16s | Hits:  80%/14188 </h3></summary>

```
🔍 cpu: amd64 🔍
  🔍 amd64              Pass:  90%/22  | Total:  2h 55m | Avg:  7m 58s | Max: 14m 16s | Hits:  80%/11824 
  🟩 arm64              Pass: 100%/4   | Total: 23m 46s | Avg:  5m 56s | Max:  6m 29s | Hits:  77%/2364  
🚨 cxx_family: MSVC 🚨
  🟩 Clang              Pass: 100%/10  | Total:  1h 04m | Avg:  6m 25s | Max: 10m 15s | Hits:  79%/5914  
  🟩 GCC                Pass: 100%/12  | Total:  1h 23m | Avg:  6m 59s | Max: 12m 06s | Hits:  81%/7096  
  🔥 MSVC               Pass:   0%/2   | Total: 27m 40s | Avg: 13m 50s | Max: 14m 16s
  🟩 NVHPC              Pass: 100%/2   | Total: 23m 36s | Avg: 11m 48s | Max: 12m 02s | Hits:  75%/1178  
🔍 gpu: rtx2080 🔍
  🟩 h100               Pass: 100%/2   | Total: 14m 07s | Avg:  7m 03s | Max:  8m 55s | Hits:  88%/1182  
  🔍 rtx2080            Pass:  91%/24  | Total:  3h 05m | Avg:  7m 43s | Max: 14m 16s | Hits:  79%/13006 
🔍 jobs: Build 🔍
  🔍 Build              Pass:  91%/23  | Total:  2h 48m | Avg:  7m 18s | Max: 14m 16s | Hits:  77%/12415 
  🟩 Test               Pass: 100%/3   | Total: 31m 16s | Avg: 10m 25s | Max: 12m 06s | Hits:  99%/1773  
🔍 std: 20 🔍
  🟩 17                 Pass: 100%/4   | Total: 29m 07s | Avg:  7m 16s | Max: 12m 02s | Hits:  76%/2362  
  🔍 20                 Pass:  90%/22  | Total:  2h 50m | Avg:  7m 44s | Max: 14m 16s | Hits:  80%/11826 
🟨 ctk
  🟨 12.0               Pass:  66%/3   | Total: 24m 23s | Avg:  8m 07s | Max: 13m 24s | Hits:  77%/1186  
  🟩 12.8               Pass: 100%/2   | Total: 23m 36s | Avg: 11m 48s | Max: 12m 02s | Hits:  75%/1178  
  🟨 12.9               Pass:  95%/21  | Total:  2h 31m | Avg:  7m 12s | Max: 14m 16s | Hits:  80%/11824 
🟨 cudacxx
  🟨 nvcc12.0           Pass:  66%/3   | Total: 24m 23s | Avg:  8m 07s | Max: 13m 24s | Hits:  77%/1186  
  🟩 nvcc12.8           Pass: 100%/2   | Total: 23m 36s | Avg: 11m 48s | Max: 12m 02s | Hits:  75%/1178  
  🟨 nvcc12.9           Pass:  95%/21  | Total:  2h 31m | Avg:  7m 12s | Max: 14m 16s | Hits:  80%/11824 
🟨 cxx
  🟩 Clang14            Pass: 100%/2   | Total: 11m 04s | Avg:  5m 32s | Max:  5m 54s | Hits:  77%/1186  
  🟩 Clang15            Pass: 100%/1   | Total:  6m 23s | Avg:  6m 23s | Max:  6m 23s | Hits:  77%/591   
  🟩 Clang16            Pass: 100%/1   | Total:  6m 01s | Avg:  6m 01s | Max:  6m 01s | Hits:  77%/591   
  🟩 Clang17            Pass: 100%/1   | Total:  6m 31s | Avg:  6m 31s | Max:  6m 31s | Hits:  77%/591   
  🟩 Clang18            Pass: 100%/1   | Total:  6m 43s | Avg:  6m 43s | Max:  6m 43s | Hits:  77%/591   
  🟩 Clang19            Pass: 100%/4   | Total: 27m 34s | Avg:  6m 53s | Max: 10m 15s | Hits:  83%/2364  
  🟩 GCC10              Pass: 100%/2   | Total: 12m 19s | Avg:  6m 09s | Max:  6m 30s | Hits:  77%/1186  
  🟩 GCC11              Pass: 100%/1   | Total:  6m 58s | Avg:  6m 58s | Max:  6m 58s | Hits:  77%/591   
  🟩 GCC12              Pass: 100%/1   | Total:  6m 51s | Avg:  6m 51s | Max:  6m 51s | Hits:  77%/591   
  🟩 GCC13              Pass: 100%/8   | Total: 57m 40s | Avg:  7m 12s | Max: 12m 06s | Hits:  82%/4728  
  🟥 MSVC14.39          Pass:   0%/1   | Total: 13m 24s | Avg: 13m 24s | Max: 13m 24s
  🟥 MSVC14.43          Pass:   0%/1   | Total: 14m 16s | Avg: 14m 16s | Max: 14m 16s
  🟩 NVHPC25.3          Pass: 100%/2   | Total: 23m 36s | Avg: 11m 48s | Max: 12m 02s | Hits:  75%/1178  
🟨 cudacxx_family
  🟨 nvcc               Pass:  92%/26  | Total:  3h 19m | Avg:  7m 40s | Max: 14m 16s | Hits:  80%/14188 
🟩 sm
  🟩 90                 Pass: 100%/3   | Total: 19m 31s | Avg:  6m 30s | Max:  8m 55s | Hits:  84%/1773  
  🟩 90a                Pass: 100%/1   | Total:  5m 47s | Avg:  5m 47s | Max:  5m 47s | Hits:  77%/591   
```

</details>

<li>
<details><summary><h3>🟩 cub: Pass: 100%/47  | Total: 12h 09m | Avg: 15m 31s | Max:  1h 02m | Hits:  98%/57406 </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/45  | Total: 11h 54m | Avg: 15m 52s | Max:  1h 02m | Hits:  98%/54908 
  🟩 arm64              Pass: 100%/2   | Total: 15m 14s | Avg:  7m 37s | Max:  8m 39s | Hits:  99%/2498  
🟩 ctk
  🟩 12.0               Pass: 100%/5   | Total: 57m 25s | Avg: 11m 29s | Max: 27m 43s | Hits:  99%/6062  
  🟩 12.8               Pass: 100%/2   | Total: 29m 35s | Avg: 14m 47s | Max: 14m 48s | Hits:  98%/2297  
  🟩 12.9               Pass: 100%/40  | Total: 10h 42m | Avg: 16m 03s | Max:  1h 02m | Hits:  98%/49047 
🟩 cudacxx
  🟩 ClangCUDA19        Pass: 100%/2   | Total: 12m 18s | Avg:  6m 09s | Max:  6m 11s | Hits:  99%/2151  
  🟩 nvcc12.0           Pass: 100%/5   | Total: 57m 25s | Avg: 11m 29s | Max: 27m 43s | Hits:  99%/6062  
  🟩 nvcc12.8           Pass: 100%/2   | Total: 29m 35s | Avg: 14m 47s | Max: 14m 48s | Hits:  98%/2297  
  🟩 nvcc12.9           Pass: 100%/38  | Total: 10h 30m | Avg: 16m 35s | Max:  1h 02m | Hits:  98%/46896 
🟩 cudacxx_family
  🟩 ClangCUDA          Pass: 100%/2   | Total: 12m 18s | Avg:  6m 09s | Max:  6m 11s | Hits:  99%/2151  
  🟩 nvcc               Pass: 100%/45  | Total: 11h 57m | Avg: 15m 56s | Max:  1h 02m | Hits:  98%/55255 
🟩 cxx
  🟩 Clang14            Pass: 100%/4   | Total: 27m 50s | Avg:  6m 57s | Max:  7m 26s | Hits:  99%/4998  
  🟩 Clang15            Pass: 100%/2   | Total: 15m 08s | Avg:  7m 34s | Max:  7m 51s | Hits:  99%/2495  
  🟩 Clang16            Pass: 100%/2   | Total: 14m 18s | Avg:  7m 09s | Max:  7m 10s | Hits:  99%/2495  
  🟩 Clang17            Pass: 100%/2   | Total: 14m 31s | Avg:  7m 15s | Max:  7m 27s | Hits:  99%/2495  
  🟩 Clang18            Pass: 100%/2   | Total: 14m 33s | Avg:  7m 16s | Max:  7m 26s | Hits:  99%/2495  
  🟩 Clang19            Pass: 100%/7   | Total:  1h 27m | Avg: 12m 29s | Max: 27m 13s | Hits:  99%/8390  
  🟩 GCC7               Pass: 100%/2   | Total:  1h 04m | Avg: 32m 27s | Max: 56m 50s | Hits:  84%/2498  
  🟩 GCC8               Pass: 100%/1   | Total:  9m 12s | Avg:  9m 12s | Max:  9m 12s | Hits:  99%/1249  
  🟩 GCC9               Pass: 100%/2   | Total: 17m 27s | Avg:  8m 43s | Max:  8m 56s | Hits:  99%/2498  
  🟩 GCC10              Pass: 100%/2   | Total: 17m 40s | Avg:  8m 50s | Max:  8m 51s | Hits:  99%/2499  
  🟩 GCC11              Pass: 100%/2   | Total:  1h 11m | Avg: 35m 57s | Max:  1h 02m | Hits:  84%/2495  
  🟩 GCC12              Pass: 100%/2   | Total: 18m 31s | Avg:  9m 15s | Max:  9m 16s | Hits:  99%/2495  
  🟩 GCC13              Pass: 100%/11  | Total:  3h 37m | Avg: 19m 45s | Max: 32m 40s | Hits:  99%/13747 
  🟩 MSVC14.29          Pass: 100%/2   | Total: 54m 26s | Avg: 27m 13s | Max: 27m 43s | Hits:  99%/2130  
  🟩 MSVC14.43          Pass: 100%/2   | Total: 54m 50s | Avg: 27m 25s | Max: 27m 32s | Hits:  99%/2130  
  🟩 NVHPC25.3          Pass: 100%/2   | Total: 29m 35s | Avg: 14m 47s | Max: 14m 48s | Hits:  98%/2297  
🟩 cxx_family
  🟩 Clang              Pass: 100%/19  | Total:  2h 53m | Avg:  9m 08s | Max: 27m 13s | Hits:  99%/23368 
  🟩 GCC                Pass: 100%/22  | Total:  6h 56m | Avg: 18m 57s | Max:  1h 02m | Hits:  96%/27481 
  🟩 MSVC               Pass: 100%/4   | Total:  1h 49m | Avg: 27m 19s | Max: 27m 43s | Hits:  99%/4260  
  🟩 NVHPC              Pass: 100%/2   | Total: 29m 35s | Avg: 14m 47s | Max: 14m 48s | Hits:  98%/2297  
🟩 gpu
  🟩 h100               Pass: 100%/3   | Total:  1h 00m | Avg: 20m 15s | Max: 29m 49s | Hits:  99%/3750  
  🟩 rtx2080            Pass: 100%/36  | Total:  7h 58m | Avg: 13m 17s | Max:  1h 02m | Hits:  97%/43662 
  🟩 rtxa6000           Pass: 100%/8   | Total:  3h 10m | Avg: 23m 49s | Max: 32m 40s | Hits:  99%/9994  
🟩 jobs
  🟩 Build              Pass: 100%/39  | Total:  8h 21m | Avg: 12m 51s | Max:  1h 02m | Hits:  98%/47410 
  🟩 DeviceLaunch       Pass: 100%/1   | Total: 32m 40s | Avg: 32m 40s | Max: 32m 40s | Hits:  99%/1250  
  🟩 GraphCapture       Pass: 100%/1   | Total: 26m 07s | Avg: 26m 07s | Max: 26m 07s | Hits:  99%/1250  
  🟩 HostLaunch         Pass: 100%/3   | Total:  1h 29m | Avg: 29m 46s | Max: 32m 17s | Hits:  99%/3748  
  🟩 TestGPU            Pass: 100%/3   | Total:  1h 19m | Avg: 26m 34s | Max: 28m 26s | Hits:  99%/3748  
🟩 sm
  🟩 90                 Pass: 100%/3   | Total:  1h 00m | Avg: 20m 15s | Max: 29m 49s | Hits:  99%/3750  
  🟩 90;90a;100         Pass: 100%/1   | Total:  9m 27s | Avg:  9m 27s | Max:  9m 27s | Hits:  99%/1250  
🟩 std
  🟩 17                 Pass: 100%/21  | Total:  4h 41m | Avg: 13m 23s | Max: 56m 50s | Hits:  98%/25386 
  🟩 20                 Pass: 100%/26  | Total:  7h 28m | Avg: 17m 14s | Max:  1h 02m | Hits:  98%/32020 
```

</details>

<li>
<details><summary><h3>🟩 thrust: Pass: 100%/47  | Total:  8h 31m | Avg: 10m 53s | Max: 34m 31s | Hits:  99%/89096 </h3></summary>

```
🟩 cmake_options
  🟩 -DTHRUST_DISPATCH_TYPE=Force32bit Pass: 100%/2   | Total: 22m 06s | Avg: 11m 03s | Max: 13m 43s | Hits:  99%/3794  
🟩 cpu
  🟩 amd64              Pass: 100%/45  | Total:  8h 18m | Avg: 11m 05s | Max: 34m 31s | Hits:  99%/85303 
  🟩 arm64              Pass: 100%/2   | Total: 12m 44s | Avg:  6m 22s | Max:  7m 03s | Hits:  99%/3793  
🟩 ctk
  🟩 12.0               Pass: 100%/5   | Total: 53m 45s | Avg: 10m 45s | Max: 28m 30s | Hits:  99%/9475  
  🟩 12.8               Pass: 100%/2   | Total: 57m 26s | Avg: 28m 43s | Max: 31m 27s | Hits:  99%/3790  
  🟩 12.9               Pass: 100%/40  | Total:  6h 40m | Avg: 10m 00s | Max: 34m 31s | Hits:  99%/75831 
🟩 cudacxx
  🟩 ClangCUDA19        Pass: 100%/2   | Total: 12m 34s | Avg:  6m 17s | Max:  6m 23s | Hits: 100%/3792  
  🟩 nvcc12.0           Pass: 100%/5   | Total: 53m 45s | Avg: 10m 45s | Max: 28m 30s | Hits:  99%/9475  
  🟩 nvcc12.8           Pass: 100%/2   | Total: 57m 26s | Avg: 28m 43s | Max: 31m 27s | Hits:  99%/3790  
  🟩 nvcc12.9           Pass: 100%/38  | Total:  6h 27m | Avg: 10m 12s | Max: 34m 31s | Hits:  99%/72039 
🟩 cudacxx_family
  🟩 ClangCUDA          Pass: 100%/2   | Total: 12m 34s | Avg:  6m 17s | Max:  6m 23s | Hits: 100%/3792  
  🟩 nvcc               Pass: 100%/45  | Total:  8h 18m | Avg: 11m 05s | Max: 34m 31s | Hits:  99%/85304 
🟩 cxx
  🟩 Clang14            Pass: 100%/4   | Total: 23m 42s | Avg:  5m 55s | Max:  6m 10s | Hits: 100%/7584  
  🟩 Clang15            Pass: 100%/2   | Total: 12m 42s | Avg:  6m 21s | Max:  6m 42s | Hits: 100%/3792  
  🟩 Clang16            Pass: 100%/2   | Total: 13m 05s | Avg:  6m 32s | Max:  6m 43s | Hits: 100%/3792  
  🟩 Clang17            Pass: 100%/2   | Total: 12m 04s | Avg:  6m 02s | Max:  6m 02s | Hits: 100%/3792  
  🟩 Clang18            Pass: 100%/2   | Total: 12m 26s | Avg:  6m 13s | Max:  6m 17s | Hits: 100%/3792  
  🟩 Clang19            Pass: 100%/7   | Total: 50m 45s | Avg:  7m 15s | Max: 10m 55s | Hits: 100%/13272 
  🟩 GCC7               Pass: 100%/2   | Total: 14m 10s | Avg:  7m 05s | Max:  7m 24s | Hits:  99%/3794  
  🟩 GCC8               Pass: 100%/1   | Total:  7m 27s | Avg:  7m 27s | Max:  7m 27s | Hits:  99%/1897  
  🟩 GCC9               Pass: 100%/2   | Total: 14m 28s | Avg:  7m 14s | Max:  7m 32s | Hits:  99%/3794  
  🟩 GCC10              Pass: 100%/2   | Total: 15m 21s | Avg:  7m 40s | Max:  8m 06s | Hits:  99%/3794  
  🟩 GCC11              Pass: 100%/2   | Total: 15m 39s | Avg:  7m 49s | Max:  7m 53s | Hits:  99%/3794  
  🟩 GCC12              Pass: 100%/2   | Total: 15m 59s | Avg:  7m 59s | Max:  8m 12s | Hits:  99%/3794  
  🟩 GCC13              Pass: 100%/10  | Total:  1h 37m | Avg:  9m 46s | Max: 13m 43s | Hits:  99%/18970 
  🟩 MSVC14.29          Pass: 100%/2   | Total: 56m 53s | Avg: 28m 26s | Max: 28m 30s | Hits:  99%/3778  
  🟩 MSVC14.43          Pass: 100%/3   | Total:  1h 31m | Avg: 30m 34s | Max: 34m 31s | Hits:  99%/5667  
  🟩 NVHPC25.3          Pass: 100%/2   | Total: 57m 26s | Avg: 28m 43s | Max: 31m 27s | Hits:  99%/3790  
🟩 cxx_family
  🟩 Clang              Pass: 100%/19  | Total:  2h 04m | Avg:  6m 33s | Max: 10m 55s | Hits: 100%/36024 
  🟩 GCC                Pass: 100%/21  | Total:  3h 00m | Avg:  8m 36s | Max: 13m 43s | Hits:  99%/39837 
  🟩 MSVC               Pass: 100%/5   | Total:  2h 28m | Avg: 29m 43s | Max: 34m 31s | Hits:  99%/9445  
  🟩 NVHPC              Pass: 100%/2   | Total: 57m 26s | Avg: 28m 43s | Max: 31m 27s | Hits:  99%/3790  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 18m 57s | Avg:  9m 28s | Max: 12m 39s | Hits:  99%/3794  
  🟩 rtx2080            Pass: 100%/35  | Total:  5h 48m | Avg:  9m 57s | Max: 31m 27s | Hits:  99%/66351 
  🟩 rtx4090            Pass: 100%/10  | Total:  2h 23m | Avg: 14m 22s | Max: 34m 31s | Hits:  99%/18951 
🟩 jobs
  🟩 Build              Pass: 100%/40  | Total:  6h 46m | Avg: 10m 10s | Max: 31m 27s | Hits:  99%/75827 
  🟩 TestCPU            Pass: 100%/3   | Total: 53m 37s | Avg: 17m 52s | Max: 34m 31s | Hits:  99%/5682  
  🟩 TestGPU            Pass: 100%/4   | Total: 50m 59s | Avg: 12m 44s | Max: 13m 43s | Hits:  99%/7587  
🟩 sm
  🟩 90                 Pass: 100%/2   | Total: 18m 57s | Avg:  9m 28s | Max: 12m 39s | Hits:  99%/3794  
  🟩 90;90a;100         Pass: 100%/1   | Total:  8m 20s | Avg:  8m 20s | Max:  8m 20s | Hits:  99%/1897  
🟩 std
  🟩 17                 Pass: 100%/21  | Total:  3h 56m | Avg: 11m 14s | Max: 31m 27s | Hits:  99%/39803 
  🟩 20                 Pass: 100%/24  | Total:  4h 13m | Avg: 10m 33s | Max: 34m 31s | Hits:  99%/45499 
```

</details>

<li>
<details><summary><h3>🟩 libcudacxx: Pass: 100%/45  | Total: 13h 31m | Avg: 18m 01s | Max:  1h 26m | Hits:  67%/127843</h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/43  | Total: 12h 34m | Avg: 17m 32s | Max:  1h 26m | Hits:  69%/121222
  🟩 arm64              Pass: 100%/2   | Total: 57m 04s | Avg: 28m 32s | Max: 30m 37s | Hits:  34%/6621  
🟩 ctk
  🟩 12.0               Pass: 100%/5   | Total:  1h 27m | Avg: 17m 27s | Max: 27m 43s | Hits:  59%/16189 
  🟩 12.8               Pass: 100%/2   | Total: 23m 34s | Avg: 11m 47s | Max: 11m 57s | Hits:  98%/6571  
  🟩 12.9               Pass: 100%/38  | Total: 11h 40m | Avg: 18m 25s | Max:  1h 26m | Hits:  66%/105083
🟩 cudacxx
  🟩 ClangCUDA19        Pass: 100%/2   | Total: 52m 17s | Avg: 26m 08s | Max: 26m 22s | Hits:  26%/6585  
  🟩 nvcc12.0           Pass: 100%/5   | Total:  1h 27m | Avg: 17m 27s | Max: 27m 43s | Hits:  59%/16189 
  🟩 nvcc12.8           Pass: 100%/2   | Total: 23m 34s | Avg: 11m 47s | Max: 11m 57s | Hits:  98%/6571  
  🟩 nvcc12.9           Pass: 100%/36  | Total: 10h 48m | Avg: 18m 00s | Max:  1h 26m | Hits:  69%/98498 
🟩 cudacxx_family
  🟩 ClangCUDA          Pass: 100%/2   | Total: 52m 17s | Avg: 26m 08s | Max: 26m 22s | Hits:  26%/6585  
  🟩 nvcc               Pass: 100%/43  | Total: 12h 39m | Avg: 17m 39s | Max:  1h 26m | Hits:  69%/121258
🟩 cxx
  🟩 Clang14            Pass: 100%/4   | Total:  1h 03m | Avg: 15m 50s | Max: 27m 42s | Hits:  64%/13126 
  🟩 Clang15            Pass: 100%/2   | Total: 16m 07s | Avg:  8m 03s | Max: 10m 46s | Hits:  92%/6581  
  🟩 Clang16            Pass: 100%/2   | Total: 34m 41s | Avg: 17m 20s | Max: 29m 34s | Hits:  64%/6581  
  🟩 Clang17            Pass: 100%/2   | Total: 10m 21s | Avg:  5m 10s | Max:  5m 13s | Hits:  99%/6581  
  🟩 Clang18            Pass: 100%/2   | Total: 24m 05s | Avg: 12m 02s | Max: 12m 17s | Hits:  79%/6581  
  🟩 Clang19            Pass: 100%/6   | Total:  1h 41m | Avg: 16m 50s | Max: 26m 27s | Hits:  57%/16476 
  🟩 GCC7               Pass: 100%/2   | Total: 10m 45s | Avg:  5m 22s | Max:  6m 14s | Hits:  99%/6517  
  🟩 GCC8               Pass: 100%/1   | Total:  7m 53s | Avg:  7m 53s | Max:  7m 53s | Hits:  91%/3269  
  🟩 GCC9               Pass: 100%/2   | Total: 35m 45s | Avg: 17m 52s | Max: 24m 24s | Hits:  61%/6529  
  🟩 GCC10              Pass: 100%/2   | Total: 55m 37s | Avg: 27m 48s | Max: 28m 00s | Hits:  34%/6583  
  🟩 GCC11              Pass: 100%/2   | Total:  1h 00m | Avg: 30m 21s | Max: 30m 45s | Hits:  30%/6579  
  🟩 GCC12              Pass: 100%/2   | Total: 10m 31s | Avg:  5m 15s | Max:  5m 18s | Hits:  99%/6583  
  🟩 GCC13              Pass: 100%/10  | Total:  3h 53m | Avg: 23m 23s | Max:  1h 26m | Hits:  71%/16720 
  🟩 MSVC14.29          Pass: 100%/2   | Total: 57m 27s | Avg: 28m 43s | Max: 29m 44s | Hits:  29%/6257  
  🟩 MSVC14.43          Pass: 100%/2   | Total:  1h 05m | Avg: 32m 43s | Max: 33m 06s | Hits:  29%/6309  
  🟩 NVHPC25.3          Pass: 100%/2   | Total: 23m 34s | Avg: 11m 47s | Max: 11m 57s | Hits:  98%/6571  
🟩 cxx_family
  🟩 Clang              Pass: 100%/18  | Total:  4h 09m | Avg: 13m 52s | Max: 29m 34s | Hits:  71%/55926 
  🟩 GCC                Pass: 100%/21  | Total:  6h 55m | Avg: 19m 46s | Max:  1h 26m | Hits:  68%/52780 
  🟩 MSVC               Pass: 100%/4   | Total:  2h 02m | Avg: 30m 43s | Max: 33m 06s | Hits:  29%/12566 
  🟩 NVHPC              Pass: 100%/2   | Total: 23m 34s | Avg: 11m 47s | Max: 11m 57s | Hits:  98%/6571  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 19m 54s | Avg:  9m 57s | Max: 14m 49s | Hits:  99%/3393  
  🟩 rtx2080            Pass: 100%/43  | Total: 13h 11m | Avg: 18m 24s | Max:  1h 26m | Hits:  66%/124450
🟩 jobs
  🟩 Build              Pass: 100%/39  | Total: 10h 52m | Avg: 16m 44s | Max: 39m 42s | Hits:  67%/127803
  🟩 NVRTC              Pass: 100%/2   | Total: 43m 41s | Avg: 21m 50s | Max: 25m 16s | Hits:  90%/40    
  🟩 Test               Pass: 100%/3   | Total:  1h 52m | Avg: 37m 29s | Max:  1h 26m
  🟩 VerifyCodegen      Pass: 100%/1   | Total:  2m 31s | Avg:  2m 31s | Max:  2m 31s
🟩 sm
  🟩 75                 Pass: 100%/2   | Total: 43m 41s | Avg: 21m 50s | Max: 25m 16s | Hits:  90%/40    
  🟩 90                 Pass: 100%/2   | Total: 19m 54s | Avg:  9m 57s | Max: 14m 49s | Hits:  99%/3393  
  🟩 90;90a;100         Pass: 100%/1   | Total: 39m 42s | Avg: 39m 42s | Max: 39m 42s | Hits:  29%/3393  
🟩 std
  🟩 17                 Pass: 100%/22  | Total:  5h 24m | Avg: 14m 44s | Max: 32m 20s | Hits:  73%/68231 
  🟩 20                 Pass: 100%/22  | Total:  8h 04m | Avg: 22m 00s | Max:  1h 26m | Hits:  60%/59612 
```

</details>

<li>
<details><summary><h3>🟩 python: Pass: 100%/12  | Total:  1h 58m | Avg:  9m 53s | Max: 21m 49s</h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/12  | Total:  1h 58m | Avg:  9m 53s | Max: 21m 49s
🟩 ctk
  🟩 12.9               Pass: 100%/12  | Total:  1h 58m | Avg:  9m 53s | Max: 21m 49s
🟩 cudacxx
  🟩 nvcc12.9           Pass: 100%/12  | Total:  1h 58m | Avg:  9m 53s | Max: 21m 49s
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/12  | Total:  1h 58m | Avg:  9m 53s | Max: 21m 49s
🟩 cxx
  🟩 GCC13              Pass: 100%/12  | Total:  1h 58m | Avg:  9m 53s | Max: 21m 49s
🟩 cxx_family
  🟩 GCC                Pass: 100%/12  | Total:  1h 58m | Avg:  9m 53s | Max: 21m 49s
🟩 gpu
  🟩 rtxa6000           Pass: 100%/12  | Total:  1h 58m | Avg:  9m 53s | Max: 21m 49s
🟩 jobs
  🟩 Build cuda.cccl    Pass: 100%/2   | Total:  7m 30s | Avg:  3m 45s | Max:  3m 53s
  🟩 Build cuda.cooperative Pass: 100%/2   | Total:  7m 02s | Avg:  3m 31s | Max:  3m 31s
  🟩 Build cuda.parallel Pass: 100%/2   | Total: 17m 16s | Avg:  8m 38s | Max:  8m 49s
  🟩 Test cuda.cccl     Pass: 100%/2   | Total:  9m 19s | Avg:  4m 39s | Max:  4m 49s
  🟩 Test cuda.cooperative Pass: 100%/2   | Total: 42m 13s | Avg: 21m 06s | Max: 21m 49s
  🟩 Test cuda.parallel Pass: 100%/2   | Total: 35m 24s | Avg: 17m 42s | Max: 17m 44s
🟩 py_version
  🟩 3.10               Pass: 100%/6   | Total: 58m 51s | Avg:  9m 48s | Max: 20m 24s
  🟩 3.13               Pass: 100%/6   | Total: 59m 53s | Avg:  9m 58s | Max: 21m 49s
```

</details>

<li>
<details><summary><h3>🟩 cccl: Pass: 100%/4   | Total: 31m 57s | Avg:  7m 59s | Max: 13m 07s</h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/4   | Total: 31m 57s | Avg:  7m 59s | Max: 13m 07s
🟩 ctk
  🟩 12.0               Pass: 100%/2   | Total: 17m 01s | Avg:  8m 30s | Max: 13m 07s
  🟩 12.9               Pass: 100%/2   | Total: 14m 56s | Avg:  7m 28s | Max: 10m 41s
🟩 cudacxx
  🟩 nvcc12.0           Pass: 100%/2   | Total: 17m 01s | Avg:  8m 30s | Max: 13m 07s
  🟩 nvcc12.9           Pass: 100%/2   | Total: 14m 56s | Avg:  7m 28s | Max: 10m 41s
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/4   | Total: 31m 57s | Avg:  7m 59s | Max: 13m 07s
🟩 cxx
  🟩 Clang14            Pass: 100%/1   | Total:  3m 54s | Avg:  3m 54s | Max:  3m 54s
  🟩 Clang19            Pass: 100%/1   | Total: 10m 41s | Avg: 10m 41s | Max: 10m 41s
  🟩 GCC12              Pass: 100%/1   | Total: 13m 07s | Avg: 13m 07s | Max: 13m 07s
  🟩 GCC13              Pass: 100%/1   | Total:  4m 15s | Avg:  4m 15s | Max:  4m 15s
🟩 cxx_family
  🟩 Clang              Pass: 100%/2   | Total: 14m 35s | Avg:  7m 17s | Max: 10m 41s
  🟩 GCC                Pass: 100%/2   | Total: 17m 22s | Avg:  8m 41s | Max: 13m 07s
🟩 gpu
  🟩 rtx2080            Pass: 100%/4   | Total: 31m 57s | Avg:  7m 59s | Max: 13m 07s
🟩 jobs
  🟩 Infra              Pass: 100%/4   | Total: 31m 57s | Avg:  7m 59s | Max: 13m 07s
```

</details>

<li>
<details><summary><h3>🟩 stdpar: Pass: 100%/4   | Total: 20m 22s | Avg:  5m 05s | Max:  5m 53s</h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/2   | Total: 11m 44s | Avg:  5m 52s | Max:  5m 53s
  🟩 arm64              Pass: 100%/2   | Total:  8m 38s | Avg:  4m 19s | Max:  4m 21s
🟩 ctk
  🟩 12.8               Pass: 100%/4   | Total: 20m 22s | Avg:  5m 05s | Max:  5m 53s
🟩 cudacxx
  🟩 nvcc12.8           Pass: 100%/4   | Total: 20m 22s | Avg:  5m 05s | Max:  5m 53s
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/4   | Total: 20m 22s | Avg:  5m 05s | Max:  5m 53s
🟩 cxx
  🟩 NVHPC25.3          Pass: 100%/4   | Total: 20m 22s | Avg:  5m 05s | Max:  5m 53s
🟩 cxx_family
  🟩 NVHPC              Pass: 100%/4   | Total: 20m 22s | Avg:  5m 05s | Max:  5m 53s
🟩 gpu
  🟩 rtx2080            Pass: 100%/4   | Total: 20m 22s | Avg:  5m 05s | Max:  5m 53s
🟩 jobs
  🟩 Build              Pass: 100%/4   | Total: 20m 22s | Avg:  5m 05s | Max:  5m 53s
🟩 std
  🟩 17                 Pass: 100%/2   | Total: 10m 12s | Avg:  5m 06s | Max:  5m 51s
  🟩 20                 Pass: 100%/2   | Total: 10m 10s | Avg:  5m 05s | Max:  5m 53s
```

</details>

<li>
<details><summary><h3>🟩 cccl_c_parallel: Pass: 100%/2   | Total: 18m 04s | Avg:  9m 02s | Max: 15m 14s | Hits:  98%/328   </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/2   | Total: 18m 04s | Avg:  9m 02s | Max: 15m 14s | Hits:  98%/328   
🟩 ctk
  🟩 12.9               Pass: 100%/2   | Total: 18m 04s | Avg:  9m 02s | Max: 15m 14s | Hits:  98%/328   
🟩 cudacxx
  🟩 nvcc12.9           Pass: 100%/2   | Total: 18m 04s | Avg:  9m 02s | Max: 15m 14s | Hits:  98%/328   
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/2   | Total: 18m 04s | Avg:  9m 02s | Max: 15m 14s | Hits:  98%/328   
🟩 cxx
  🟩 GCC13              Pass: 100%/2   | Total: 18m 04s | Avg:  9m 02s | Max: 15m 14s | Hits:  98%/328   
🟩 cxx_family
  🟩 GCC                Pass: 100%/2   | Total: 18m 04s | Avg:  9m 02s | Max: 15m 14s | Hits:  98%/328   
🟩 gpu
  🟩 rtx2080            Pass: 100%/2   | Total: 18m 04s | Avg:  9m 02s | Max: 15m 14s | Hits:  98%/328   
🟩 jobs
  🟩 Build              Pass: 100%/1   | Total:  2m 50s | Avg:  2m 50s | Max:  2m 50s | Hits:  98%/164   
  🟩 Test               Pass: 100%/1   | Total: 15m 14s | Avg: 15m 14s | Max: 15m 14s | Hits:  98%/164   
```

</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: 187)</h2></summary>

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


</details>

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-22T20:45:28Z
body: <details><summary>🟨 CI finished in 22m 02s: Pass:  96%/26  | Total:  3h 16m | Avg:  7m 34s | Max: 13m 56s | Hits:  82%/14181</summary>

<ul>
<li>
<details><summary><h3>🟨 cudax: Pass:  96%/26  | Total:  3h 16m | Avg:  7m 34s | Max: 13m 56s | Hits:  82%/14181 </h3></summary>

```
🔍 cpu: arm64 🔍
  🟩 amd64              Pass: 100%/22  | Total:  2h 57m | Avg:  8m 02s | Max: 13m 56s | Hits:  83%/12408 
  🔍 arm64              Pass:  75%/4   | Total: 19m 54s | Avg:  4m 58s | Max:  6m 30s | Hits:  82%/1773  
🔍 ctk: 12.9 🔍
  🟩 12.0               Pass: 100%/3   | Total: 24m 56s | Avg:  8m 18s | Max: 13m 56s | Hits:  78%/1478  
  🔍 12.9               Pass:  95%/23  | Total:  2h 52m | Avg:  7m 28s | Max: 13m 44s | Hits:  83%/12703 
🔍 cudacxx: nvcc12.9 🔍
  🟩 nvcc12.0           Pass: 100%/3   | Total: 24m 56s | Avg:  8m 18s | Max: 13m 56s | Hits:  78%/1478  
  🔍 nvcc12.9           Pass:  95%/23  | Total:  2h 52m | Avg:  7m 28s | Max: 13m 44s | Hits:  83%/12703 
🔍 cxx: GCC13 🔍
  🟩 Clang14            Pass: 100%/2   | Total: 11m 05s | Avg:  5m 32s | Max:  5m 51s | Hits:  82%/1186  
  🟩 Clang15            Pass: 100%/1   | Total:  6m 13s | Avg:  6m 13s | Max:  6m 13s | Hits:  82%/591   
  🟩 Clang16            Pass: 100%/1   | Total:  6m 07s | Avg:  6m 07s | Max:  6m 07s | Hits:  82%/591   
  🟩 Clang17            Pass: 100%/1   | Total:  6m 29s | Avg:  6m 29s | Max:  6m 29s | Hits:  82%/591   
  🟩 Clang18            Pass: 100%/1   | Total:  6m 05s | Avg:  6m 05s | Max:  6m 05s | Hits:  82%/591   
  🟩 Clang19            Pass: 100%/4   | Total: 31m 37s | Avg:  7m 54s | Max: 13m 14s | Hits:  86%/2364  
  🟩 GCC10              Pass: 100%/2   | Total: 12m 20s | Avg:  6m 10s | Max:  6m 34s | Hits:  82%/1186  
  🟩 GCC11              Pass: 100%/1   | Total:  6m 37s | Avg:  6m 37s | Max:  6m 37s | Hits:  82%/591   
  🟩 GCC12              Pass: 100%/1   | Total:  7m 03s | Avg:  7m 03s | Max:  7m 03s | Hits:  82%/591   
  🔍 GCC13              Pass:  87%/8   | Total: 50m 41s | Avg:  6m 20s | Max: 10m 56s | Hits:  87%/4137  
  🟩 MSVC14.39          Pass: 100%/1   | Total: 13m 56s | Avg: 13m 56s | Max: 13m 56s | Hits:  59%/292   
  🟩 MSVC14.43          Pass: 100%/1   | Total: 13m 44s | Avg: 13m 44s | Max: 13m 44s | Hits:  59%/292   
  🟩 NVHPC25.5          Pass: 100%/2   | Total: 25m 02s | Avg: 12m 31s | Max: 12m 43s | Hits:  75%/1178  
🔍 cxx_family: GCC 🔍
  🟩 Clang              Pass: 100%/10  | Total:  1h 07m | Avg:  6m 45s | Max: 13m 14s | Hits:  84%/5914  
  🔍 GCC                Pass:  91%/12  | Total:  1h 16m | Avg:  6m 23s | Max: 10m 56s | Hits:  85%/6505  
  🟩 MSVC               Pass: 100%/2   | Total: 27m 40s | Avg: 13m 50s | Max: 13m 56s | Hits:  59%/584   
  🟩 NVHPC              Pass: 100%/2   | Total: 25m 02s | Avg: 12m 31s | Max: 12m 43s | Hits:  75%/1178  
🔍 gpu: rtx2080 🔍
  🟩 h100               Pass: 100%/2   | Total: 13m 53s | Avg:  6m 56s | Max:  8m 31s | Hits:  90%/1182  
  🔍 rtx2080            Pass:  95%/24  | Total:  3h 03m | Avg:  7m 37s | Max: 13m 56s | Hits:  82%/12999 
🔍 jobs: Build 🔍
  🔍 Build              Pass:  95%/23  | Total:  2h 44m | Avg:  7m 08s | Max: 13m 56s | Hits:  80%/12408 
  🟩 Test               Pass: 100%/3   | Total: 32m 41s | Avg: 10m 53s | Max: 13m 14s | Hits:  99%/1773  
🔍 std: 17 🔍
  🔍 17                 Pass:  75%/4   | Total: 25m 23s | Avg:  6m 20s | Max: 12m 43s | Hits:  79%/1771  
  🟩 20                 Pass: 100%/22  | Total:  2h 51m | Avg:  7m 48s | Max: 13m 56s | Hits:  83%/12410 
🟨 cudacxx_family
  🟨 nvcc               Pass:  96%/26  | Total:  3h 16m | Avg:  7m 34s | Max: 13m 56s | Hits:  82%/14181 
🟩 sm
  🟩 90                 Pass: 100%/3   | Total: 19m 06s | Avg:  6m 22s | Max:  8m 31s | Hits:  87%/1773  
  🟩 90a                Pass: 100%/1   | Total:  5m 23s | Avg:  5m 23s | Max:  5m 23s | Hits:  82%/591   
```

</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: 26)</h2></summary>

|  #   | Runner
|------|------
|   17 | `linux-amd64-cpu16`
|    4 | `linux-arm64-cpu16`
|    2 | `windows-amd64-cpu16`
|    2 | `linux-amd64-gpu-rtx2080-latest-1`
|    1 | `linux-amd64-gpu-h100-latest-1`


</details>

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-22T21:06:33Z
body: <details><summary>🟩 CI finished in 43m 07s: Pass: 100%/26  | Total:  3h 21m | Avg:  7m 44s | Max: 13m 56s | Hits:  82%/14772</summary>

<ul>
<li>
<details><summary><h3>🟩 cudax: Pass: 100%/26  | Total:  3h 21m | Avg:  7m 44s | Max: 13m 56s | Hits:  82%/14772 </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/22  | Total:  2h 57m | Avg:  8m 02s | Max: 13m 56s | Hits:  83%/12408 
  🟩 arm64              Pass: 100%/4   | Total: 24m 02s | Avg:  6m 00s | Max:  6m 30s | Hits:  82%/2364  
🟩 ctk
  🟩 12.0               Pass: 100%/3   | Total: 24m 56s | Avg:  8m 18s | Max: 13m 56s | Hits:  78%/1478  
  🟩 12.9               Pass: 100%/23  | Total:  2h 56m | Avg:  7m 39s | Max: 13m 44s | Hits:  83%/13294 
🟩 cudacxx
  🟩 nvcc12.0           Pass: 100%/3   | Total: 24m 56s | Avg:  8m 18s | Max: 13m 56s | Hits:  78%/1478  
  🟩 nvcc12.9           Pass: 100%/23  | Total:  2h 56m | Avg:  7m 39s | Max: 13m 44s | Hits:  83%/13294 
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/26  | Total:  3h 21m | Avg:  7m 44s | Max: 13m 56s | Hits:  82%/14772 
🟩 cxx
  🟩 Clang14            Pass: 100%/2   | Total: 11m 05s | Avg:  5m 32s | Max:  5m 51s | Hits:  82%/1186  
  🟩 Clang15            Pass: 100%/1   | Total:  6m 13s | Avg:  6m 13s | Max:  6m 13s | Hits:  82%/591   
  🟩 Clang16            Pass: 100%/1   | Total:  6m 07s | Avg:  6m 07s | Max:  6m 07s | Hits:  82%/591   
  🟩 Clang17            Pass: 100%/1   | Total:  6m 29s | Avg:  6m 29s | Max:  6m 29s | Hits:  82%/591   
  🟩 Clang18            Pass: 100%/1   | Total:  6m 05s | Avg:  6m 05s | Max:  6m 05s | Hits:  82%/591   
  🟩 Clang19            Pass: 100%/4   | Total: 31m 37s | Avg:  7m 54s | Max: 13m 14s | Hits:  86%/2364  
  🟩 GCC10              Pass: 100%/2   | Total: 12m 20s | Avg:  6m 10s | Max:  6m 34s | Hits:  82%/1186  
  🟩 GCC11              Pass: 100%/1   | Total:  6m 37s | Avg:  6m 37s | Max:  6m 37s | Hits:  82%/591   
  🟩 GCC12              Pass: 100%/1   | Total:  7m 03s | Avg:  7m 03s | Max:  7m 03s | Hits:  82%/591   
  🟩 GCC13              Pass: 100%/8   | Total: 54m 49s | Avg:  6m 51s | Max: 10m 56s | Hits:  86%/4728  
  🟩 MSVC14.39          Pass: 100%/1   | Total: 13m 56s | Avg: 13m 56s | Max: 13m 56s | Hits:  59%/292   
  🟩 MSVC14.43          Pass: 100%/1   | Total: 13m 44s | Avg: 13m 44s | Max: 13m 44s | Hits:  59%/292   
  🟩 NVHPC25.5          Pass: 100%/2   | Total: 25m 02s | Avg: 12m 31s | Max: 12m 43s | Hits:  75%/1178  
🟩 cxx_family
  🟩 Clang              Pass: 100%/10  | Total:  1h 07m | Avg:  6m 45s | Max: 13m 14s | Hits:  84%/5914  
  🟩 GCC                Pass: 100%/12  | Total:  1h 20m | Avg:  6m 44s | Max: 10m 56s | Hits:  85%/7096  
  🟩 MSVC               Pass: 100%/2   | Total: 27m 40s | Avg: 13m 50s | Max: 13m 56s | Hits:  59%/584   
  🟩 NVHPC              Pass: 100%/2   | Total: 25m 02s | Avg: 12m 31s | Max: 12m 43s | Hits:  75%/1178  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 13m 53s | Avg:  6m 56s | Max:  8m 31s | Hits:  90%/1182  
  🟩 rtx2080            Pass: 100%/24  | Total:  3h 07m | Avg:  7m 48s | Max: 13m 56s | Hits:  82%/13590 
🟩 jobs
  🟩 Build              Pass: 100%/23  | Total:  2h 48m | Avg:  7m 19s | Max: 13m 56s | Hits:  80%/12999 
  🟩 Test               Pass: 100%/3   | Total: 32m 41s | Avg: 10m 53s | Max: 13m 14s | Hits:  99%/1773  
🟩 sm
  🟩 90                 Pass: 100%/3   | Total: 19m 06s | Avg:  6m 22s | Max:  8m 31s | Hits:  87%/1773  
  🟩 90a                Pass: 100%/1   | Total:  5m 23s | Avg:  5m 23s | Max:  5m 23s | Hits:  82%/591   
🟩 std
  🟩 17                 Pass: 100%/4   | Total: 29m 31s | Avg:  7m 22s | Max: 12m 43s | Hits:  80%/2362  
  🟩 20                 Pass: 100%/22  | Total:  2h 51m | Avg:  7m 48s | Max: 13m 56s | Hits:  83%/12410 
```

</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: 26)</h2></summary>

|  #   | Runner
|------|------
|   17 | `linux-amd64-cpu16`
|    4 | `linux-arm64-cpu16`
|    2 | `windows-amd64-cpu16`
|    2 | `linux-amd64-gpu-rtx2080-latest-1`
|    1 | `linux-amd64-gpu-h100-latest-1`


</details>

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-22T22:19:08Z
body: <details><summary>🟩 CI finished in 17m 06s: Pass: 100%/26  | Total:  2h 26m | Avg:  5m 38s | Max: 12m 07s | Hits:  99%/14772</summary>

<ul>
<li>
<details><summary><h3>🟩 cudax: Pass: 100%/26  | Total:  2h 26m | Avg:  5m 38s | Max: 12m 07s | Hits:  99%/14772 </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/22  | Total:  2h 10m | Avg:  5m 56s | Max: 12m 07s | Hits:  99%/12408 
  🟩 arm64              Pass: 100%/4   | Total: 16m 02s | Avg:  4m 00s | Max:  4m 47s | Hits:  99%/2364  
🟩 ctk
  🟩 12.0               Pass: 100%/3   | Total: 19m 01s | Avg:  6m 20s | Max: 11m 12s | Hits:  98%/1478  
  🟩 12.9               Pass: 100%/23  | Total:  2h 07m | Avg:  5m 33s | Max: 12m 07s | Hits:  99%/13294 
🟩 cudacxx
  🟩 nvcc12.0           Pass: 100%/3   | Total: 19m 01s | Avg:  6m 20s | Max: 11m 12s | Hits:  98%/1478  
  🟩 nvcc12.9           Pass: 100%/23  | Total:  2h 07m | Avg:  5m 33s | Max: 12m 07s | Hits:  99%/13294 
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/26  | Total:  2h 26m | Avg:  5m 38s | Max: 12m 07s | Hits:  99%/14772 
🟩 cxx
  🟩 Clang14            Pass: 100%/2   | Total:  7m 43s | Avg:  3m 51s | Max:  4m 06s | Hits: 100%/1186  
  🟩 Clang15            Pass: 100%/1   | Total:  3m 58s | Avg:  3m 58s | Max:  3m 58s | Hits: 100%/591   
  🟩 Clang16            Pass: 100%/1   | Total:  4m 15s | Avg:  4m 15s | Max:  4m 15s | Hits: 100%/591   
  🟩 Clang17            Pass: 100%/1   | Total:  4m 07s | Avg:  4m 07s | Max:  4m 07s | Hits: 100%/591   
  🟩 Clang18            Pass: 100%/1   | Total:  3m 45s | Avg:  3m 45s | Max:  3m 45s | Hits: 100%/591   
  🟩 Clang19            Pass: 100%/4   | Total: 21m 51s | Avg:  5m 27s | Max:  9m 49s | Hits:  99%/2364  
  🟩 GCC10              Pass: 100%/2   | Total:  8m 28s | Avg:  4m 14s | Max:  4m 16s | Hits:  99%/1186  
  🟩 GCC11              Pass: 100%/1   | Total:  4m 03s | Avg:  4m 03s | Max:  4m 03s | Hits:  99%/591   
  🟩 GCC12              Pass: 100%/1   | Total:  4m 31s | Avg:  4m 31s | Max:  4m 31s | Hits:  99%/591   
  🟩 GCC13              Pass: 100%/8   | Total: 43m 28s | Avg:  5m 26s | Max: 10m 59s | Hits:  99%/4728  
  🟩 MSVC14.39          Pass: 100%/1   | Total: 11m 12s | Avg: 11m 12s | Max: 11m 12s | Hits:  95%/292   
  🟩 MSVC14.43          Pass: 100%/1   | Total: 12m 07s | Avg: 12m 07s | Max: 12m 07s | Hits:  95%/292   
  🟩 NVHPC25.5          Pass: 100%/2   | Total: 17m 23s | Avg:  8m 41s | Max:  8m 46s | Hits:  97%/1178  
🟩 cxx_family
  🟩 Clang              Pass: 100%/10  | Total: 45m 39s | Avg:  4m 33s | Max:  9m 49s | Hits:  99%/5914  
  🟩 GCC                Pass: 100%/12  | Total:  1h 00m | Avg:  5m 02s | Max: 10m 59s | Hits:  99%/7096  
  🟩 MSVC               Pass: 100%/2   | Total: 23m 19s | Avg: 11m 39s | Max: 12m 07s | Hits:  95%/584   
  🟩 NVHPC              Pass: 100%/2   | Total: 17m 23s | Avg:  8m 41s | Max:  8m 46s | Hits:  97%/1178  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 12m 22s | Avg:  6m 11s | Max:  8m 24s | Hits:  99%/1182  
  🟩 rtx2080            Pass: 100%/24  | Total:  2h 14m | Avg:  5m 36s | Max: 12m 07s | Hits:  99%/13590 
🟩 jobs
  🟩 Build              Pass: 100%/23  | Total:  1h 57m | Avg:  5m 06s | Max: 12m 07s | Hits:  99%/12999 
  🟩 Test               Pass: 100%/3   | Total: 29m 12s | Avg:  9m 44s | Max: 10m 59s | Hits:  99%/1773  
🟩 sm
  🟩 90                 Pass: 100%/3   | Total: 16m 00s | Avg:  5m 20s | Max:  8m 24s | Hits:  99%/1773  
  🟩 90a                Pass: 100%/1   | Total:  3m 56s | Avg:  3m 56s | Max:  3m 56s | Hits:  99%/591   
🟩 std
  🟩 17                 Pass: 100%/4   | Total: 19m 34s | Avg:  4m 53s | Max:  8m 37s | Hits:  99%/2362  
  🟩 20                 Pass: 100%/22  | Total:  2h 07m | Avg:  5m 47s | Max: 12m 07s | Hits:  99%/12410 
```

</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: 26)</h2></summary>

|  #   | Runner
|------|------
|   17 | `linux-amd64-cpu16`
|    4 | `linux-arm64-cpu16`
|    2 | `windows-amd64-cpu16`
|    2 | `linux-amd64-gpu-rtx2080-latest-1`
|    1 | `linux-amd64-gpu-h100-latest-1`


</details>

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-22T23:34:14Z
body: <details><summary>🟩 CI finished in 23m 46s: Pass: 100%/26  | Total:  2h 43m | Avg:  6m 16s | Max: 13m 27s | Hits:  95%/14772</summary>

<ul>
<li>
<details><summary><h3>🟩 cudax: Pass: 100%/26  | Total:  2h 43m | Avg:  6m 16s | Max: 13m 27s | Hits:  95%/14772 </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/22  | Total:  2h 25m | Avg:  6m 35s | Max: 13m 27s | Hits:  95%/12408 
  🟩 arm64              Pass: 100%/4   | Total: 18m 01s | Avg:  4m 30s | Max:  4m 57s | Hits:  95%/2364  
🟩 ctk
  🟩 12.0               Pass: 100%/3   | Total: 20m 22s | Avg:  6m 47s | Max: 11m 54s | Hits:  94%/1478  
  🟩 12.9               Pass: 100%/23  | Total:  2h 22m | Avg:  6m 12s | Max: 13m 27s | Hits:  96%/13294 
🟩 cudacxx
  🟩 nvcc12.0           Pass: 100%/3   | Total: 20m 22s | Avg:  6m 47s | Max: 11m 54s | Hits:  94%/1478  
  🟩 nvcc12.9           Pass: 100%/23  | Total:  2h 22m | Avg:  6m 12s | Max: 13m 27s | Hits:  96%/13294 
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/26  | Total:  2h 43m | Avg:  6m 16s | Max: 13m 27s | Hits:  95%/14772 
🟩 cxx
  🟩 Clang14            Pass: 100%/2   | Total:  8m 22s | Avg:  4m 11s | Max:  4m 26s | Hits:  96%/1186  
  🟩 Clang15            Pass: 100%/1   | Total:  4m 48s | Avg:  4m 48s | Max:  4m 48s | Hits:  96%/591   
  🟩 Clang16            Pass: 100%/1   | Total:  5m 04s | Avg:  5m 04s | Max:  5m 04s | Hits:  96%/591   
  🟩 Clang17            Pass: 100%/1   | Total:  5m 00s | Avg:  5m 00s | Max:  5m 00s | Hits:  96%/591   
  🟩 Clang18            Pass: 100%/1   | Total:  4m 53s | Avg:  4m 53s | Max:  4m 53s | Hits:  96%/591   
  🟩 Clang19            Pass: 100%/4   | Total: 22m 04s | Avg:  5m 31s | Max:  8m 45s | Hits:  97%/2364  
  🟩 GCC10              Pass: 100%/2   | Total:  9m 29s | Avg:  4m 44s | Max:  4m 57s | Hits:  95%/1186  
  🟩 GCC11              Pass: 100%/1   | Total:  5m 01s | Avg:  5m 01s | Max:  5m 01s | Hits:  95%/591   
  🟩 GCC12              Pass: 100%/1   | Total:  4m 59s | Avg:  4m 59s | Max:  4m 59s | Hits:  95%/591   
  🟩 GCC13              Pass: 100%/8   | Total: 50m 03s | Avg:  6m 15s | Max: 13m 27s | Hits:  96%/4728  
  🟩 MSVC14.39          Pass: 100%/1   | Total: 11m 54s | Avg: 11m 54s | Max: 11m 54s | Hits:  87%/292   
  🟩 MSVC14.43          Pass: 100%/1   | Total: 11m 25s | Avg: 11m 25s | Max: 11m 25s | Hits:  87%/292   
  🟩 NVHPC25.5          Pass: 100%/2   | Total: 19m 59s | Avg:  9m 59s | Max: 10m 11s | Hits:  93%/1178  
🟩 cxx_family
  🟩 Clang              Pass: 100%/10  | Total: 50m 11s | Avg:  5m 01s | Max:  8m 45s | Hits:  96%/5914  
  🟩 GCC                Pass: 100%/12  | Total:  1h 09m | Avg:  5m 47s | Max: 13m 27s | Hits:  96%/7096  
  🟩 MSVC               Pass: 100%/2   | Total: 23m 19s | Avg: 11m 39s | Max: 11m 54s | Hits:  87%/584   
  🟩 NVHPC              Pass: 100%/2   | Total: 19m 59s | Avg:  9m 59s | Max: 10m 11s | Hits:  93%/1178  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 13m 02s | Avg:  6m 31s | Max:  8m 42s | Hits:  97%/1182  
  🟩 rtx2080            Pass: 100%/24  | Total:  2h 29m | Avg:  6m 14s | Max: 13m 27s | Hits:  95%/13590 
🟩 jobs
  🟩 Build              Pass: 100%/23  | Total:  2h 12m | Avg:  5m 44s | Max: 11m 54s | Hits:  95%/12999 
  🟩 Test               Pass: 100%/3   | Total: 30m 54s | Avg: 10m 18s | Max: 13m 27s | Hits:  99%/1773  
🟩 sm
  🟩 90                 Pass: 100%/3   | Total: 17m 07s | Avg:  5m 42s | Max:  8m 42s | Hits:  97%/1773  
  🟩 90a                Pass: 100%/1   | Total:  4m 17s | Avg:  4m 17s | Max:  4m 17s | Hits:  95%/591   
🟩 std
  🟩 17                 Pass: 100%/4   | Total: 23m 11s | Avg:  5m 47s | Max: 10m 11s | Hits:  95%/2362  
  🟩 20                 Pass: 100%/22  | Total:  2h 19m | Avg:  6m 21s | Max: 13m 27s | Hits:  95%/12410 
```

</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: 26)</h2></summary>

|  #   | Runner
|------|------
|   17 | `linux-amd64-cpu16`
|    4 | `linux-arm64-cpu16`
|    2 | `windows-amd64-cpu16`
|    2 | `linux-amd64-gpu-rtx2080-latest-1`
|    1 | `linux-amd64-gpu-h100-latest-1`


</details>

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-23T00:08:11Z
body: <details><summary>🟩 CI finished in 23m 49s: Pass: 100%/26  | Total:  2h 43m | Avg:  6m 18s | Max: 15m 12s | Hits:  95%/14772</summary>

<ul>
<li>
<details><summary><h3>🟩 cudax: Pass: 100%/26  | Total:  2h 43m | Avg:  6m 18s | Max: 15m 12s | Hits:  95%/14772 </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/22  | Total:  2h 26m | Avg:  6m 38s | Max: 15m 12s | Hits:  95%/12408 
  🟩 arm64              Pass: 100%/4   | Total: 17m 55s | Avg:  4m 28s | Max:  4m 49s | Hits:  95%/2364  
🟩 ctk
  🟩 12.0               Pass: 100%/3   | Total: 19m 40s | Avg:  6m 33s | Max: 11m 13s | Hits:  94%/1478  
  🟩 12.9               Pass: 100%/23  | Total:  2h 24m | Avg:  6m 16s | Max: 15m 12s | Hits:  96%/13294 
🟩 cudacxx
  🟩 nvcc12.0           Pass: 100%/3   | Total: 19m 40s | Avg:  6m 33s | Max: 11m 13s | Hits:  94%/1478  
  🟩 nvcc12.9           Pass: 100%/23  | Total:  2h 24m | Avg:  6m 16s | Max: 15m 12s | Hits:  96%/13294 
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/26  | Total:  2h 43m | Avg:  6m 18s | Max: 15m 12s | Hits:  95%/14772 
🟩 cxx
  🟩 Clang14            Pass: 100%/2   | Total:  8m 27s | Avg:  4m 13s | Max:  4m 34s | Hits:  96%/1186  
  🟩 Clang15            Pass: 100%/1   | Total:  4m 34s | Avg:  4m 34s | Max:  4m 34s | Hits:  96%/591   
  🟩 Clang16            Pass: 100%/1   | Total:  4m 39s | Avg:  4m 39s | Max:  4m 39s | Hits:  96%/591   
  🟩 Clang17            Pass: 100%/1   | Total:  4m 49s | Avg:  4m 49s | Max:  4m 49s | Hits:  96%/591   
  🟩 Clang18            Pass: 100%/1   | Total:  4m 29s | Avg:  4m 29s | Max:  4m 29s | Hits:  96%/591   
  🟩 Clang19            Pass: 100%/4   | Total: 23m 05s | Avg:  5m 46s | Max:  9m 47s | Hits:  97%/2364  
  🟩 GCC10              Pass: 100%/2   | Total: 10m 02s | Avg:  5m 01s | Max:  5m 28s | Hits:  95%/1186  
  🟩 GCC11              Pass: 100%/1   | Total:  4m 58s | Avg:  4m 58s | Max:  4m 58s | Hits:  95%/591   
  🟩 GCC12              Pass: 100%/1   | Total:  5m 35s | Avg:  5m 35s | Max:  5m 35s | Hits:  95%/591   
  🟩 GCC13              Pass: 100%/8   | Total: 51m 41s | Avg:  6m 27s | Max: 15m 12s | Hits:  96%/4728  
  🟩 MSVC14.39          Pass: 100%/1   | Total: 11m 13s | Avg: 11m 13s | Max: 11m 13s | Hits:  87%/292   
  🟩 MSVC14.43          Pass: 100%/1   | Total: 11m 43s | Avg: 11m 43s | Max: 11m 43s | Hits:  87%/292   
  🟩 NVHPC25.5          Pass: 100%/2   | Total: 18m 42s | Avg:  9m 21s | Max:  9m 30s | Hits:  93%/1178  
🟩 cxx_family
  🟩 Clang              Pass: 100%/10  | Total: 50m 03s | Avg:  5m 00s | Max:  9m 47s | Hits:  96%/5914  
  🟩 GCC                Pass: 100%/12  | Total:  1h 12m | Avg:  6m 01s | Max: 15m 12s | Hits:  96%/7096  
  🟩 MSVC               Pass: 100%/2   | Total: 22m 56s | Avg: 11m 28s | Max: 11m 43s | Hits:  87%/584   
  🟩 NVHPC              Pass: 100%/2   | Total: 18m 42s | Avg:  9m 21s | Max:  9m 30s | Hits:  93%/1178  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 12m 33s | Avg:  6m 16s | Max:  8m 24s | Hits:  97%/1182  
  🟩 rtx2080            Pass: 100%/24  | Total:  2h 31m | Avg:  6m 18s | Max: 15m 12s | Hits:  95%/13590 
🟩 jobs
  🟩 Build              Pass: 100%/23  | Total:  2h 10m | Avg:  5m 40s | Max: 11m 43s | Hits:  95%/12999 
  🟩 Test               Pass: 100%/3   | Total: 33m 23s | Avg: 11m 07s | Max: 15m 12s | Hits:  99%/1773  
🟩 sm
  🟩 90                 Pass: 100%/3   | Total: 16m 46s | Avg:  5m 35s | Max:  8m 24s | Hits:  97%/1773  
  🟩 90a                Pass: 100%/1   | Total:  4m 35s | Avg:  4m 35s | Max:  4m 35s | Hits:  95%/591   
🟩 std
  🟩 17                 Pass: 100%/4   | Total: 22m 40s | Avg:  5m 40s | Max:  9m 30s | Hits:  95%/2362  
  🟩 20                 Pass: 100%/22  | Total:  2h 21m | Avg:  6m 25s | Max: 15m 12s | Hits:  95%/12410 
```

</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: 26)</h2></summary>

|  #   | Runner
|------|------
|   17 | `linux-amd64-cpu16`
|    4 | `linux-arm64-cpu16`
|    2 | `windows-amd64-cpu16`
|    2 | `linux-amd64-gpu-rtx2080-latest-1`
|    1 | `linux-amd64-gpu-h100-latest-1`


</details>

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-23T20:09:40Z
body: <details><summary>🟩 CI finished in 17m 25s: Pass: 100%/26  | Total:  2h 21m | Avg:  5m 26s | Max: 11m 34s | Hits:  99%/14772</summary>

<ul>
<li>
<details><summary><h3>🟩 cudax: Pass: 100%/26  | Total:  2h 21m | Avg:  5m 26s | Max: 11m 34s | Hits:  99%/14772 </h3></summary>

```
🟩 cpu
  🟩 amd64              Pass: 100%/22  | Total:  2h 06m | Avg:  5m 45s | Max: 11m 34s | Hits:  99%/12408 
  🟩 arm64              Pass: 100%/4   | Total: 14m 39s | Avg:  3m 39s | Max:  3m 56s | Hits:  99%/2364  
🟩 ctk
  🟩 12.0               Pass: 100%/3   | Total: 18m 13s | Avg:  6m 04s | Max: 10m 34s | Hits:  98%/1478  
  🟩 12.9               Pass: 100%/23  | Total:  2h 03m | Avg:  5m 21s | Max: 11m 34s | Hits:  99%/13294 
🟩 cudacxx
  🟩 nvcc12.0           Pass: 100%/3   | Total: 18m 13s | Avg:  6m 04s | Max: 10m 34s | Hits:  98%/1478  
  🟩 nvcc12.9           Pass: 100%/23  | Total:  2h 03m | Avg:  5m 21s | Max: 11m 34s | Hits:  99%/13294 
🟩 cudacxx_family
  🟩 nvcc               Pass: 100%/26  | Total:  2h 21m | Avg:  5m 26s | Max: 11m 34s | Hits:  99%/14772 
🟩 cxx
  🟩 Clang14            Pass: 100%/2   | Total:  7m 27s | Avg:  3m 43s | Max:  3m 52s | Hits: 100%/1186  
  🟩 Clang15            Pass: 100%/1   | Total:  4m 11s | Avg:  4m 11s | Max:  4m 11s | Hits: 100%/591   
  🟩 Clang16            Pass: 100%/1   | Total:  3m 56s | Avg:  3m 56s | Max:  3m 56s | Hits: 100%/591   
  🟩 Clang17            Pass: 100%/1   | Total:  3m 53s | Avg:  3m 53s | Max:  3m 53s | Hits: 100%/591   
  🟩 Clang18            Pass: 100%/1   | Total:  3m 48s | Avg:  3m 48s | Max:  3m 48s | Hits: 100%/591   
  🟩 Clang19            Pass: 100%/4   | Total: 19m 29s | Avg:  4m 52s | Max:  8m 51s | Hits: 100%/2364  
  🟩 GCC10              Pass: 100%/2   | Total:  8m 14s | Avg:  4m 07s | Max:  4m 10s | Hits:  99%/1186  
  🟩 GCC11              Pass: 100%/1   | Total:  4m 23s | Avg:  4m 23s | Max:  4m 23s | Hits:  99%/591   
  🟩 GCC12              Pass: 100%/1   | Total:  4m 23s | Avg:  4m 23s | Max:  4m 23s | Hits:  99%/591   
  🟩 GCC13              Pass: 100%/8   | Total: 42m 55s | Avg:  5m 21s | Max: 11m 12s | Hits:  99%/4728  
  🟩 MSVC14.39          Pass: 100%/1   | Total: 10m 34s | Avg: 10m 34s | Max: 10m 34s | Hits:  95%/292   
  🟩 MSVC14.43          Pass: 100%/1   | Total: 11m 34s | Avg: 11m 34s | Max: 11m 34s | Hits:  89%/292   
  🟩 NVHPC25.5          Pass: 100%/2   | Total: 16m 29s | Avg:  8m 14s | Max:  8m 20s | Hits:  97%/1178  
🟩 cxx_family
  🟩 Clang              Pass: 100%/10  | Total: 42m 44s | Avg:  4m 16s | Max:  8m 51s | Hits: 100%/5914  
  🟩 GCC                Pass: 100%/12  | Total: 59m 55s | Avg:  4m 59s | Max: 11m 12s | Hits:  99%/7096  
  🟩 MSVC               Pass: 100%/2   | Total: 22m 08s | Avg: 11m 04s | Max: 11m 34s | Hits:  92%/584   
  🟩 NVHPC              Pass: 100%/2   | Total: 16m 29s | Avg:  8m 14s | Max:  8m 20s | Hits:  97%/1178  
🟩 gpu
  🟩 h100               Pass: 100%/2   | Total: 12m 02s | Avg:  6m 01s | Max:  8m 25s | Hits:  99%/1182  
  🟩 rtx2080            Pass: 100%/24  | Total:  2h 09m | Avg:  5m 23s | Max: 11m 34s | Hits:  99%/13590 
🟩 jobs
  🟩 Build              Pass: 100%/23  | Total:  1h 52m | Avg:  4m 54s | Max: 11m 34s | Hits:  99%/12999 
  🟩 Test               Pass: 100%/3   | Total: 28m 28s | Avg:  9m 29s | Max: 11m 12s | Hits:  99%/1773  
🟩 sm
  🟩 90                 Pass: 100%/3   | Total: 15m 37s | Avg:  5m 12s | Max:  8m 25s | Hits:  99%/1773  
  🟩 90a                Pass: 100%/1   | Total:  3m 49s | Avg:  3m 49s | Max:  3m 49s | Hits:  99%/591   
🟩 std
  🟩 17                 Pass: 100%/4   | Total: 19m 09s | Avg:  4m 47s | Max:  8m 20s | Hits:  99%/2362  
  🟩 20                 Pass: 100%/22  | Total:  2h 02m | Avg:  5m 33s | Max: 11m 34s | Hits:  99%/12410 
```

</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: 26)</h2></summary>

|  #   | Runner
|------|------
|   17 | `linux-amd64-cpu16`
|    4 | `linux-arm64-cpu16`
|    2 | `windows-amd64-cpu16`
|    2 | `linux-amd64-gpu-rtx2080-latest-1`
|    1 | `linux-amd64-gpu-h100-latest-1`


</details>

</details>

author_association: CONTRIBUTOR