我正在编写一个应用程序,最终它可以很好地并行化:
two dimensional float initialData and result arrays
for each cell (a, b) in result array:
for each cell (i, j) in initialData:
result(a, b) += someComputation(initialData(i, j), a, b, i, j, some global data...);
有关算法的更多细节:
-
我'd like to make the first loop'迭代同时运行(也许有更好的方法?)
-
以只读方式访问初始数据
-
someComputation相当简单,它涉及乘法,加法,余弦计算,所以它可以由GPU完成,但是,它需要它当前正在处理的元素的索引
-
阵列在任何维度上都不会超过~4000
图书馆资产:
-
程序将用C#(用WPF)编写,所以如果它(已经)具有易于使用的.NET绑定将会很好
-
如果找不到GPU,算法应该在CPU上运行
-
程序将仅限Windows,因此非常适合Windows XP支持 .
-
算法可以在OpenCL中重写,但是,我相信它不像像素着色器那样受到广泛支持 . 但是,如果没有其他选择,OpenCL就可以了 . (AFAIK CUDA仅在nVidia GPU 's and OpenCL covers both nVidia'和AMD 's GPU'上运行)
我试图查看Microsoft Accelerator库,但我还没有找到传递数组索引的方法 . 任何帮助都会让我感激不尽,请原谅我的英语 .
1 回答
有低级OpenCL绑定:OpenCL.NET:http://openclnet.codeplex.com/ . 此外,存在基于OpenCL.NET的F#绑定:https://github.com/YaccConstructor/Brahma.FSharp
它允许您编写“本机”F#代码并通过OpenCL在GPU上运行它 . 例如,矩阵乘法的代码(没有提供者配置):