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

Comparing two images *using the GPU* in C#

是否使用 OpenCV(最好不要)、DirectX、Direct3D、OpenGL 等,我想知道是否可以使用 GPU获得两个图像的差异.因此,不关心目标机器是否安装了 Nvidia CUDA 卡,该库将简单地利用存在的任何 GPU 对图像执行操作。我看了又看,但找不到为 C# 执行此操作的库。

这个问题非常简单且非常具体:哪个 C# 库具有 function/API-call 使用 GPU 比较两个图像的功能?

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

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

有许多 API 可让您对 GPU 进行编程。据我所知,None 其中包含可直接使用的 C# 代码。

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

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