Pau*_*aul 1 c c++ floating-point int lookup-tables
我正在为ARM-Target编写代码,它使用了大量的浮点运算和三角函数.AFAIK浮点计算比int慢很多(特别是在ARM上).准确性并不重要.
我考虑使用缩放因子(pe范围为0*pi到2*pi变为int 0到1024)和查找表来实现我自己的三角函数.这是一个好方法吗?还有其他选择吗?
目标平台是运行ubuntu的Odroid U2(Exynos4412)和许多其他东西(网络服务器等......).
(允许使用c ++ 11和boost/libraries)
如果您的目标平台有数学库,请使用它.如果它有任何好处,它是由考虑速度的专家撰写的.您不应该在猜测快速或慢速的基础上进行代码设计.如果您没有实际测量或处理器规格,并且您不知道应用程序中的三角函数消耗了大量时间,那么您没有充分的理由替换数学库.
浮点指令通常具有比整数指令更长的延迟,但它们是流水线的,因此吞吐量可以相当.(例如,浮点单元可能有四个阶段来完成工作,因此一条指令需要四个周期才能完成所有阶段,但是你可以在每个循环中将一条新指令推入第一阶段.)流水线是否是足以提供与整数实现相同的性能在很大程度上取决于目标处理器,所使用的算法以及实现者的技能.
如果在您的情况下使用数学例程的自定义实现是有益的,那么它们应该如何设计在很大程度上取决于环境.正确的建议取决于要支持的域(只需0到2π?-2π到+2π?可能更大的值,必须折叠到-π到π?),需要支持哪些特殊情况(传播NaN?),所需的准确性,处理器中还发生了什么(使用了大量内存还是我们可以依赖缓存中剩余的查找表?)等等.
三角函数例程的一个重要部分是处理各种情况(NaN,无穷大,小值)和减少模2π的参数.有可能实现不处理特殊情况或执行参数减少但仍使用浮点的精简程序.