用于快速流/批处理三角函数(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 库?的主要内容,如果未能解决你的问题,请参考以下文章