SimiLie
Loading...
Searching...
No Matches
stride.hpp
1// SPDX-FileCopyrightText: 2024 Baptiste Legouix
2// SPDX-License-Identifier: MIT
3
4#pragma once
5
6#include <ddc/ddc.hpp>
7
8namespace sil {
9
10namespace misc {
11
12namespace detail {
13
14// Helpers to compute the strides of a right layout.
15template <std::size_t max_rank, class OTensorNaturalIndex, class... TensorNaturalIndex>
16static constexpr std::size_t stride_factor()
17{
18 if constexpr (
19 ddc::type_seq_rank_v < OTensorNaturalIndex,
20 ddc::detail::TypeSeq < TensorNaturalIndex... >>> max_rank) {
21 return OTensorNaturalIndex::mem_size();
22 } else {
23 return 1;
24 }
25}
26
27template <class OTensorNaturalIndex, class... TensorNaturalIndex>
28static constexpr std::size_t stride()
29{
30 return (stride_factor<
31 ddc::type_seq_rank_v<
32 OTensorNaturalIndex,
33 ddc::detail::TypeSeq<TensorNaturalIndex...>>,
34 TensorNaturalIndex,
35 TensorNaturalIndex...>()
36 * ...);
37}
38
39template <class OTensorNaturalIndex, class... TensorNaturalIndex>
40static constexpr std::size_t next_stride()
41{
42 if constexpr (
43 ddc::type_seq_rank_v<OTensorNaturalIndex, ddc::detail::TypeSeq<TensorNaturalIndex...>>
44 == 0) {
45 return std::numeric_limits<std::size_t>::max();
46 } else {
47 return (stride_factor<
48 ddc::type_seq_rank_v<
49 OTensorNaturalIndex,
50 ddc::detail::TypeSeq<TensorNaturalIndex...>>
51 - 1,
52 TensorNaturalIndex,
53 TensorNaturalIndex...>()
54 * ...);
55 }
56}
57
58} // namespace detail
59
60} // namespace misc
61
62} // namespace sil
The top-level namespace of SimiLie.
Definition csr.hpp:14