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

32-Bit IEEE 754 Float API

exponent_t vect_f32_max_exponent()​

从IEEE754浮点数向量中获取最大(32位BFP)指数。

此函数用于确定将IEEE754单精度浮点数向量转换为32位BFP向量时要使用的BFP指数。

如果将返回的指数与 vect_f32_to_vect_s32() 一起使用,则它将导致BFP向量中没有头空间 - 也就是说,BFP向量的最小允许指数。最小允许指数是根据浮点元素中找到的最大指数来确定的。

具体而言,对每个元素使用 FSEXP 指令来确定其指数。返回的值是 FSEXP 指令给出的最大指数加上 30。

b[] 必须从双字对齐的地址开始。

注意: 如果需要,在转换为32位BFP向量时,可以通过将所需头空间的数量添加到此函数返回的指数上来包含额外的头空间。

参数:

  • const float b[] – [in] 输入的IEEE754单精度浮点数向量 bˉ\bar b

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

返回值:

用于转换为32位BFP向量的指数。

参见:

vect_f32_to_vect_s32,vect_s32_to_vect_f32

异常:

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

  • ET_ARITHMETIC 如果 b 的任何元素是无穷大或非数字,则引发异常。

参考性能:

vect_f32_max_exponent


void vect_f32_to_vect_s32()​

将IEEE754单精度浮点数向量转换为32位BFP向量。

该函数将IEEE754单精度浮点数向量 bˉ\bar b 转换为32位BFP向量的尾数向量 aˉ\bar a,给定BFP向量的指数 a_expa\_exp。从概念上讲,输出向量 aˉ⋅2a_exp\bar a \cdot 2^{a\_exp} 的元素表示与输入向量相同的值。

由于输出指数 a_expa\_exp 被所有输出向量的元素共享,即使输出向量具有32位的尾数,如果输入元素 bkb_k 的指数跨越较大范围,某些元素可能会丢失精度。

可以使用函数 vect_f32_max_exponent() 来确定最小化输出向量头空间的 a_expa\_exp 的值。

操作:

对于 k∈0 ... (length−1)k\in 0\ ...\ (length-1),ak←round(bk2b_exp)a_k \leftarrow round(\frac{b_k}{2^{b\_exp}})

参数:

  • int32_t a[] – [out] 表示32位输出尾数向量 aˉ\bar a,必须从双字对齐的地址开始。
  • const float b[] – [in] 表示IEEE754浮点数输入向量 bˉ\bar b,必须从双字对齐的地址开始,可以在原地安全地更新。
  • const unsigned length – [in] 向量中的元素数量。
  • const exponent_t a_exp – [in] 与输出向量 aˉ\bar a 相关联的指数

参见:

vect_f32_max_exponent,vect_s32_to_vect_f32

异常:

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

  • ET_ARITHMETIC 如果 b 的任何元素是无穷大或非数字,则引发异常。

参考性能:

vect_f32_to_vect_s32


float vect_f32_dot()​

计算两个IEEE754单精度浮点数向量的内积。

该函数接受两个IEEE754单精度浮点数向量,并计算它们的内积,即逐元素乘积的总和。使用FMACC指令进行计算,以获得完全精度的加法。

返回内积 aa。

操作:

a←∑k=0length−1(bk⋅ck)a \leftarrow \sum_{k=0}^{length-1} ( b_k \cdot c_k )

参数:

  • const float b[] – [in] 输入向量 bˉ\bar{b}
  • const float c[] – [in] 输入向量 cˉ\bar{c}
  • const unsigned length – [in] 向量 bˉ\bar{b} 和 cˉ\bar{c} 中的元素数量

返回值: 内积

参考性能:

vect_f32_dot


void vect_f32_add()​

将两个IEEE754单精度浮点数向量相加。

该函数接受两个IEEE754单精度浮点数向量,并计算两个向量的逐元素和。

a[] 是输出向量 aˉ\bar{a},结果将存放在其中。

b[] 和 c[] 分别是输入向量 bˉ\bar{b} 和 cˉ\bar{c}。

a、b 和 c 必须从双字对齐的地址开始。

该操作可以在 b[] 或 c[] 上安全地原地执行。

操作:

ak←bk+ck其中k∈0 ... (length−1)a_k \gets b_k + c_k \quad \text{其中} \quad k\in 0\ ...\ (length-1)

参数:

  • float a[] – [out] 输出向量 aˉ\bar{a}
  • const float b[] – [in] 输入向量 bˉ\bar{b}
  • const float c[] – [in] 输入向量 cˉ\bar{c}
  • const unsigned length – [in] 向量 aˉ\bar{a}、bˉ\bar{b} 和 cˉ\bar{c} 中的元素数量

异常:

如果 a、b 或 c 不是双字对齐的,则引发 ET_LOAD_STORE 异常(参见 笔记:向量对齐)

参考性能:

vect_f32_add


void vect_complex_f32_add()​

将两个复数的IEEE754单精度浮点数向量相加。

该函数接受两个复数的IEEE754单精度浮点数向量,并计算两个向量的逐元素和。

a[] 是输出向量 aˉ\bar{a},结果将存放在其中。

b[] 和 c[] 分别是复数输入向量 bˉ\bar{b} 和 cˉ\bar{c}。

a、b 和 c 必须从双字对齐的地址开始。

该操作可以在 b[] 或 c[] 上安全地原地执行。

操作:

ak←bk+ck其中k∈0 ... (length−1)a_k \gets b_k + c_k \quad \text{其中} \quad k\in 0\ ...\ (length-1)

参数:

  • complex_float_t a[] – [out] 输出向量 aˉ\bar{a}
  • const complex_float_t b[] – [in] 输入向量 bˉ\bar{b}
  • const complex_float_t c[] – [in] 输入向量 cˉ\bar{c}
  • const unsigned length – [in] 向量 aˉ\bar{a}、bˉ\bar{b} 和 cˉ\bar{c} 中的元素数量

异常:

如果 a、b 或 c 不是双字对齐的,则引发 ET_LOAD_STORE 异常(参见 笔记:向量对齐)

参考性能:

vect_complex_f32_add


void vect_complex_f32_mul()​

将两个复数的IEEE754单精度浮点数向量相乘。

该函数接受两个复数的浮点向量 bˉ\bar{b} 和 cˉ\bar{c} 作为输入。每个输出元素 aka_k 的计算结果为 bkb_k 乘以 ckc_k(使用复数乘法)。

a[] 是输出向量 aˉ\bar{a},结果将存放在其中。

b[] 和 c[] 分别是复数输入向量 bˉ\bar{b} 和 cˉ\bar{c}。

a、b 和 c 必须从双字对齐的地址开始。

该操作可以在 b[] 或 c[] 上安全地原地执行。

操作:

ak←bk⋅ck其中k∈0 ... (length−1)a_k \gets b_k \cdot c_k \quad \text{其中} \quad k\in 0\ ...\ (length-1)

参数:

  • complex_float_t a[] – [out] 输出向量 aˉ\bar{a}
  • const complex_float_t b[] – [in] 输入向量 bˉ\bar{b}
  • const complex_float_t c[] – [in] 输入向量 cˉ\bar{c}
  • const unsigned length – [in] 向量 aˉ\bar{a}、bˉ\bar{b} 和 cˉ\bar{c} 中的元素数量

异常:

如果 a、b 或 c 不是双字对齐的,则引发 ET_LOAD_STORE 异常(参见 笔记:向量对齐)

参考性能:

vect_complex_f32_mul


void vect_complex_f32_conj_mul()​

将两个复数型 IEEE754 浮点向量进行共轭相乘。

此函数接受两个复数浮点向量 bˉ\bar{b} 和 cˉ\bar{c} 作为输入。每个输出元素 aka_k 计算为 bkb_k 乘以 ckc_k 的共轭(使用复数乘法)。

a[] 是输出向量 aˉ\bar{a},用于存放结果。

b[] 和 c[] 是复数输入向量 bˉ\bar{b} 和 cˉ\bar{c}。

a、b 和 c 必须从双字对齐的地址开始。

此操作可以在 b[] 或 c[] 上安全地原地执行。

操作:

ak←bk⋅(ck∗) 其中 k∈0 ... (length−1)a_k \gets b_k \cdot (c_k^*) \text{ 其中 }k\in 0\ ...\ (length-1)

参数:

  • complex_float_t a[] – [out] 输出向量 aˉ\bar{a}

  • const complex_float_t b[] – [in] 输入向量 bˉ\bar{b}

  • const complex_float_t c[] – [in] 输入向量 cˉ\bar{c}

  • const unsigned length – [in] 向量 aˉ\bar{a}、bˉ\bar{b} 和 cˉ\bar{c} 中的元素数量

异常:

  • ET_LOAD_STORE 如果 a、b 或 c 不是双字对齐的,则引发异常(参见 笔记:向量对齐)

参考性能:

vect_complex_f32_conj_mul


void vect_complex_f32_macc()​

将两个复数型 IEEE754 浮点向量的乘积加到第三个浮点向量中。

此函数接受三个复数浮点向量 aˉ\bar{a}、bˉ\bar{b} 和 cˉ\bar{c} 作为输入。每个输出元素 aka_k 计算为输入 aka_k 加上 bkb_k 乘以 ckc_k。

a[] 是累加器向量 aˉ\bar{a},同时用作输入和输出。

b[] 和 c[] 是复数输入向量 bˉ\bar{b} 和 cˉ\bar{c}。

a、b 和 c 必须从双字对齐的地址开始。

操作:

ak←ak+bk⋅ck 其中 k∈0 ... (length−1)a_k \gets a_k + b_k \cdot c_k \text{ 其中 }k\in 0\ ...\ (length-1)

参数:

  • complex_float_t a[] – [inout] 输入/输出累加器向量 aˉ\bar{a}

  • const complex_float_t b[] – [in] 输入向量 bˉ\bar{b}

  • const complex_float_t c[] – [in] 输入向量 cˉ\bar{c}

  • const unsigned length – [in] 向量 aˉ\bar{a}、bˉ\bar{b} 和 cˉ\bar{c} 中的元素数量

异常:

  • ET_LOAD_STORE 如果 a、b 或 c 不是双字对齐的,则引发异常(参见 笔记:向量对齐)

参考性能:

vect_complex_f32_macc


void vect_complex_f32_conj_macc()​

将两个复数型 IEEE754 浮点向量的乘积加到第三个浮点向量中。

此函数接受三个复数浮点向量 aˉ\bar{a}、bˉ\bar{b} 和 cˉ\bar{c} 作为输入。每个输出元素 aka_k 计算为输入 aka_k 加上 bkb_k 乘以 ckc_k 的共轭。

a[] 是累加器向量 aˉ\bar{a},同时用作输入和输出。

b[] 和 c[] 是复数输入向量 bˉ\bar{b} 和 cˉ\bar{c}。

a、b 和 c 必须从双字对齐的地址开始。

操作:

ak←ak+bk⋅(ck∗) 其中 k∈0 ... (length−1)a_k \gets a_k + b_k \cdot (c_k^*) \text{ 其中 }k\in 0\ ...\ (length-1)

参数:

  • complex_float_t a[] – [inout] 输入/输出累加器向量 aˉ\bar{a}

  • const complex_float_t b[] – [in] 输入向量 bˉ\bar{b}

  • const complex_float_t c[] – [in] 输入向量 cˉ\bar{c}

  • const unsigned length – [in] 向量 aˉ\bar{a}、bˉ\bar{b} 和 cˉ\bar{c} 中的元素数量

异常:

  • ET_LOAD_STORE 如果 a、b 或 c 不是双字对齐的,则引发异常(参见 笔记:向量对齐)

参考性能:

vect_complex_f32_conj_macc