4

我正在用 C# 做一些实时图像处理项目,我想尽可能多地利用 GPU。

具体来说,我有几个byte[]包含原始位图数据,我需要对byte[]尽可能接近 30 fps 的那些(图像很小,不超过 640x480)

我知道还有其他 GPGPU 库(如CudafyGPU.netAccelerator),但它们的 EULA 要么禁止“以盈利为目的”使用该库,要么您需要购买许可证。

目前没有用于许可证的资金,所以我正在尝试探索允许商业生产同时不花费任何成本的选项,而 XNA 似乎是我能找到的唯一符合这两个标准的选项。

有没有关于如何在非游戏环境中使用 XNA 访问 GPU 的资源?是否有任何其他选项可用于通过 C# 访问 GPU?

4

2 回答 2

4

作为这个库的作者,我是否可以建议Brahma——它是CodePlex上的一个开源、免费的商业用途库(在 Eclipse 公共许可下),并自动将 LINQ 翻译/运行为 OpenCL?

当然,如果您想使用 RAW OpenCL,我在 Codeplex 上还有一个 .NET 友好但原始 API 版本的 OpenCL 并作为Nuget 包

在此处查看Brahma 代码的示例(此代码用于 FFT)。

于 2012-04-30T19:09:19.233 回答
1

我会通过Cloo看看 OpenCL 。它是开源的,并在 MIT 许可下发布,这意味着您可以愉快地将其包含在专有包中。

OpenCL 比 CUDA 更灵活一点,因为内核可以在可用的系统上的 GPU、CPU 和(理论上)单元处理器上运行——想想运行 Mono+Linux+PS3,尽管我没有尝试过这种组合。

(GPU.NET 很好,因为它允许你用 C# 编写内核,但目前它们只能在 NVidia GPU 上运行。这对我来说是个大问题,因为我的开发笔记本电脑有 AMD 芯片组。)

OpenCL 内核是用 OpenCL 语言编写的,基本上是 C。它也受到 Intel、AMD 和 NVidia 的积极支持。

我将 Cloo/OpenCL+XNA 用于 FDTD(光学/波物理模拟)项目,效果很好。OpenCL 代码在 GPU 上的 3D 阵列上运行;我会定期将缓冲区复制回主机,以便在 XNA 代码中进行可视化。

可能有一种方法可以共享该数据而无需往返于 CPU,但我还没有找到它,并且出于可视化目的,至少在我的应用程序中,影响很小。

于 2012-04-30T15:03:41.257 回答