考虑到执行禁用位,从高级托管环境(如 VB.NET 2008 或 C#)对本机处理器执行指令的推荐方式是什么。此外,有没有人在针对图形处理器执行 GPU 指令方面取得了类似的成就?
问问题
1557 次
3 回答
8
C# 有一些 GPU 选项,用于直接访问而无需恢复到 P/Invoke 或编写自己的 C++ 包装器:
- 梵天很有趣。它通过定制的 LINQ 提供程序直接提供对 GPU 的访问。该代码包括一些在 GPU 上运行的高度计算方法的示例,全部通过 LINQ 用 C# 编写。
- SlimDX为所有主要的 DirectX 功能提供了一个很好的 .NET 包装器。使用自定义着色器,您可以通过 DirectX 在 GPU 上进行计算。它还包括 DX11 支持,因此您可以直接使用计算着色器(如果您有硬件)。
- 您可以通过CUDA.NET访问 CUDA 。
- 您可以通过OpenCL.NET使用 OpenCL 。
至于 CPU 指令,这通常需要使用汇编指令降低到较低级别的本机代码。可能最有趣的完全托管(至少部分相关)选项是使用Mono.Simd,当在 Mono 堆栈上运行时,它可以从托管代码直接访问 CPU 中的 SIMD 指令。
于 2010-01-20T17:23:58.653 回答
3
这不是一种选择。您必须使用内联汇编或内在函数 P/Invoke DLL 中由 MASM 生成或用非托管 C/C++ 编写的函数。或者使用 C++/CLI 编译器并生成带有 #pragma 托管的混合模式代码。
请注意,您现在不能再依赖 JIT 编译器生成适合操作系统的任何平台代码。使用 Project + Properties、Build 选项卡、Platform Target 来强制架构匹配您的非托管代码。
查看 CUDA 以获取托管 GPU 代码。
于 2010-01-20T17:09:29.637 回答
2
使用您想要的任何指令创建非托管 .dll 库并使用 P/Invoke 调用它。
于 2010-01-20T17:07:05.980 回答