tensor_view.hpp Source File

tensor_view.hpp Source File#

Composable Kernel: tensor_view.hpp Source File
tensor_view.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2018-2025, Advanced Micro Devices, Inc. All rights reserved.
3
4#pragma once
5
16
17namespace ck_tile {
18
19/*
20 * tensor_view
21 * abstract the underneath memory buffer(global, LDS, etc...)
22 * and provide a unified get/set function for access
23 *
24 * For addressing into the buffer we use 2 variable to control:
25 * coord : ND tensor coordinate, will calculate the actual offset inside
26 * linear_offset : 1D offset, will be used in the immediate field of
27 * the buffer instruction to help reduce register usage
28 *
29 * User can use either of the field, or both to indexing into the tensor
30 *
31 * We usually provide 2 set of API for buffer get/set, e.g.
32 * get_vectorized_elements()/get_vectorized_elements_raw()
33 * the former usually will call intrinsic or normal C function, the later
34 * usually will call inline-asm function
35 *
36 */
37template <typename BufferView_,
38 typename TensorDesc_,
41{
43 using DataType = typename buffer_view::type;
45 using TensorIndex = array<index_t, TensorDesc::get_num_of_top_dimension()>;
47 static constexpr auto DstInMemOp = DstInMemOp_;
48 static constexpr index_t PackedSize =
50
51 CK_TILE_HOST_DEVICE constexpr tensor_view() = default;
52
54 const TensorDesc& desc)
55 : buf_{buffer_view}, desc_{desc}
56 {
57 }
58
59 CK_TILE_HOST_DEVICE void init_raw() { buf_.init_raw(); }
60
61 CK_TILE_HOST_DEVICE constexpr auto& get_tensor_descriptor() const { return desc_; }
62
64 {
65 return TensorDesc::get_num_of_top_dimension();
66 }
67
68 CK_TILE_HOST_DEVICE constexpr const auto& get_buffer_view() const { return buf_; }
69
70 CK_TILE_HOST_DEVICE constexpr auto& get_buffer_view() { return buf_; }
71
72 // X is vector of DataType.
73 // "coord" is coordinate of DataType, not X. "coord" should be aligned to X
74 template <typename X,
75 bool oob_conditional_check = true,
76 typename std::enable_if<
77 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
78 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
79 bool>::type = false>
82 index_t linear_offset,
84 {
85 return buf_.template get<X>(
86 coord.get_offset() / PackedSize,
87 linear_offset / PackedSize,
90 }
91
92 template <typename X,
93 bool oob_conditional_check = true,
94 typename std::enable_if<
95 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
96 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
97 bool>::type = false>
100 index_t linear_offset,
101 bool is_valid_element, // flag
103 {
104 return buf_.template get<X>(coord.get_offset() / PackedSize,
105 linear_offset / PackedSize,
106 is_valid_element,
108 }
109
110 // X is vector of DataType.
111 // "coord" is coordinate of DataType, not X. "coord" should be aligned to X
112 template <typename X,
113 bool oob_conditional_check = true,
114 bool pre_nop = false,
115 typename std::enable_if<
116 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
117 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
118 bool>::type = false>
120 const TensorCoord& coord,
121 index_t linear_offset,
123 bool_constant<pre_nop> = {}) const
124 {
125 return buf_.template get_raw<X, oob_conditional_check, pre_nop>(
126 dst,
127 coord.get_offset() / PackedSize,
128 linear_offset / PackedSize,
131 }
132
133 template <typename X,
134 bool oob_conditional_check = true,
135 bool pre_nop = false,
136 typename std::enable_if<
137 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
138 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
139 bool>::type = false>
141 const TensorCoord& coord,
142 index_t linear_offset,
143 bool is_valid_element,
145 bool_constant<pre_nop> = {}) const
146 {
147 return buf_.template get_raw<X, oob_conditional_check, pre_nop>(dst,
148 coord.get_offset() /
150 linear_offset / PackedSize,
151 is_valid_element,
153 }
154
155 template <typename X,
156 bool oob_conditional_check = true,
157 typename std::enable_if<
158 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
159 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
160 bool>::type = false>
161 CK_TILE_HOST_DEVICE constexpr void
163 const TensorCoord& coord,
164 index_t linear_offset,
166 {
167 return buf_.template async_get<X>(
168 smem,
169 coord.get_offset() / PackedSize,
170 linear_offset / PackedSize,
173 }
174
175 template <typename X,
176 bool oob_conditional_check = true,
177 typename std::enable_if<
178 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
179 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
180 bool>::type = false>
181 CK_TILE_HOST_DEVICE constexpr void
183 const TensorCoord& coord,
184 index_t linear_offset,
185 bool is_valid_element,
187 {
188 return buf_.template async_get<X>(smem,
189 coord.get_offset() / PackedSize,
190 linear_offset / PackedSize,
191 is_valid_element,
193 }
194
195 template <typename X,
196 bool pre_nop = false,
197 typename std::enable_if<
198 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
199 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
200 bool>::type = false>
201 CK_TILE_HOST_DEVICE constexpr void
203 const TensorCoord& coord,
204 index_t linear_offset,
205 bool_constant<pre_nop> = {}) const
206 {
207 return buf_.template async_get_raw<X>(
208 smem,
209 coord.get_offset() / PackedSize,
210 linear_offset / PackedSize,
213 }
214
215 template <typename X,
216 bool pre_nop = false,
217 typename std::enable_if<
218 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
219 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
220 bool>::type = false>
221 CK_TILE_HOST_DEVICE constexpr void
223 const TensorCoord& coord,
224 index_t coord_extra_offset,
225 index_t linear_offset,
226 bool_constant<pre_nop> = {}) const
227 {
228 return buf_.template async_get_raw<X>(
229 smem,
230 (coord.get_offset() + coord_extra_offset) / PackedSize,
231 linear_offset / PackedSize,
234 }
235
236 template <typename X,
237 bool pre_nop = false,
238 typename std::enable_if<
239 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
240 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
241 bool>::type = false>
242 CK_TILE_HOST_DEVICE constexpr void
244 const TensorCoord& coord,
245 index_t linear_offset,
246 bool is_valid_element,
247 bool_constant<pre_nop> = {}) const
248 {
249 return buf_.template async_get_raw<X>(smem,
250 coord.get_offset() / PackedSize,
251 linear_offset / PackedSize,
252 is_valid_element,
254 }
255
256 template <typename X,
257 typename std::enable_if<
258 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
259 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
260 bool>::type = false>
262 get_transpose_vectorized_elements(const TensorCoord& coord, index_t linear_offset) const
263 {
264 return buf_.template transpose_get<X>(
265 coord.get_offset(),
266 linear_offset,
268 }
269
270 template <typename X,
271 typename std::enable_if<
272 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
273 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
274 bool>::type = false>
277 index_t linear_offset,
278 bool is_valid_element // flag
279 ) const
280 {
281 return buf_.template transpose_get<X>(coord.get_offset(), linear_offset, is_valid_element);
282 }
283 // X is vector of DataType.
284 // "coord" is coordinate of DataType, not X. "coord" should be aligned to X
285 template <typename X,
286 bool oob_conditional_check = true,
287 typename std::enable_if<
288 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
289 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
290 bool>::type = false>
291 CK_TILE_HOST_DEVICE constexpr void
293 index_t linear_offset,
294 const X& x,
296 {
298 coord.get_offset() / PackedSize,
299 linear_offset / PackedSize,
301 x);
302 }
303
304 template <typename X,
305 bool oob_conditional_check = true,
306 typename std::enable_if<
307 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
308 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
309 bool>::type = false>
310 CK_TILE_HOST_DEVICE constexpr void
312 index_t linear_offset,
313 bool is_valid_element,
314 const X& x,
316 {
318 coord.get_offset(), linear_offset, is_valid_element, x);
319 }
320
321 template <typename X,
322 bool oob_conditional_check = true,
323 typename std::enable_if<
324 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
325 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
326 bool>::type = false>
327 CK_TILE_HOST_DEVICE constexpr void
329 index_t linear_offset,
330 const X& x,
332 {
333 buf_.template set_raw<X, oob_conditional_check>(
334 coord.get_offset() / PackedSize,
335 linear_offset / PackedSize,
337 x);
338 }
339
340 template <typename X,
341 bool oob_conditional_check = true,
342 typename std::enable_if<
343 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
344 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
345 bool>::type = false>
346 CK_TILE_HOST_DEVICE constexpr void
348 index_t linear_offset,
349 bool is_valid_element,
350 const X& x,
352 {
353 buf_.template set_raw<X, oob_conditional_check>(
354 coord.get_offset() / PackedSize, linear_offset / PackedSize, is_valid_element, x);
355 }
356
357 // X is vector of DataType.
358 // "coord" is coordinate of DataType, not X. "coord" should be aligned to X
359 template <typename X,
360 bool oob_conditional_check = true,
361 typename std::enable_if<
362 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
363 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
364 bool>::type = false>
365 CK_TILE_HOST_DEVICE constexpr void
367 index_t linear_offset,
368 const X& x,
370 {
371 buf_.template update<DstInMemOp, X, oob_conditional_check>(
372 coord.get_offset() / PackedSize,
373 linear_offset / PackedSize,
375 x);
376 }
377
378 template <typename X,
379 bool oob_conditional_check = true,
380 typename std::enable_if<
381 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
382 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
383 bool>::type = false>
384 CK_TILE_HOST_DEVICE constexpr void
386 index_t linear_offset,
387 bool is_valid_element,
388 const X& x,
390 {
391 buf_.template update<DstInMemOp, X, oob_conditional_check>(
392 coord.get_offset() / PackedSize, linear_offset / PackedSize, is_valid_element, x);
393 }
394
395 // X is vector of DataType.
396 // "coord" is coordinate of DataType, not X. "coord" should be aligned to X
397 template <typename X,
398 bool oob_conditional_check = true,
399 bool pre_nop = false,
400 typename std::enable_if<
401 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
402 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
403 bool>::type = false>
404 CK_TILE_HOST_DEVICE constexpr void
406 index_t linear_offset,
407 const X& x,
410 {
411 buf_.template update_raw<DstInMemOp, X, oob_conditional_check, pre_nop>(
412 coord.get_offset() / PackedSize,
413 linear_offset / PackedSize,
415 x);
416 }
417
418 template <typename X,
419 bool oob_conditional_check = true,
420 bool pre_nop = false,
421 typename std::enable_if<
422 std::is_same_v<typename vector_traits<remove_cvref_t<X>>::scalar_type,
423 typename vector_traits<remove_cvref_t<DataType>>::scalar_type>,
424 bool>::type = false>
425 CK_TILE_HOST_DEVICE constexpr void
427 index_t linear_offset,
428 bool is_valid_element,
429 const X& x,
432 {
433 buf_.template update_raw<DstInMemOp, X, oob_conditional_check, pre_nop>(
434 coord.get_offset() / PackedSize, linear_offset / PackedSize, is_valid_element, x);
435 }
436
437 // member
440};
441
442// placeholder type if we want to opt-out a tile view parameter
444{
445};
446
447template <address_space_enum BufferAddressSpace = address_space_enum::generic,
450 typename DataType,
451 typename... Ts>
452CK_TILE_HOST_DEVICE constexpr auto make_tensor_view(DataType* __restrict__ p,
453 const tensor_descriptor<Ts...>& desc)
454{
455 auto buffer_view =
457
458 return tensor_view<decltype(buffer_view), decltype(desc), DstInMemOp>{buffer_view, desc};
459}
460
461template <address_space_enum BufferAddressSpace = address_space_enum::generic,
464 typename DataType,
465 typename... Lengths,
466 typename... Strides,
467 index_t GuaranteedLastDimensionVectorLength = -1,
468 index_t GuaranteedLastDimensionVectorStride = -1,
469 typename std::enable_if<sizeof...(Lengths) == sizeof...(Strides), bool>::type = false>
470CK_TILE_HOST_DEVICE constexpr auto
471make_naive_tensor_view(DataType* __restrict__ p,
472 const tuple<Lengths...>& lengths,
473 const tuple<Strides...>& strides,
476{
477 auto desc = make_naive_tensor_descriptor(lengths,
478 strides,
481
482 auto buffer_view =
483 make_buffer_view<BufferAddressSpace, Coherence>(p, desc.get_element_space_size());
484
485 return tensor_view<decltype(buffer_view), decltype(desc), DstInMemOp>{buffer_view, desc};
486}
487
488template <address_space_enum BufferAddressSpace = address_space_enum::generic,
490 typename DataType,
491 typename... Lengths,
492 index_t GuaranteedLastDimensionVectorLength = -1>
493CK_TILE_HOST_DEVICE constexpr auto
494make_naive_tensor_view_packed(DataType* __restrict__ p,
495 const tuple<Lengths...>& lengths,
497{
498 auto desc =
500
501 auto buffer_view =
502 make_buffer_view<BufferAddressSpace, Coherence>(p, desc.get_element_space_size());
503
504 return tensor_view<decltype(buffer_view), decltype(desc)>{buffer_view, desc};
505}
506
507template <typename OldTensorView,
508 typename NewTransforms,
509 typename NewLowerDimensionOldVisibleIdss,
510 typename NewUpperDimensionNewVisibleIdss>
511CK_TILE_HOST_DEVICE constexpr auto transform_tensor_view(const OldTensorView& old_tensor_view,
512 const NewTransforms& new_transforms,
513 NewLowerDimensionOldVisibleIdss,
514 NewUpperDimensionNewVisibleIdss)
515{
516 auto new_desc = transform_tensor_descriptor(old_tensor_view.desc_,
517 new_transforms,
518 NewLowerDimensionOldVisibleIdss{},
519 NewUpperDimensionNewVisibleIdss{});
520
521 return tensor_view<typename OldTensorView::buffer_view,
522 remove_cvref_t<decltype(new_desc)>,
523 remove_cvref_t<OldTensorView>::DstInMemOp>{old_tensor_view.buf_, new_desc};
524}
525
526template <typename TensorView,
527 typename TileLengths, // tuple<...>
528 typename DoPads> // sequence<bool, bool, ...>
529CK_TILE_HOST_DEVICE constexpr auto
530pad_tensor_view(const TensorView& tensor_view, const TileLengths& tile_lengths, DoPads)
531{
532
533 constexpr index_t num_dim = DoPads::size();
534
535 static_assert(num_dim == TileLengths::size() && num_dim == TensorView::get_num_of_dimension(),
536 "wrong! inconsistent # of dimensions");
537
538 // transforms
539 const auto transforms = generate_tuple(
540 [&](auto idim) {
541 const auto old_length = tensor_view.get_tensor_descriptor().get_length(idim);
542
543 const auto tile_length = tile_lengths[idim];
544
545 const auto new_length = integer_divide_ceil(old_length, tile_length) * tile_length;
546
547 const auto pad_length = new_length - old_length;
548
549 constexpr bool DoPad = DoPads::at(idim);
550
551 const auto transform =
553 make_pass_through_transform(old_length));
554
555 return transform;
556 },
558
559 // lower dimension Id
560 const auto lower_dimss =
561 generate_tuple([&](auto idim) { return sequence<idim.value>{}; }, number<num_dim>{});
562
563 // upper dimension Id
564 const auto upper_dimss = lower_dimss;
565
566 return transform_tensor_view(tensor_view, transforms, lower_dimss, upper_dimss);
567}
568
569} // namespace ck_tile
#define CK_TILE_LDS_ADDR
Definition config.hpp:58
#define CK_TILE_HOST_DEVICE
Definition config.hpp:42
Definition tile/core/algorithm/cluster_descriptor.hpp:13
CK_TILE_HOST_DEVICE constexpr auto make_naive_tensor_descriptor_packed(const tuple< Lengths... > &lengths, number< GuaranteedLastDimensionVectorLength >=number<-1 >{})
Definition tile/core/tensor/tensor_descriptor.hpp:371
remove_cv_t< std::remove_reference_t< T > > remove_cvref_t
Definition type_traits.hpp:21
CK_TILE_HOST_DEVICE constexpr auto make_naive_tensor_view(DataType *__restrict__ p, const tuple< Lengths... > &lengths, const tuple< Strides... > &strides, number< GuaranteedLastDimensionVectorLength >=number<-1 >{}, number< GuaranteedLastDimensionVectorStride >=number<-1 >{})
Definition tensor_view.hpp:471
constexpr auto conditional_expr(X &&x, Y &&y)
Definition tile/core/utility/functional.hpp:220
CK_TILE_HOST_DEVICE constexpr auto make_pass_through_transform(const LowLength &low_length)
Definition coordinate_transform.hpp:1558
typename std::remove_reference< T >::type remove_reference_t
Definition type_traits.hpp:15
CK_TILE_HOST_DEVICE constexpr auto make_tensor_view(DataType *__restrict__ p, const tensor_descriptor< Ts... > &desc)
Definition tensor_view.hpp:452
memory_operation_enum
Definition arch.hpp:56
@ set
Definition arch.hpp:57
CK_TILE_HOST_DEVICE constexpr auto make_naive_tensor_descriptor(const tuple< Lengths... > &lengths, const tuple< Strides... > &strides, number< GuaranteedLastDimensionVectorLength >=number<-1 >{}, number< GuaranteedLastDimensionVectorStride >=number<-1 >{})
Definition tile/core/tensor/tensor_descriptor.hpp:274
constant< b > bool_constant
Definition tile/core/numeric/integral_constant.hpp:43
amd_buffer_coherence_enum
Definition tile/core/arch/amd_buffer_addressing.hpp:1404
@ coherence_default
Definition tile/core/arch/amd_buffer_addressing.hpp:1405
CK_TILE_HOST_DEVICE constexpr auto transform_tensor_descriptor(const OldTensorDescriptor &old_tensor_desc, const NewTransforms &new_transforms, NewLowerDimensionOldTopIdss, NewUpperDimensionNewTopIdss)
Definition tile/core/tensor/tensor_descriptor.hpp:203
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
constant< v > number
Definition tile/core/numeric/integral_constant.hpp:37
CK_TILE_HOST_DEVICE constexpr auto generate_tuple(F &&f, number< N >)
Definition tile/core/container/tuple.hpp:429
CK_TILE_HOST_DEVICE constexpr auto integer_divide_ceil(X x, Y y)
Definition tile/core/numeric/math.hpp:149
CK_TILE_HOST_DEVICE constexpr auto pad_tensor_view(const TensorView &tensor_view, const TileLengths &tile_lengths, DoPads)
Definition tensor_view.hpp:530
address_space_enum
Definition arch.hpp:46
@ generic
Definition arch.hpp:47
int32_t index_t
Definition integer.hpp:9
CK_TILE_HOST_DEVICE constexpr auto transform_tensor_view(const OldTensorView &old_tensor_view, const NewTransforms &new_transforms, NewLowerDimensionOldVisibleIdss, NewUpperDimensionNewVisibleIdss)
Definition tensor_view.hpp:511
CK_TILE_HOST_DEVICE constexpr auto make_right_pad_transform(const LowLength &low_length, const RightPadLength &right_pad_, bool_constant< SkipIsValidCheck >=bool_constant< false >{})
Definition coordinate_transform.hpp:1584
CK_TILE_HOST_DEVICE constexpr auto make_buffer_view(T *__restrict__ p, BufferSizeType buffer_size)
Definition buffer_view.hpp:1262
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 auto make_naive_tensor_view_packed(DataType *__restrict__ p, const tuple< Lengths... > &lengths, number< GuaranteedLastDimensionVectorLength >=number<-1 >{})
Definition tensor_view.hpp:494
A fixed-size array container similar to std::array with additional utilities.
Definition tile/core/container/array.hpp:43
Definition buffer_view.hpp:35
Definition tensor_view.hpp:444
Definition tile/core/numeric/numeric.hpp:81
Definition tile/core/container/sequence.hpp:49
Definition tile/core/tensor/tensor_descriptor.hpp:34
CK_TILE_HOST_DEVICE constexpr auto get_element_space_size() const
Definition tile/core/tensor/tensor_descriptor.hpp:96
Definition tensor_view.hpp:41
CK_TILE_HOST_DEVICE constexpr auto & get_tensor_descriptor() const
Definition tensor_view.hpp:61
TensorDesc desc_
Definition tensor_view.hpp:439
CK_TILE_HOST_DEVICE constexpr void async_get_vectorized_elements_raw(remove_cvref_t< DataType > *smem, const TensorCoord &coord, index_t linear_offset, bool is_valid_element, bool_constant< pre_nop >={}) const
Definition tensor_view.hpp:243
CK_TILE_HOST_DEVICE constexpr tensor_view()=default
decltype(make_tensor_coordinate(TensorDesc{}, TensorIndex{})) TensorCoord
Definition tensor_view.hpp:46
static constexpr index_t PackedSize
Definition tensor_view.hpp:48
CK_TILE_HOST_DEVICE constexpr void set_vectorized_elements_raw(const TensorCoord &coord, index_t linear_offset, bool is_valid_element, const X &x, bool_constant< oob_conditional_check >={})
Definition tensor_view.hpp:347
CK_TILE_HOST_DEVICE constexpr remove_cvref_t< X > get_transpose_vectorized_elements(const TensorCoord &coord, index_t linear_offset) const
Definition tensor_view.hpp:262
CK_TILE_HOST_DEVICE constexpr remove_cvref_t< X > get_vectorized_elements(const TensorCoord &coord, index_t linear_offset, bool_constant< oob_conditional_check >={}) const
Definition tensor_view.hpp:81
typename buffer_view::type DataType
Definition tensor_view.hpp:43
CK_TILE_HOST_DEVICE constexpr remove_cvref_t< X > get_vectorized_elements(const TensorCoord &coord, index_t linear_offset, bool is_valid_element, bool_constant< oob_conditional_check >={}) const
Definition tensor_view.hpp:99
CK_TILE_HOST_DEVICE constexpr const auto & get_buffer_view() const
Definition tensor_view.hpp:68
buffer_view buf_
Definition tensor_view.hpp:438
CK_TILE_HOST_DEVICE constexpr void set_vectorized_elements(const TensorCoord &coord, index_t linear_offset, const X &x, bool_constant< oob_conditional_check >={})
Definition tensor_view.hpp:292
static CK_TILE_HOST_DEVICE constexpr index_t get_num_of_dimension()
Definition tensor_view.hpp:63
array< index_t, TensorDesc::get_num_of_top_dimension()> TensorIndex
Definition tensor_view.hpp:45
CK_TILE_HOST_DEVICE void get_vectorized_elements_raw(remove_cvref_t< X > &dst, const TensorCoord &coord, index_t linear_offset, bool_constant< oob_conditional_check >={}, bool_constant< pre_nop >={}) const
Definition tensor_view.hpp:119
CK_TILE_HOST_DEVICE constexpr void update_vectorized_elements_raw(const TensorCoord &coord, index_t linear_offset, bool is_valid_element, const X &x, bool_constant< oob_conditional_check >={}, bool_constant< pre_nop >={})
Definition tensor_view.hpp:426
static constexpr auto DstInMemOp
Definition tensor_view.hpp:47
CK_TILE_HOST_DEVICE constexpr void async_get_vectorized_elements(CK_TILE_LDS_ADDR remove_cvref_t< DataType > *smem, const TensorCoord &coord, index_t linear_offset, bool is_valid_element, bool_constant< oob_conditional_check >={}) const
Definition tensor_view.hpp:182
CK_TILE_HOST_DEVICE constexpr void update_vectorized_elements_raw(const TensorCoord &coord, index_t linear_offset, const X &x, bool_constant< oob_conditional_check >={}, bool_constant< pre_nop >={})
Definition tensor_view.hpp:405
CK_TILE_HOST_DEVICE constexpr void set_vectorized_elements_raw(const TensorCoord &coord, index_t linear_offset, const X &x, bool_constant< oob_conditional_check >={})
Definition tensor_view.hpp:328
CK_TILE_HOST_DEVICE constexpr remove_cvref_t< X > get_transpose_vectorized_elements(const TensorCoord &coord, index_t linear_offset, bool is_valid_element) const
Definition tensor_view.hpp:276
CK_TILE_HOST_DEVICE constexpr auto & get_buffer_view()
Definition tensor_view.hpp:70
CK_TILE_HOST_DEVICE constexpr void async_get_vectorized_elements_raw(remove_cvref_t< DataType > *smem, const TensorCoord &coord, index_t coord_extra_offset, index_t linear_offset, bool_constant< pre_nop >={}) const
Definition tensor_view.hpp:222
CK_TILE_HOST_DEVICE void init_raw()
Definition tensor_view.hpp:59
CK_TILE_HOST_DEVICE constexpr void async_get_vectorized_elements(CK_TILE_LDS_ADDR remove_cvref_t< DataType > *smem, const TensorCoord &coord, index_t linear_offset, bool_constant< oob_conditional_check >={}) const
Definition tensor_view.hpp:162
CK_TILE_HOST_DEVICE constexpr void async_get_vectorized_elements_raw(remove_cvref_t< DataType > *smem, const TensorCoord &coord, index_t linear_offset, bool_constant< pre_nop >={}) const
Definition tensor_view.hpp:202
CK_TILE_HOST_DEVICE constexpr void update_vectorized_elements(const TensorCoord &coord, index_t linear_offset, const X &x, bool_constant< oob_conditional_check >={})
Definition tensor_view.hpp:366
CK_TILE_HOST_DEVICE constexpr tensor_view(const buffer_view &buffer_view, const TensorDesc &desc)
Definition tensor_view.hpp:53
CK_TILE_HOST_DEVICE void get_vectorized_elements_raw(remove_cvref_t< X > &dst, const TensorCoord &coord, index_t linear_offset, bool is_valid_element, bool_constant< oob_conditional_check >={}, bool_constant< pre_nop >={}) const
Definition tensor_view.hpp:140
CK_TILE_HOST_DEVICE constexpr void update_vectorized_elements(const TensorCoord &coord, index_t linear_offset, bool is_valid_element, const X &x, bool_constant< oob_conditional_check >={})
Definition tensor_view.hpp:385
CK_TILE_HOST_DEVICE constexpr void set_vectorized_elements(const TensorCoord &coord, index_t linear_offset, bool is_valid_element, const X &x, bool_constant< oob_conditional_check >={})
Definition tensor_view.hpp:311
remove_reference_t< BufferView_ > buffer_view
Definition tensor_view.hpp:42
remove_cvref_t< TensorDesc_ > TensorDesc
Definition tensor_view.hpp:44
Definition tile/core/container/tuple.hpp:192
Definition vector_type.hpp:90