二元操作

tpu_bdc_and

两个张量的元素做按位与运算。

void tpu_bdc_and(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src0(n, c, h, w)~~\textbf{AND}~~src1(n, c, h, w)}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dtype – dst、src0 和 src1 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_and_C

张量的元素与常数做按位与运算。

void tpu_bdc_and_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)~~\textbf{AND}~~C}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dtype – dst 和 src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_or

两个张量的元素做按位或运算。

void tpu_bdc_or(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src0(n, c, h, w)~~\textbf{OR}~~src1(n, c, h, w)}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dtype – dst、src0 和 src1 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_or_C

张量的元素与常数做按位或运算。

void tpu_bdc_or_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)~~\textbf{OR}~~C}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dtype – dst 和 src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_xor

两个张量的元素做按位异或运算。

void tpu_bdc_xor(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src0(n, c, h, w)~~\textbf{XOR}~~src1(n, c, h, w)}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dtype – dst、src0 和 src1 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_xor_C

张量的元素与常数做按位异或运算。

void tpu_bdc_xor_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = src(n, c, h, w)~~\textbf{XOR}~~C}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dtype – dst 和 src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_min

两个张量的元素做取小运算。

void tpu_bdc_min(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = min(src0(n, c, h, w), src1(n, c, h, w))}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dtype – dst、src0 和 src1 的元素数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_min_C

张量的元素与常数做取小运算。

void tpu_bdc_min_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = min(src(n, c, h, w), C)}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dtype – dst 和 src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_max

两个张量的元素做取大运算。

void tpu_bdc_max(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = max(src0(n, c, h, w), src1(n, c, h, w))}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dtype – dst、src0 和 src1 的元素数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_max_C

张量的元素与常数做取大运算。

void tpu_bdc_max_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dtype)
\[\mathsf{dst(n, c, h, w) = max(src(n, c, h, w), C)}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dtype – dst 和 src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

tpu_bdc_arithmetic_shift

张量的元素做算术移位运算。

void tpu_bdc_arithmetic_shift(local_addr_t dst_addr, local_addr_t src_addr, local_addr_t shift_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, const dim4 *shift_stride, data_type_t dst_dtype, data_type_t src_dtype, data_type_t shift_dtype, rounding_mode_t rounding_mode)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{src(n, c, h, w)~~\textbf{左移}~~shift(n, c, h, w)}&\mathsf{\text{如果}~shift(n, c, h, w)>0}\\ \mathsf{src(n, c, h, w)~~\textbf{右移}~~-shift(n, c, h, w)}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • shift_addr – shift 的地址

  • shape – 指向 dst、src 和 shift 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • shift_stride – 指向 shift 的 stride 的指针

  • dst_dtype – dst 的元素的数据类型

  • src_dtype – src 的元素的数据类型

  • shift_dtype – shift 的元素的数据类型

  • rounding_mode – 右移舍入模式

注意事项

  • dst、src 和 shift 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • dst_dtypesrc_dtype 的有效取值是 DT_INT32DT_UINT32DT_INT16DT_UINT16DT_INT8DT_UINT8, 同为有符号或同为无符号。

  • shift_dtype 的有效取值是 DT_INT32DT_INT16DT_INT8, shift 的元素的取值范围是 [-32, 31]。

  • src_dtype 的位宽大于等于 shift_dtype 的位宽。

tpu_bdc_arithmetic_shift_C

张量的元素做算术移位运算。

void tpu_bdc_arithmetic_shift_C(local_addr_t dst_addr, local_addr_t src_addr, char C, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dst_dtype, data_type_t src_dtype, rounding_mode_t rounding_mode)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{src(n, c, h, w)~~\textbf{左移}~~C}&\mathsf{\text{如果}~C>0}\\ \mathsf{src(n, c, h, w)~~\textbf{右移}~~-C}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dst_dtype – dst 的元素的数据类型

  • src_dtype – src 的元素的数据类型

  • rounding_mode – 右移舍入模式

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • dst_dtypesrc_dtype 的有效取值是 DT_INT32DT_UINT32DT_INT16DT_UINT16DT_INT8DT_UINT8, 同为有符号或同为无符号。

  • C 的取值范围是 [-32, 31]。

tpu_bdc_logical_shift

张量的元素做逻辑移位运算。

void tpu_bdc_logical_shift(local_addr_t dst_addr, local_addr_t src_addr, local_addr_t shift_addr, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, const dim4 *shift_stride, data_type_t dst_dtype, data_type_t src_dtype, data_type_t shift_dtype, rounding_mode_t rounding_mode)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{src(n, c, h, w)~~\textbf{左移}~~shift(n, c, h, w)}&\mathsf{\text{如果}~shift(n, c, h, w)>0}\\ \mathsf{src(n, c, h, w)~~\textbf{右移}~~-shift(n, c, h, w)}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • shift_addr – shift 的地址

  • shape – 指向 dst、src 和 shift 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • shift_stride – 指向 shift 的 stride 的指针

  • dst_dtype – dst 的元素的数据类型

  • src_dtype – src 的元素的数据类型

  • shift_dtype – shift 的元素的数据类型

  • rounding_mode – 右移舍入模式

注意事项

  • dst、src 和 shift 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • dst_dtypesrc_dtype 的有效取值是 DT_UINT32DT_UINT16DT_UINT8

  • shift_dtype 的有效取值是 DT_INT32DT_INT16DT_INT8, shift 的元素的取值范围是 [-32, 31]。

  • src_dtype 的位宽大于等于 shift_dtype 的位宽。

tpu_bdc_logical_shift_C

张量的元素做逻辑移位运算。

void tpu_bdc_logical_shift_C(local_addr_t dst_addr, local_addr_t src_addr, char C, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dst_dtype, data_type_t src_dtype, rounding_mode_t rounding_mode)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{src(n, c, h, w)~~\textbf{左移}~~C}&\mathsf{\text{如果}~C>0}\\ \mathsf{src(n, c, h, w)~~\textbf{右移}~~-C}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dst_dtype – dst 的元素的数据类型

  • src_dtype – src 的元素的数据类型

  • rounding_mode – 右移舍入模式

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • dst_dtypesrc_dtype 的有效取值是 DT_UINT32DT_UINT16DT_UINT8

  • C 的取值范围是 [-32, 31]。

tpu_bdc_greater

比较张量的元素是否大于另一个张量的元素,可自定义真值。

void tpu_bdc_greater(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(n, c, h, w) > src1(n, c, h, w)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_greater_C

比较张量的元素是否大于常数,可自定义真值。

void tpu_bdc_greater_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src(n, c, h, w) > C}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • true_val – 真值

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_less

比较张量的元素是否小于另一个张量的元素,可自定义真值。

void tpu_bdc_less(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(n, c, h, w) < src1(n, c, h, w)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_less_C

比较张量的元素是否小于常数,可自定义真值。

void tpu_bdc_less_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src(n, c, h, w) < C}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • true_val – 真值

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_equal

比较张量的元素是否等于另一个张量的元素,可自定义真值。

void tpu_bdc_equal(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(n, c, h, w) = src1(n, c, h, w)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_equal_C

比较张量的元素是否等于常数,可自定义真值。

void tpu_bdc_equal_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src(n, c, h, w) = C}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • true_val – 真值

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_greater_equal

比较张量的元素是否大于等于另一个张量的元素,可自定义真值。

void tpu_bdc_greater_equal(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(n, c, h, w) \geq src1(n, c, h, w)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_greater_equal_C

比较张量的元素是否大于等于常数,可自定义真值。

void tpu_bdc_greater_equal_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src(n, c, h, w) \geq C}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • true_val – 真值

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_less_equal

比较张量的元素是否小于等于另一个张量的元素,可自定义真值。

void tpu_bdc_less_equal(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(n, c, h, w) \leq src1(n, c, h, w)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_less_equal_C

比较张量的元素是否小于等于常数,可自定义真值。

void tpu_bdc_less_equal_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src(n, c, h, w) \leq C}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • true_val – 真值

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_not_equal

比较张量的元素是否不等于另一个张量的元素,可自定义真值。

void tpu_bdc_not_equal(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src0_stride, const dim4 *src1_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(n, c, h, w) \neq src1(n, c, h, w)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • shape – 指向 dst、src0 和 src1 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src0_stride – 指向 src0 的 stride 的指针

  • src1_stride – 指向 src1 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst、src0 和 src1 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_not_equal_C

比较张量的元素是否不等于常数,可自定义真值。

void tpu_bdc_not_equal_C(local_addr_t dst_addr, local_addr_t src_addr, scalar_t C, scalar_t true_val, const dim4 *shape, const dim4 *dst_stride, const dim4 *src_stride, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src(n, c, h, w) \neq C}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src_addr – src 的地址

  • C – 常数

  • true_val – 真值

  • shape – 指向 dst 和 src 的 shape 的指针

  • dst_stride – 指向 dst 的 stride 的指针

  • src_stride – 指向 src 的 stride 的指针

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素和 C 的数据类型

注意事项

  • dst 和 src 从同一个 NPU 开始。

  • shape->nshape->cshape->hshape->w 的取值范围是 [1, 65535]。

  • 如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_vc_and

两个向量的元素交叉做按位与运算。

void tpu_bdc_vc_and(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dtype)
\[\mathsf{dst(m, n) = src0(m)~~\textbf{AND}~~src1(n)}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dtype – dst、src0 和 src1 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

tpu_bdc_vc_or

两个向量的元素交叉做按位或运算。

void tpu_bdc_vc_or(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dtype)
\[\mathsf{dst(m, n) = src0(m)~~\textbf{OR}~~src1(n)}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dtype – dst、src0 和 src1 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

tpu_bdc_vc_xor

两个向量的元素交叉做按位异或运算。

void tpu_bdc_vc_xor(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dtype)
\[\mathsf{dst(m, n) = src0(m)~~\textbf{XOR}~~src1(n)}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dtype – dst、src0 和 src1 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

tpu_bdc_vc_min

两个向量的元素交叉做取小运算。

void tpu_bdc_vc_min(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dtype)
\[\mathsf{dst(m, n) = min(src0(m), src1(n))}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dtype – dst、src0 和 src1 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

tpu_bdc_vc_max

两个向量的元素交叉做取大运算。

void tpu_bdc_vc_max(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dtype)
\[\mathsf{dst(m, n) = max(src0(m), src1(n))}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dtype – dst、src0 和 src1 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

tpu_bdc_vc_greater

交叉比较向量的元素是否大于另一个张量的元素,可自定义真值。

void tpu_bdc_vc_greater(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(m, n)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(m) > src1(n)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_vc_less

交叉比较向量的元素是否小于另一个张量的元素,可自定义真值。

void tpu_bdc_vc_less(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(m, n)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(m) < src1(n)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_vc_equal

交叉比较向量的元素是否等于另一个张量的元素,可自定义真值。

void tpu_bdc_vc_equal(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(m, n)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(m) = src1(n)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_vc_greater_equal

交叉比较向量的元素是否大于等于另一个张量的元素,可自定义真值。

void tpu_bdc_vc_greater_equal(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(m, n)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(m) \geq src1(n)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_vc_less_equal

交叉比较向量的元素是否小于等于另一个张量的元素,可自定义真值。

void tpu_bdc_vc_less_equal(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(m, n)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(m) \leq src1(n)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。

tpu_bdc_vc_not_equal

交叉比较向量的元素是否不等于另一个张量的元素,可自定义真值。

void tpu_bdc_vc_not_equal(local_addr_t dst_addr, local_addr_t src0_addr, local_addr_t src1_addr, scalar_t true_val, int src0_len, int src1_len, int src0_len_per_channel, int src1_len_per_channel, data_type_t dst_dtype, data_type_t src_dtype)
\[\begin{split}\mathsf{dst(m, n)} = {\begin{cases} \mathsf{true\_val}&\mathsf{\text{如果}~src0(m) \neq src1(n)}\\ \mathsf{0}&{\text{其他情况}}\end{cases}}\end{split}\]
参数
  • dst_addr – dst 的地址

  • src0_addr – src0 的地址

  • src1_addr – src1 的地址

  • true_val – 真值

  • src0_len – src0 的长度

  • src1_len – src1 的长度

  • src0_len_per_channel – src0 在每个 channel 的长度

  • src1_len_per_channel – src1 在每个 channel 的长度

  • dst_dtype – dst 的元素和 true_val 的数据类型

  • src_dtype – src 的元素的数据类型

注意事项

  • dst 和 src1 从同一个 NPU 开始。

  • src0_lensrc1_len 的取值范围是 [1, 65535]。

  • dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout

  • src_dtype 的位宽大于等于 dst_dtype 的位宽。