我正在开发一个程序(在.Net中),它有很多图像处理(比如2D Convolutions,…),我想用GPGPU(并行处理)来做它们
所以,我有一些选择:Microsoft Accelerator,OpenCL.Net,……
哪一个对我更好?
所以,我有一些选择: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)和任何64位cpu的GPU上运行.它更平滑地集成到现有代码中(没有额外的文件和大量的库调用),但这对性能不利. MS Accelerator可以让你更快地实现你的功能(看起来很简单),所以它可能是一个好的开始.但如果它没有表现出很好的性能,你仍然应该尝试OpenCL,它可以做得更好.
因此,我建议你学习OpenCL,因为:1)OpenCL更接近GPU硬件架构,因此a)它可以让你获得更好的性能,b)你可以编写更复杂的代码,c)你会学到如何作品; 2)互联网上有更多的信息/教程/黑客; 3)它是跨平台的(在你的情况下可能不是很好的功能,但仍然是); 4)OpenCL与CUDA非常相似,因此您将同时学习两种与GPU相关的技术.