.net - .Net 中的 GPGPU 编程 - Microsoft Accelerator VS OpenCL.net [VS Others]

标签 .net parallel-processing gpgpu opencl.net

我正在开发一个程序(在 .Net 中),它有很多图像处理(如 2D 卷积,......),我想用 GPGPU(并行处理)来做它们
所以,我有一些选择:Microsoft Accelerator、OpenCL.Net、...
哪个更适合我?

一些对我来说很重要的事情:速度,兼容性(例如,如果 GPU 不支持,会发生什么?),易于学习,与 Nvidia 和 ATI 一起工作,......

而且我听说我可以在 OpenCL 中创建自己的函数并为许多数组单元运行它,但我不知道我是否可以在 Microsoft Accelerator 中做到这一点,或者我必须使用它的函数......

最佳答案

Microsoft Accelerator 和 OpenCL 支持 CPU 和 GPU,并且独立于供应商(即在 ATI 和 nVidia 卡上运行)。

在 OpenCL 的情况下,您必须将 OpenCL 单独安装到用户机器(包含在 nVidia(支持 nvidia 的 gpus)和 ATI(支持 ati gpus 和任何 cpus)驱动程序中,可下载用于 Intel(支持 cpus)。但是,您可以保留AMD 的 OpenCL.dll 与您的软件捆绑在一起用作 CPU 回退。OpenCL 更发达(功能更多,错误更少):它出现得更早,是跨平台的,并且基于现有技术(CUDA、Brook+)。OpenCL 允许您精细地控制你实际做的事情,所以它更快,但更难。

据我所知,Microsoft Accelerator 可以在任何支持 DirectX 的 GPU(== 任何现代 GPU)和任何 64 位 CPU 上运行。它更顺利地集成到现有代码中(没有额外的文件和大量的库调用),但这对性能不利。 MS Accelerator 可以让你更快地实现你的功能(看起来很简单),所以它可能是一个好的开始。但是如果它没有表现出很好的性能,你仍然应该尝试一下 OpenCL,它可以做得更好。

因此,我建议您学习 OpenCL,因为:1) OpenCL 更接近 GPU 硬件架构,因此 a) 它可以让您获得更好的性能,b) 您可以编写更复杂的代码,c) 您将了解这一切作品; 2)互联网上有更多的信息/教程/黑客; 3)它是跨平台的(在您的情况下可能不是很好的功能,但仍然如此); 4) OpenCL 与CUDA 非常相似,因此您将同时学习两种与GPU 相关的技术。

关于.net - .Net 中的 GPGPU 编程 - Microsoft Accelerator VS OpenCL.net [VS Others],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7402983/

相关文章:

.net - 通过 Entity Framework 的 Sql Server Freetext

c++ - 如何通过引用传递 Generic::List?

c# - 在 Visual Studio 中,是否可以将 .NET 4.x CLR 作为 2.0 类库 API 的目标?

java - 相同的 Storm spout 是否并行接收已确认/失败的消息

c# - 如何正确取消 Parallel.Foreach?

cuda - 主机到设备的内存复制吞吐量低

.net - LINQ-to-SQL 中存储过程的问题

multithreading - 检测当前线程的堆栈范围

c - 在 OpenCL C 中实现 sleep()

cpu - OpenCL 适合什么类型的代码域?