Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

Vector API 快速访问链接

下表列出了向量API的函数。"EW"列指示操作是否逐元素执行。

"签名"列旨在快速传达操作的概念输入和输出的类型。这些签名仅旨在传达有多少(概念上的)输入和输出以及它们的维度。

这些函数本身通常需要比这些签名所示的更多的参数。例如,大多数函数接受向量长度作为输入,并且许多函数接受用于控制元素位深度增长的移位值。请查阅对应函数的完整文档以获取更详细的信息。

以下符号在签名中使用:

符号描述
S\mathbb{S}标量输入或输出值。
V\mathbb{V}向量值输入或输出。
M\mathbb{M}矩阵值输入或输出。
\varnothing占位符,表示无输入或输出。

例如,操作签名 (V×V×S)V(\mathbb{V \times V \times S}) \to \mathbb{V} 表示该操作接受两个向量输入和一个标量输入,并且输出为一个向量。

32位向量操作

函数EW签名
vect_s32_copy()VV\mathbb{V} \to \mathbb{V}
vect_s32_abs()xVV\mathbb{V} \to \mathbb{V}
vect_s32_abs_sum()VS\mathbb{V} \to \mathbb{S}
vect_s32_add()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_add_scalar()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s32_argmax()VS\mathbb{V} \to \mathbb{S}
vect_s32_argmin()VS\mathbb{V} \to \mathbb{S}
vect_s32_clip()x(V×S×S)V(\mathbb{V} \times \mathbb{S} \times \mathbb{S}) \to \mathbb{V}
vect_s32_dot()(V×V)S(\mathbb{V} \times \mathbb{V}) \to \mathbb{S}
vect_s32_energy()VS\mathbb{V} \to \mathbb{S}
vect_s32_headroom()VS\mathbb{V} \to \mathbb{S}
vect_s32_inverse()xVV\mathbb{V} \to \mathbb{V}
vect_s32_max()VS\mathbb{V} \to \mathbb{S}
vect_s32_max_elementwise()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_min()VS\mathbb{V} \to \mathbb{S}
vect_s32_min_elementwise()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_mul()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_macc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_nmacc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_rect()xVV\mathbb{V} \to \mathbb{V}
vect_s32_scale()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s32_set()xSV\mathbb{S} \to \mathbb{V}
vect_s32_shl()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s32_shr()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s32_sqrt()xVV\mathbb{V} \to \mathbb{V}
vect_s32_sub()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_sum()VS\mathbb{V} \to \mathbb{S}
vect_s32_zip()(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_unzip()V(V×V)\mathbb{V} \to (\mathbb{V} \times \mathbb{V})
vect_s32_convolve_valid()(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_convolve_same()(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s32_log_base()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s32_log()xVV\mathbb{V} \to \mathbb{V}
vect_s32_log2()xVV\mathbb{V} \to \mathbb{V}
vect_s32_log10()xVV\mathbb{V} \to \mathbb{V}
chunk_s32_dot()(V×V)S(\mathbb{V} \times \mathbb{V}) \to \mathbb{S}
chunk_s32_log()xVV\mathbb{V} \to \mathbb{V}

16位向量操作

函数EW签名
vect_s16_abs()xVV\mathbb{V} \to \mathbb{V}
vect_s16_abs_sum()VS\mathbb{V} \to \mathbb{S}
vect_s16_add()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s16_add_scalar()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s16_argmax()VS\mathbb{V} \to \mathbb{S}
vect_s16_argmin()VS\mathbb{V} \to \mathbb{S}
vect_s16_clip()x(V×S×S)V(\mathbb{V} \times \mathbb{S} \times \mathbb{S}) \to \mathbb{V}
vect_s16_dot()(V×V)S(\mathbb{V} \times \mathbb{V}) \to \mathbb{S}
vect_s16_energy()VS\mathbb{V} \to \mathbb{S}
vect_s16_headroom()VS\mathbb{V} \to \mathbb{S}
vect_s16_inverse()xVV\mathbb{V} \to \mathbb{V}
vect_s16_max()VS\mathbb{V} \to \mathbb{S}
vect_s16_max_elementwise()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s16_min()VS\mathbb{V} \to \mathbb{S}
vect_s16_min_elementwise()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s16_mul()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s16_macc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s16_nmacc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s16_rect()xVV\mathbb{V} \to \mathbb{V}
vect_s16_scale()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s16_set()xSV\mathbb{S} \to \mathbb{V}
vect_s16_shl()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s16_shr()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s16_sqrt()xVV\mathbb{V} \to \mathbb{V}
vect_s16_sub()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_s16_sum()VS\mathbb{V} \to \mathbb{S}
vect_s16_extract_high_byte()xVV\mathbb{V} \to \mathbb{V}
vect_s16_extract_low_byte()xVV\mathbb{V} \to \mathbb{V}

8位向量操作

函数EW签名Brief
vect_s8_is_negative()xVV\mathbb{V} \to \mathbb{V}Identify negative elements

32位复数向量操作

函数EW签名
vect_complex_s32_add()x(V×V)V(\mathbb{V \times V}) \to \mathbb{V}
vect_complex_s32_add_scalar()x(V×S)V(\mathbb{V \times S}) \to \mathbb{V}
vect_complex_s32_conj_macc()x(V×V×V)V(\mathbb{V \times V \times V}) \to \mathbb{V}
vect_complex_s32_conj_mul()x(V×V)V(\mathbb{V \times V}) \to \mathbb{V}
vect_complex_s32_conj_nmacc()x(V×V×V)V(\mathbb{V \times V \times V}) \to \mathbb{V}
vect_complex_s32_conjugate()xVV\mathbb{V} \to \mathbb{V}
vect_complex_s32_headroom()VS\mathbb{V} \to \mathbb{S}
vect_complex_s32_macc()x(V×V×V)V(\mathbb{V \times V \times V}) \to \mathbb{V}
vect_complex_s32_mag()xVV\mathbb{V} \to \mathbb{V}
vect_complex_s32_mul()x(V×V)V(\mathbb{V \times V}) \to \mathbb{V}
vect_complex_s32_nmacc()x(V×V×V)V(\mathbb{V \times V \times V}) \to \mathbb{V}
vect_complex_s32_real_mul()x(V×V)V(\mathbb{V \times V}) \to \mathbb{V}
vect_complex_s32_real_scale()x(V×S)V(\mathbb{V \times S}) \to \mathbb{V}
vect_complex_s32_scale()x(V×S)V(\mathbb{V \times S}) \to \mathbb{V}
vect_complex_s32_set()xSV\mathbb{S} \to \mathbb{V}
vect_complex_s32_shl()x(V×S)V(\mathbb{V \times S}) \to \mathbb{V}
vect_complex_s32_shr()x(V×S)V(\mathbb{V \times S}) \to \mathbb{V}
vect_complex_s32_squared_mag()xVV\mathbb{V} \to \mathbb{V}
vect_complex_s32_sub()x(V×V)V(\mathbb{V \times V}) \to \mathbb{V}
vect_complex_s32_sum()VS\mathbb{V} \to \mathbb{S}
vect_complex_s32_tail_reverse()VV\mathbb{V} \to \mathbb{V}

16位复数向量操作

函数EW签名
vect_complex_s16_add()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_add_scalar()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_complex_s16_conj_mul()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_conj_macc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_conj_nmacc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_headroom()VS\mathbb{V} \to \mathbb{S}
vect_complex_s16_macc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_mag()xVV\mathbb{V} \to \mathbb{V}
vect_complex_s16_mul()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_nmacc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_real_mul()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_real_scale()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_complex_s16_scale()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_complex_s16_set()xSV\mathbb{S} \to \mathbb{V}
vect_complex_s16_shl()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_complex_s16_shr()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_complex_s16_squared_mag()xVV\mathbb{V} \to \mathbb{V}
vect_complex_s16_sub()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_s16_sum()VS\mathbb{V} \to \mathbb{S}

定点数向量操作

函数EW签名
vect_q30_power_series()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_q30_exp_small()xVV\mathbb{V} \to \mathbb{V}
chunk_q30_power_series()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
chunk_q30_exp_small()xVV\mathbb{V} \to \mathbb{V}

浮点数向量操作

函数EW签名
vect_f32_max_exponent()VS\mathbb{V} \to \mathbb{S}
vect_f32_dot()(V×V)S(\mathbb{V} \times \mathbb{V}) \to \mathbb{S}
vect_f32_add()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_float_s32_log_base()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_float_s32_log()xVV\mathbb{V} \to \mathbb{V}
vect_float_s32_log2()xVV\mathbb{V} \to \mathbb{V}
vect_float_s32_log10()xVV\mathbb{V} \to \mathbb{V}
chunk_float_s32_log()xVV\mathbb{V} \to \mathbb{V}
vect_complex_f32_add()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_f32_mul()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_f32_conj_mul()x(V×V)V(\mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_f32_macc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}
vect_complex_f32_conj_macc()x(V×V×V)V(\mathbb{V} \times \mathbb{V} \times \mathbb{V}) \to \mathbb{V}

Note that several of the functions below take vectors of the split_acc_s32_t type. This is a 32-bit vector type used for accumulating results of 8- or 16-bit operations in a manner optimized for the XS3 VPU.

其他向量操作

函数EW签名
vect_split_acc_s32_shr()x(V×S)V(\mathbb{V} \times \mathbb{S}) \to \mathbb{V}
vect_s32_merge_accs()xVV\mathbb{V} \to \mathbb{V}
vect_s32_split_accs()xVV\mathbb{V} \to \mathbb{V}
chunk_s16_accumulate()xVV\mathbb{V} \to \mathbb{V}
mat_mul_s8_x_s8_yield_s32()(M×V)V(\mathbb{M} \times \mathbb{V}) \to \mathbb{V}
mat_mul_s8_x_s16_yield_s32()(M×V)V(\mathbb{M} \times \mathbb{V}) \to \mathbb{V}

向量类型转换

函数输入元素的类型输出元素的类型
vect_s16_to_vect_s32()int16_tint32_t
vect_s32_to_vect_s16()int32_tint16_t
vect_s32_to_vect_f32()int32_tfloat
vect_f32_to_vect_s32()floatint32_t
vect_complex_s16_to_vect_complex_s32()complex_s16_tcomplex_s32_t
vect_complex_s32_to_vect_complex_s16()complex_s32_tcomplex_s16_t