我试图从我的网格中获得更多的处理能力.
我正在使用所有cpus/core,是否有可能在C#中使用GPU.
任何人都知道任何库或获得任何示例代码?
[ 编辑2017年10月,即使这个答案变得相当古老 ]
这些答案中的大部分都是相当陈旧的,所以我想我会更新一下我认为每个项目的位置:
GPU.Net(TidePowerd) - 我在6个月前左右尝试过这个版本,虽然花了一点点工作但确实让它工作了.在编译时将C#内核代码转换为cuda.不幸的是,他们的网站已经关闭,他们的github几年没有更新,这可能表明项目已经死了......
Cudafy - 开源,非常好用.在运行时将C#内核代码转换为cuda(具有序列化和缓存功能).可以在CPU上轻松运行相同的内核代码(主要用于调试).支持多个GPU.这里有比其他更多的例子.其他答案所引用的样板代码很少,在我的情况下至少有助于我理解代码的工作原理.Cuda/Nvidia虽然.不幸的是,他们似乎也没有更新他们的解决方案几年(2015年最新提交 - 支持cuda 7.0).
Hybridizer.商业解决方案将C#编译为CUDA.在visual studio marketplace上提供免费社区版,并在github 上提供样本.
AleaGPU商业解决方案,为消费者GPUS提供免费社区版.有关详细信息,请参阅Daniel的评论.
Brahma - 通过OpenCL运行LINQ表达式(因此也支持AMD).文档/示例不多.2011年最后更新.
C $ - 最后一次开发是在十多年前......
Microsoft Accelerator - 同样看起来不再像以前那样积极开发.
其他一些(C++ AMP,OpenTK - dead/Cloo) - 其中许多只是绑定 - 即允许你从C#调用GPU,但你的内核代码(实际在GPU上运行的代码)需要写入C或OpenCL,意味着您必须使用(和学习)另一种语言.
正如我所说,我会推荐Cudafy而不是其他所有人 - 如果它可以在OpenCL和Cuda上运行,那将是完美的.
编辑2013年9月 Cudafy现在允许您编译双方 CUDA和OpenCL,所以会在所有GPU上运行相同的C#代码.这听起来很棒,虽然我还没有测试过OpenCL编译.
Microsoft Research Accelerator是一个.NET GP GPU库.
我找到了Brahma ......它还有一个GPGPU提供程序,允许在GPU上运行方法...感谢您提出的问题......今天学到了新的知识.:)
我可以推荐XNA Game Studio作为探索的可能途径吗?它显然适合编写游戏,但可以让您对图形卡进行管理访问,并且可以更好地访问功能枚举功能和着色器开发,而不是之前的Managed 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/
祝你好运!
如何http://www.tidepowerd.com/ GPU.NET?
这是另一个: CUDAfy.听起来像GPU.Net,因为像method-attribute这样简单的东西可以导致整个方法在GPU上运行.但与GPU.Net不同,CUDAfy是免费的开源软件.
GPU.Net似乎不需要样板代码(根据他们的文档,它是"由构建工具自动注入"),而CUDAfy则需要.
以下是使用CUDAfy构建应用程序的示例.
嗯,这是一个非常古老的问题,因为有人问过,事情发生了很大的变化.
使用.Net编写GPU代码的另一种选择,在Alea GPU的答案中没有人提到过.它涵盖了C#,F#和VB.
适用于.NET和Mono的专业GPU软件开发环境.真正的跨平台
在F#官方网站中,Alea是在GPGPU编程中使用F#的第一个选项.
为了了解这个框架,我建议看看它的全面的例子列表.
除了Brahma之外,还可以看看C $(发音为"C Bucks").从他们的CodePlex 网站:
[C $]的目标是为现代GPU和CPU上的无缝并行编程创建统一的语言和系统.
它基于C#,懒惰地评估,并针对多个加速器模型:
目前,预期架构列表包括GPU,多核CPU,多GPU(SLI,CrossFire)和多GPU +多CPU混合架构.
城里有一个新的微软解决方案 - C++ AMP(这里是介绍).
使用C#将通过P/Invoke,如此处针对桌面应用进行演示,以及此处针对(不称之为)Metro应用程序.
编辑:我应该注意C++ AMP有一个开放的规范,这意味着它不一定只用于MS编译器,或仅用于Windows.
编辑:显然,该技术现在处于"维护模式",这意味着他们正在修复错误,但没有积极开发.