在GPU上运行C#代码

joj*_*lco 32 c# gpu gpu-programming

我不了解GPU编程概念和API.我有几个问题:

  1. 是否可以编写一段托管的C#代码并将其编译/转换为某种模块,可以在GPU上执行?或者我注定要有两个实现,一个用于CPU管理,一个用于GPU(我知道GPU上可以执行的操作会有限制)?
  2. 是否存在适当且成熟的API以针对各种GPU硬件供应商(即通用API)进行独立编程?
  3. 如果想要开发在CPU上运行的应用程序(使用托管语言编写),并且如果存在合适的GPU硬件,还提供速度优化,是否有任何最佳实践?

我也很高兴能够通过适当的学习资源链接到任何类型的文档.

最好的,约瑟夫

Jam*_*unt 22

1)否 - 不是针对C#的一般情况 - 显然可以为该语言的某个子集创建任何内容

2)是 - 使用Direct X或Open GL的HLSL

3)通常不可能 - CPU和GPU编码根本不同

基本上你不能认为CPU和GPU编码是可比的.GPU是一种高度专业化的并行处理工具 - 用于大量并行简单计算.

尝试在具有大量分支等的GPU中编写一般程序只是效率不高 - 甚至可能无法实现.

他们的内存访问架构完全不同.

您应该为CPU编写代码,但要对GPU进行适当的并行计算.

  • -1表示未提及OpenCL或DirectCompute. (7认同)
  • 哎哟 - 这很痛:) (7认同)

Str*_*ger 17

1)不,不是针对C#的一般情况,而是针对一小部分,是的.通过运行时(检查Tidepowerd GPU.NET)或通过语言支持(LINQ或代码引用).

2)是的,DirectCompute(DX11计算着色器)和OpenCL都是独立于供应商的成熟API,您可以找到它们的.NET绑定.

3)不,正如詹姆斯所说,他们是不同的野兽.GPU是针对高吞吐量数据并行应用而优化的高延迟处理器,而CPU是针对顺序通用应用而优化的低延迟处理器.

我所知道的唯一试图解决这个问题的研究项目是SPAP语言.

我的建议是,不要试图找到完美的通用API /运行时,因为没有.选择现有技术(DirectCompute或OpenCL),了解如何将其用于您的业务.

有用的开始链接: