Skip to content
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

[QST] why have Int<2>{} in coalesce_x function when last shape value equal to constant one. #2023

Closed
Shan19900305 opened this issue Jan 5, 2025 · 2 comments

Comments

@Shan19900305
Copy link

In function coalesce_x, shape value is using default Int<2>{} when last shape value equal to constant one. Why need to do this?

`
template <class Shape, class Stride>
CUTE_HOST_DEVICE constexpr
auto
coalesce_x(Layout<Shape,Stride> const& layout)
{
auto flat_shape = flatten(layout.shape());
auto flat_stride = flatten(layout.stride());

constexpr int R = decltype(rank(flat_shape))::value;
if constexpr (is_constant<1, decltype(get(flat_shape))>::value) {
return detail::bw_coalesce(flat_shape, flat_stride, Int<2>{}, get(flat_stride));
} else {
return detail::bw_coalesce(flat_shape, flat_stride, get(flat_shape), get(flat_stride));
}
}
`

@ccecka
Copy link

ccecka commented Jan 5, 2025

It is an implementation detail that fixes cases like

(4,1):(1,42) o 12:1 => (4,3):(1,42)

to obey the composition definition

(A o B)(c) = A(B(c))

even when B(c) is "out-of-bounds" of A while also wanting to coalesce A before computing the result.

Copy link

github-actions bot commented Feb 4, 2025

This issue has been labeled inactive-30d due to no recent activity in the past 30 days. Please close this issue if no further response or action is needed. Otherwise, please respond with a comment indicating any updates or changes to the original issue and/or confirm this issue still needs to be addressed. This issue will be labeled inactive-90d if there is no activity in the next 60 days.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants