【发布时间】:2014-07-13 07:49:39
【问题描述】:
由于x86下用于计算sin(x)函数的函数fsin可以追溯到奔腾时代,而且显然它甚至不使用SSE寄存器,我想知道是否有更新更好的指令集用于计算三角函数。
我习惯于用 C++ 编写代码并进行一些asm 优化,因此任何适合从 C++ 到 C 到 asm 的管道的东西都适合我。
谢谢。
我现在在 Linux 64 位下,使用 gcc 和 clang(即使是艰难的 clang 并没有真正提供任何与 FPU 相关的优化 AFAIK)。
编辑
- 我已经实现了一个
sin函数,它通常比std::sin快2 倍,即使打开sse。 - 我的功能永远不会比
fsin慢,即使是强硬的fsin通常也更准确,但考虑到fsin永远不会胜过我的sin实现,我现在将保留我的sin,也是我的sin完全可移植,而fsin仅适用于 x86。 - 我需要这个来进行实时计算,所以我会用精度来换取速度,我认为我可以使用 4-5 位小数的精度。
- 拒绝基于表的方法,我没有使用它,它会破坏缓存,让一切变慢,请不要使用基于内存访问或查找表的算法。
【问题讨论】:
-
您能否更具体地说明您认为 SSE2 对您的案件没有帮助的原因?
-
那你的情况是什么?你能详细说明你的问题吗?根据我对该论文的理解:它们将余弦表示为原始算术运算的函数,因此可以使用 SSE 对其进行矢量化,从而允许您同时计算 4 个余弦。
-
@user2485710 您需要在问题中说明这些目标:希望在精度范围内获得更快的速度,否则没有人能够提供帮助......
-
@OliCharlesworth 我喜欢你的 PRNG 方法,但我认为它不会按照要求精确到小数点后 4-5 位
标签: c++ c assembly intel trigonometry