2010-05-25 68 views
2

我需要每秒鐘以數百萬的值調用Atan。是否有一個很好的庫以非常快的速度批量執行此操作。例如,一個使用類似SSE的低級邏輯流的庫?用於快速流/批處理三角(Atan)的良好.NET庫?

我已經介紹了該應用程序,並且我知道此次致電Atan是一個瓶頸。

我知道在OpenCL中有這方面的支持,但我更願意在CPU上執行此操作。目標機器可能不支持OpenCL。

我也研究過使用OpenCV,但它對Atan角度的精確度僅爲〜0.3度。我需要準確的結果。

+0

你需要什麼的準確性,什麼是您的輸入值 – 2010-05-25 20:31:43

+0

單或雙精度(整型,浮點,雙,其他單個值,或Y/X對?)沒問題。我想準確度達到1/3600度。 – Sean 2010-05-25 20:56:59

+0

我用dotTrace做了一些性能跟蹤,發現瓶頸實際上不是Atan調用,而是我在同一行上使用的賦值操作。然而,我仍然對任何用於流/批處理操作的良好觸發庫感興趣。 – Sean 2010-05-25 20:58:54

回答

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); 
+0

非常有趣。我沒有聽說過梵天。 – Sean 2010-05-26 13:49:15

+0

它看起來不像它提供的觸發功能? – Sean 2010-05-26 13:55:40

+0

編輯答案。布拉馬確實支持trig函數。只要它們在HLSL/GLSL中是等效的,就支持所有的System.Math函數。 – YellPika 2010-05-27 03:09:32