浮点运算 - 2022.1 简体中文

AI 引擎内核编码 最佳实践指南 (UG1079)

Document ID
UG1079
Release Date
2022-05-25
Version
2022.1 简体中文

标量单元浮点硬件支持包括平方根、平方根倒数、倒数、绝对值、最小值和最大值。它支持通过仿真来执行其它浮点运算。必须链入 softfloat 库,这样测试激励文件和内核代码才能使用仿真。对于数学库函数,必须使用单精度浮点版本(例如,使用 expf() 代替 exp())。

AI 引擎矢量单元可以提供 8 条单精度浮点乘法和累加通道。该单元复用定点数据路径的矢量寄存器文件和置换网络。总之,在定点或浮点中,每个周期只能执行一条矢量指令。

浮点 MAC 的时延为 2 个周期,因此,以乒乓方式使用 2 个累加器有助于提升性能,因为这样允许编译器在每个时钟周期内调度一次 MAC 运算。

acc0 = fpmac( acc0, abuff, 1, 0x0, bbuff, 0, 0x76543210 );
acc1 = fpmac( acc1, abuff, 9, 0x0, bbuff, 0, 0x76543210 );

目前没有除法标量或矢量内部函数。但可通过倒数和乘法来实现矢量除法,如以下示例所示。

invpi = upd_elem(invpi, 0, inv(pi));
acc = fpmul(concat(acc, undef_v8float()), 0, 0x76543210, invpi, 0, 0);

同样,对于矢量 sqrtinvsqrtsincos 均可执行实现。