我正在编写一个应用程序,最终它可以很好地并行化部分:
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...);
有关算法的更多详细信息:
图书馆属性:
我曾尝试查看Microsoft Accelerator库,但我还没有找到传递数组索引的方法。 任何帮助都会让我感激不尽,请原谅我的英语。
答案 0 :(得分:0)
有低级OpenCL绑定:OpenCL.NET:http://openclnet.codeplex.com/。 此外,存在基于OpenCL.NET的F#绑定:https://github.com/YaccConstructor/Brahma.FSharp
它允许您编写“本机”F#代码并通过OpenCL在GPU上运行。例如,矩阵乘法的代码(没有提供者配置):
//Code for run on GPU
let command =
<@
fun (r:_2D) columns (a:array<_>) (b:array<_>) (c:array<_>) ->
let tx = r.GlobalID0
let ty = r.GlobalID1
let mutable buf = c.[ty * columns + tx]
for k in 0 .. columns - 1 do
buf <- buf + (a.[ty * columns + k] * b.[k * columns + tx])
c.[ty * columns + tx] <- buf
@>
//compile code and configure kernel
let kernel, kernelPrepare, kernelRun = provider.Compile command
let d =(new _2D(rows, columns, localWorkSize, localWorkSize))
kernelPrepare d columns aValues bValues cParallel
//run computations on GPU
let _ = commandQueue.Add(kernelRun()).Finish()
//read result back
let _ = commandQueue.Add(cParallel.ToHost(kernel)).Finish()