从托管代码执行CPU / GPU指令

时间:2010-01-20 17:03:09

标签: .net gpu

考虑执行禁用位,从高级托管环境(如VB.NET 2008或C#)对本机处理器执行指令的建议方法是什么。另外,有没有人在对图形处理器执行GPU指令时达到类似的效果?

3 个答案:

答案 0 :(得分:8)

C#有一些GPU选项,可直接访问而无需恢复到P / Invoke或编写自己的C ++包装器:

  • Brahma非常有趣。它通过定制的LINQ提供程序直接访问GPU。代码包括在GPU上运行的一些高度计算方法的样本,所有这些都是用C#通过LINQ编写的。
  • SlimDX为所有主要的DirectX功能提供了一个不错的.NET包装器。使用自定义着色器,您可以通过DirectX在GPU上进行计算。它还包括DX11支持,因此您可以直接使用计算着色器(如果您有硬件)。
  • 您可以通过CUDA.NET访问CUDA。
  • 您可以通过OpenCL.NET使用OpenCL。

对于CPU指令,这通常需要使用汇编程序指令删除到较低级别的本机代码。可能最有趣的完全托管(至少部分相关)选项是使用Mono.Simd,它可以在Mono堆栈上运行时从托管代码直接访问CPU中的SIMD指令。

答案 1 :(得分:3)

这不是一个选择。您必须使用内联汇编或内部函数来调用/调用由MASM生成或使用非托管C / C ++编写的DLL中的函数。或者使用C ++ / CLI编译器并使用#pragma managed。生成混合模式代码。

请注意,您现在不能再依赖于JIT编译器生成适合操作系统的任何平台代码。使用Project + Properties,Build选项卡,Platform Target强制架构匹配您的非托管代码。

查看CUDA以获取托管GPU代码。

答案 2 :(得分:2)

使用您想要的任何指令创建非托管.dll库,并使用P / Invoke来调用它。