在C#中使用#pragma intrinsic(sqrt, pow)?

5

C++简介

在代码的预处理器部分使用#pragma intrinsic命令,可以极大地提高大多数数学函数调用的速度。

#pragma intrinsic(sqrt, pow)

上述代码允许大多数数学函数调用直接发送到数学协处理器,而不是发送到函数堆栈。
问题:
有没有办法在C#中做到这一点?除了重写内置函数以执行类似操作之外。例如,常见的是进行二次幂计算,因此这种方法是适当的,但这不是我要找的内容:
public double Pow2(double value)
{
    return (value * value);
}
1个回答

3

1
@Dark:你把我的话断章取义了。那段话是在谈论使用SIMD的情况下。 - Ben Voigt
你说得对,是我的错。我没有注意到那个问题。那么,如果我想加快代码的运行速度,有什么可行的替代方案呢? - Nahydrin
.NET没有任何阻止将SQRTSDMULSD指令替换为Math.Sqrt(x)Math.Pow(x, 2)。虽然我不知道它目前是否这样做。如果需要进行微观优化,C#/.NET并不是正确的工具。 - Cory Nelson
@Dark:更智能的算法。有时候你可以避免使用平方根,例如 if (sqrt(x*x + y*y) < r) 可以通过两边平方来更快地完成:if (x*x + y*y < r*r),因为额外的乘法比开平方要快得多。你正在进行什么样的计算? - Ben Voigt
2
@Dark:如果有一种通用的加速数学运算的方法,编译器早就已经在使用了。剩下的只有针对具体问题进行优化。首先,你应该使用性能分析工具,找出程序中真正的慢速区域。 - Ben Voigt
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接