特殊函数
tpu_bdc_fp_taylor
张量的元素的 Taylor 级数。
- void tpu_bdc_fp_taylor(local_addr_t dst_addr, local_addr_t src_addr, local_addr_t coeff_addr, const dim4 *shape, int num, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = \sum_{i = 0}^{num - 1}coeff(0, c~~mod~~NPU\_NUM, 0, i) \times src(n, c, h, w)^i}\]
- 参数
dst_addr – dst 的地址
src_addr – src 的地址
coeff_addr – coeff 的地址
shape – 指向 dst 和 src 的 shape 的指针
num – Taylor 级数的项数
dtype – dst、src 和 coeff 的元素的数据类型
注意事项
dst 和 src 从同一个 NPU 开始,都是 64-byte aligned layout。
coeff 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, num],64-byte aligned layout。num 大于等于 2。
shape->n、shape->c、shape->h 和 shape->w 的取值范围是 [1, 65535]。
tpu_bdc_table_lookup
通过张量的元素查表。
- void tpu_bdc_table_lookup(local_addr_t dst_addr, local_addr_t src_addr, local_addr_t table_addr, const dim4 *shape, int len, data_type_t dst_dtype, data_type_t src_dtype)
\[\mathsf{dst(n, c, h, w) = table(0, c~~mod~~NPU\_NUM, 0, src(n, c, h, w))}\]
- 参数
dst_addr – dst 的地址
src_addr – src 的地址
table_addr – table 的地址
shape – 指向 dst 和 src 的 shape 的指针
len – 表的长度
dst_dtype – dst 和 table 的元素的数据类型
src_dtype – src 的元素的数据类型
注意事项
dst 和 src 从同一个 NPU 开始,都是 64-byte aligned layout。
table 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, len],64-byte aligned layout。shape->n、shape->c、shape->h 和 shape->w 的取值范围是 [1, 65535], shape->h * shape->w 小于等于 65535。
src_dtype 的有效取值是
DT_UINT16
和DT_UINT8
,src 的元素的取值范围是 [0, len - 1]。如果 dst、src 和 table 两两之间没有 bank conflicting,则性能更优。
tpu_bdc_arithmetic_sequence_bcast
生成等差数列,广播到各个 NPU。
- void tpu_bdc_arithmetic_sequence_bcast(local_addr_t dst_addr, int npu_num, int start, int step, int num)
\[\mathsf{dst(0, c, 0, w) = start + step \times w}\]
- 参数
dst_addr – dst 的地址
npu_num – 广播 NPU 的数量
start – 等差数列的首项
step – 等差数列的步长
num – 等差数列的项数
注意事项
tpu_bdc_arithmetic_sequence_distribute
生成等差数列,分布在各个 NPU。
- void tpu_bdc_arithmetic_sequence_distribute(local_addr_t dst_addr, int start, int step, int num)
\[\mathsf{dst(0, c, 0, 0) = start + step \times c}\]
- 参数
dst_addr – dst 的地址
start – 等差数列的首项
step – 等差数列的步长
num – 等差数列的项数
注意事项
dst 从 NPU 0 开始,compact layout。
dst 的 shape 是 [1, num, 1, 1],元素的数据类型是 INT32。
num 大于 0。
tpu_bdc_arithmetic_sequence_general
生成等差数列,分布在各个 NPU。
- void tpu_bdc_arithmetic_sequence_general(local_addr_t dst_addr, local_addr_t buffer_addr, int npu_num, int start, int step, int num)
\[\mathsf{dst(0, c, 0, w) = start + step \times(num \times c + w)}\]
- 参数
dst_addr – dst 的地址
buffer_addr – buffer 的地址
npu_num – 序列数 channel 的数量
start – 等差数列的首项
step – 等差数列的步长
num – 等差数列的项数
注意事项
dst 的 shape 是 [1, npu_num, 1, num], 64-byte aligned layout,元素的数据类型是 INT32。
要求 dst 和 buffer 从 NPU 0 开始。
buffer 的 shape 是[1,
NPU_NUM
, 1, 1], compact layout,元素的数据类型是 INT32。npu_num 大于 0。
num 大于 0。
tpu_bdc_load_fp32_exp_coeff
加载 exp 的 Taylor 系数到 local memory。
- void tpu_bdc_load_fp32_exp_coeff(local_addr_t coeff_addr)
- 参数
coeff_addr – coeff 的地址
注意事项
coeff 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, 32],64-byte aligned layout。
tpu_bdc_load_fp32_exp_table
加载 -103 ~ 88 对应的 exp 的表到 local memory。
- void tpu_bdc_load_fp32_exp_table(local_addr_t table_addr)
- 参数
table_addr – table 的地址
注意事项
table 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, 192],64-byte aligned layout。
tpu_bdc_load_fp32_log_coeff
加载 log 的 Taylor 系数到 local memory。
- void tpu_bdc_load_fp32_log_coeff(local_addr_t coeff_addr)
- 参数
coeff_addr – coeff 的地址
注意事项
coeff 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, 32],64-byte aligned layout。
tpu_bdc_load_fp32_erf_coeff
加载 erf 的 Taylor 系数到 local memory。
- void tpu_bdc_load_fp32_erf_coeff(local_addr_t coeff_addr)
- 参数
coeff_addr – coeff 的地址
注意事项
coeff 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, 10],64-byte aligned layout。
tpu_bdc_load_fp32_sin_coeff
加载 sin 的 Taylor 系数到 local memory。
- void tpu_bdc_load_fp32_sin_coeff(local_addr_t coeff_addr)
- 参数
coeff_addr – coeff 的地址
注意事项
coeff 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, 32],64-byte aligned layout。
tpu_bdc_load_fp32_cos_coeff
加载 cos 的 Taylor 系数到 local memory。
- void tpu_bdc_load_fp32_cos_coeff(local_addr_t coeff_addr)
- 参数
coeff_addr – coeff 的地址
注意事项
coeff 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, 32],64-byte aligned layout。
tpu_bdc_load_fp32_tan_coeff
加载 tan 的 Taylor 系数到 local memory。
- void tpu_bdc_load_fp32_tan_coeff(local_addr_t coeff_addr)
- 参数
coeff_addr – coeff 的地址
注意事项
coeff 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, 32],64-byte aligned layout。
tpu_bdc_load_fp32_arcsin_coeff
加载 arcsin 的 Taylor 系数到 local memory。
- void tpu_bdc_load_fp32_arcsin_coeff(local_addr_t coeff_addr)
- 参数
coeff_addr – coeff 的地址
注意事项
coeff 从 NPU 0 开始,shape 是 [1,
NPU_NUM
, 1, 32],64-byte aligned layout。