工具/软件:Code Composer Studio
各位专家、您好!
我正在从事 C66x DSP 双类型除法、一个操作花费了我很多(几乎250个周期)。 我想是否有任何硬件芯片配置(寄存器或某些电缆连接配置)可以将周期减少到合理的数量。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
各位专家、您好!
我正在从事 C66x DSP 双类型除法、一个操作花费了我很多(几乎250个周期)。 我想是否有任何硬件芯片配置(寄存器或某些电缆连接配置)可以将周期减少到合理的数量。
您好!
旧的智慧不是分割,加上,再乘:)我首先要检查,除法是否绝对必要。 也许您用一组固定的分母进行除法、那么您可能可以预先计算其反向变体并将除法替换为乘法、即、而不是 Ni/Di 首先计算(1/Di)的一组、然后继续使用 Ni*(1/Di)。
如果这不是一种情况、您必须除以所有事先未知的分母、首先检查您是否真的需要双精度、如果是单个后缀、则继续执行浮点数。
无论上述决定如何、接下来的工作就是获取 www.ti.com/.../sprabg7.pdf。 特别要注意第3.1.5条使用分部指令。 有一个使用_rcpsp()内在函数指令的示例,它在1 (字面上-一)个周期中计算1/x,并提供确切的指数,但只提供8位的尾数。 接下来、您可以应用牛顿迭代、仅在第二次迭代之后、即可获得浮点的完全精度。 如果您绝对需要使用 double 变量,请考虑_rcpdp()内在函数,它对 double 变量执行相同的操作。 在初始近似后、需要3牛顿的迭代才能获得双精度的最大值。
这些技术在 O3下的管道非常好、您应该会看到相当大的增益。 但是、这主要发生在循环中。 有时、它会返回以计算循环中的所有必要商、可能会牺牲一些存储器来存储这些商、然后继续执行算法的其余部分。
希望这对您有所帮助。