使用SSE对数,还是切换到FPU?

时间:2012-01-17 23:08:27

标签: sse simd logarithm natural-logarithm

我在做一些统计计算。我需要它们快速,所以我重写了大部分内容以使用SSE。我几乎是新手,所以我想知道这里的正确方法是什么:

据我所知,SSE中没有log2或ln功能,至少不能达到4.1,这是我使用的硬件支持的最新版本。

是否更好:

  1. 提取4个浮点数,并对它们进行FPU计算以确定它是否具有熵 - 我不需要将任何这些值加载回SSE寄存器,只需将它们相加到另一个浮点数
  2. 找到执行log2的SSE函数

2 个答案:

答案 0 :(得分:8)

似乎有一些SSE log2实施,例如this one

还有Intel Approximate Maths Library具有log2功能等等 - 它已经过时了(2000年),但它是SSE2,它应该仍能正常运行。

<小时/> 另见:

答案 1 :(得分:2)

没有SSE指令实现对数函数。但是,也没有单个x86指令执行通用对数。如果您正在考虑使用C标准库中的loglog10等对数函数,那么值得一看的是像libc这样的开源库中使用的实现。您可以轻松地滚动自己的对数近似值,该对数值可以在SSE寄存器中的所有元素上运行。

这种函数通常使用多项式近似来实现,该多项式近似在输入参数的某个区域(例如泰勒级数)上的某些精度规范内有效。然后,您可以利用对数属性将通用输入参数包装到对数例程的可接受输入范围内。此外,您可以通过利用属性来参数化对数的基数:

log_y(x) = log_a(x) / log_a(y)

其中a是您创建的对数例程的基础。