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

8-Bit Vector API

void vect_s8_is_negative()

判断有符号8位输入向量的每个元素是否为负数。

8位输出向量 aˉ\bar a 的每个元素 aka_k 如果对应的8位输入向量 bˉ\bar b 的元素 bkb_k 为负数,则设置为1;否则设置为0。

a[] 表示8位输出向量 aˉ\bar a,其中元素 a[k] 表示 aka_k

b[] 表示8位输入向量 bˉ\bar b,其中元素 b[k] 表示 bkb_k

lengtha[]b[] 中的元素数量。

该操作可以表示为:

ak{1如果 bk<00否则其中 k0 ... (length1)a_k \leftarrow \begin{cases} 1 & \text{如果 } b_k < 0 \\ 0 & \text{否则} \end{cases} \quad \text{其中 }k\in 0\ ...\ (length-1)

参数:

  • int8_t a[] – [out] 输出向量 aˉ\bar a

  • const int8_t b[] – [in] 输入向量 bˉ\bar b

  • const unsigned length – [in] 向量 aˉ\bar abˉ\bar b 中的元素数量

异常:

参考性能:

vect_s8_is_negative


void mat_mul_s8_x_s8_yield_s32()

将一个8位矩阵与一个8位向量进行乘积累加,结果储存在32位累加器中。

该函数将一个 M×NM \times N 的8位矩阵 Wˉ\bar W 与一个8位 NN 元列向量 vˉ\bar v 相乘,并将结果累加到32位累加器向量 aˉ\bar a 中。

accumulators 是输出向量 aˉ\bar a,用于累加乘积 Wˉ×vˉ\bar W\times\bar v。请注意,累加器采用xcore VPU本地格式进行编码。要将累加器向量初始化为零,只需将内存清零即可。

matrix 是矩阵 Wˉ\bar W

input_vect 是向量 vˉ\bar v

matrixinput_vect 必须从字对齐的偏移处开始。

M_rowsN_cols 是矩阵 Wˉ\bar W 的维度 MMNNMM 必须是16的倍数,NN 必须是32的倍数。

只要不发生饱和,该乘法的结果是精确的。

参数:

  • split_acc_s32_t accumulators[] – [inout] 累加器向量 aˉ\bar a

  • const int8_t matrix[] – [in] 权重矩阵 Wˉ\bar W

  • const int8_t input_vect[] – [in] 输入向量 vˉ\bar v

  • const unsigned M_rows – [in] 矩阵 Wˉ\bar W 的行数 MM

  • const unsigned N_cols – [in] 矩阵 Wˉ\bar W 的列数 NN

异常:

  • ET_LOAD_STORE 如果 matrixinput_vect 不是字对齐的,则引发异常(参见 笔记:向量对齐

参考性能:

mat_mul_s8_x_s8_yield_s32