mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-05-11 17:00:18 +00:00
Add structural sparsity gemm instruction tests (#1309)
* first version of smfmac test * add reviewer comments * add reviewer suggestions
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// Copyright (c) 2018-2023, Advanced Micro Devices, Inc. All rights reserved.
|
||||
// Copyright (c) 2018-2024, Advanced Micro Devices, Inc. All rights reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
@@ -133,5 +133,40 @@ struct FillConstant
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct TransformIntoStructuralSparsity
|
||||
{
|
||||
// clang-format off
|
||||
static constexpr T valid_sequences[] = {
|
||||
0, 0, 1, 1,
|
||||
0, 1, 0, 1,
|
||||
0, 1, 1, 0,
|
||||
1, 0, 0, 1,
|
||||
1, 0, 1, 0,
|
||||
1, 1, 0, 0,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
template <typename ForwardIter>
|
||||
void operator()(ForwardIter first, ForwardIter last) const
|
||||
{
|
||||
std::for_each(first, last, [=, idx = 0](T& elem) mutable {
|
||||
auto tmp_idx = idx;
|
||||
idx += 1;
|
||||
return elem *= valid_sequences[tmp_idx % (sizeof(valid_sequences) / sizeof(T))];
|
||||
});
|
||||
}
|
||||
|
||||
template <typename ForwardRange>
|
||||
auto operator()(ForwardRange&& range) const
|
||||
-> std::void_t<decltype(std::declval<const TransformIntoStructuralSparsity&>()(
|
||||
std::begin(std::forward<ForwardRange>(range)),
|
||||
std::end(std::forward<ForwardRange>(range))))>
|
||||
{
|
||||
(*this)(std::begin(std::forward<ForwardRange>(range)),
|
||||
std::end(std::forward<ForwardRange>(range)));
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace utils
|
||||
} // namespace ck
|
||||
|
||||
Reference in New Issue
Block a user