我到处都找遍了,但运气不太好。是否有任何文档化的.NET绑定OpenCL实现?(如果有必要的话,我会为CUDA拿些东西)。我遇到过各种各样的实现,CUDA.NET、OpenCL.NET、OpenTK / Cloo (我知道,它们经常被提到堆栈溢出),但它们似乎都处于alpha阶段,或者完全没有可用的示例。CUDA.NET有一些帮助文件,但它只是一个库引用,并不能真正帮助您入门。
我希望在.NET中找到一个成熟的GPU编程库。最终,我需要能够用F#编写代码,但我会使用任何符合.NET的语言,因为我以后总是可以转换它,并使用包含的任何示例来启动和运行。
也许我已经搜遍了很长时间,但我希望这只是我不知道该找什么的情况之一。
任何帮助都将不胜感激。
发布于 2011-04-26 07:33:51
好吧,您说过的所有库都是opencl本机库的简单包装器。它们所提供的额外抽象相对较少,并且非常接近于一般的opencl函数。因此,如果您熟悉opencl,那么您很快就会熟悉这些库。
我认为'OpenCL.NET‘实现是完整的,它没有任何不是OpenCL的东西。但经过几次使用后,我发现它太低了。
我已经创建了自己的包装器,它通过显着地简化主机部分为我服务,这是我的一个项目的主机部分(如果您感兴趣,我可以在github或任何其他svn服务中发布我的OpenCl包装器):
using System;
using System.Net;
using System.Collections.Generic;
using System.IO;
using Shared;
using Shared.IO;
using Shared.OpenCL;
namespace Testing
{
public class ApplicationClass
{
static Random rand = new Random();
static Single[] RandomArray(Int32 length)
{
Single[] result = new Single[length];
for (int i = 0; i < result.Length; i++)
{
result[i] = (Single)rand.NextDouble();
}
return result;
}
static void Main(string[] args)
{
DeviceGlobalMemory output = new Byte[4096];
DeviceGlobalMemory indeces = RandomArray(102400);
DeviceGlobalMemory ops = new Byte[3072];
DeviceGlobalMemory data = RandomArray(1048576);
Console.Write("Creating kernel...");
Kernel kernel = Kernel.Create("Kernel", File.ReadAllText("Test.c"), data, indeces, ops, output);
Console.Write("Executing kernel...");
Event e = kernel.Execute(256, 256);
kernel.CommandQueue.Finish();
Console.WriteLine("done, operation took {0}", Profiler.DurationSeconds(e));
UnmanagedReader reader = new UnmanagedReader(new DeviceBufferStream(output));
for (int i = 0; i < 256; i++)
{
if (i % 4 == 0) Console.WriteLine();
if (i % 16 == 0) Console.WriteLine();
Console.Write("{0}\t", reader.Read<Single>());
}
}
}
}发布于 2011-07-02 11:18:48
还有来自OpenTK http://sourceforge.net/projects/cloo/的另一个绑定库。
他们将其定位为“与原始绑定相比,它提供了一个比原始绑定更干净的OpenCL API (如果您需要它们,这些绑定也是可用的)”和"Cloo是一个开放源码、易于使用的托管库,它使.NET/Mono应用程序能够充分利用OpenCL框架“。
样品看上去很有希望。
发布于 2011-06-18 03:47:22
我还有一组开源的OpenCL绑定。NET开发工具。我主要是为自己编写这篇文章,这样它就能忠实地反映OpenCL API,同时又对.NET友好。这个库永远不会有任何OOP抽象,而且它的性能非常好。
http://openclnet.codeplex.com
希望这能有所帮助。
https://stackoverflow.com/questions/5654048
复制相似问题