我在做一些统计计算。我需要它们快速,所以我重写了大部分内容以使用SSE。我几乎是新手,所以我想知道这里的正确方法是什么:
据我所知,SSE中没有log2或ln功能,至少不能达到4.1,这是我使用的硬件支持的最新版本。
是否更好:
答案 0 :(得分:8)
似乎有一些SSE log2
实施,例如this one
还有Intel Approximate Maths Library具有log2
功能等等 - 它已经过时了(2000年),但它是SSE2,它应该仍能正常运行。
<小时/> 另见:
答案 1 :(得分:2)
没有SSE指令实现对数函数。但是,也没有单个x86指令执行通用对数。如果您正在考虑使用C标准库中的log
或log10
等对数函数,那么值得一看的是像libc这样的开源库中使用的实现。您可以轻松地滚动自己的对数近似值,该对数值可以在SSE寄存器中的所有元素上运行。
这种函数通常使用多项式近似来实现,该多项式近似在输入参数的某个区域(例如泰勒级数)上的某些精度规范内有效。然后,您可以利用对数属性将通用输入参数包装到对数例程的可接受输入范围内。此外,您可以通过利用属性来参数化对数的基数:
log_y(x) = log_a(x) / log_a(y)
其中a
是您创建的对数例程的基础。