这是针对熟悉 SSE/AVX 指令家族的用户以及熟悉其性能分析的用户提出的问题。我看到了很多不同的实现和方法,从旧的 SSE2到新的。网络上充斥着这样的链接。但就我个人而言,我在 sse 汇编分析方面经验并不丰富。有些人指出了微指令、缓存,这需要一些低级知识。所以我要求一个提示和你的个人经历。如果您有时间进行一些比较,关于“什么是最快的”以及为什么,您查看了哪些方法。实现可能不是那么精确,10-16 位的单 FP 精度就足够了。越多越好,但当它不影响速度时。
PS。为了避免元洪水,我可以用细节精确地描述任务:
- 给定标量参数 x(以弧度为单位),它在 xmm 寄存器中传递(根据 x64 快速调用约定)。
- 写一个带有签名的函数
__m128 sincos(float x)
;返回其 sin(x) 和 cos(x) 值的近似值。 - 返回值应在一个 xmm 寄存器内,并以尽可能快的方式计算,以满足 10 位精度要求。
- 参数可以是任何实数(但不是
nan
,inf
, 等等)。如果方法需要参数规范化,则其高性能实现(fmod())也是主题。但问题不在于处理特殊的 FP 案件。
这可能是重复的,但我没有在这里找到类似的问题,所以请指出我,如果已经有一个。