gpt4 book ai didi

performance - 如何在 x64 CPU 上快速计算 sincos?

转载 作者:行者123 更新时间:2023-12-04 02:50:24 25 4
gpt4 key购买 nike

这是一个给有SSE/AVX指令族经验的用户以及熟悉其性能分析的用户提出的问题。我看到了很多不同的实现和方法,范围从 older for SSE2到较新的。网络上充斥着这样的链接。但就我个人而言,我对 sse 汇编分析的经验并不丰富。有些人指出 uops、缓存,这需要一些低级知识。所以我要求提示和您的个人经验。如果您有时间进行一些比较,关于“什么是最快的”以及为什么,您查看了哪些方法。实现可能不是那么精确,10-16 位的单 FP 精度就足够了。越多越好,但在不影响速度的情况下。

附注。为了尽量避免元洪水,我可以用细节精确地描述任务:

  • 给定标量参数 x(以弧度为单位),它在 xmm 寄存器中传递(根据 x64 快速调用约定)。
  • 写一个带有签名的函数 __m128 sincos(float x) ;返回其 sin(x) 和 cos(x) 值的近似值。
  • 返回值应在一个 xmm 寄存器内,并以最快的方式计算,以满足 10 位精度要求。
  • 参数可以是任何 真实数字(但不是 naninf ,等等)。如果方法需要参数规范化,则其性能实现(fmod())也将是主题。但问题不在于处理特殊的 FP 情况。


  • 这可能是重复的,但我没有在这里找到类似的问题,所以请指出我,如果已经有一个。

    最佳答案

    我发现了 Julien Pommier implementations 的现代修订版,在 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 编译器设置)

    更新:
    还有一个很棒的FastTrigo代码示例,其中 FT::sincos()函数比 Julien Pommier 的实现快 20%。还有他的FT::sincos()提供准确的 10 位保证精度。

    关于performance - 如何在 x64 CPU 上快速计算 sincos?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971804/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com