17

我有一个连接到主处理器的协处理器。一些浮点计算需要在协处理器中完成,但不支持硬件浮点指令,仿真速度太慢。

现在一种方法是让主处理器缩放浮点值,以便它们可以表示为整数,将它们发送到协处理器,协处理器执行一些计算,并在返回时缩小这些值。但是,这在大多数情况下都行不通,因为数字最终会变得太大或太小而超出这些整数的范围。所以我的问题是,正确执行此操作的最快方法是什么。

4

2 回答 2

15

你说仿真太慢了。我猜你的意思是模拟浮点数。如果缩放整数不够用,唯一剩下的选择是定点数学,但它也不是很快,即使它比模拟浮点数快得多。

此外,您永远无法逃避这样一个事实,即使用缩放整数和定点数学,您将获得比使用浮点更小的动态范围。

但是,如果事先知道您的范围,则可以针对您需要的范围调整定点数学实现。

这是一篇关于定点的文章。该技巧的要点是决定如何拆分变量,数字的低位和高位有多少位。

可以在此处找到C 的定点的完整实现。(BSD 许可证。)还有其他.

于 2013-04-09T18:45:03.700 回答
5

除了@Amigable Clark Kant 的建议之外,Anthony Williams 的定点数学库还提供了一个 C++fixed类,该类几乎可以与floator互换使用,double并且在 ARM 上,与软件浮点相比,性能提高了 5 倍。它包括标准数学库的完整fixed点版本,包括使用 CORDIC 算法的三角函数和日志函数等。

于 2013-04-10T10:26:24.390 回答