145

我正试图从我的网格中获得更多的处理能力。

我正在使用所有 cpus/cores,是否可以将 GPU 与 C# 一起使用。

有人知道任何库或有任何示例代码吗?

4

13 回答 13

167

[编辑 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++ AMPOpenTK -- dead / Cloo)——其中许多只是绑定——即使您能够从 C# 调用 GPU,但您的内核代码(实际上在 GPU 上运行的代码)需要写入C 或 OpenCL,这意味着您必须使用(并学习)另一种语言。

正如我所说,我会推荐 Cudafy 胜过其他所有产品 - 如果它可以在 OpenCL 和 Cuda 上运行,那将是完美的。

编辑 SEP 2013 Cudafy 现在允许您为 CUDA 和 OpenCL 进行编译因此将在所有 GPU 上运行相同的 C# 代码。这听起来很棒,虽然我还没有测试过 OpenCL 编译。

于 2012-12-05T00:49:59.487 回答
49

Microsoft Research Accelerator是一个 .NET GP GPU 库。

于 2008-12-17T16:46:39.390 回答
27

我找到了Brahma ...它还有一个 GPGPU 提供程序,允许方法在 GPU 上运行...感谢您的提问...今天学到了一些新东西。:)

于 2008-12-17T18:50:09.250 回答
10

我可以推荐 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 编程的推荐目的地:

http://gpgpu.org/

祝你好运!

于 2008-12-17T16:22:31.747 回答
10

这是另一个: CUDAfy。这听起来像 GPU.Net,因为像方法属性这样简单的东西可以使整个方法在 GPU 上运行。但与 GPU.Net 不同的是,CUDAfy 是免费和开源的。

GPU.Net 似乎不需要样板代码(根据他们的文档,它是“由构建工具自动注入的”),而 CUDAfy 则需要。


是使用 CUDAfy 构建应用程序的示例。

于 2012-07-26T23:26:10.470 回答
9

http://www.tidepowerd.com/GPU.NET怎么样?

于 2011-08-05T12:14:56.487 回答
8

嗯,这是一个很老的问题,自从有人问起,事情发生了很大变化。
使用 .Net 编写 GPU 代码的另一种选择,在Alea GPU的答案中没有人提到过。它涵盖了 C#、F# 和 VB。

适用于 .NET 和 Mono 的专业 GPU 软件开发环境。真正的跨平台

在 F# 官方网站上,Alea 是在 GPGPU 编程中使用 F# 的首选
要了解这个框架,我建议查看其综合示例列表。

于 2015-11-20T08:17:24.937 回答
7

除了 Brahma,看看C$(读作“C Bucks”)。从他们的 CodePlex网站

[C$] 的目标是创建一种统一的语言和系统,用于在现代 GPU 和 CPU 上进行无缝并行编程。

它基于 C#,延迟评估,并针对多个加速器模型:

目前,预期架构列表包括 GPU、多核 CPU、多 GPU(SLI、CrossFire)和多 GPU + 多 CPU 混合架构。

于 2009-11-03T05:48:11.153 回答
7

镇上有一个新的 Microsoft 解决方案 - C++ AMP此处介绍)。

从 C# 中使用将通过 P/Invoke 进行,如这里演示的桌面应用程序和这里的(不要称之为)Metro 应用程序。

编辑:我应该注意到 C++ AMP 有一个开放的规范,这意味着它不一定只适用于 MS 编译器,或者只适用于 Windows。

编辑:显然,该技术现在处于“维护模式”,这意味着他们正在修复错误,但没有积极开发。

于 2012-08-31T21:54:20.183 回答
2

以某种方式管理 DirectX,可能有效

于 2008-12-17T15:57:20.533 回答
2

如果您的 GPU 都是同一个品牌,您可以通过 Nvidia 的 CUDA 或 ATI 的 Stream 从供应商处获得 GPGPU 支持。AFAIK,它们提供 DLL,您可以通过 P/Invoke 使用它们。

于 2009-02-03T17:03:46.613 回答
2

CenterSpace Software 在其NMath库中具有 GPU 驱动的计算,您可以将其添加到 C# 项目中。这是一个商业产品。

于 2016-09-04T08:50:43.717 回答
-1

WPF 也使用 GPU,您可以使用 HLSL 添加自定义着色器。

于 2009-02-03T16:49:55.813 回答