2010-05-25 4 views
2

Мне нужно позвонить Atan по миллионам значений в секунду. Есть ли хорошая библиотека для выполнения этой операции в партии очень быстро. Например, библиотека, которая передает логику низкого уровня, используя что-то вроде SSE?Хорошая библиотека .NET для быстрой потоковой/пакетной тригонометрии (Atan)?

Я профилировал приложение, и я знаю, что этот вызов Атану является узким местом.

Я знаю, что в OpenCL есть поддержка, но я бы предпочел сделать эту операцию на CPU. Целевая машина может не поддерживать OpenCL.

Я также изучал использование OpenCV, но точность для углов Atan составляет всего ~ 0,3 градуса. Мне нужны точные результаты.

+0

Какая точность вам нужно, и каковы ваши входные значения –

+0

одинарной или двойной точности (Int, поплавок, двойник, другое одно значение, или у/х пара?) это нормально. Я хотел бы точность около 1/3600 градуса. – Sean

+0

Я сделал некоторую трассировку производительности beter с dotTrace и обнаружил, что узким местом на самом деле был не вызов Atan, а операция присваивания, которую я использовал в одной строке. Тем не менее, я по-прежнему заинтересован в любых хороших библиотеках триггеров для потоковых/пакетных операций. – Sean

ответ

1

Почему бы вам не попробовать Brahma? Насколько я понимаю, это бесплатная библиотека с открытым исходным кодом GPGPU, которая не зависит от OpenCL, а вместо этого конвертирует код в шейдеры HLSL/GLSL через LINQ.

EDIT: Пример кода:

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

+0

Не похоже, что он предоставляет триггерные функции? – Sean

+0

Отредактированный ответ. Брахма фактически поддерживает тригг-функции. Все функции System.Math поддерживаются, если они эквивалентны в HLSL/GLSL. – YellPika