Replies: 7 comments 7 replies
-
I think that:
|
Beta Was this translation helpful? Give feedback.
-
No
Users which really need to optimize compile-time this much, can also just directly include an internal header and risk begin broken in the future.
I don't see one. |
Beta Was this translation helpful? Give feedback.
-
Since the risk of being broken is not acceptable for any production use case that has to be supported, the main alternative that these users have is to avoid using CCCL, or initially use it and then migrate to their own solutions if compile-times are not acceptable. |
Beta Was this translation helpful? Give feedback.
-
Keep in mind that our team also supports Python users now (through NVRTC and other compilation stack). All of the costs that we discuss becomes run-time (JIT) overheads, so if we can figure out a balanced solution it would be ideal. @gonzalobg's wide/narrow suggestion seems reasonable to me? |
Beta Was this translation helpful? Give feedback.
-
how often we plan to rename |
Beta Was this translation helpful? Give feedback.
-
I think without any concrete data on a specific header being too heavyweight and blocking a potential user, any discussion here is largely just premature optimization. If and when particular headers are found to be problematic, we can evaluate and handle these on a case by case basis. Otherwise, I don't think it is worth the effort to try and formalize a library-wide policy. |
Beta Was this translation helpful? Give feedback.
-
well, if we look at some old results on clang on the host https://artificial-mind.net/projects/compile-health/ they are a bit concerning, especially if we think that |
Beta Was this translation helpful? Give feedback.
-
We are currently only publicly exposing the "standard" headers like
<cuda/std/functional>
This is fine and safe and we provide the common CTK stability guarantees about them.
However, the C++ standard headers are also heavy. Including all of
<cuda/std/type_traits>
foris_arithmetic
or<cuda/std/utility>
just forcuda::std::move
is a bit much.We recently have been hard at work at modularizing our headers so that each feature gets its own properly self contained subheader.
All these headers live in
<cuda/std/__$HEADER/$FEATURE.h>
which is guarded by the reserved identifier__$HEADER
so none of the common stability guarantees apply.It would be greatly beneficial for users to be able to only include what they need, potentially dramatically improving compile times. I am personally strongly against making these headers stable because we need the ability to change them and are doing so currently. That said, 99% of those headers are never going to go away like
<cuda/std/__type_traits/is_floating_point.h>
. Their contents might change but not the header itself.Is there a way to document those headers to the public but retain our ability to remove / rename them when needed?
@gonzalobg
Beta Was this translation helpful? Give feedback.
All reactions