25#define TM_MDL_FP8_143 4
26#define TM_MDL_FP8_152 5
30#define TM_MDL_MAGIC 0x5849414d
31#define TM_ALIGN_SIZE (8)
32#define TM_ALIGN(addr) ((((size_t) (addr)) + (TM_ALIGN_SIZE - 1)) / TM_ALIGN_SIZE * TM_ALIGN_SIZE)
33#define TM_MATP(mat, y, x, ch) ((mat)->data + ((y) * (mat)->w + (x)) * (mat)->c + (ch))
35#if TM_MDL_TYPE == TM_MDL_INT8
41#define UINT2INT_SHIFT (0)
42#elif TM_MDL_TYPE == TM_MDL_INT16
48#define UINT2INT_SHIFT (8)
49#elif TM_MDL_TYPE == TM_MDL_FP32
55#elif TM_MDL_TYPE == TM_MDL_FP16
56#if TM_ARCH != TM_ARCH_RV64V
57#error "only support RV64V's float16!"
59#include <riscv_vector.h>
65#elif (TM_MDL_TYPE == TM_MDL_FP8_143) || (TM_MDL_TYPE == TM_MDL_FP8_152)
66#if TM_ARCH != TM_ARCH_CPU
67#error "only support CPU simulation now!"
75#error "Not support this MDL_TYPE!"
78#if TM_MDL_TYPE == TM_MDL_FP8_143
79#define TM_FP8_SCNT (1)
80#define TM_FP8_ECNT (4)
81#define TM_FP8_MCNT (3)
82#define TM_FP8_BIAS (9)
83#elif TM_MDL_TYPE == TM_MDL_FP8_152
84#define TM_FP8_SCNT (1)
85#define TM_FP8_ECNT (5)
86#define TM_FP8_MCNT (2)
87#define TM_FP8_BIAS (15)
91#define TM_FASTSCALE_SHIFT (8)
297tm_err_t tml_conv2d_dwconv2d(
tm_mat_t *in,
tm_mat_t *out,
wtype_t *w,
btype_t *b,
int kw,
int kh,
int sx,
int sy,
int dx,
int dy,
int act,
int pad_top,
int pad_bottom,
317#define TML_GET_INPUT(mdl, lh) ((mtype_t *) ((mdl)->buf + (lh)->in_oft))
318#define TML_GET_OUTPUT(mdl, lh) ((mtype_t *) ((mdl)->buf + (lh)->out_oft))
319#if (TM_MDL_TYPE == TM_MDL_INT8) || (TM_MDL_TYPE == TM_MDL_INT16)
320#define TML_DEQUANT(lh, x) (((sumtype_t) (x) - ((lh)->out_zp)) * ((lh)->out_s))
321#define TM_DEQUANT(i8, s, zp) (((sumtype_t) (i8) - (zp)) * (s))
322#define TM_QUANT(fp32, s, zp) ((mtype_t) ((fp32) / (s) + zp))
323#elif (TM_MDL_TYPE == TM_MDL_FP8_143) || (TM_MDL_TYPE == TM_MDL_FP8_152)
324#define TML_DEQUANT(lh, x) (tm_fp8to32(x))
326#define TML_DEQUANT(lh, x) ((float) (x))
327#define TM_DEQUANT(x, s, zp) (x)
328#define TM_QUANT(x, s, zp) (x)
334static inline float _exp(
float x) {
335 float p = 1.442695040f * x;
339 float z = p - (float) w + (
float) sign;
343 } v = {.i = (
uint32_t) ((1 << 23) * (p + 121.2740838f + 27.7280233f / (4.84252568f - z) - 1.49012907f * z))};
u32_t uint32_t
Definition stdint.h:13
s16_t int16_t
Definition stdint.h:9
s8_t int8_t
Definition stdint.h:6
s32_t int32_t
Definition stdint.h:12
u8_t uint8_t
Definition stdint.h:7
u16_t uint16_t
Definition stdint.h:10
Definition tinymaix.h:175
uint16_t dims
Definition tinymaix.h:176
uint16_t h
Definition tinymaix.h:177
mtype_t * data
Definition tinymaix.h:181
float * dataf
Definition tinymaix.h:182
uint16_t c
Definition tinymaix.h:179
uint16_t w
Definition tinymaix.h:178
Definition tinymaix.h:162
void * cb
Definition tinymaix.h:164
uint8_t * layer_body
Definition tinymaix.h:169
uint16_t main_alloc
Definition tinymaix.h:167
uint16_t layer_i
Definition tinymaix.h:168
uint8_t * buf
Definition tinymaix.h:165
uint8_t * subbuf
Definition tinymaix.h:166
tm_mdlbin_t * b
Definition tinymaix.h:163
Definition tinymaix.h:146
uint16_t input_cnt
Definition tinymaix.h:150
uint32_t magic
Definition tinymaix.h:147
uint16_t layer_cnt
Definition tinymaix.h:152
uint32_t buf_size
Definition tinymaix.h:153
uint16_t output_cnt
Definition tinymaix.h:151
uint32_t sub_size
Definition tinymaix.h:154
uint8_t out_deq
Definition tinymaix.h:149
uint8_t mdl_type
Definition tinymaix.h:148
Definition tinymaix.h:272
tml_head_t h
Definition tinymaix.h:273
sctype_t in_s1
Definition tinymaix.h:275
zptype_t in_zp1
Definition tinymaix.h:276
uint32_t reserve
Definition tinymaix.h:277
uint32_t in_oft1
Definition tinymaix.h:274
Definition tinymaix.h:203
tml_head_t h
Definition tinymaix.h:204
uint8_t kernel_w
Definition tinymaix.h:206
uint16_t act
Definition tinymaix.h:213
uint8_t kernel_h
Definition tinymaix.h:207
uint32_t b_oft
Definition tinymaix.h:223
uint32_t ws_oft
Definition tinymaix.h:220
uint8_t stride_w
Definition tinymaix.h:208
uint32_t w_oft
Definition tinymaix.h:222
uint32_t depth_mul
Definition tinymaix.h:217
uint8_t dilation_h
Definition tinymaix.h:212
uint8_t stride_h
Definition tinymaix.h:209
uint32_t reserve
Definition tinymaix.h:218
uint8_t dilation_w
Definition tinymaix.h:211
Definition tinymaix.h:249
uint8_t stride_h
Definition tinymaix.h:255
uint16_t act
Definition tinymaix.h:259
uint8_t dilation_w
Definition tinymaix.h:257
uint32_t b_oft
Definition tinymaix.h:267
uint8_t kernel_h
Definition tinymaix.h:253
uint8_t stride_w
Definition tinymaix.h:254
uint8_t dilation_h
Definition tinymaix.h:258
uint32_t ws_oft
Definition tinymaix.h:264
tml_head_t h
Definition tinymaix.h:250
uint32_t w_oft
Definition tinymaix.h:266
uint8_t kernel_w
Definition tinymaix.h:252
Definition tinymaix.h:232
uint32_t w_oft
Definition tinymaix.h:236
uint32_t b_oft
Definition tinymaix.h:237
tml_head_t h
Definition tinymaix.h:233
uint32_t ws_oft
Definition tinymaix.h:235
uint32_t reserve
Definition tinymaix.h:238
Definition tinymaix.h:228
tml_head_t h
Definition tinymaix.h:229
Definition tinymaix.h:187
uint32_t in_oft
Definition tinymaix.h:191
zptype_t out_zp
Definition tinymaix.h:199
sctype_t out_s
Definition tinymaix.h:198
uint16_t type
Definition tinymaix.h:188
uint16_t is_out
Definition tinymaix.h:189
sctype_t in_s
Definition tinymaix.h:196
zptype_t in_zp
Definition tinymaix.h:197
uint32_t out_oft
Definition tinymaix.h:192
uint32_t size
Definition tinymaix.h:190
Definition tinymaix.h:245
tml_head_t h
Definition tinymaix.h:246
Definition tinymaix.h:241
tml_head_t h
Definition tinymaix.h:242
tm_err_t tm_load(tm_mdl_t *mdl, const uint8_t *bin, uint8_t *buf, tm_cb_t cb, tm_mat_t *in)
Definition tm_model.c:17
tm_err_t tm_stat(tm_mdlbin_t *mdl)
Definition tm_stat.c:45
tm_err_t(* tml_stat_t)(tml_head_t *layer, tm_mat_t *in, tm_mat_t *out)
Definition tinymaix.h:282
tm_act_type_t
Definition tinymaix.h:123
@ TM_ACT_NONE
Definition tinymaix.h:124
@ TM_ACT_MAXCNT
Definition tinymaix.h:130
@ TM_ACT_RELU
Definition tinymaix.h:125
@ TM_ACT_RELU1
Definition tinymaix.h:126
@ TM_ACT_TANH
Definition tinymaix.h:128
@ TM_ACT_SIGNBIT
Definition tinymaix.h:129
@ TM_ACT_RELU6
Definition tinymaix.h:127
tm_err_t tml_gap(tm_mat_t *in, tm_mat_t *out, sctype_t in_s, zptype_t in_zp, sctype_t out_s, zptype_t out_zp)
Definition tm_layers.c:233
tm_err_t tml_reshape(tm_mat_t *in, tm_mat_t *out, sctype_t in_s, zptype_t in_zp, sctype_t out_s, zptype_t out_zp)
Definition tm_layers.c:305
uint8_t TM_WEAK tm_fp32to8(float fp32)
int32_t btype_t
Definition tinymaix.h:38
void tm_unload(tm_mdl_t *mdl)
Definition tm_model.c:48
float sctype_t
Definition tinymaix.h:90
tm_err_t
Definition tinymaix.h:94
@ TM_ERR_KSIZE
Definition tinymaix.h:104
@ TM_ERR_TODO
Definition tinymaix.h:102
@ TM_OK
Definition tinymaix.h:95
@ TM_ERR
Definition tinymaix.h:96
@ TM_ERR_MDLTYPE
Definition tinymaix.h:103
@ TM_ERR_LAYERTYPE
Definition tinymaix.h:100
@ TM_ERR_DIMS
Definition tinymaix.h:101
@ TM_ERR_UNSUPPORT
Definition tinymaix.h:98
@ TM_ERR_OOM
Definition tinymaix.h:99
@ TM_ERR_MAGIC
Definition tinymaix.h:97
tm_err_t tm_run(tm_mdl_t *mdl, tm_mat_t *in, tm_mat_t *out)
Definition tm_model.c:86
tm_err_t tml_fc(tm_mat_t *in, tm_mat_t *out, wtype_t *w, btype_t *b, sctype_t *ws, sctype_t in_s, zptype_t in_zp, sctype_t out_s, zptype_t out_zp)
Definition tm_layers.c:256
int8_t wtype_t
Definition tinymaix.h:37
tm_err_t tm_preprocess(tm_mdl_t *mdl, tm_pp_t pp_type, tm_mat_t *in, tm_mat_t *out)
Definition tm_model.c:55
int32_t zptype_t
Definition tinymaix.h:40
tm_err_t tml_add(tm_mat_t *in0, tm_mat_t *in1, tm_mat_t *out, sctype_t in_s0, zptype_t in_zp0, sctype_t in_s1, zptype_t in_zp1, sctype_t out_s, zptype_t out_zp)
Definition tm_layers.c:311
int8_t mtype_t
Definition tinymaix.h:36
int32_t sumtype_t
Definition tinymaix.h:39
tm_layer_type_t
Definition tinymaix.h:107
@ TML_CONV2D
Definition tinymaix.h:108
@ TML_DWCONV2D
Definition tinymaix.h:113
@ TML_FC
Definition tinymaix.h:110
@ TML_SOFTMAX
Definition tinymaix.h:111
@ TML_ADD
Definition tinymaix.h:114
@ TML_GAP
Definition tinymaix.h:109
@ TML_MAXCNT
Definition tinymaix.h:115
@ TML_RESHAPE
Definition tinymaix.h:112
float TM_WEAK tm_fp8to32(uint8_t fp8)
tm_err_t tml_conv2d_dwconv2d(tm_mat_t *in, tm_mat_t *out, wtype_t *w, btype_t *b, int kw, int kh, int sx, int sy, int dx, int dy, int act, int pad_top, int pad_bottom, int pad_left, int pad_right, int dmul, sctype_t *ws, sctype_t in_s, zptype_t in_zp, sctype_t out_s, zptype_t out_zp)
Definition tm_layers.c:68
tm_err_t tml_softmax(tm_mat_t *in, tm_mat_t *out, sctype_t in_s, zptype_t in_zp, sctype_t out_s, zptype_t out_zp)
Definition tm_layers.c:273
tm_err_t(* tm_cb_t)(tm_mdl_t *mdl, tml_head_t *lh)
Definition tinymaix.h:283
tm_pad_type_t
Definition tinymaix.h:118
@ TM_PAD_VALID
Definition tinymaix.h:119
@ TM_PAD_SAME
Definition tinymaix.h:120
tm_pp_t
Definition tinymaix.h:134
@ TMPP_UINT2FP01
Definition tinymaix.h:138
@ TMPP_UINT2INT
Definition tinymaix.h:137
@ TMPP_FP2INT
Definition tinymaix.h:136
@ TMPP_NONE
Definition tinymaix.h:135
@ TMPP_UINT2DTYPE
Definition tinymaix.h:140
@ TMPP_MAXCNT
Definition tinymaix.h:141
@ TMPP_UINT2FPN11
Definition tinymaix.h:139
static float _exp(float x)
Definition tinymaix.h:334
#define TM_WEAK
Definition tm_port.h:44