完整的.NET OpenCL实现
我一直在寻找,但有一点运气。 有没有任何有效的OpenCL的.NET绑定实现? (如果需要,我会为CUDA采取一些措施)。 我遇到了各种各样的实现,CUDA.NET,OpenCL.NET,OpenTK / Cloo(我知道,他们经常提到的是stackoverflow),但他们似乎都处于alpha阶段,或者完全没有可用的例子。 CUDA.NET有一些帮助文件,但它只是一个库引用,它并不真正帮助你入门。
我希望find的是在.NET中用于GPU编程的成熟库。 最终我需要能够在F#中编写代码,但是我会采用任何.NET兼容的语言,因为我以后可以随时转换它,并使用包含的任何示例来启动和运行。
自从我搜遍了所有内容,大概是一个长镜头,但是我希望这只是其中一个我不知道要寻找的东西的情况。
任何帮助将不胜感激。
那么,你所说的所有库都是opencl本机库的简单包装。 它们构成的附加抽象的数量相对较less,并且非常接近一般的opencl函数。 所以,如果你对opencl一般很熟悉,你会很快熟悉这些库。
我认为“OpenCL.NET”实现是完整的,它不包含任何不是OpenCL的东西。 但多次使用后,我发现它太低。
我已经创build了自己的包装器,它通过简化主机部分来提供良好的工作,这是我的一个项目的主机部分(如果您有兴趣,我可以在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>()); } } } }
还有另外一个来自OpenTK http://sourceforge.net/projects/cloo/的绑定库。;
他们把它定位为“它提供了一个更清洁的OpenCL API相比,原始绑定(也可以在你需要它们的情况下)”和“Cloo是一个开放源代码,易于使用的pipe理库,使.NET / Mono应用程序充分利用OpenCL框架“。
样本看起来很有希望。
我也有一组开源的OpenCL绑定。 净。 我主要为自己写了这个,所以它将在.NET中友好地反映OpenCL API。 这个库永远不会有任何的OOP抽象,而且性能相当好。
希望这可以帮助。
我同意olegz的答案。 我只开始使用OpenCL,但Cloo似乎是一个非常好的select。 我发现使用起来相当简单,而且从很多来源听说,它的function也非常丰富。
查看下面的网站,其中还包含一些Cloo的示例: http ://www.cmsoft.com.br/
我一直在使用OpenCLTemplate。
你可以在这里find一个很好的教程: http : //www.cmsoft.com.br/index.php? option=com_content& view= category&layout=blog& id= 41&Itemid= 75
它为我工作得很好。 我build议你也应该看看Cloo。
对于F#我find了这个: https : //github.com/GabrieleCocco/FSCL.Compiler (FSharp to OpenCL编译器)
多年来,我使用了一些不同的C#OpenCL包装,现在正在使用NOpenCL。 这是写得很好,根据麻省理工学院的许可证。