Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This make
Option<T>
whereT: LaunchArg
launchable in a cubecl kernel.Combined with
it allows to match at comptime data that are runtime known. For example, for the first test named
kernel_option_scalar
, we can generate two different kernels based on an argumentof type
Option<i32>
.Limitations
First, we can't use
directly in a kernel. Thus, I introduce a new function named
some
that does exactly. However, it has some issue with type inference. A proper fix of the way we expand enum variant should solve the issue.Second, we can't use stuff like
option.map(|x| 2 * x)
to generate code at comptime. Currently, we have to use a match statement to achieve this behavior.Design choices
I hesitated between introducing a new enum
for which we could implement more utilities similar to
std::Option
. However, I decided to go withstd::Option
directly for now as a first step.Justification
I believe this will quite useful to implement quantization in the matmul without doubling all implementations.