SSE2:双精度日志功能

wat*_*180 10 c c++ optimization sse simd

我需要开源(没有许可限制)日志功能的实现,有签名的东西

__m128d _mm_log_pd(__m128d);
Run Code Online (Sandbox Code Playgroud)

它可以在英特尔短矢量数学库(ICC的一部分)中使用,但ICC既不是免费的也不是开源的.我正在寻找仅使用内在函数的实现.

它应该使用特殊的有理函数近似.我需要的东西几乎与cmath日志一样准确,比如9-10十进制数字,但更快.

Ale*_* C. 6

我相信log2更容易计算.您可以将数字乘以/除以2的幂(非常快),使其位于(0.5,2),然后使用Pade近似(将M接近N),这很容易一劳永逸地推导出来,您可以根据自己的需要选择其顺序.您只需要使用SSE内在函数进行算术运算.不要忘记根据上述比例因子添加/删除常量.

如果你想要自然日志,除以log2(e),你可以一劳永逸地计算.

在某些特定项目中查看自定义日志功能并不罕见.标准库函数解决了一般情况,但您需要更具体的内容.我真诚地认为自己做这件事并不难.


pic*_*c11 5

看看AMD LibM.它不是开源的,而是免费的.AFAIK,适用于Intel CPU.在同一个网页上,您可以找到ACML的链接,这是来自AMD的另一个免费数学库.它拥有AMD LibM + Matrix算法,FF和发行版的所有功能.

我不知道任何双精度矢量化数学函数的开源实现.我想Intel和AMD libs是由CPU制造商手动优化的,每个人都在速度很重要时使用它们.IIRC,试图在GCC中实现矢量化数学函数的内在函数.我不知道他们到底走了多远.显然,这不是一项微不足道的任务.