什么时候使用CORDIC或多项式近似更有效?

什么时候使用CORDIC或多项式近似更有效?,第1张

概述我正在研究一种不采用浮点硬件但只有16位ALU和40位MAC的架构. 我已经在这个架构的软件中实现了32位单精度浮点加法/减法,乘法,余弦,正弦,除法,平方根和范围缩减. 为了实现余弦和正弦,我首先使用文章“ARGUMENT REDUCTION FOR HUGE ARGUMENTS” by K.C. NG中描述的方法使用范围缩小 然后我实现了余弦和正弦函数,它们是-pi / 4到pi / 4范围内 我正在研究一种不采用浮点硬件但只有16位ALU和40位MAC的架构.

我已经在这个架构的软件中实现了32位单精度浮点加法/减法,乘法,余弦,正弦,除法,平方根和范围缩减.

为了实现余弦和正弦,我首先使用文章“ARGUMENT REDUCTION FOR HUGE ARGUMENTS” by K.C. NG中描述的方法使用范围缩小
然后我实现了余弦和正弦函数,它们是-pi / 4到pi / 4范围内的余弦和正弦函数的多项式近似.我提到了“计算机近似”一书,Hart等人.对于多项式.

我也听说过我应该考虑CORDIC算法.但是,我想知道是否有人知道它是否会比我已经使用的方法更高效或更低效(在吞吐量,内存开销和所需指令数方面)?我已经在多核架构上实现了我的软件功能,其中每个核心仅具有128个字的指令存储器和128个字的16位数据存储器.
我也尝试过搜索如何为余弦和正弦实现CORDIC算法,但我找不到任何用于32位浮点实现的好资源.有人有建议吗?

谢谢!

解决方法 CORDIC为每个循环迭代提供一位,因此在软件中实现它可能比多项式版本慢.这也可能是为什么很难找到关于CORDIC软件实现的文章:它的性能较差,所以没有人会烦恼.

重新评论:Horner’s method是通过重复添加系数,然后乘以变量x,从最高阶系数到最低系数来评估多项式的​​实践.相比之下,天真的方法(即首先评估x的幂,然后将它们乘以它们的系数并将它们加在一起)需要更多的工作,并且可以比Horner的方法在数值上更不稳定.

您还没有完全提到您是如何评估多项式的​​,所以我建议一个公式:

x2 = x * xcos = ((COS_D * x2 + COS_C) * x2 + COS_B) * x2 + COS_Asin = (((SIN_D * x2 + SIN_C) * x2 + SIN_B) * x2 + SIN_A) * x

请注意,如果将常量调整到评估函数的范围,而不是使用泰勒系数,则可以获得更好的精度. (再次,如果你已经完成了部分或全部这些事情,请道歉,但你没有提到你已经尝试过的东西……)

这可能与您的情况(可能只有16×16位MAC)相关性较小,但如果您的处理器可以同时启动多个算术评估,那么如果您在树状结构中编写评估,则可能会获得更好的性能.形式,避免一些 *** 作的顺序依赖:

x2 = x * xx4 = x2 * x2cos = (COS_D * x2 + COS_C) * x4 + (COS_B * x2 + COS_A)sin = ((SIN_D * x2 + SIN_C) * x4 + (SIN_B * x2 + SIN_A)) * x

如果你的处理器有一个矢量ALU,这个公式也建议它有效地使用……

总结

以上是内存溢出为你收集整理的什么时候使用CORDIC或多项式近似更有效?全部内容,希望文章能够帮你解决什么时候使用CORDIC或多项式近似更有效?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1255764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存