-
Notifications
You must be signed in to change notification settings - Fork 135
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
add some simple utilities for manipulating lists of types #2370
add some simple utilities for manipulating lists of types #2370
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.
As a test, could you please try to replace all uses of the metal::
metaprogramming facilities in CUB's tests by this new facility? You can find them here: https://github.com/NVIDIA/cccl/blob/main/cub/test/catch2_test_helper.h#L63
00b8af4
to
321b94f
Compare
/ok to test |
|
🟨 CI finished in 5h 12m: Pass: 99%/417 | Total: 7d 15h | Avg: 26m 27s | Max: 1h 17m | Hits: 32%/35852
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
Thrust | |
+/- | CUDA Experimental |
pycuda | |
CUDA C Core Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CUDA C Core Library |
🏃 Runner counts (total jobs: 417)
# | Runner |
---|---|
304 | linux-amd64-cpu16 |
62 | linux-amd64-gpu-v100-latest-1 |
28 | linux-arm64-cpu16 |
23 | windows-amd64-cpu16 |
…r/cccl into mini-meta-programming-library
/ok to test |
/ok to test |
/ok to test |
🟨 CI finished in 10h 18m: Pass: 90%/433 | Total: 9d 04h | Avg: 30m 34s | Max: 1h 43m | Hits: 32%/36735
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
CUDA Experimental | |
pycuda | |
CUDA C Core Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CUDA C Core Library |
🏃 Runner counts (total jobs: 433)
# | Runner |
---|---|
320 | linux-amd64-cpu16 |
62 | linux-amd64-gpu-v100-latest-1 |
28 | linux-arm64-cpu16 |
23 | windows-amd64-cpu16 |
…c < 12.2" This reverts commit c01fdd3.
/ok to test |
🟨 CI finished in 5h 10m: Pass: 95%/433 | Total: 9d 13h | Avg: 31m 44s | Max: 1h 23m | Hits: 18%/38966
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
CUDA Experimental | |
pycuda | |
CUDA C Core Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CUDA C Core Library |
🏃 Runner counts (total jobs: 433)
# | Runner |
---|---|
320 | linux-amd64-cpu16 |
62 | linux-amd64-gpu-v100-latest-1 |
28 | linux-arm64-cpu16 |
23 | windows-amd64-cpu16 |
/ok to test |
🟨 CI finished in 2h 55m: Pass: 99%/433 | Total: 9d 16h | Avg: 32m 14s | Max: 1h 27m | Hits: 17%/41641
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
CUDA Experimental | |
pycuda | |
CUDA C Core Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CUDA C Core Library |
🏃 Runner counts (total jobs: 433)
# | Runner |
---|---|
320 | linux-amd64-cpu16 |
62 | linux-amd64-gpu-v100-latest-1 |
28 | linux-arm64-cpu16 |
23 | windows-amd64-cpu16 |
/ok to test |
🟩 CI finished in 1h 58m: Pass: 100%/433 | Total: 3d 08h | Avg: 11m 07s | Max: 1h 18m | Hits: 83%/41641
|
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
CUDA Experimental | |
pycuda | |
CUDA C Core Library |
Modifications in project or dependencies?
Project | |
---|---|
CCCL Infrastructure | |
+/- | libcu++ |
+/- | CUB |
+/- | Thrust |
+/- | CUDA Experimental |
+/- | pycuda |
+/- | CUDA C Core Library |
🏃 Runner counts (total jobs: 433)
# | Runner |
---|---|
320 | linux-amd64-cpu16 |
62 | linux-amd64-gpu-v100-latest-1 |
28 | linux-arm64-cpu16 |
23 | windows-amd64-cpu16 |
Description
there is an incomplete type-list facility in the
mdspan
implementation, and another one incuda/std/__type_traits/type_list.h
, the latter of which is a relic of a bygone era in which variadic templates were just a glimmer in Doug Gregor's eyes.this PR replaces both with a more fleshed out facility for manipulating lists of types. in addition to the basic
__type_list
struct, this pr adds the following algorithms:__type_at
: index into a type-list__type_transform
: apply a unary transform to every type in a list__type_fold_[left|right]
: fold a list with a binary callable and an initial value__type_find_if
: search a list for a type that satisfies the predicate, returning the tail of the list starting at the first found item__type_push_[front|back]
: given a type list and a sequence of types, return a new type list with the sequence of types prepended or appended, respectively__type_front
/__type_back
: return the first and last type in a list, respectively__type_concat
: concatenate a sequence of type lists__type_flatten
: given a type list of type lists, concatenate all the elements.__type_remove
: remove all occurrences of a type from a list__type_cartesian_product
: given a sequence of type lists, return a list of lists containing the cartesian product of all the given lists.__type_iota
: given a starting index i, a count c, and a step value s, produce a sequence of c integers starting at i and incrementing by sit also defines a meta-callable protocol and provides some utilities for manipulating meta-callables. a meta-callable is a class type with a nested
__call
alias template. the meta-callable utilities are:__type_quote
: lift a class or alias template into a meta-callable__type_compose
: compose two meta-callables__type_bind_[front|back]
: bind arguments to either the front or the back of a meta-callable, returning a meta-callable of a lower arity__type_call
: evaluate a meta-callable with the given arguments__type_callable
: true if a meta-callable can be called with the given arguments; false otherwise.__type_defer
: defer the evaluation of a meta-callable with a set of arguments, returning either a trait with the result, or an empty struct if the meta-callable cannot be evaluated with the given arguments.__type_always
: given a typeT
, return a meta-callable that always evaluates toT
.this PR also provides meta-callables for logical operations on integral constant wrappers.
these are for internal use, and will not be a part of CCCL's documented interface.
closes #2369
Checklist