我正试图从我的网格中获得更多的处理能力。
我正在使用所有 cpus/cores,是否可以将 GPU 与 C# 一起使用。
有人知道任何库或有任何示例代码吗?
[编辑 OCT 2017,因为即使这个答案已经很老了]
这些答案中的大多数都已经很老了,所以我想我会给出一个更新的总结,说明我认为每个项目的位置:
GPU.Net (TidePowerd) - 我在大约 6 个月前尝试过这个,虽然花了一些工作但确实让它工作了。在编译时将 C# 内核代码转换为 cuda。不幸的是,他们的网站已经关闭,他们的 github 已经有几年没有更新了,这可能表明该项目已经死了......
Cudafy - 开源且非常易于使用。在运行时将 C# 内核代码转换为 cuda(具有序列化和缓存能力)。可以轻松地在 CPU 上运行相同的内核代码(主要用于调试)。支持多个 GPU。此处提供的示例比其他示例更多。其他答案引用的样板代码很少,就我而言,至少有助于我理解代码的工作原理。不过只有 Cuda/Nvidia。不幸的是,他们似乎也有几年没有更新他们的解决方案(2015 年的最新提交——支持 cuda 7.0)。
杂交剂。将 C# 编译为 CUDA 的商业解决方案。在Visual Studio Marketplace上提供免费社区版,在github上提供示例。
AleaGPU商业解决方案,带有适用于消费级 GPUS 的免费社区版。有关详细信息,请参阅丹尼尔的评论。
Brahma - 通过 OpenCL 运行 LINQ 表达式(因此也支持 AMD)。没有太多文档/示例。2011 年最后一次更新。
C$ - 最后一次开发是在 10 多年前...
Microsoft Accelerator - 同样看起来它不再被积极开发。
其他一些(C++ AMP、OpenTK -- dead / Cloo)——其中许多只是绑定——即使您能够从 C# 调用 GPU,但您的内核代码(实际上在 GPU 上运行的代码)需要写入C 或 OpenCL,这意味着您必须使用(并学习)另一种语言。
正如我所说,我会推荐 Cudafy 胜过其他所有产品 - 如果它可以在 OpenCL 和 Cuda 上运行,那将是完美的。
编辑 SEP 2013 Cudafy 现在允许您为 CUDA 和 OpenCL 进行编译,因此将在所有 GPU 上运行相同的 C# 代码。这听起来很棒,虽然我还没有测试过 OpenCL 编译。
Microsoft Research Accelerator是一个 .NET GP GPU 库。
我找到了Brahma ...它还有一个 GPGPU 提供程序,允许方法在 GPU 上运行...感谢您的提问...今天学到了一些新东西。:)
我可以推荐 XNA Game Studio 作为探索的可能途径吗?它显然是为编写游戏而准备的,但与以前在托管 DirectX 中提供的相比,它为您提供了对图形卡的托管访问以及对功能枚举功能和着色器开发的更好访问。还有一些方法可以将 WinForms 和 XNA 组合到混合应用程序中:
http://www.ziggyware.com/news.php?readmore=866
您必须花一些精力来学习着色器编程(XNA 支持 HLSL),但这可能比学习特定于供应商的解决方案(如 nVidia 的 CUDA)更简单。优点是您可以在 100% 托管的环境中进行编程。以下是一些 HLSL 链接:
http://www.ziggyware.com/weblinks.php?cat_id=9
GPGPU 站点也是通用 GPU 编程的推荐目的地:
祝你好运!
以某种方式管理 DirectX,可能有效
如果您的 GPU 都是同一个品牌,您可以通过 Nvidia 的 CUDA 或 ATI 的 Stream 从供应商处获得 GPGPU 支持。AFAIK,它们提供 DLL,您可以通过 P/Invoke 使用它们。
CenterSpace Software 在其NMath库中具有 GPU 驱动的计算,您可以将其添加到 C# 项目中。这是一个商业产品。
WPF 也使用 GPU,您可以使用 HLSL 添加自定义着色器。