首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >完整的.NET OpenCL实现

完整的.NET OpenCL实现
EN

Stack Overflow用户
提问于 2011-04-13 18:50:41
回答 7查看 40.8K关注 0票数 45

我到处都找遍了,但运气不太好。是否有任何文档化的.NET绑定OpenCL实现?(如果有必要的话,我会为CUDA拿些东西)。我遇到过各种各样的实现,CUDA.NET、OpenCL.NET、OpenTK / Cloo (我知道,它们经常被提到堆栈溢出),但它们似乎都处于alpha阶段,或者完全没有可用的示例。CUDA.NET有一些帮助文件,但它只是一个库引用,并不能真正帮助您入门。

我希望在.NET中找到一个成熟的GPU编程库。最终,我需要能够用F#编写代码,但我会使用任何符合.NET的语言,因为我以后总是可以转换它,并使用包含的任何示例来启动和运行。

也许我已经搜遍了很长时间,但我希望这只是我不知道该找什么的情况之一。

任何帮助都将不胜感激。

EN

回答 7

Stack Overflow用户

发布于 2011-04-26 07:33:51

好吧,您说过的所有库都是opencl本机库的简单包装器。它们所提供的额外抽象相对较少,并且非常接近于一般的opencl函数。因此,如果您熟悉opencl,那么您很快就会熟悉这些库。

我认为'OpenCL.NET‘实现是完整的,它没有任何不是OpenCL的东西。但经过几次使用后,我发现它太低了。

我已经创建了自己的包装器,它通过显着地简化主机部分为我服务,这是我的一个项目的主机部分(如果您感兴趣,我可以在github或任何其他svn服务中发布我的OpenCl包装器):

代码语言:javascript
复制
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>());
            }
        }
    }
}
票数 34
EN

Stack Overflow用户

发布于 2011-07-02 11:18:48

还有来自OpenTK http://sourceforge.net/projects/cloo/的另一个绑定库。

他们将其定位为“与原始绑定相比,它提供了一个比原始绑定更干净的OpenCL API (如果您需要它们,这些绑定也是可用的)”和"Cloo是一个开放源码、易于使用的托管库,它使.NET/Mono应用程序能够充分利用OpenCL框架“。

样品看上去很有希望。

票数 14
EN

Stack Overflow用户

发布于 2011-06-18 03:47:22

我还有一组开源的OpenCL绑定。NET开发工具。我主要是为自己编写这篇文章,这样它就能忠实地反映OpenCL API,同时又对.NET友好。这个库永远不会有任何OOP抽象,而且它的性能非常好。

http://openclnet.codeplex.com

希望这能有所帮助。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5654048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档