【发布时间】:2010-04-14 13:29:13
【问题描述】:
在我正在分析的应用程序中,我发现在某些情况下,此函数能够占用总执行时间的 10% 以上。
多年来,我看到了有关使用偷偷摸摸的浮点技巧更快地实现 sqrt 的讨论,但我不知道这些东西在现代 CPU 上是否已经过时。
正在使用 MSVC++ 2008 编译器,供参考...虽然我认为 sqrt 不会增加太多开销。
有关modf 函数的类似讨论,另请参见此处。
编辑:作为参考,this 是一种广泛使用的方法,但它实际上更快吗?现在 SQRT 到底有多少个周期?
【问题讨论】:
-
你能发布一些代码吗?优化 sqrt 的最好方法是去掉它,或者至少减少对它的调用次数,这可能是可能的。
-
代码是来自第 3 方的长而复杂的软体物理建模。没有几个执行 sqrt 的内部循环可以使用 length^2 代替 length :)
-
单精度还是双精度?您需要什么精度?
-
不要使用“快速反平方根”。如果您愿意接受一个近似值,硬件
rsqrtss(近似倒数平方根)要快得多。 -
请参阅stackoverflow.com/questions/31555260/… 以获得(近似)
rsqrtps+ 牛顿迭代的体面版本,对于单精度float,给出 +/-2ulp。请参阅stackoverflow.com/questions/32002277/… 了解-mrecip编译器优化,它应该控制rsqrt、but doesn't seem to actually do so (onlyrcpfor 1/x) 的自动使用。
标签: c++ optimization sqrt