在C#中使用GPU *比较两个图像*

时间:2015-11-17 14:28:20

标签: c# opengl directx gpu direct3d

无论是使用OpenCV(不喜欢),DirectX,Direct3D,OpenGL等,我想知道是否可以使用GPU 获得两个图像的差异。所以不关心目标机器是否安装了Nvidia CUDA卡,这个库只会利用任何GPU来对图像进行操作。我看了看,但看上去却找不到为C#做这个的库。

这个问题非常直接且非常具体:C#库有哪个函数/ API调用可以使用GPU比较两个图像?

(我已经可以使用C#中的指针和不安全的代码快速完成此操作,但如果在某种程度上在GPU上完成它会更快)

1 个答案:

答案 0 :(得分:2)

如果要在GPU上解决此问题,请仔细考虑。您必须将数据传输到GPU并配置和启动GPU程序。这花费了一些时间。由于GPU程序非常小,开销可能会大于性能增益。所以首先尝试在CPU上并行化比较。 GPU实现可能更慢(但也可能更快)。

有许多API可以让您对GPU进行编程。据我所知,它们都不包含可直接使用的C#代码。

首先,有图形库(DirectX,OpenGL)。它们允许您通过 Compute Shaders 对GPU进行编程。这些API有C#绑定,例如SharpDX,SlimDX,OpenTK。但是,Compute Shaders需要具有这些着色器阶段的图形卡。

然后有纯计算API,例如CUDA或OpenCL。 CUDA仅限于nVidia GPU。 OpenCL应该在大多数硬件上运行。但是图形设备也存在一些限制。但是,它们通常低于计算着色器。 OpenTK也是OpenCL的C#包装器。