什么时候使用CORDIC或多项式近似更有效?
我正在研究一种不采用浮点硬件但只有16位ALU和40位MAC的架构.
我已经在这个架构的软件中实现了32位单精度浮点加法/减法,乘法,余弦,正弦,除法,平方根和范围缩减. 为了实现余弦和正弦,我首先使用文章“ARGUMENT REDUCTION FOR HUGE ARGUMENTS” by K.C. NG中描述的方法使用范围缩小 我也听说过我应该考虑CORDIC算法.但是,我想知道是否有人知道它是否会比我已经使用的方法更高效或更低效(在吞吐量,内存开销和所需指令数方面)?我已经在多核架构上实现了我的软件功能,其中每个核心仅具有128个字的指令存储器和128个字的16位数据存储器. 谢谢! 解决方法
CORDIC为每个循环迭代提供一位,因此在软件中实现它可能比多项式版本慢.这也可能是为什么很难找到关于CORDIC软件实现的文章:它的性能较差,所以没有人会烦恼.
重新评论:Horner’s method是通过重复添加系数,然后乘以变量x,从最高阶系数到最低系数来评估多项式的??实践.相比之下,天真的方法(即首先评估x的幂,然后将它们乘以它们的系数并将它们加在一起)需要更多的工作,并且可以比Horner的方法在数值上更不稳定. 您还没有完全提到您是如何评估多项式的??,所以我建议一个公式: x2 = x * x cos = ((COS_D * x2 + COS_C) * x2 + COS_B) * x2 + COS_A sin = (((SIN_D * x2 + SIN_C) * x2 + SIN_B) * x2 + SIN_A) * x 请注意,如果将常量调整到评估函数的范围,而不是使用泰勒系数,则可以获得更好的精度. (再次,如果你已经完成了部分或全部这些事情,请道歉,但你没有提到你已经尝试过的东西……) 这可能与您的情况(可能只有16×16位MAC)相关性较小,但如果您的处理器可以同时启动多个算术评估,那么如果您在树状结构中编写评估,则可能会获得更好的性能.形式,避免一些操作的顺序依赖: x2 = x * x x4 = x2 * x2 cos = (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,这个公式也建议它有效地使用…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 疯狂XML学习笔记(7)-----------XML Schema
- XML Referenced file contains errors
- oracle – LISTAGG功能与两列
- ajax之xml(2)
- c# – 带有实体框架的PagedList获取所有记录
- Flash Builder Help / Unable to create a project in Flas
- xml – WCF错误“这可能是由于服务器证书未正确配置HTTP.SY
- reactjs – React-Redux:找不到mapDispatchToProps方法
- c# – XSD的属性,用于防止XSD.exe FieldSpecified标志
- Erlang手册re模块翻译(一) ——compile函数