13#if defined(__HIPCC_RTC__) || defined(CK_CODE_GEN_RTC)
23#if defined(__HIPCC_RTC__) || defined(CK_CODE_GEN_RTC)
24using byte =
unsigned char;
33using f4_t =
unsigned _BitInt(4);
35using bf6_t =
unsigned _BitInt(6);
53 static_assert(I < 2,
"Index is out of range.");
57 return data & 0b00001111;
62 return (x1 << 4) | (x0 & 0b00001111);
77template <
typename BitType, index_t pk_size>
88 "Packed elements must fit exactly into the element storage.");
97 __host__ __device__
constexpr f6_pk_t() {}
104 template <typename T, typename = enable_if_t<scalar_type<T>::vector_size ==
packed_size>>
118 template <
typename T>
122 "T must be an integral type.");
132 old_value |= (bits << bit_offset);
133 data_[arr_index] = old_value;
140 data_[arr_index + 1] = next_value;
154 bits |= (pk.
data_[arr_idx + 1] & ((1u << overhang) - 1)) << (
num_bits_elem - overhang);
157 return static_cast<BitType
>(bits & 0x3F);
176 return !(lhs == rhs);
197 return x > 1u ? (1u << (32u - __builtin_clz(x - 1u))) : x;
212template <
typename TV>
216template <
typename TV>
223template <
typename X,
typename Y>
227template <
typename T, index_t N>
284#ifdef CK_EXPERIMENTAL_BIT_INT_EXTENSION_INT4
289 static constexpr index_t vector_size = 1;
328#ifndef CK_CODE_GEN_RTC
383 static constexpr auto get_packed_type_info()
416template <
typename T, index_t N = 0>
420 static constexpr auto get_packed_type()
425 static_assert(N == 0 || N == 2,
"Packed size N for int4_t must be 2.");
430 static_assert(N == 0 || N == 2,
"Packed size N for f4_t must be 2.");
435 static_assert(N == 0 || N == 16 || N == 32,
"Packed size N for f6_t must be 16 or 32.");
436 if constexpr(N == 16)
438 else if constexpr(N == 0 || N == 32)
443 static_assert(N == 0 || N == 16 || N == 32,
444 "Packed size N for bf6_t must be 16 or 32.");
445 if constexpr(N == 16)
447 else if constexpr(N == 0 || N == 32)
458template <
typename T, index_t N = 0>
488#ifndef CK_CODE_GEN_RTC
494#if defined(__HIPCC_RTC__) || defined(CK_CODE_GEN_RTC)
499 return typeid(T).name();
ushort bhalf_t
Definition data_type.hpp:30
f6_pk_t< f6_t, 16 > f6x16_pk_t
Definition data_type.hpp:180
int32_t index_t
Definition ck.hpp:299
constexpr bool is_native_type()
Definition data_type.hpp:203
remove_cv_t< remove_reference_t< T > > remove_cvref_t
Definition type.hpp:297
_Float16 half_t
Definition data_type.hpp:31
integral_constant< index_t, N > Number
Definition number.hpp:12
typename packed_type_maker< T, N >::packed_type packed_type_t
Definition data_type.hpp:459
long int64_t
Definition data_type.hpp:464
const char * get_type_name()
Definition data_type.hpp:468
typename packed_type_info< T >::element_type element_type_t
Definition data_type.hpp:408
f6_pk_t< bf6_t, 32 > bf6x32_pk_t
Definition data_type.hpp:183
is_same< typename scalar_type< remove_cvref_t< X > >::type, typename scalar_type< remove_cvref_t< Y > >::type > has_same_scalar_type
Definition data_type.hpp:224
unsigned _BitInt(4) f4_t
Definition data_type.hpp:33
_BitInt(6) f6_t
Definition data_type.hpp:34
f6_pk_t< f6_t, 32 > f6x32_pk_t
Definition data_type.hpp:181
unsigned _BitInt(6) bf6_t
Definition data_type.hpp:35
constexpr auto next_pow2(uint32_t x)
Definition data_type.hpp:194
constexpr bool is_same_v
Definition type.hpp:283
constexpr bool is_packed_type_v
Definition data_type.hpp:414
_BitInt(4) int4_t
Definition data_type.hpp:32
_BitInt(19) tf32_t
Definition data_type.hpp:29
constexpr index_t packed_size_v
Definition data_type.hpp:411
f6_pk_t< bf6_t, 16 > bf6x16_pk_t
Definition data_type.hpp:182
signed short int16_t
Definition stdint.h:122
unsigned short uint16_t
Definition stdint.h:125
unsigned int uint32_t
Definition stdint.h:126
signed int int32_t
Definition stdint.h:123
unsigned char uint8_t
Definition stdint.h:124
signed char int8_t
Definition stdint.h:121
Definition utility/tuple.hpp:117
Definition amd_ck_fp8.hpp:49
unsigned char data_type
Definition amd_ck_fp8.hpp:50
Definition amd_ck_fp8.hpp:369
fp8_storage_t data_type
Definition amd_ck_fp8.hpp:370
static constexpr value_type value
Definition utility/integral_constant.hpp:13
Unsigned representation of a conventional biased Float32 exponent.
Definition utility/e8m0.hpp:26
uint8_t type
Definition utility/e8m0.hpp:27
Definition data_type.hpp:42
static constexpr int packed_size
Definition data_type.hpp:43
__host__ __device__ type unpack(Number< I >) const
Definition data_type.hpp:51
__host__ __device__ friend bool operator!=(const f4x2_pk_t &lhs, const f4x2_pk_t &rhs)
Definition data_type.hpp:71
type data
Definition data_type.hpp:46
__host__ __device__ friend bool operator==(const f4x2_pk_t &lhs, const f4x2_pk_t &rhs)
Definition data_type.hpp:66
__host__ __device__ type pack(const type x0, const type x1)
Definition data_type.hpp:60
__host__ __device__ constexpr f4x2_pk_t(const type init)
Definition data_type.hpp:48
uint8_t type
Definition data_type.hpp:45
__host__ __device__ constexpr f4x2_pk_t()
Definition data_type.hpp:47
Definition data_type.hpp:79
__host__ __device__ friend bool operator==(const f6_pk_t &lhs, const f6_pk_t &rhs)
Definition data_type.hpp:163
static constexpr index_t vector_size
Definition data_type.hpp:89
__host__ __device__ friend bool operator!=(const f6_pk_t &lhs, const f6_pk_t &rhs)
Definition data_type.hpp:174
static constexpr index_t packed_size
Definition data_type.hpp:82
f6_pk_t< BitType, packed_size > type
Definition data_type.hpp:95
__host__ __device__ void pack(const T x, const index_t i)
Definition data_type.hpp:119
uint32_t element_type
Definition data_type.hpp:80
__host__ static __device__ BitType unpack(const type &pk, const index_t i)
Definition data_type.hpp:144
element_type storage_type
Definition data_type.hpp:92
static constexpr index_t num_bits_elem
Definition data_type.hpp:83
__host__ __device__ constexpr f6_pk_t()
Definition data_type.hpp:97
__host__ __device__ f6_pk_t(const int8_t v)
Definition data_type.hpp:112
static constexpr index_t num_bits_vec_elem
Definition data_type.hpp:85
__host__ __device__ constexpr f6_pk_t(const storage_type &init)
Definition data_type.hpp:98
storage_type data_
Definition data_type.hpp:93
__host__ __device__ f6_pk_t(const T &v)
Definition data_type.hpp:105
__host__ __device__ BitType unpack(const index_t i) const
Definition data_type.hpp:160
Definition amd_ck_fp8.hpp:36
unsigned char data_type
Definition amd_ck_fp8.hpp:37
Definition amd_ck_fp8.hpp:323
fp8_storage_t data_type
Definition amd_ck_fp8.hpp:324
Definition data_type.hpp:218
static constexpr bool value
Definition data_type.hpp:219
Definition data_type.hpp:381
static constexpr auto packed_size
Definition data_type.hpp:404
remove_cvref_t< decltype(get_packed_type_info().At(ck::Number< 1 >{}))> element_type
Definition data_type.hpp:403
Definition data_type.hpp:418
remove_cvref_t< decltype(get_packed_type())> packed_type
Definition data_type.hpp:455
Definition data_type.hpp:187
type data
Definition data_type.hpp:189
__host__ __device__ constexpr pk_i4_t()
Definition data_type.hpp:190
int8_t type
Definition data_type.hpp:188
__host__ __device__ constexpr pk_i4_t(type init)
Definition data_type.hpp:191
static constexpr index_t vector_size
Definition data_type.hpp:231
T type
Definition data_type.hpp:230
bf6x16_pk_t::storage_type type
Definition data_type.hpp:368
static constexpr index_t vector_size
Definition data_type.hpp:369
bf6x32_pk_t::storage_type type
Definition data_type.hpp:354
static constexpr index_t vector_size
Definition data_type.hpp:355
bf8_fnuz_t::data_type type
Definition data_type.hpp:310
static constexpr index_t vector_size
Definition data_type.hpp:311
static constexpr index_t vector_size
Definition data_type.hpp:325
bf8_ocp_t::data_type type
Definition data_type.hpp:324
bhalf_t type
Definition data_type.hpp:259
static constexpr index_t vector_size
Definition data_type.hpp:260
static constexpr index_t vector_size
Definition data_type.hpp:376
bool type
Definition data_type.hpp:375
double type
Definition data_type.hpp:238
static constexpr index_t vector_size
Definition data_type.hpp:239
static constexpr index_t vector_size
Definition data_type.hpp:333
e8m0_bexp_t::type type
Definition data_type.hpp:332
static constexpr index_t vector_size
Definition data_type.hpp:341
f4x2_pk_t::type type
Definition data_type.hpp:340
static constexpr index_t vector_size
Definition data_type.hpp:362
f6x16_pk_t::storage_type type
Definition data_type.hpp:361
f6x32_pk_t::storage_type type
Definition data_type.hpp:347
static constexpr index_t vector_size
Definition data_type.hpp:348
static constexpr index_t vector_size
Definition data_type.hpp:304
f8_fnuz_t::data_type type
Definition data_type.hpp:303
static constexpr index_t vector_size
Definition data_type.hpp:318
f8_ocp_t::data_type type
Definition data_type.hpp:317
float type
Definition data_type.hpp:245
static constexpr index_t vector_size
Definition data_type.hpp:246
half_t type
Definition data_type.hpp:252
static constexpr index_t vector_size
Definition data_type.hpp:253
int32_t type
Definition data_type.hpp:266
static constexpr index_t vector_size
Definition data_type.hpp:267
int8_t type
Definition data_type.hpp:273
static constexpr index_t vector_size
Definition data_type.hpp:274
pk_i4_t type
Definition data_type.hpp:296
static constexpr index_t vector_size
Definition data_type.hpp:297
static constexpr index_t vector_size
Definition data_type.hpp:281
uint8_t type
Definition data_type.hpp:280
Definition data_type.hpp:39
Definition functional2.hpp:33