用于快速流/批处理三角函数(Atan)的良好 .NET 库?

Posted

技术标签:

【中文标题】用于快速流/批处理三角函数(Atan)的良好 .NET 库?【英文标题】:Good .NET library for fast streaming / batching trigonometry (Atan)? 【发布时间】:2010-05-25 20:28:29 【问题描述】:

我需要以每秒数百万个值调用 Atan。是否有一个很好的库可以非常快速地批量执行此操作。例如,使用 SSE 之类的流式传输低级逻辑的库?

我已经分析了应用程序,并且我知道对 Atan 的调用是一个瓶颈。

我知道 OpenCL 对此提供支持,但我更愿意在 CPU 上执行此操作。目标机器可能不支持 OpenCL。

我也研究过使用 OpenCV,但 Atan 角度的准确度仅为 ~0.3 度。我需要准确的结果。

【问题讨论】:

您需要什么精度以及您的输入值是什么(int、float、double、其他?单值,还是 y / x 对?) 单精度或双精度都可以。我想要大约 1/3600 度的精度。 我用dotTrace做了一些更好的性能跟踪,发现瓶颈实际上不是Atan调用,而是我在同一行使用的赋值操作。但是,我仍然对任何用于流式处理/批处理操作的好的三角库感兴趣。 让我猜猜。您的赋值语句是否在调试代码中索引了一个向量,如下例所示:***.com/questions/1932222/c-vector-vs-array-time/… 【参考方案1】:

你为什么不试试Brahma?据我了解,它是一个免费的开源 GPGPU 库,不依赖于 OpenCL,而是通过 LINQ 将代码转换为 HLSL/GLSL 着色器。

编辑:示例代码:

ComputationProvider provider = new ComputationProvider();
CompiledQuery query = provider.Compile<DataParallelArray<float>>(
    data => from value in data
            select (float)Math.Atan(value)); // Do your calculations here...

DataParallelArray<float> input = new DataParallelArray<float>(provider, new float[]  0, 1, 2, 3, 4, 5, 6, 7, ); // etc...
IQueryable result = provider.Run(query, input);

foreach (float value in result)
    Console.WriteLine(value);

【讨论】:

非常有趣。我没听说过梵天。 好像不提供三角函数? 已编辑答案。 Brahma 实际上确实支持三角函数。支持所有 System.Math 函数,只要它们在 HLSL/GLSL 中是等价的。

以上是关于用于快速流/批处理三角函数(Atan)的良好 .NET 库?的主要内容,如果未能解决你的问题,请参考以下文章

在 x86(使用 SSE2)和 ARM(使用 vfpv4 NEON)上尾数为 11 位的 atan2 近似值

C语言中的atan和atan2

MATLAB用fsolve解方程

反正切函数atan与atan2的区别

Python atan() 函数

Python atan2() 函数