tensor_coordinate.hpp Source File

tensor_coordinate.hpp Source File#

Composable Kernel: 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
17namespace ck_tile {
18
19template <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:
33
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 {
54 }
55
57};
58
59template <typename TensorDesc, typename TopIndex>
60CK_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
70template <bool JudgeDoTransforms = true, typename TensorDesc, typename TensorCoord, typename Index>
71CK_TILE_HOST_DEVICE constexpr void
72move_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
77template <typename TensorDesc, typename TensorCoord>
78CK_TILE_HOST_DEVICE constexpr bool
80 const TensorCoord& coord)
81{
83}
84
85template <typename TensorDesc, typename TensorCoord>
86CK_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 tile/core/algorithm/cluster_descriptor.hpp:13
remove_cv_t< std::remove_reference_t< T > > remove_cvref_t
Definition type_traits.hpp:21
CK_TILE_HOST_DEVICE constexpr bool coordinate_has_valid_offset_assuming_top_index_is_valid(const TensorDesc &tensor_desc, const TensorCoord &coord)
Definition tensor_coordinate.hpp:79
CK_TILE_HOST_DEVICE constexpr 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
constant< v > number
Definition tile/core/numeric/integral_constant.hpp:37
array< index_t, N > multi_index
Definition tile/core/container/multi_index.hpp:17
CK_TILE_HOST_DEVICE constexpr void move_tensor_coordinate(const TensorDesc &tensor_desc, TensorCoord &coord, const Index &coord_step)
Definition tensor_coordinate.hpp:72
CK_TILE_HOST_DEVICE constexpr auto make_tensor_adaptor_coordinate(const Adaptor &adaptor, const TopIndex &idx_top)
Definition tensor_adaptor_coordinate.hpp:55
CK_TILE_HOST_DEVICE constexpr bool coordinate_has_valid_offset(const TensorDesc &tensor_desc, const TensorCoord &coord)
Definition tensor_coordinate.hpp:86
CK_TILE_HOST_DEVICE constexpr bool adaptor_coordinate_is_valid_assuming_top_index_is_valid(const Adaptor &adaptor, const AdaptorCoord &coord)
Definition tensor_adaptor_coordinate.hpp:211
int32_t index_t
Definition integer.hpp:9
CK_TILE_HOST_DEVICE constexpr auto make_tensor_coordinate(const TensorDesc &tensor_desc, const TopIndex &idx_top)
Definition tensor_coordinate.hpp:60
CK_TILE_HOST_DEVICE constexpr bool adaptor_coordinate_is_valid(const Adaptor &adaptor, const AdpatorCoord &coord)
Definition tensor_adaptor_coordinate.hpp:238
CK_TILE_HOST_DEVICE constexpr const auto & get_hidden_index() const
Definition tensor_adaptor_coordinate.hpp:46
CK_TILE_HOST_DEVICE constexpr auto get_top_index() const
Definition tensor_adaptor_coordinate.hpp:36
CK_TILE_HOST_DEVICE constexpr auto get_bottom_index() const
Definition tensor_adaptor_coordinate.hpp:41
Definition tensor_coordinate.hpp:22
multi_index< ndim_top_ > TopIndex
Definition tensor_coordinate.hpp:29
multi_index< NDimHidden > HiddenIndex
Definition tensor_coordinate.hpp:28
CK_TILE_HOST_DEVICE constexpr index_t get_offset() const
Definition tensor_coordinate.hpp:46
CK_TILE_HOST_DEVICE constexpr const auto & get_hidden_index() const
Definition tensor_coordinate.hpp:51
CK_TILE_HOST_DEVICE auto & get_hidden_index()
Definition tensor_coordinate.hpp:56
CK_TILE_HOST_DEVICE constexpr tensor_coordinate(const Base &adaptor_coord)
Definition tensor_coordinate.hpp:40
static constexpr index_t ndim_top_
Definition tensor_coordinate.hpp:26
CK_TILE_HOST_DEVICE constexpr tensor_coordinate()=default
tensor_adaptor_coordinate< NDimHidden, sequence< 0 >, TopDimensionHiddenIds > Base
Definition tensor_coordinate.hpp:23
CK_TILE_HOST_DEVICE constexpr auto get_index() const
Definition tensor_coordinate.hpp:44
CK_TILE_HOST_DEVICE constexpr tensor_coordinate(const HiddenIndex &idx_hidden)
Definition tensor_coordinate.hpp:34