二元操作
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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->w 的取值范围是 [1, 65535]。
如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout。
dst_dtype 和 src_dtype 的有效取值是
DT_INT32
、DT_UINT32
、DT_INT16
、DT_UINT16
、DT_INT8
和DT_UINT8
, 同为有符号或同为无符号。shift_dtype 的有效取值是
DT_INT32
、DT_INT16
和DT_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 – 右移舍入模式
注意事项
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->n、shape->c、shape->h 和 shape->w 的取值范围是 [1, 65535]。
如果张量的 stride 指针是 NULL,则此张量是 64-byte aligned layout,否则是 free layout。
dst_dtype 和 src_dtype 的有效取值是
DT_UINT32
、DT_UINT16
和DT_UINT8
。shift_dtype 的有效取值是
DT_INT32
、DT_INT16
和DT_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 – 右移舍入模式
注意事项
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->n、shape->c、shape->h 和 shape->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 和 src 从同一个 NPU 开始。
shape->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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 和 src 从同一个 NPU 开始。
shape->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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 和 src 从同一个 NPU 开始。
shape->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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 和 src 从同一个 NPU 开始。
shape->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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 和 src 从同一个 NPU 开始。
shape->n、shape->c、shape->h 和 shape->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->n、shape->c、shape->h 和 shape->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 和 src 从同一个 NPU 开始。
shape->n、shape->c、shape->h 和 shape->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_len 和 src1_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_len 和 src1_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_len 和 src1_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_len 和 src1_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_len 和 src1_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_len 和 src1_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_len 和 src1_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_len 和 src1_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_len 和 src1_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_len 和 src1_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_len 和 src1_len 的取值范围是 [1, 65535]。
dst 是 matrix layout,dst 的行数是 src0_len,列数是 src1_len, src0 和 src1 是 vector layout。
src_dtype 的位宽大于等于 dst_dtype 的位宽。