xak*_*p35 5 performance trigonometry sse avx function-approximation
这是一个在SSE/AVX指令系列中经验丰富的用户,以及熟悉其性能分析的人员.我看到了很多不同的实现和方法,从较旧的SSE2到新的.网络充斥着这样的链接.但就我个人而言,我对sse装配分析并不十分经验.有些人指出了uops,缓存,这需要一些低级知识.所以我要求提示和你的个人经历.如果你有时间推出一些比较,在"什么是最快的"以及为什么,你看到了什么方法.实现可能不那么精确,单个FP精度的10-16位就足够了.越多越好,但是当它不影响速度时.
PS.为了避免元洪水,我可以准确地描述任务的细节:
__m128 sincos(float x); 返回其sin(x)和cos(x)值近似值.nan,inf,等等).如果方法需要参数规范化,其性能实现(fmod())也是主题.但问题不在于处理特殊FP案件.这可能是重复的,但我没有在这里找到类似的问题,所以请指出我,如果已经有一个.
我发现了Julien Pommier 实现的伟大现代修订版,在 zlib 下移植到 AVX/AVX2,感谢 Giovanni Garberoglio:
http://software-lisc.fbk.eu/avx_mathfun/
它的运行速度非常快,在 i7 3770k 单核上每秒迭代 80-90M,每次迭代提供 8 个正弦和 8 个余弦。与〜15Mhz相比,如果我每次迭代调用8个sinf()和8个cosf()(来自msvc2017 x64库的函数,具有avx编译器设置)
UPD:
还有一个出色的FastTrigo代码示例,其中FT::sincos()函数比 Julien Pommier 的实现快 20%。他的FT::sincos()精确度保证为 10 位。
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |