/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck_tile/core/tensor/tensor_coordinate.hpp Source File

/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck_tile/core/tensor/tensor_coordinate.hpp Source File#

Composable Kernel: /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck_tile/core/tensor/tensor_coordinate.hpp Source File
tensor_coordinate.hpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: MIT
2 // Copyright (c) 2018-2023, Advanced Micro Devices, Inc. All rights reserved.
3 
4 #pragma once
5 
16 
17 namespace ck_tile {
18 
19 template <index_t NDimHidden, typename TopDimensionHiddenIds>
21  : public tensor_adaptor_coordinate<NDimHidden, sequence<0>, TopDimensionHiddenIds>
22 {
24 
25  // TODO make these private
26  static constexpr index_t ndim_top_ = TopDimensionHiddenIds::size();
27 
30 
31  public:
32  CK_TILE_HOST_DEVICE constexpr tensor_coordinate() = default;
33 
34  CK_TILE_HOST_DEVICE constexpr tensor_coordinate(const HiddenIndex& idx_hidden)
35  : Base{idx_hidden}
36  {
37  }
38 
39  // construct from TensorAdaptorCoordinte base class
40  CK_TILE_HOST_DEVICE constexpr tensor_coordinate(const Base& adaptor_coord) : Base{adaptor_coord}
41  {
42  }
43 
44  CK_TILE_HOST_DEVICE constexpr auto get_index() const { return Base::get_top_index(); }
45 
47  {
49  }
50 
51  CK_TILE_HOST_DEVICE constexpr const auto& get_hidden_index() const
52  {
53  return Base::get_hidden_index();
54  }
55 
57 };
58 
59 template <typename TensorDesc, typename TopIndex>
60 CK_TILE_HOST_DEVICE constexpr auto make_tensor_coordinate(const TensorDesc& tensor_desc,
61  const TopIndex& idx_top)
62 {
63  const auto adaptor_coord = make_tensor_adaptor_coordinate(tensor_desc, idx_top);
64 
65  return tensor_coordinate<TensorDesc::get_num_of_hidden_dimension(),
66  remove_cvref_t<decltype(TensorDesc::get_top_dimension_hidden_ids())>>{
67  adaptor_coord};
68 }
69 
70 template <bool JudgeDoTransforms = true, typename TensorDesc, typename TensorCoord, typename Index>
71 CK_TILE_HOST_DEVICE constexpr void
72 move_tensor_coordinate(const TensorDesc& tensor_desc, TensorCoord& coord, const Index& coord_step)
73 {
74  move_tensor_adaptor_coordinate(tensor_desc, coord, coord_step);
75 }
76 
77 template <typename TensorDesc, typename TensorCoord>
78 CK_TILE_HOST_DEVICE constexpr bool
80  const TensorCoord& coord)
81 {
83 }
84 
85 template <typename TensorDesc, typename TensorCoord>
86 CK_TILE_HOST_DEVICE constexpr bool coordinate_has_valid_offset(const TensorDesc& tensor_desc,
87  const TensorCoord& coord)
88 {
89  return adaptor_coordinate_is_valid(tensor_desc, coord);
90 }
91 
92 } // namespace ck_tile
#define CK_TILE_HOST_DEVICE
Definition: config.hpp:42
Definition: cluster_descriptor.hpp:13
constexpr CK_TILE_HOST_DEVICE void move_tensor_coordinate(const TensorDesc &tensor_desc, TensorCoord &coord, const Index &coord_step)
Definition: tensor_coordinate.hpp:72
constexpr CK_TILE_HOST_DEVICE auto make_tensor_adaptor_coordinate(const Adaptor &adaptor, const TopIndex &idx_top)
Definition: tensor_adaptor_coordinate.hpp:55
int32_t index_t
Definition: integer.hpp:9
constexpr CK_TILE_HOST_DEVICE auto make_tensor_coordinate(const TensorDesc &tensor_desc, const TopIndex &idx_top)
Definition: tensor_coordinate.hpp:60
remove_cv_t< std::remove_reference_t< T > > remove_cvref_t
Definition: type_traits.hpp:21
constexpr CK_TILE_HOST_DEVICE bool coordinate_has_valid_offset_assuming_top_index_is_valid(const TensorDesc &tensor_desc, const TensorCoord &coord)
Definition: tensor_coordinate.hpp:79
constexpr CK_TILE_HOST_DEVICE bool adaptor_coordinate_is_valid(const Adaptor &adaptor, const AdpatorCoord &coord)
Definition: tensor_adaptor_coordinate.hpp:238
constexpr CK_TILE_HOST_DEVICE void move_tensor_adaptor_coordinate(const Adaptor &adaptor, AdaptorCoord &coord, const TopIndex &idx_diff_top, BottomIndex &idx_diff_bottom)
Definition: tensor_adaptor_coordinate.hpp:97
constexpr CK_TILE_HOST_DEVICE bool adaptor_coordinate_is_valid_assuming_top_index_is_valid(const Adaptor &adaptor, const AdaptorCoord &coord)
Definition: tensor_adaptor_coordinate.hpp:211
constexpr CK_TILE_HOST_DEVICE bool coordinate_has_valid_offset(const TensorDesc &tensor_desc, const TensorCoord &coord)
Definition: tensor_coordinate.hpp:86
A fixed-size array container similar to std::array with additional utilities.
Definition: array.hpp:43
Definition: integral_constant.hpp:13
Definition: tensor_adaptor_coordinate.hpp:20
constexpr CK_TILE_HOST_DEVICE auto get_bottom_index() const
Definition: tensor_adaptor_coordinate.hpp:41
constexpr CK_TILE_HOST_DEVICE const auto & get_hidden_index() const
Definition: tensor_adaptor_coordinate.hpp:46
constexpr CK_TILE_HOST_DEVICE auto get_top_index() const
Definition: tensor_adaptor_coordinate.hpp:36
Definition: tensor_coordinate.hpp:22
static constexpr index_t ndim_top_
Definition: tensor_coordinate.hpp:26
CK_TILE_HOST_DEVICE auto & get_hidden_index()
Definition: tensor_coordinate.hpp:56
constexpr CK_TILE_HOST_DEVICE index_t get_offset() const
Definition: tensor_coordinate.hpp:46
constexpr CK_TILE_HOST_DEVICE tensor_coordinate(const HiddenIndex &idx_hidden)
Definition: tensor_coordinate.hpp:34
constexpr CK_TILE_HOST_DEVICE tensor_coordinate(const Base &adaptor_coord)
Definition: tensor_coordinate.hpp:40
constexpr CK_TILE_HOST_DEVICE const auto & get_hidden_index() const
Definition: tensor_coordinate.hpp:51
constexpr CK_TILE_HOST_DEVICE tensor_coordinate()=default
constexpr CK_TILE_HOST_DEVICE auto get_index() const
Definition: tensor_coordinate.hpp:44