【发布时间】:2013-03-14 18:35:39
【问题描述】:
我正在研究一种不具备浮点硬件,而只有 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 怎么样,它是如何在这里发挥作用的?我应该将其视为一种选择吗?为什么?我还没有找到任何好的资源来回答这个关于 32 位浮点的问题。
-
您是否使用霍纳来评估多项式?您使用了哪些次数多项式?
-
我的正弦方程是 ax+bx^3+cx^5+dx^7 的形式。我的余弦方程是 a+bx^2+cx^4+dx^6 的形式。我不确定你所说的使用霍纳是什么意思?我通过使用计算机近似书找到了系数 a、b、c 和 d。我使用了一个多项式来保证我的精度达到 24 位。
-
对于Horner's method,计算 a+x*(b+x*(c+x*d)) 的 cos 和类似的 sin。请注意,wikipedia 表示“当硬件乘法器可用时(例如,在 DSP 微处理器中),查表方法和幂级数通常比 CORDIC 更快”。
标签: c algorithm math assembly floating-point