已合并
asc_mmad_mx接口参数bug修复,asc_copy_l12l0a/b接口文档bug修复 #601
ruanyy创建于 2月27日
asc_mmad_mx接口参数bug修复,asc_copy_l12l0a/b接口文档bug修复 #601
已合并
ruanyy创建于 2月27日
9 个文件变更+122-122
@@ -56,7 +56,7 @@ $$
56| n_dim | 输入 | 左矩阵width、右矩阵height,取值范围为[0,4095]。 |56| n_dim | 输入 | 左矩阵width、右矩阵height,取值范围为[0,4095]。 |
57| right_width | 输入 | 右矩阵width,取值范围为[0,4095]。 |57| right_width | 输入 | 右矩阵width,取值范围为[0,4095]。 |
58| unit_flag | 输入 | unit_flag是一种asc_mmad接口和Fixpipe指令细粒度的并行,使能该功能后,硬件每计算完一个分形,计算结果就会被搬出,该功能不适用于L0C Buffer累加的场景。取值说明如下: <br>&bull; 0:保留值; <br>&bull; 2:使能unit_flag,硬件执行完指令后,不会关闭unit_flag功能;<br>&bull; 3:使能unit_flag,硬件执行完指令后,会关闭unit_flag功能。<br> 使能该功能时,矩阵计算的unit_flag在最后一个分形设置为3,其余分形计算设置为2即可。 |58| unit_flag | 输入 | unit_flag是一种asc_mmad接口和Fixpipe指令细粒度的并行,使能该功能后,硬件每计算完一个分形,计算结果就会被搬出,该功能不适用于L0C Buffer累加的场景。取值说明如下: <br>&bull; 0:保留值; <br>&bull; 2:使能unit_flag,硬件执行完指令后,不会关闭unit_flag功能;<br>&bull; 3:使能unit_flag,硬件执行完指令后,会关闭unit_flag功能。<br> 使能该功能时,矩阵计算的unit_flag在最后一个分形设置为3,其余分形计算设置为2即可。 |
59-| k_direction_align | 输入 | 当源操作数和目的操作数为float时,L0A和L0B中的矩阵在right_width方向上按ceil(right_width/16)*16方式都对齐到48,对于right_width=44,L0A/L0B中的所有12个分都会被读取到Cube中,而对于right_width=36,只有L0A/L0B中的10个分形会被读取到Cube中。 |59+| k_direction_align | 输入 | 当源操作数和目的操作数为float时,L0A和L0B中的矩阵在right_width方向上按ceil(right_width/16)*16方式都对齐到48,对于right_width=44,L0A/L0B中的所有12个分都会被读取到Cube中,而对于right_width=36,只有L0A/L0B中的10个分形会被读取到Cube中。 |
60| is_weight_offset | 输入 | 使能weight matrix offset。|60| is_weight_offset | 输入 | 使能weight matrix offset。|
61| c_matrix_source | 输入 | 配置C矩阵初始值是否来源于C2(存放Bias的硬件缓存区)。取值说明如下: <br>&bull; true:来源于C2。 <br>&bull; false:来源于CO1(L0C)。 |61| c_matrix_source | 输入 | 配置C矩阵初始值是否来源于C2(存放Bias的硬件缓存区)。取值说明如下: <br>&bull; true:来源于C2。 <br>&bull; false:来源于CO1(L0C)。 |
62| c_matrix_init_val | 输入 | 配置C矩阵初始值是否为0。取值说明如下: <br>&bull; true:C矩阵初始值为0。 <br>&bull; false:C矩阵初始值通过c_matrix_source参数进行配置。 |62| c_matrix_init_val | 输入 | 配置C矩阵初始值是否为0。取值说明如下: <br>&bull; true:C矩阵初始值为0。 <br>&bull; false:C矩阵初始值通过c_matrix_source参数进行配置。 |
@@ -19,27 +19,27 @@ $$
19- 常规计算19- 常规计算
20 20 
21 ```cpp21 ```cpp
22- __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix, __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)22+ __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix, __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
W
Wwuzhaolin2月27日

为啥调换这两个参数的顺序?

likedislike
ruanyy
2月27日 评论:
23- __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix, __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)23+ __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix, __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
24- __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix, __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)24+ __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix, __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
25- __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix, __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)25+ __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix, __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
26- __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix, __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)26+ __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix, __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
27- __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix, __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)27+ __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix, __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
28- __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix, __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)28+ __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix, __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
29- __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix, __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val) 29+ __aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix, __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
30 ```30 ```
31 31 
32- 同步计算32- 同步计算
33 33 
34 ```cpp34 ```cpp
35- __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix, __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)35+ __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix, __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
36- __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix, __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)36+ __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix, __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
37- __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix, __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)37+ __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix, __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
38- __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix, __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)38+ __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix, __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
39- __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix, __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)39+ __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix, __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
40- __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix, __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)40+ __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix, __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
41- __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix, __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)41+ __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix, __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
42- __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix, __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)42+ __aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix, __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width, uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
43 ```43 ```
44 44 
45## 参数说明45## 参数说明
@@ -50,8 +50,8 @@ $$
50| a_matrix | 输入 | 源操作数,左矩阵A。|50| a_matrix | 输入 | 源操作数,左矩阵A。|
51| b_matrix | 输入 | 源操作数,右矩阵B。 |51| b_matrix | 输入 | 源操作数,右矩阵B。 |
52| left_height | 输入 | 左矩阵height ,取值范围为[0,4095]。 |52| left_height | 输入 | 左矩阵height ,取值范围为[0,4095]。 |
53-| right_width | 输入 | 右矩阵Height,取值范围为[0,4095]。 |
54| n_dim | 输入 | 左矩阵Width、右矩阵Height,取值范围为[0,4095]。 |53| n_dim | 输入 | 左矩阵Width、右矩阵Height,取值范围为[0,4095]。 |
54+| right_width | 输入 | 右矩阵Height,取值范围为[0,4095]。 |
55| unit_flag | 输入 | unit_flag是一种asc_mmad_mx接口细粒度的并行,使能该功能后,硬件每计算完一个分形,计算结果就会被搬出,该功能不适用于L0C Buffer累加的场景。取值说明如下: <br>&bull; 0:保留值; <br>&bull; 2:使能unit_flag,硬件执行完指令后,不会关闭unit_flag功能;<br>&bull; 3:使能unit_flag,硬件执行完指令后,会关闭unit_flag功能。<br> 使能该功能时,矩阵计算的unit_flag在最后一个分形设置为3,其余分形计算设置为2即可。 |55| unit_flag | 输入 | unit_flag是一种asc_mmad_mx接口细粒度的并行,使能该功能后,硬件每计算完一个分形,计算结果就会被搬出,该功能不适用于L0C Buffer累加的场景。取值说明如下: <br>&bull; 0:保留值; <br>&bull; 2:使能unit_flag,硬件执行完指令后,不会关闭unit_flag功能;<br>&bull; 3:使能unit_flag,硬件执行完指令后,会关闭unit_flag功能。<br> 使能该功能时,矩阵计算的unit_flag在最后一个分形设置为3,其余分形计算设置为2即可。 |
56| disable_gemv | 输入 | 是否关闭GEMV模式,false表示开启GEMV模式,true表示关闭GEMV模式。<br>GEMV(General Matrix-Vector Multiplication)表示实现矩阵和向量的乘积。当left_height=1时,开启GEMV后,从L0A Buffer读取数据时,将以ND格式进行读取,而不会将其视为ZZ格式。 |56| disable_gemv | 输入 | 是否关闭GEMV模式,false表示开启GEMV模式,true表示关闭GEMV模式。<br>GEMV(General Matrix-Vector Multiplication)表示实现矩阵和向量的乘积。当left_height=1时,开启GEMV后,从L0A Buffer读取数据时,将以ND格式进行读取,而不会将其视为ZZ格式。 |
57| c_matrix_source | 输入 | 配置C矩阵初始值是否来源于BiasTable(存放Bias的硬件缓存区)。取值说明如下: <br>&bull; true:来源于BiasTable。 <br>&bull; false:来源于L0C。 |57| c_matrix_source | 输入 | 配置C矩阵初始值是否来源于BiasTable(存放Bias的硬件缓存区)。取值说明如下: <br>&bull; true:来源于BiasTable。 <br>&bull; false:来源于L0C。 |
@@ -73,7 +73,7 @@
73| src | 输入 | 源L1 Buffer地址。 |73| src | 输入 | 源L1 Buffer地址。 |
74| start_index | 输入 | 分形矩阵ID,说明搬运起始位置为源操作数中第几个分形(0为源操作数中第1个分形矩阵)。取值范围:[0, 65535]。单位为512字节。 |74| start_index | 输入 | 分形矩阵ID,说明搬运起始位置为源操作数中第几个分形(0为源操作数中第1个分形矩阵)。取值范围:[0, 65535]。单位为512字节。 |
75| repeat | 输入 | 迭代次数,每个迭代可以处理512B数据。取值范围:[1, 255]。 |75| repeat | 输入 | 迭代次数,每个迭代可以处理512B数据。取值范围:[1, 255]。 |
76-| src_stride | 输入 | 源操作数单次迭代内不同DataBlock间地址步长。取值范围:[0, 65535]。 |76+| src_stride | 输入 | 相邻迭代间,源操作数前一个分形与后一个分型起始地址的间隔。取值范围:[0, 65535]。单位为512字节。 |
M
Mmunanhw3月2日

分形

likedislike
77| dst_gap | 输入 | 目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。取值范围:[0, 65535]。单位为512字节。 |77| dst_gap | 输入 | 目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。取值范围:[0, 65535]。单位为512字节。 |
78 78 
79表2 3D格式参数说明79表2 3D格式参数说明
@@ -83,7 +83,7 @@
83| src | 输入 | 源L1 Buffer地址。 |83| src | 输入 | 源L1 Buffer地址。 |
84| k_extension | 输入 | 该指令在目的操作数width维度的传输长度。如果不覆盖最右侧的分形,对于half类型,应为16的倍数,对于int8_t/uint8_t类型,应为32的倍数;如果覆盖最右侧的分形,则无倍数要求。取值范围:[1, 65535]。 |84| k_extension | 输入 | 该指令在目的操作数width维度的传输长度。如果不覆盖最右侧的分形,对于half类型,应为16的倍数,对于int8_t/uint8_t类型,应为32的倍数;如果覆盖最右侧的分形,则无倍数要求。取值范围:[1, 65535]。 |
85| m_extension | 输入 | 该指令在目的操作数height维度的传输长度。如果不覆盖最下侧的分形,对于half/int8_t/uint8_t类型,应为16的倍数;如果覆盖最下侧的分形,则无倍数要求。取值范围:[1, 65535]。 |85| m_extension | 输入 | 该指令在目的操作数height维度的传输长度。如果不覆盖最下侧的分形,对于half/int8_t/uint8_t类型,应为16的倍数;如果覆盖最下侧的分形,则无倍数要求。取值范围:[1, 65535]。 |
86-| k_start_pt | 输入 | 该指令在目的操作数width维度的起点。对于half类型,应为16的倍数,对于int8_t/uint8_t类型,应为32的倍数。取值范围:[1, 65535] |86+| k_start_pt | 输入 | 该指令在目的操作数width维度的起点。对于half类型,应为16的倍数,对于int8_t/uint8_t类型,应为32的倍数。取值范围:[0, 65535] |
87| m_start_pt | 输入 | 该指令在目的操作数height维度的起点,如果不覆盖最下侧的分形,对于half/int8_t/uint8_t,应为16的倍数;如果覆盖最下侧的分形,则无倍数要求。取值范围:[0, 65535] 。|87| m_start_pt | 输入 | 该指令在目的操作数height维度的起点,如果不覆盖最下侧的分形,对于half/int8_t/uint8_t,应为16的倍数;如果覆盖最下侧的分形,则无倍数要求。取值范围:[0, 65535] 。|
88| stride_w | 输入 | 卷积核在源操作数width维度滑动的步长,取值范围:[1, 63]。 |88| stride_w | 输入 | 卷积核在源操作数width维度滑动的步长,取值范围:[1, 63]。 |
89| stride_h | 输入 | 卷积核在源操作数height维度滑动的步长,取值范围:[1, 63]。 |89| stride_h | 输入 | 卷积核在源操作数height维度滑动的步长,取值范围:[1, 63]。 |
@@ -134,7 +134,7 @@ PIPE_MTE1
134 134 
135对于 A2 的 feature map 来说有两种方案,水平分块和垂直分块。分别对应参数中 repeatMode 的 0 和 1。135对于 A2 的 feature map 来说有两种方案,水平分块和垂直分块。分别对应参数中 repeatMode 的 0 和 1。
136 136 
137-注:下图中的分矩阵大小为 4x4,实际应该为 16x16 (对于 u8/s8 类型为 16x32)137+注:下图中的分矩阵大小为 4x4,实际应该为 16x16 (对于 u8/s8 类型为 16x32)
138 138 
139repeatMode =0 时,每次 repeat 会改变在 filter 窗口中读取数据点的位置,然后跳到下一个 C0 的位置。139repeatMode =0 时,每次 repeat 会改变在 filter 窗口中读取数据点的位置,然后跳到下一个 C0 的位置。
140 140 
@@ -67,7 +67,7 @@
67| src | 输入 | 源L1 Buffer地址。 |67| src | 输入 | 源L1 Buffer地址。 |
68| start_index | 输入 | 分形矩阵ID,说明搬运起始位置为源操作数中第几个分形(0为源操作数中第1个分形矩阵)。取值范围:[0, 65535]。单位为512字节。 |68| start_index | 输入 | 分形矩阵ID,说明搬运起始位置为源操作数中第几个分形(0为源操作数中第1个分形矩阵)。取值范围:[0, 65535]。单位为512字节。 |
69| repeat | 输入 | 迭代次数,每个迭代可以处理512B数据。取值范围:[1, 255]。 |69| repeat | 输入 | 迭代次数,每个迭代可以处理512B数据。取值范围:[1, 255]。 |
70-| src_stride | 输入 | 源操作数单次迭代内不同DataBlock间地址步长。取值范围:[0, 65535]。 |70+| src_stride | 输入 | 相邻迭代间,源操作数前一个分形与后一个分形起始地址的间隔。取值范围:[0, 65535]。单位为512字节。 |
71| dst_gap | 输入 | 目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。取值范围:[0, 65535]。单位为512字节。 |71| dst_gap | 输入 | 目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。取值范围:[0, 65535]。单位为512字节。 |
72 72 
73表2 3D格式参数说明73表2 3D格式参数说明
@@ -77,7 +77,7 @@
77| src | 输入 | 源L1 Buffer地址。 |77| src | 输入 | 源L1 Buffer地址。 |
78| k_extension | 输入 | 该指令在目的操作数width维度的传输长度。如果不覆盖最右侧的分形,对于half类型,应为16的倍数,对于int8_t/uint8_t类型,应为32的倍数;如果覆盖最右侧的分形,则无倍数要求。取值范围:[1, 65535]。 |78| k_extension | 输入 | 该指令在目的操作数width维度的传输长度。如果不覆盖最右侧的分形,对于half类型,应为16的倍数,对于int8_t/uint8_t类型,应为32的倍数;如果覆盖最右侧的分形,则无倍数要求。取值范围:[1, 65535]。 |
79| m_extension | 输入 | 该指令在目的操作数height维度的传输长度。如果不覆盖最下侧的分形,对于half/int8_t/uint8_t类型,应为16的倍数;如果覆盖最下侧的分形,则无倍数要求。取值范围:[1, 65535]。 |79| m_extension | 输入 | 该指令在目的操作数height维度的传输长度。如果不覆盖最下侧的分形,对于half/int8_t/uint8_t类型,应为16的倍数;如果覆盖最下侧的分形,则无倍数要求。取值范围:[1, 65535]。 |
80-| k_start_pt | 输入 | 该指令在目的操作数width维度的起点。对于half类型,应为16的倍数,对于int8_t/uint8_t类型,应为32的倍数。取值范围:[1, 65535] |80+| k_start_pt | 输入 | 该指令在目的操作数width维度的起点。对于half类型,应为16的倍数,对于int8_t/uint8_t类型,应为32的倍数。取值范围:[0, 65535] |
81| m_start_pt | 输入 | 该指令在目的操作数height维度的起点,如果不覆盖最下侧的分形,对于half/int8_t/uint8_t,应为16的倍数;如果覆盖最下侧的分形,则无倍数要求。取值范围:[0, 65535] 。|81| m_start_pt | 输入 | 该指令在目的操作数height维度的起点,如果不覆盖最下侧的分形,对于half/int8_t/uint8_t,应为16的倍数;如果覆盖最下侧的分形,则无倍数要求。取值范围:[0, 65535] 。|
82| stride_w | 输入 | 卷积核在源操作数width维度滑动的步长,取值范围:[1, 63]。 |82| stride_w | 输入 | 卷积核在源操作数width维度滑动的步长,取值范围:[1, 63]。 |
83| stride_h | 输入 | 卷积核在源操作数height维度滑动的步长,取值范围:[1, 63]。 |83| stride_h | 输入 | 卷积核在源操作数height维度滑动的步长,取值范围:[1, 63]。 |
@@ -128,7 +128,7 @@ PIPE_MTE1
128 128 
129对于 A2 的 feature map 来说有两种方案,水平分块和垂直分块。分别对应参数中 repeatMode 的 0 和 1。129对于 A2 的 feature map 来说有两种方案,水平分块和垂直分块。分别对应参数中 repeatMode 的 0 和 1。
130 130 
131-注:下图中的分矩阵大小为 4x4,实际应该为 16x16 (对于 u8/s8 类型为 16x32)131+注:下图中的分矩阵大小为 4x4,实际应该为 16x16 (对于 u8/s8 类型为 16x32)
132 132 
133repeatMode =0 时,每次 repeat 会改变在 filter 窗口中读取数据点的位置,然后跳到下一个 C0 的位置。133repeatMode =0 时,每次 repeat 会改变在 filter 窗口中读取数据点的位置,然后跳到下一个 C0 的位置。
134 134 
@@ -67,7 +67,7 @@ __aicore__ inline void asc_copy_l12l0b(__cb__ int4b_t* dst, __cbuf__ int4b_t* sr
67__aicore__ inline void asc_copy_l12l0b_sync(__cb__ int4b_t* dst, __cbuf__ int4b_t* src,67__aicore__ inline void asc_copy_l12l0b_sync(__cb__ int4b_t* dst, __cbuf__ int4b_t* src,
68 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)68 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
69{69{
70- asc_copy_l12l0b_impl(dst, src, start_index, repeat, src_stride, dst_gap);70+ asc_copy_l12l0b_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
71}71}
72 72 
73__aicore__ inline void asc_copy_l12l0b(__cb__ int8_t* dst, __cbuf__ int8_t* src,73__aicore__ inline void asc_copy_l12l0b(__cb__ int8_t* dst, __cbuf__ int8_t* src,
@@ -79,7 +79,7 @@ __aicore__ inline void asc_copy_l12l0b(__cb__ int8_t* dst, __cbuf__ int8_t* src,
79__aicore__ inline void asc_copy_l12l0b_sync(__cb__ int8_t* dst, __cbuf__ int8_t* src,79__aicore__ inline void asc_copy_l12l0b_sync(__cb__ int8_t* dst, __cbuf__ int8_t* src,
80 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)80 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
81{81{
82- asc_copy_l12l0b_impl(dst, src, start_index, repeat, src_stride, dst_gap);82+ asc_copy_l12l0b_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
83}83}
84 84 
85__aicore__ inline void asc_copy_l12l0b(__cb__ uint8_t* dst, __cbuf__ uint8_t* src,85__aicore__ inline void asc_copy_l12l0b(__cb__ uint8_t* dst, __cbuf__ uint8_t* src,
@@ -91,7 +91,7 @@ __aicore__ inline void asc_copy_l12l0b(__cb__ uint8_t* dst, __cbuf__ uint8_t* sr
91__aicore__ inline void asc_copy_l12l0b_sync(__cb__ uint8_t* dst, __cbuf__ uint8_t* src,91__aicore__ inline void asc_copy_l12l0b_sync(__cb__ uint8_t* dst, __cbuf__ uint8_t* src,
92 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)92 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
93{93{
94- asc_copy_l12l0b_impl(dst, src, start_index, repeat, src_stride, dst_gap);94+ asc_copy_l12l0b_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
95}95}
96 96 
97__aicore__ inline void asc_copy_l12l0b(__cb__ half* dst, __cbuf__ half* src,97__aicore__ inline void asc_copy_l12l0b(__cb__ half* dst, __cbuf__ half* src,
@@ -103,7 +103,7 @@ __aicore__ inline void asc_copy_l12l0b(__cb__ half* dst, __cbuf__ half* src,
103__aicore__ inline void asc_copy_l12l0b_sync(__cb__ half* dst, __cbuf__ half* src,103__aicore__ inline void asc_copy_l12l0b_sync(__cb__ half* dst, __cbuf__ half* src,
104 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)104 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
105{105{
106- asc_copy_l12l0b_impl(dst, src, start_index, repeat, src_stride, dst_gap);106+ asc_copy_l12l0b_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
107}107}
108 108 
109__aicore__ inline void asc_copy_l12l0b(__cb__ bfloat16_t* dst, __cbuf__ bfloat16_t* src,109__aicore__ inline void asc_copy_l12l0b(__cb__ bfloat16_t* dst, __cbuf__ bfloat16_t* src,
@@ -115,7 +115,7 @@ __aicore__ inline void asc_copy_l12l0b(__cb__ bfloat16_t* dst, __cbuf__ bfloat16
115__aicore__ inline void asc_copy_l12l0b_sync(__cb__ bfloat16_t* dst, __cbuf__ bfloat16_t* src,115__aicore__ inline void asc_copy_l12l0b_sync(__cb__ bfloat16_t* dst, __cbuf__ bfloat16_t* src,
116 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)116 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
117{117{
118- asc_copy_l12l0b_impl(dst, src, start_index, repeat, src_stride, dst_gap);118+ asc_copy_l12l0b_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
119}119}
120 120 
121__aicore__ inline void asc_copy_l12l0b(__cb__ int32_t* dst, __cbuf__ int32_t* src,121__aicore__ inline void asc_copy_l12l0b(__cb__ int32_t* dst, __cbuf__ int32_t* src,
@@ -127,7 +127,7 @@ __aicore__ inline void asc_copy_l12l0b(__cb__ int32_t* dst, __cbuf__ int32_t* sr
127__aicore__ inline void asc_copy_l12l0b_sync(__cb__ int32_t* dst, __cbuf__ int32_t* src,127__aicore__ inline void asc_copy_l12l0b_sync(__cb__ int32_t* dst, __cbuf__ int32_t* src,
128 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)128 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
129{129{
130- asc_copy_l12l0b_impl(dst, src, start_index, repeat, src_stride, dst_gap);130+ asc_copy_l12l0b_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
131}131}
132 132 
133__aicore__ inline void asc_copy_l12l0b(__cb__ uint32_t* dst, __cbuf__ uint32_t* src,133__aicore__ inline void asc_copy_l12l0b(__cb__ uint32_t* dst, __cbuf__ uint32_t* src,
@@ -139,7 +139,7 @@ __aicore__ inline void asc_copy_l12l0b(__cb__ uint32_t* dst, __cbuf__ uint32_t*
139__aicore__ inline void asc_copy_l12l0b_sync(__cb__ uint32_t* dst, __cbuf__ uint32_t* src,139__aicore__ inline void asc_copy_l12l0b_sync(__cb__ uint32_t* dst, __cbuf__ uint32_t* src,
140 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)140 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
141{141{
142- asc_copy_l12l0b_impl(dst, src, start_index, repeat, src_stride, dst_gap);142+ asc_copy_l12l0b_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
143}143}
144 144 
145__aicore__ inline void asc_copy_l12l0b(__cb__ float* dst, __cbuf__ float* src,145__aicore__ inline void asc_copy_l12l0b(__cb__ float* dst, __cbuf__ float* src,
@@ -151,7 +151,7 @@ __aicore__ inline void asc_copy_l12l0b(__cb__ float* dst, __cbuf__ float* src,
151__aicore__ inline void asc_copy_l12l0b_sync(__cb__ float* dst, __cbuf__ float* src,151__aicore__ inline void asc_copy_l12l0b_sync(__cb__ float* dst, __cbuf__ float* src,
152 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)152 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
153{153{
154- asc_copy_l12l0b_impl(dst, src, start_index, repeat, src_stride, dst_gap);154+ asc_copy_l12l0b_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
155}155}
156 156 
157// ==========asc_copy_l12l0b, 3D, half/bfloat16_t/int32_t/uint32_t/float==========157// ==========asc_copy_l12l0b, 3D, half/bfloat16_t/int32_t/uint32_t/float==========
@@ -280,7 +280,7 @@ __aicore__ inline void asc_copy_l12l0a(__ca__ int4b_t* dst, __cbuf__ int4b_t* sr
280__aicore__ inline void asc_copy_l12l0a_sync(__ca__ int4b_t* dst, __cbuf__ int4b_t* src,280__aicore__ inline void asc_copy_l12l0a_sync(__ca__ int4b_t* dst, __cbuf__ int4b_t* src,
281 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)281 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
282{282{
283- asc_copy_l12l0a_impl(dst, src, start_index, repeat, src_stride, dst_gap);283+ asc_copy_l12l0a_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
284}284}
285 285 
286__aicore__ inline void asc_copy_l12l0a(__ca__ int8_t* dst, __cbuf__ int8_t* src,286__aicore__ inline void asc_copy_l12l0a(__ca__ int8_t* dst, __cbuf__ int8_t* src,
@@ -292,7 +292,7 @@ __aicore__ inline void asc_copy_l12l0a(__ca__ int8_t* dst, __cbuf__ int8_t* src,
292__aicore__ inline void asc_copy_l12l0a_sync(__ca__ int8_t* dst, __cbuf__ int8_t* src,292__aicore__ inline void asc_copy_l12l0a_sync(__ca__ int8_t* dst, __cbuf__ int8_t* src,
293 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)293 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
294{294{
295- asc_copy_l12l0a_impl(dst, src, start_index, repeat, src_stride, dst_gap);295+ asc_copy_l12l0a_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
296}296}
297 297 
298__aicore__ inline void asc_copy_l12l0a(__ca__ uint8_t* dst, __cbuf__ uint8_t* src,298__aicore__ inline void asc_copy_l12l0a(__ca__ uint8_t* dst, __cbuf__ uint8_t* src,
@@ -304,7 +304,7 @@ __aicore__ inline void asc_copy_l12l0a(__ca__ uint8_t* dst, __cbuf__ uint8_t* sr
304__aicore__ inline void asc_copy_l12l0a_sync(__ca__ uint8_t* dst, __cbuf__ uint8_t* src,304__aicore__ inline void asc_copy_l12l0a_sync(__ca__ uint8_t* dst, __cbuf__ uint8_t* src,
305 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)305 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
306{306{
307- asc_copy_l12l0a_impl(dst, src, start_index, repeat, src_stride, dst_gap);307+ asc_copy_l12l0a_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
308}308}
309 309 
310__aicore__ inline void asc_copy_l12l0a(__ca__ half* dst, __cbuf__ half* src,310__aicore__ inline void asc_copy_l12l0a(__ca__ half* dst, __cbuf__ half* src,
@@ -316,7 +316,7 @@ __aicore__ inline void asc_copy_l12l0a(__ca__ half* dst, __cbuf__ half* src,
316__aicore__ inline void asc_copy_l12l0a_sync(__ca__ half* dst, __cbuf__ half* src,316__aicore__ inline void asc_copy_l12l0a_sync(__ca__ half* dst, __cbuf__ half* src,
317 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)317 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
318{318{
319- asc_copy_l12l0a_impl(dst, src, start_index, repeat, src_stride, dst_gap);319+ asc_copy_l12l0a_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
320}320}
321 321 
322__aicore__ inline void asc_copy_l12l0a(__ca__ bfloat16_t* dst, __cbuf__ bfloat16_t* src,322__aicore__ inline void asc_copy_l12l0a(__ca__ bfloat16_t* dst, __cbuf__ bfloat16_t* src,
@@ -328,7 +328,7 @@ __aicore__ inline void asc_copy_l12l0a(__ca__ bfloat16_t* dst, __cbuf__ bfloat16
328__aicore__ inline void asc_copy_l12l0a_sync(__ca__ bfloat16_t* dst, __cbuf__ bfloat16_t* src,328__aicore__ inline void asc_copy_l12l0a_sync(__ca__ bfloat16_t* dst, __cbuf__ bfloat16_t* src,
329 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)329 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
330{330{
331- asc_copy_l12l0a_impl(dst, src, start_index, repeat, src_stride, dst_gap);331+ asc_copy_l12l0a_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
332}332}
333 333 
334__aicore__ inline void asc_copy_l12l0a(__ca__ int32_t* dst, __cbuf__ int32_t* src,334__aicore__ inline void asc_copy_l12l0a(__ca__ int32_t* dst, __cbuf__ int32_t* src,
@@ -340,7 +340,7 @@ __aicore__ inline void asc_copy_l12l0a(__ca__ int32_t* dst, __cbuf__ int32_t* sr
340__aicore__ inline void asc_copy_l12l0a_sync(__ca__ int32_t* dst, __cbuf__ int32_t* src,340__aicore__ inline void asc_copy_l12l0a_sync(__ca__ int32_t* dst, __cbuf__ int32_t* src,
341 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)341 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
342{342{
343- asc_copy_l12l0a_impl(dst, src, start_index, repeat, src_stride, dst_gap);343+ asc_copy_l12l0a_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
344}344}
345 345 
346__aicore__ inline void asc_copy_l12l0a(__ca__ uint32_t* dst, __cbuf__ uint32_t* src,346__aicore__ inline void asc_copy_l12l0a(__ca__ uint32_t* dst, __cbuf__ uint32_t* src,
@@ -352,7 +352,7 @@ __aicore__ inline void asc_copy_l12l0a(__ca__ uint32_t* dst, __cbuf__ uint32_t*
352__aicore__ inline void asc_copy_l12l0a_sync(__ca__ uint32_t* dst, __cbuf__ uint32_t* src,352__aicore__ inline void asc_copy_l12l0a_sync(__ca__ uint32_t* dst, __cbuf__ uint32_t* src,
353 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)353 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
354{354{
355- asc_copy_l12l0a_impl(dst, src, start_index, repeat, src_stride, dst_gap);355+ asc_copy_l12l0a_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
356}356}
357 357 
358__aicore__ inline void asc_copy_l12l0a(__ca__ float* dst, __cbuf__ float* src,358__aicore__ inline void asc_copy_l12l0a(__ca__ float* dst, __cbuf__ float* src,
@@ -364,7 +364,7 @@ __aicore__ inline void asc_copy_l12l0a(__ca__ float* dst, __cbuf__ float* src,
364__aicore__ inline void asc_copy_l12l0a_sync(__ca__ float* dst, __cbuf__ float* src,364__aicore__ inline void asc_copy_l12l0a_sync(__ca__ float* dst, __cbuf__ float* src,
365 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)365 uint16_t start_index, uint8_t repeat, uint16_t src_stride, uint16_t dst_gap)
366{366{
367- asc_copy_l12l0a_impl(dst, src, start_index, repeat, src_stride, dst_gap);367+ asc_copy_l12l0a_sync_impl(dst, src, start_index, repeat, src_stride, dst_gap);
368}368}
369 369 
370// ==========asc_copy_l12l0a, 3D, int4b_t*/int8_t/uint8_t/half/bfloat16_t/int32_t/uint32_t/float==========370// ==========asc_copy_l12l0a, 3D, int4b_t*/int8_t/uint8_t/half/bfloat16_t/int32_t/uint32_t/float==========
@@ -27,130 +27,130 @@ __aicore__ inline void asc_set_l0c2gm_nz2nd(uint64_t nd_num, uint64_t src_nd_str
27 27 
28// ==========mmad_mx(e1m2/e1m2, e4m3/e5m2)==========28// ==========mmad_mx(e1m2/e1m2, e4m3/e5m2)==========
29__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,29__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,
30- __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,30+ __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
31 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)31 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
32{32{
33- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,33+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
34 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);34 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
35}35}
36 36 
37__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,37__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,
38- __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,38+ __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
39 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)39 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
40{40{
41- asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,41+ asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
42 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);42 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
43}43}
44 44 
45__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,45__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,
46- __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,46+ __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
47 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)47 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
48{48{
49- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,49+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
50 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);50 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
51}51}
52 52 
53__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,53__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,
54- __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,54+ __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
55 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)55 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
56{56{
57- asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,57+ asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
58 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);58 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
59}59}
60 60 
61__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,61__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,
62- __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,62+ __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
63 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)63 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
64{64{
65- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,65+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
66 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);66 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
67}67}
68 68 
69__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,69__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,
70- __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,70+ __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
71 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)71 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
72{72{
73- asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,73+ asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
74 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);74 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
75}75}
76 76 
77__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,77__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,
78- __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,78+ __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
79 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)79 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
80{80{
81- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,81+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
82 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);82 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
83}83}
84 84 
85__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,85__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,
86- __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,86+ __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
87 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)87 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
88{88{
89- asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,89+ asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
90 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);90 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
91}91}
92 92 
93__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,93__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,
94- __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,94+ __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
95 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)95 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
96{96{
97- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,97+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
98 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);98 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
99}99}
100 100 
101__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,101__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,
102- __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,102+ __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
103 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)103 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
104{104{
105- asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,105+ asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
106 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);106 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
107}107}
108 108 
109__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,109__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,
110- __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,110+ __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
111 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)111 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
112{112{
113- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,113+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
114 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);114 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
115}115}
116 116 
117__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,117__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,
118- __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,118+ __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
119 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)119 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
120{120{
121- asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,121+ asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
122 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);122 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
123}123}
124 124 
125__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,125__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,
126- __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,126+ __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
127 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)127 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
128{128{
129- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,129+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
130 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);130 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
131}131}
132 132 
133__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,133__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,
134- __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,134+ __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
135 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)135 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
136{136{
137- asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,137+ asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
138 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);138 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
139}139}
140 140 
141__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,141__aicore__ inline void asc_mmad_mx(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,
142- __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,142+ __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
143 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)143 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
144{144{
145- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,145+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
146 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);146 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
147}147}
148 148 
149__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,149__aicore__ inline void asc_mmad_mx_sync(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,
150- __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,150+ __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
151 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)151 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
152{152{
153- asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,153+ asc_mmad_mx_sync_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
154 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);154 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
155}155}
156#endif156#endif
@@ -21,176 +21,176 @@
21 21 
22// float, e1m2, e1m222// float, e1m2, e1m2
23__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,23__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,
24- __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,24+ __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
25 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)25 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
26{26{
27 if ASC_IS_AIC {27 if ASC_IS_AIC {
28 __ca__ float4_e1m2x2_t* a_matrix_tmp = reinterpret_cast<__ca__ float4_e1m2x2_t*>(a_matrix);28 __ca__ float4_e1m2x2_t* a_matrix_tmp = reinterpret_cast<__ca__ float4_e1m2x2_t*>(a_matrix);
29 __cb__ float4_e1m2x2_t* b_matrix_tmp = reinterpret_cast<__cb__ float4_e1m2x2_t*>(b_matrix);29 __cb__ float4_e1m2x2_t* b_matrix_tmp = reinterpret_cast<__cb__ float4_e1m2x2_t*>(b_matrix);
30- mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, right_width, n_dim,30+ mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, n_dim, right_width,
31 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);31 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
32 }32 }
33}33}
34 34 
35__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,35__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,
36- __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,36+ __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
37 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)37 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
38{38{
39- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,39+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
40 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);40 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
41 asc_sync_post_process();41 asc_sync_post_process();
42}42}
43 43 
44// float, e1m2, e2m144// float, e1m2, e2m1
45__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,45__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,
46- __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,46+ __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
47 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)47 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
48{48{
49 if ASC_IS_AIC {49 if ASC_IS_AIC {
50 __ca__ float4_e1m2x2_t* a_matrix_tmp = reinterpret_cast<__ca__ float4_e1m2x2_t*>(a_matrix);50 __ca__ float4_e1m2x2_t* a_matrix_tmp = reinterpret_cast<__ca__ float4_e1m2x2_t*>(a_matrix);
51 __cb__ float4_e2m1x2_t* b_matrix_tmp = reinterpret_cast<__cb__ float4_e2m1x2_t*>(b_matrix);51 __cb__ float4_e2m1x2_t* b_matrix_tmp = reinterpret_cast<__cb__ float4_e2m1x2_t*>(b_matrix);
52- mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, right_width, n_dim,52+ mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, n_dim, right_width,
53 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);53 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
54 }54 }
55}55}
56 56 
57__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,57__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp4x2_e1m2_t* a_matrix,
58- __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,58+ __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
59 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)59 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
60{60{
61- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,61+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
62 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);62 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
63 asc_sync_post_process();63 asc_sync_post_process();
64}64}
65 65 
66// float, e2m1, e1m266// float, e2m1, e1m2
67__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,67__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,
68- __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,68+ __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
69 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)69 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
70{70{
71 if ASC_IS_AIC {71 if ASC_IS_AIC {
72 __ca__ float4_e2m1x2_t* a_matrix_tmp = reinterpret_cast<__ca__ float4_e2m1x2_t*>(a_matrix);72 __ca__ float4_e2m1x2_t* a_matrix_tmp = reinterpret_cast<__ca__ float4_e2m1x2_t*>(a_matrix);
73 __cb__ float4_e1m2x2_t* b_matrix_tmp = reinterpret_cast<__cb__ float4_e1m2x2_t*>(b_matrix);73 __cb__ float4_e1m2x2_t* b_matrix_tmp = reinterpret_cast<__cb__ float4_e1m2x2_t*>(b_matrix);
74- mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, right_width, n_dim,74+ mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, n_dim, right_width,
75 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);75 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
76 }76 }
77}77}
78 78 
79__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,79__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,
80- __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,80+ __cb__ fp4x2_e1m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
81 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)81 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
82{82{
83- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,83+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
84 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);84 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
85 asc_sync_post_process();85 asc_sync_post_process();
86}86}
87 87 
88// float, e2m1, e2m188// float, e2m1, e2m1
89__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,89__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,
90- __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,90+ __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
91 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)91 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
92{92{
93 if ASC_IS_AIC {93 if ASC_IS_AIC {
94 __ca__ float4_e2m1x2_t* a_matrix_tmp = reinterpret_cast<__ca__ float4_e2m1x2_t*>(a_matrix);94 __ca__ float4_e2m1x2_t* a_matrix_tmp = reinterpret_cast<__ca__ float4_e2m1x2_t*>(a_matrix);
95 __cb__ float4_e2m1x2_t* b_matrix_tmp = reinterpret_cast<__cb__ float4_e2m1x2_t*>(b_matrix);95 __cb__ float4_e2m1x2_t* b_matrix_tmp = reinterpret_cast<__cb__ float4_e2m1x2_t*>(b_matrix);
96- mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, right_width, n_dim,96+ mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, n_dim, right_width,
97 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);97 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
98 }98 }
99}99}
100 100 
101__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,101__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp4x2_e2m1_t* a_matrix,
102- __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,102+ __cb__ fp4x2_e2m1_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
103 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)103 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
104{104{
105- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,105+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
106 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);106 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
107 asc_sync_post_process();107 asc_sync_post_process();
108}108}
109 109 
110// float, e4m3, e4m3110// float, e4m3, e4m3
111__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,111__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,
112- __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,112+ __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
113 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)113 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
114{114{
115 if ASC_IS_AIC {115 if ASC_IS_AIC {
116 __ca__ float8_e4m3_t* a_matrix_tmp = reinterpret_cast<__ca__ float8_e4m3_t*>(a_matrix);116 __ca__ float8_e4m3_t* a_matrix_tmp = reinterpret_cast<__ca__ float8_e4m3_t*>(a_matrix);
117 __cb__ float8_e4m3_t* b_matrix_tmp = reinterpret_cast<__cb__ float8_e4m3_t*>(b_matrix);117 __cb__ float8_e4m3_t* b_matrix_tmp = reinterpret_cast<__cb__ float8_e4m3_t*>(b_matrix);
118- mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, right_width, n_dim,118+ mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, n_dim, right_width,
119 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);119 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
120 }120 }
121}121}
122 122 
123__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,123__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,
124- __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,124+ __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
125 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)125 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
126{126{
127- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,127+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
128 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);128 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
129 asc_sync_post_process();129 asc_sync_post_process();
130}130}
131 131 
132// float, e4m3, e5m2132// float, e4m3, e5m2
133__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,133__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,
134- __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,134+ __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
135 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)135 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
136{136{
137 if ASC_IS_AIC {137 if ASC_IS_AIC {
138 __ca__ float8_e4m3_t* a_matrix_tmp = reinterpret_cast<__ca__ float8_e4m3_t*>(a_matrix);138 __ca__ float8_e4m3_t* a_matrix_tmp = reinterpret_cast<__ca__ float8_e4m3_t*>(a_matrix);
139 __cb__ float8_e5m2_t* b_matrix_tmp = reinterpret_cast<__cb__ float8_e5m2_t*>(b_matrix);139 __cb__ float8_e5m2_t* b_matrix_tmp = reinterpret_cast<__cb__ float8_e5m2_t*>(b_matrix);
140- mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, right_width, n_dim,140+ mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, n_dim, right_width,
141 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);141 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
142 }142 }
143}143}
144 144 
145__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,145__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp8_e4m3fn_t* a_matrix,
146- __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,146+ __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
147 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)147 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
148{148{
149- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,149+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
150 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);150 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
151 asc_sync_post_process();151 asc_sync_post_process();
152}152}
153 153 
154// float, e5m2, e4m3154// float, e5m2, e4m3
155__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,155__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,
156- __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,156+ __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
157 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)157 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
158{158{
159 if ASC_IS_AIC {159 if ASC_IS_AIC {
160 __ca__ float8_e5m2_t* a_matrix_tmp = reinterpret_cast<__ca__ float8_e5m2_t*>(a_matrix);160 __ca__ float8_e5m2_t* a_matrix_tmp = reinterpret_cast<__ca__ float8_e5m2_t*>(a_matrix);
161 __cb__ float8_e4m3_t* b_matrix_tmp = reinterpret_cast<__cb__ float8_e4m3_t*>(b_matrix);161 __cb__ float8_e4m3_t* b_matrix_tmp = reinterpret_cast<__cb__ float8_e4m3_t*>(b_matrix);
162- mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, right_width, n_dim,162+ mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, n_dim, right_width,
163 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);163 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
164 }164 }
165}165}
166 166 
167__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,167__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,
168- __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,168+ __cb__ fp8_e4m3fn_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
169 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)169 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
170{170{
171- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,171+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
172 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);172 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
173 asc_sync_post_process();173 asc_sync_post_process();
174}174}
175 175 
176// float, e5m2, e5m2176// float, e5m2, e5m2
177__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,177__aicore__ inline void asc_mmad_mx_impl(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,
178- __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,178+ __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
179 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)179 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
180{180{
181 if ASC_IS_AIC {181 if ASC_IS_AIC {
182 __ca__ float8_e5m2_t* a_matrix_tmp = reinterpret_cast<__ca__ float8_e5m2_t*>(a_matrix);182 __ca__ float8_e5m2_t* a_matrix_tmp = reinterpret_cast<__ca__ float8_e5m2_t*>(a_matrix);
183 __cb__ float8_e5m2_t* b_matrix_tmp = reinterpret_cast<__cb__ float8_e5m2_t*>(b_matrix);183 __cb__ float8_e5m2_t* b_matrix_tmp = reinterpret_cast<__cb__ float8_e5m2_t*>(b_matrix);
184- mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, right_width, n_dim,184+ mad_mx(c_matrix, a_matrix_tmp, b_matrix_tmp, left_height, n_dim, right_width,
185 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);185 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
186 }186 }
187}187}
188 188 
189__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,189__aicore__ inline void asc_mmad_mx_sync_impl(__cc__ float* c_matrix, __ca__ fp8_e5m2_t* a_matrix,
190- __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t right_width, uint16_t n_dim,190+ __cb__ fp8_e5m2_t* b_matrix, uint16_t left_height, uint16_t n_dim, uint16_t right_width,
191 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)191 uint8_t unit_flag, bool disable_gemv, bool c_matrix_source, bool c_matrix_init_val)
192{192{
193- asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, right_width, n_dim,193+ asc_mmad_mx_impl(c_matrix, a_matrix, b_matrix, left_height, n_dim, right_width,
194 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);194 unit_flag, disable_gemv, c_matrix_source, c_matrix_init_val);
195 asc_sync_post_process();195 asc_sync_post_process();
196}196}
Minclude/c_api/cube_compute/cube_compute.h+16-16文件内容审核中,请稍后刷新重试
@@ -27,7 +27,7 @@ protected:
27 \27 \
28namespace { \28namespace { \
29void cce_name##_##src0_type##_##src1_type##_Stub(dst_type* dst, src0_type* src0, src1_type* src1, \29void cce_name##_##src0_type##_##src1_type##_Stub(dst_type* dst, src0_type* src0, src1_type* src1, \
30- uint16_t left_height, uint16_t right_width, uint16_t n_dim, \30+ uint16_t left_height, uint16_t n_dim, uint16_t right_width, \
31 uint8_t unitFlag, bool disableGemv, bool cMatrixSource, bool cMatrixInitVal) {} \31 uint8_t unitFlag, bool disableGemv, bool cMatrixSource, bool cMatrixInitVal) {} \
32} \32} \
33 \33 \
@@ -49,7 +49,7 @@ TEST_F(TestVectorCompute##class_name##_##src0_type##_##src1_type##_CApi, c_api_n
49 .times(1) \49 .times(1) \
50 .will(invoke(cce_name##_##src0_type##_##src1_type##_Stub)); \50 .will(invoke(cce_name##_##src0_type##_##src1_type##_Stub)); \
51 \51 \
52- c_api_name(dst, src0, src1, left_height, right_width, n_dim, unitFlag, disableGemv, \52+ c_api_name(dst, src0, src1, left_height, n_dim, right_width, unitFlag, disableGemv, \
53 cMatrixSource, cMatrixInitVal); \53 cMatrixSource, cMatrixInitVal); \
54 GlobalMockObject::verify(); \54 GlobalMockObject::verify(); \
55}55}