16-Bit Vector API
#define VECT_SQRT_S16_MAX_DEPTH
vect_s16_sqrt() 可以计算的最大比特深度。
取值:
15
headroom_t vect_s16_abs()
计算一个16位向量的逐元素绝对值。
参数:
int16_t a[]– [out] 输出向量const int16_t b[]– [in] 输入向量const unsigned length– [in] 向量 和 的元素数量
返回值: 输出向量 的头空间。
异常:
- ET_LOAD_STORE:如果
a或b不是字对齐。
参考性能:

int32_t vect_s16_abs_sum()
计算一个16位向量各元素绝对值之和。
参数:
const int16_t b[]– [in] 输入向量const unsigned length– [in] 向量 的元素数量
返回值: 32位求和值 。
异常:
- ET_LOAD_STORE:如果
b不是字对齐。
参考性能:

headroom_t vect_s16_add()
将一个16位BFP向量与另一个相加。
参数:
int16_t a[]– [out] 输出向量const int16_t b[]– [in] 输入向量const int16_t c[]– [in] 输入向量const unsigned length– [in] 向量 、 和 的元素数量const right_shift_t b_shr– [in] 应用于 的右移位数const right_shift_t c_shr– [in] 应用于 的右移位数
返回值: 输出向量 的头空间。
异常:
- ET_LOAD_STORE:如果
a、b或c不是字对齐。
参考性能:

headroom_t vect_s16_add_scalar()
将标量加到一个16位向量中。
参数:
int16_t a[]– [out] 输出向量const int16_t b[]– [in] 输入向量const int16_t c– [in] 输入标量const unsigned length– [in] 向量 和 的元素数量const right_shift_t b_shr– [in] 应用于 的右移位数
返回值: 输出向量 的头空间。
异常:
- ET_LOAD_STORE:如果
a或b不是字对齐。
参考性能:

unsigned vect_s16_argmax()
获取16位向量中最大元素的数组索引。
b[]表示16位输入向量 。它必须从字对齐的地址开始。
length是 中的元素数量。
操作:
参数:
-
const int16_t b[]– [in] 输入向量 -
const unsigned length– [in] 向量 中的元素数量
返回值:
向量 的最大元素的索引 。如果存在多个最大值,则返回最小索引。
异常:
ET_LOAD_STORE如果b不是字对齐的(参见 笔记:向量对齐)
参考性能:

unsigned vect_s16_argmin()
获取16位向量中最小元素的数组索引。
b[]表示16位输入向量 。它必须从字对齐的地址开始。
length是 中的元素数量。
操作:
参数:
-
const int16_t b[]– [in] 输入向量 -
const unsigned length– [in] 向量 中的元素数量
返回值:
向量 的最小元素的索引 。如果存在多个最小值,则返回最小索引。
异常:
ET_LOAD_STORE如果b不是字对齐的(参见 笔记:向量对齐)
参考性能:

headroom_t vect_s16_clip()
将16位向量的元素截取到指定范围。
a[]和b[]分别表示16位向量 和 。每个向量必须从字对齐的地址开始。该操作可以在b[]上安全地原地执行。
length是每个向量中的元素数量。
lower_bound和upper_bound分别是截取范围的下界和上界。这些边界仅在应用 b_shr 之后才与 的每个元素进行比较。
b_shr 是应用于 元素之前的带符号算术右移位数。
如果 是BFP向量 的尾数,则输出BFP向量 的指数 由 给出。
操作:
块浮点数:
如果 是BFP向量 的尾数,则输出向量 是BFP向量 的尾数,其中 。
参数:
-
int16_t a[]– [out] 输出向量 -
const int16_t b[]– [in] 输入向量 -
const unsigned length– [in] 向量 和 中的元素数量 -
const int16_t lower_bound– [in] 截取范围的下界 -
const int16_t upper_bound– [in] 截取范围的上界 -
const right_shift_t b_shr– [in] 应用于 元素之前的算术右移位数
返回值:
输出向量 的头空间
异常:
ET_LOAD_STORE如果a或b不是字对齐的(参见 笔记:向量对齐)
参考性能:

int64_t vect_s16_dot()
计算两个16位向量的内积。
b[]和c[]分别表示32位向量 和 。每个向量必须从字对齐的地址开始。
length是每个向量中的元素数量。
操作:
块浮点数:
如果 和 是BFP向量 和 的尾数,则结果 是结果 的尾数,其中 。
如果需要,可以将 的位深度降低到16位或32位,得到新的结果 ,其中 且 。
注意事项:
和 相加的和同时累积到16个48位累加器中,最后在最后一步将它们相加。只要 length 小于大约200万,结果的溢出或饱和是不可能的。
参数:
-
const int16_t b[]– [in] 输入向量 -
const int16_t c[]– [in] 输入向量 -
const unsigned length– [in] 向量 和 中的元素数量
返回值:
- ,向量 和 的内积。
异常:
ET_LOAD_STORE如果b或c不是字对齐的(见 笔记:向量对齐)
参考性能:

int32_t vect_s16_energy()
计算16位向量的能量(元素平方和)。
b[]表示16位向量 。b[] 必须从字对齐的地址开始。
length是 中的元素数量。
b_shr 是应用于 元素的带符号算术右移。应选择适当的 b_shr,以避免饱和的可能性。请参阅下面的注意事项。
操作:
块浮点数:
如果 是BFP向量 的尾数,则浮点结果是 ,其中32位尾数 由此函数返回,。
其他细节:
如果 具有 位的头空间,则每个乘积 的最大值为 。只要 length 小于 ,就不应出现此类错误。将 增加 ,每次增加 ,可以使可以求和的元素数量翻倍,而不会溢出的风险。
如果调用者的尾数向量比这个更长,可以通过在输入的子序列上多次调用此函数以获取部分结果,并在用户代码中将结果相加来找到完整的结果。
在许多情况下,调用者可能有先验知识表明饱和是不可能的(或非常接近),在这种情况下,可以忽略此准则。然而,这些情况是特定于应用程序的,并且远远超出了本文档的范围,因此留给用户自行决定。
参数:
-
const int16_t b[]– [in] 输入向量 -
const unsigned length– [in] 向量 中的元素数量 -
const right_shift_t b_shr– [in] 应用于 的右移位数
返回值:
- 向量 的能量的64位尾数
异常:
ET_LOAD_STORE如果b不是字对齐的(见 笔记:向量对齐)
参考性能:

headroom_t vect_s16_headroom()
计算16位向量的头空间。
N位整数的头空间是该整数的值可以左移的位数,而不会丢失任何信息。等效地,头空间是最前面的符号位数减一。
int16_t数组的头空间是其每个int16_t元素的头空间的最小值。
该函数高效地遍历b[]的元素以确定其头空间。
b[]表示16位向量 。b[]必须从字对齐的地址开始。
length是b[]中的元素数量。
该函数的操作可以定义为:
参数:
-
const int16_t b[]– [in] 输入向量 -
const unsigned length– [in] 向量 中的元素数量
返回值:
- 向量 的头空间
异常:
ET_LOAD_STORE如果b不是字对齐的,则引发异常(参见 笔记:向量对齐)
参见:
- vect_s32_headroom,
- vect_complex_s16_headroom,
- vect_complex_s32_headroom
参考性能:

void vect_s16_inverse()
计算16位向量的倒数。
a[]和b[]分别表示16位尾数向量 和 。该操作可以在b[]上安全地原地执行。
length是每个向量中的元素数量。
scale是一个用于最大化结果精度的缩放参数。
该函数的操作可以定义为:
块浮点数:
如果 是BFP向量 的尾数,则结果向量 是BFP向量 的尾数,其中 。
函数vect_s16_inverse_prepare()可用于获取 和 的值。
参数:
-
int16_t a[]– [out] 输出向量 -
const int16_t b[]– [in] 输入向量 -
const unsigned length– [in] 向量 和 中的元素数量 -
const unsigned scale– [in] 计算倒数时应用于被除数的缩放因子
返回值:
- 输出向量 的头空间
参见:
- vect_s16_inverse_prepare
参考性能:

int16_t vect_s16_max()
找出16位向量中的最大值。
b[]表示16位向量 。它必须从字对齐的地址开始。
length是 中的元素数量。
操作:
块浮点数:
如果 是BFP向量 的尾数,则返回的值 是浮点值 的16位尾数,其中 。
参数:
const int16_t b[]– [in] 输入向量const unsigned length– [in] 向量 中的元素数量
返回值:
- 中的最大值
异常:
- 如果
b不是字对齐的,则引发ET_LOAD_STORE异常(参见 笔记:向量对齐)
参考性能:

headroom_t vect_s16_max_elementwise()
获取两个16位向量的逐元素最大值。
a[]、b[]和c[]分别表示16位尾数向量 、 和 。每个向量必须从字对齐的地址开始。该操作可以在b[]上安全地原地执行,但不能在c[]上执行。
length是每个向量中的元素数量。
b_shr和c_shr是应用于 和 的有符号算术右移量。
操作:
块浮点数:
如果 和 是BFP向量 和 的尾数,则结果向量 是BFP向量 的尾数,其中 。
可以使用函数 vect_2vec_prepare() 根据输入指数 和 以及输入头空间 和 来获取 、 和 的值。
警告:
为了正确运行,此函数要求每个尾数向量 在应用移位后至少有1位头空间。
参数:
int16_t a[]– [out] 输出向量const int16_t b[]– [in] 输入向量const int16_t c[]– [in] 输入向量const unsigned length– [in] 向量 、 和 中的元素数量const right_shift_t b_shr– [in] 应用于 的右移量const right_shift_t c_shr– [in] 应用于 的右移量
返回值:
- 向量 的头空间
异常:
- 如果
a、b或c不是字对齐的,则引发ET_LOAD_STORE异常(参见 笔记:向量对齐)
参考性能:

int16_t vect_s16_min()
找出16位向量中的最小值。
b[]表示16位向量 。它必须从字对齐的地址开始。
length是 中的元素数量。
操作:
块浮点数:
如果 是BFP向量 的尾数,则返回的值 是浮点值 的16位尾数,其中 。
参数:
const int16_t b[]– [in] 输入向量const unsigned length– [in] 向量 中的元素数量
返回值:
- 中的最小值