-
Notifications
You must be signed in to change notification settings - Fork 156
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
a substitute for std::type_info
when the compiler doesn't support RTTI
#2582
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is actually a great fix
🟨 CI finished in 2h 44m: Pass: 94%/372 | Total: 3d 11h | Avg: 13m 25s | Max: 1h 16m | Hits: 80%/16011
|
Project | |
---|---|
+/- | CCCL Infrastructure |
+/- | libcu++ |
CUB | |
+/- | Thrust |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
+/- | CCCL Infrastructure |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 372)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
31 | linux-amd64-gpu-v100-latest-1 |
28 | linux-arm64-cpu16 |
15 | windows-amd64-cpu16 |
🟨 CI finished in 50m 11s: Pass: 97%/372 | Total: 1d 22h | Avg: 7m 28s | Max: 31m 35s | Hits: 99%/16011
|
Project | |
---|---|
+/- | CCCL Infrastructure |
+/- | libcu++ |
CUB | |
+/- | Thrust |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
+/- | CCCL Infrastructure |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 372)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
31 | linux-amd64-gpu-v100-latest-1 |
28 | linux-arm64-cpu16 |
15 | windows-amd64-cpu16 |
🟨 CI finished in 1h 00m: Pass: 97%/372 | Total: 2d 01h | Avg: 8m 01s | Max: 45m 54s | Hits: 99%/16011
|
Project | |
---|---|
+/- | CCCL Infrastructure |
+/- | libcu++ |
CUB | |
+/- | Thrust |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
+/- | CCCL Infrastructure |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 372)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
31 | linux-amd64-gpu-v100-latest-1 |
28 | linux-arm64-cpu16 |
15 | windows-amd64-cpu16 |
cba63c4
to
5816fa0
Compare
🟨 CI finished in 53m 30s: Pass: 98%/366 | Total: 2d 01h | Avg: 8m 03s | Max: 47m 11s | Hits: 99%/16011
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
CUB | |
Thrust | |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 366)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
28 | linux-arm64-cpu16 |
25 | linux-amd64-gpu-v100-latest-1 |
15 | windows-amd64-cpu16 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ton of nitpicks
#if defined(_CCCL_COMPILER_MSVC) | ||
# define _CCCL_PRETTY_FUNCTION __FUNCSIG__ | ||
#else | ||
# define _CCCL_PRETTY_FUNCTION __PRETTY_FUNCTION__ | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would move that to __cccl/compiler.h
or __cccl/builtin.h
|
||
template <class _Tp, size_t _Np> | ||
_LIBCUDACXX_HIDE_FROM_ABI constexpr auto __make_pretty_name(integral_constant<size_t, _Np>) noexcept // | ||
-> __enable_if_t<_Np == ~size_t(0), __string_view> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could that just be
-> __enable_if_t<_Np == ~size_t(0), __string_view> | |
-> __enable_if_t<_Np == size_t{-1}, __string_view> |
{ | ||
return !(__lhs == __rhs); | ||
} | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#endif | |
#endif // _CCCL_STD_VER <= 2017 |
{ | ||
#if defined(_CCCL_COMPILER_GCC) && _CCCL_GCC_VERSION < 90000 | ||
return __pretty_nameof_3(__make_pretty_name<_Tp>(integral_constant<size_t, ~size_t(0)>{})); | ||
#else |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#else | |
#else // ^^^ gcc < 9 ^^^^/ vvv other compiler vvv |
return __pretty_nameof_3(__make_pretty_name<_Tp>(integral_constant<size_t, ~size_t(0)>{})); | ||
#else | ||
return __pretty_nameof_3(__string_view(_CCCL_PRETTY_FUNCTION)); | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#endif | |
#endif // not gcc < 9 |
#if defined(_CCCL_COMPILER_GCC) && _CCCL_GCC_VERSION < 90000 | ||
return __pretty_nameof_3(__make_pretty_name<_Tp>(integral_constant<size_t, ~size_t(0)>{})); | ||
#else | ||
return __pretty_nameof_3(__string_view(_CCCL_PRETTY_FUNCTION)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return __pretty_nameof_3(__string_view(_CCCL_PRETTY_FUNCTION)); | |
return _CUDA_VSTD::__pretty_nameof_3(__string_view(_CCCL_PRETTY_FUNCTION)); |
_CCCL_NODISCARD _LIBCUDACXX_HIDE_FROM_ABI constexpr __string_view __pretty_nameof_2() noexcept | ||
{ | ||
#if defined(_CCCL_COMPILER_GCC) && _CCCL_GCC_VERSION < 90000 | ||
return __pretty_nameof_3(__make_pretty_name<_Tp>(integral_constant<size_t, ~size_t(0)>{})); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return __pretty_nameof_3(__make_pretty_name<_Tp>(integral_constant<size_t, ~size_t(0)>{})); | |
return _CUDA_VSTD::__pretty_nameof_3(__make_pretty_name<_Tp>(integral_constant<size_t, size_t{-1}>{})); |
template <class _Tp, size_t _Np> | ||
struct __static_nameof | ||
{ | ||
static constexpr __sstring<_Np> value = __make_pretty_name<_Tp>(integral_constant<size_t, _Np>()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
static constexpr __sstring<_Np> value = __make_pretty_name<_Tp>(integral_constant<size_t, _Np>()); | |
static constexpr __sstring<_Np> value = _CUDA_VSTD::__make_pretty_name<_Tp>(integral_constant<size_t, _Np>()); |
_LIBCUDACXX_HIDE_FROM_ABI constexpr auto __make_pretty_name(integral_constant<size_t, _Np>) noexcept // | ||
-> __enable_if_t<_Np != ~size_t(0), __sstring<_Np>> | ||
{ | ||
return __make_pretty_name_impl<_Np>(_CCCL_PRETTY_FUNCTION, make_index_sequence<_Np>{}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return __make_pretty_name_impl<_Np>(_CCCL_PRETTY_FUNCTION, make_index_sequence<_Np>{}); | |
return _CUDA_VSTD::__make_pretty_name_impl<_Np>(_CCCL_PRETTY_FUNCTION, _CUDA_VSTD::make_index_sequence<_Np>()); |
|
||
template <class _Tp, size_t _Np> | ||
_LIBCUDACXX_HIDE_FROM_ABI constexpr auto __make_pretty_name(integral_constant<size_t, _Np>) noexcept // | ||
-> __enable_if_t<_Np != ~size_t(0), __sstring<_Np>> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-> __enable_if_t<_Np != ~size_t(0), __sstring<_Np>> | |
-> __enable_if_t<_Np != size_t{-1}, __sstring<_Np>> |
🟨 CI finished in 1h 45m: Pass: 98%/366 | Total: 2d 05h | Avg: 8m 43s | Max: 1h 31m | Hits: 13%/19400
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
CUB | |
Thrust | |
CUDA Experimental | |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 366)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
28 | linux-arm64-cpu16 |
25 | linux-amd64-gpu-v100-latest-1 |
15 | windows-amd64-cpu16 |
/ok to test |
/ok to test |
/ok to test |
🟨 CI finished in 1h 45m: Pass: 98%/366 | Total: 2d 01h | Avg: 8m 11s | Max: 1h 12m | Hits: 77%/16227
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
CUB | |
Thrust | |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 366)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
28 | linux-arm64-cpu16 |
25 | linux-amd64-gpu-v100-latest-1 |
15 | windows-amd64-cpu16 |
/ok to test |
/ok to test |
/ok to test |
/ok to test |
🟨 CI finished in 56m 16s: Pass: 99%/366 | Total: 1d 14h | Avg: 6m 19s | Max: 47m 00s | Hits: 90%/19400
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
CUB | |
Thrust | |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 366)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
28 | linux-arm64-cpu16 |
25 | linux-amd64-gpu-v100-latest-1 |
15 | windows-amd64-cpu16 |
/ok to test |
🟩 CI finished in 1h 40m: Pass: 100%/366 | Total: 2d 15h | Avg: 10m 28s | Max: 1h 14m | Hits: 62%/28005
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
CUB | |
Thrust | |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 366)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
28 | linux-arm64-cpu16 |
25 | linux-amd64-gpu-v100-latest-1 |
15 | windows-amd64-cpu16 |
/ok to test |
/ok to test |
🟨 CI finished in 1h 14m: Pass: 95%/366 | Total: 1d 19h | Avg: 7m 10s | Max: 43m 50s | Hits: 86%/25259
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
CUB | |
Thrust | |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 366)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
28 | linux-arm64-cpu16 |
25 | linux-amd64-gpu-v100-latest-1 |
15 | windows-amd64-cpu16 |
/ok to test |
🟩 CI finished in 55m 45s: Pass: 100%/366 | Total: 1d 18h | Avg: 6m 56s | Max: 54m 19s | Hits: 92%/28005
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
CUB | |
Thrust | |
+/- | CUDA Experimental |
pycuda | |
CCCL C Parallel Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CCCL C Parallel Library |
🏃 Runner counts (total jobs: 366)
# | Runner |
---|---|
298 | linux-amd64-cpu16 |
28 | linux-arm64-cpu16 |
25 | linux-amd64-gpu-v100-latest-1 |
15 | windows-amd64-cpu16 |
Description
in an upcoming PR, i will need a way to compare types at runtime. since we want to support building without RTTI, i need a substitute for the
typeid
operator.this PR provides the type
cuda::std::__type_info
, which is an alias forstd::type_info
if possible, and otherwise it is a custom type. the type is implemented with the help of an internal utility for getting the name of a type at compile-time. comparing__type_info
objects first compares their addresses, and then compares the type names._CCCL_TYPEID(<type>)
is a reference to the__type_info
object for that type.Checklist