4

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

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

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

4

2 回答 2

2

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 相关的技术。

于 2011-09-13T15:37:48.923 回答
1

一种选择是 C++ AMP,您可以轻松地从 .NET 互操作 http://www.danielmoth.com/Blog/NET-Access-To-The-GPU-For-Compute-Purposes.aspx

干杯

丹尼尔

于 2011-12-02T23:11:41.050 回答