已合并
asc_mmad_mx接口参数bug修复,asc_copy_l12l0a/b接口文档bug修复 #601
ruanyy创建于 2月27日
asc_mmad_mx接口参数bug修复,asc_copy_l12l0a/b接口文档bug修复 #601
已合并
共 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>• 0:保留值; <br>• 2:使能unit_flag,硬件执行完指令后,不会关闭unit_flag功能;<br>• 3:使能unit_flag,硬件执行完指令后,会关闭unit_flag功能。<br> 使能该功能时,矩阵计算的unit_flag在最后一个分形设置为3,其余分形计算设置为2即可。 | | 58 | | unit_flag | 输入 | unit_flag是一种asc_mmad接口和Fixpipe指令细粒度的并行,使能该功能后,硬件每计算完一个分形,计算结果就会被搬出,该功能不适用于L0C Buffer累加的场景。取值说明如下: <br>• 0:保留值; <br>• 2:使能unit_flag,硬件执行完指令后,不会关闭unit_flag功能;<br>• 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>• true:来源于C2。 <br>• false:来源于CO1(L0C)。 | | 61 | | c_matrix_source | 输入 | 配置C矩阵初始值是否来源于C2(存放Bias的硬件缓存区)。取值说明如下: <br>• true:来源于C2。 <br>• false:来源于CO1(L0C)。 | |
| 62 | | c_matrix_init_val | 输入 | 配置C矩阵初始值是否为0。取值说明如下: <br>• true:C矩阵初始值为0。 <br>• false:C矩阵初始值通过c_matrix_source参数进行配置。 | | 62 | | c_matrix_init_val | 输入 | 配置C矩阵初始值是否为0。取值说明如下: <br>• true:C矩阵初始值为0。 <br>• false:C矩阵初始值通过c_matrix_source参数进行配置。 | |
| @@ -19,27 +19,27 @@ $$ | |||
| 19 | - 常规计算 | 19 | - 常规计算 |
| 20 | 20 | ||
| 21 | ```cpp | 21 | ```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 | |||
| 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 | ```cpp | 34 | ```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>• 0:保留值; <br>• 2:使能unit_flag,硬件执行完指令后,不会关闭unit_flag功能;<br>• 3:使能unit_flag,硬件执行完指令后,会关闭unit_flag功能。<br> 使能该功能时,矩阵计算的unit_flag在最后一个分形设置为3,其余分形计算设置为2即可。 | | 55 | | unit_flag | 输入 | unit_flag是一种asc_mmad_mx接口细粒度的并行,使能该功能后,硬件每计算完一个分形,计算结果就会被搬出,该功能不适用于L0C Buffer累加的场景。取值说明如下: <br>• 0:保留值; <br>• 2:使能unit_flag,硬件执行完指令后,不会关闭unit_flag功能;<br>• 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>• true:来源于BiasTable。 <br>• false:来源于L0C。 | | 57 | | c_matrix_source | 输入 | 配置C矩阵初始值是否来源于BiasTable(存放Bias的硬件缓存区)。取值说明如下: <br>• true:来源于BiasTable。 <br>• 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字节。 | |
| 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 | ||
| 139 | repeatMode =0 时,每次 repeat 会改变在 filter 窗口中读取数据点的位置,然后跳到下一个 C0 的位置。 | 139 | repeatMode =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 | ||
| 133 | repeatMode =0 时,每次 repeat 会改变在 filter 窗口中读取数据点的位置,然后跳到下一个 C0 的位置。 | 133 | repeatMode =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 | 156 | ||
| @@ -21,176 +21,176 @@ | |||
| 21 | 21 | ||
| 22 | // float, e1m2, e1m2 | 22 | // 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, e2m1 | 44 | // 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, e1m2 | 66 | // 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, e2m1 | 88 | // 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, e4m3 | 110 | // 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, e5m2 | 132 | // 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, e4m3 | 154 | // 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, e5m2 | 176 | // 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 | } |
| @@ -27,7 +27,7 @@ protected: | |||
| 27 | \ | 27 | \ |
| 28 | namespace { \ | 28 | namespace { \ |
| 29 | void cce_name##_##src0_type##_##src1_type##_Stub(dst_type* dst, src0_type* src0, src1_type* src1, \ | 29 | void 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 | } |


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