比较选择函数
tpu_bdc_greater_select
两个张量的元素比较大小,选取另外两个张量的元素作为结果。
- void tpu_bdc_greater_select(local_addr_t dst_addr, const variable_t *src0, const variable_t *src1, const variable_t *src2, const variable_t *src3, const dim4 *shape, data_type_t src0_src1_dtype, data_type_t dst_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{src2}&\mathsf{\text{如果}~src0 > src1}\\ \mathsf{src3}&{\text{其他情况}}\end{cases}}\end{split}\]对于上式中的 src0、src1、src2 和 src3,如果 src->type 是
TENSOR
,则取 \(\mathsf{src(n, c, h, w)}\), 如果 src->type 是VECTOR
,则取 \(\mathsf{src(0, c~~mod~~NPU\_NUM, 0, 0)}\), 如果 src->type 是SCALAR
,则取对应的常数。
- 参数
dst_addr – dst 的地址
src0 – 指向 src0 的指针
src1 – 指向 src1 的指针
src2 – 指向 src2 的指针
src3 – 指向 src3 的指针
shape – 指向 dst 的 shape 的指针
src0_src1_dtype – src0 和 src1 的元素的数据类型
dst_dtype – dst、src2 和 src3 的元素的数据类型
注意事项
tpu_bdc_less_select
两个张量的元素比较大小,选取另外两个张量的元素作为结果。
- void tpu_bdc_less_select(local_addr_t dst_addr, const variable_t *src0, const variable_t *src1, const variable_t *src2, const variable_t *src3, const dim4 *shape, data_type_t src0_src1_dtype, data_type_t dst_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{src2}&\mathsf{\text{如果}~src0 < src1}\\ \mathsf{src3}&{\text{其他情况}}\end{cases}}\end{split}\]对于上式中的 src0、src1、src2 和 src3,如果 src->type 是
TENSOR
,则取 \(\mathsf{src(n, c, h, w)}\), 如果 src->type 是VECTOR
,则取 \(\mathsf{src(0, c~~mod~~NPU\_NUM, 0, 0)}\), 如果 src->type 是SCALAR
,则取对应的常数。
- 参数
dst_addr – dst 的地址
src0 – 指向 src0 的指针
src1 – 指向 src1 的指针
src2 – 指向 src2 的指针
src3 – 指向 src3 的指针
shape – 指向 dst 的 shape 的指针
src0_src1_dtype – src0 和 src1 的元素的数据类型
dst_dtype – dst、src2 和 src3 的元素的数据类型
注意事项
dst 和 src 从同一个 NPU 开始,dst 是 64-byte aligned layout。
如果 src->type 是
TENSOR
,则 src 与 dst 的 shape 相同,64-byte aligned layout, 如果 src->type 是VECTOR
,则 src 的 shape 是 [1, shape->c, 1, 1]。
shape->n、shape->c、shape->h 和 shape->w 的取值范围是 [1, 65535]。
src0_src1_dtype 的位宽小于等于 dst_dtype 的位宽。
tpu_bdc_equal_select
两个张量的元素比较大小,选取另外两个张量的元素作为结果。
- void tpu_bdc_equal_select(local_addr_t dst_addr, const variable_t *src0, const variable_t *src1, const variable_t *src2, const variable_t *src3, const dim4 *shape, data_type_t src0_src1_dtype, data_type_t dst_dtype)
\[\begin{split}\mathsf{dst(n, c, h, w)} = {\begin{cases} \mathsf{src2}&\mathsf{\text{如果}~src0 = src1}\\ \mathsf{src3}&{\text{其他情况}}\end{cases}}\end{split}\]对于上式中的 src0、src1、src2 和 src3,如果 src->type 是
TENSOR
,则取 \(\mathsf{src(n, c, h, w)}\), 如果 src->type 是VECTOR
,则取 \(\mathsf{src(0, c~~mod~~NPU\_NUM, 0, 0)}\), 如果 src->type 是SCALAR
,则取对应的常数。
- 参数
dst_addr – dst 的地址
src0 – 指向 src0 的指针
src1 – 指向 src1 的指针
src2 – 指向 src2 的指针
src3 – 指向 src3 的指针
shape – 指向 dst 的 shape 的指针
src0_src1_dtype – src0 和 src1 的元素的数据类型
dst_dtype – dst、src2 和 src3 的元素的数据类型
注意事项
dst 和 src 从同一个 NPU 开始,dst 是 64-byte aligned layout。
如果 src->type 是
TENSOR
,则 src 与 dst 的 shape 相同,64-byte aligned layout, 如果 src->type 是VECTOR
,则 src 的 shape 是 [1, shape->c, 1, 1]。
shape->n、shape->c、shape->h 和 shape->w 的取值范围是 [1, 65535]。
src0_src1_dtype 的位宽小于等于 dst_dtype 的位宽。
tpu_bdc_maximum_greater_select
两个张量的元素比较大小,选取其中较大的和另外两个张量的元素作为结果。
- void tpu_bdc_maximum_greater_select(local_addr_t dst0_addr, local_addr_t dst1_addr, const variable_t *src0, const variable_t *src1, const variable_t *src2, const variable_t *src3, const dim4 *shape, data_type_t dst0_dtype, data_type_t dst1_dtype)
\[\mathsf{dst0(n, c, h, w) = max(src0, src1)}\]\[\begin{split}\mathsf{dst1(n, c, h, w)} = {\begin{cases} \mathsf{src2}&\mathsf{\text{如果}~src0 > src1}\\ \mathsf{src3}&{\text{其他情况}}\end{cases}}\end{split}\]对于上式中的 src0、src1、src2 和 src3,如果 src->type 是
TENSOR
,则取 \(\mathsf{src(n, c, h, w)}\), 如果 src->type 是VECTOR
,则取 \(\mathsf{src(0, c~~mod~~NPU\_NUM, 0, 0)}\), 如果 src->type 是SCALAR
,则取对应的常数。
- 参数
dst0_addr – dst0 的地址
dst1_addr – dst1 的地址
src0 – 指向 src0 的指针
src1 – 指向 src1 的指针
src2 – 指向 src2 的指针
src3 – 指向 src3 的指针
shape – 指向 dst0 和 dst1 的 shape 的指针
dst0_dtype – dst0、src0 和 src1 的元素的数据类型
dst1_dtype – dst1、src2 和 src3 的元素的数据类型
注意事项
dst 和 src 从同一个 NPU 开始,dst 是 64-byte aligned layout。
如果 src->type 是
TENSOR
,则 src 与 dst 的 shape 相同,64-byte aligned layout, 如果 src->type 是VECTOR
,则 src 的 shape 是 [1, shape->c, 1, 1]。
shape->n、shape->c、shape->h 和 shape->w 的取值范围是 [1, 65535]。
dst0_dtype 的位宽等于 dst1_dtype 的位宽。
tpu_bdc_minimum_less_select
两个张量的元素比较大小,选取其中较小的和另外两个张量的元素作为结果。
- void tpu_bdc_minimum_less_select(local_addr_t dst0_addr, local_addr_t dst1_addr, const variable_t *src0, const variable_t *src1, const variable_t *src2, const variable_t *src3, const dim4 *shape, data_type_t dst0_dtype, data_type_t dst1_dtype)
\[\mathsf{dst0(n, c, h, w) = min(src0, src1)}\]\[\begin{split}\mathsf{dst1(n, c, h, w)} = {\begin{cases} \mathsf{src2}&\mathsf{\text{如果}~src0 < src1}\\ \mathsf{src3}&{\text{其他情况}}\end{cases}}\end{split}\]对于上式中的 src0、src1、src2 和 src3,如果 src->type 是
TENSOR
,则取 \(\mathsf{src(n, c, h, w)}\), 如果 src->type 是VECTOR
,则取 \(\mathsf{src(0, c~~mod~~NPU\_NUM, 0, 0)}\), 如果 src->type 是SCALAR
,则取对应的常数。
- 参数
dst0_addr – dst0 的地址
dst1_addr – dst1 的地址
src0 – 指向 src0 的指针
src1 – 指向 src1 的指针
src2 – 指向 src2 的指针
src3 – 指向 src3 的指针
shape – 指向 dst0 和 dst1 的 shape 的指针
dst0_dtype – dst0、src0 和 src1 的元素的数据类型
dst1_dtype – dst1、src2 和 src3 的元素的数据类型
注意事项
dst 和 src 从同一个 NPU 开始,dst 是 64-byte aligned layout。
如果 src->type 是
TENSOR
,则 src 与 dst 的 shape 相同,64-byte aligned layout, 如果 src->type 是VECTOR
,则 src 的 shape 是 [1, shape->c, 1, 1]。
shape->n、shape->c、shape->h 和 shape->w 的取值范围是 [1, 65535]。
dst0_dtype 的位宽等于 dst1_dtype 的位宽。