【问题标题】:Is there any possibility to write GPU-applications using CUDA under F sharp?有没有可能在 F sharp 下使用 CUDA 编写 GPU 应用程序?
【发布时间】:2011-05-01 19:54:34
【问题描述】:

我对使用 F# 进行数值计算很感兴趣。如何在 F# 下使用 NVIDIA 的 CUDA 标准访问 GPU?

【问题讨论】:

    标签: .net f# cuda gpgpu


    【解决方案1】:

    我同意 jasper 的观点,目前最简单的选择是使用 Microsoft Research 的 Accelerator。我写了一系列关于使用 F# 的文章。 A simple and direct introductionGame of Life 示例、更多 advanced example using quotationsusing advanced quotation features 示例。 Satnam Singh's 博客也是一个很好的资源,其中包含一些 F# 演示。

    当前显卡的一个问题是它们不支持整数(因此,Accelerator 仅在使用优化的 x64 并行引擎运行时才支持整数)。此外,当前的显卡没有根据 IEEE 标准实现浮点数 - 他们试图通过做一些“猜测”来更快,这在计算三角形位置时并不重要,但如果你可能会成为一个问题'正在处理财务计算。 (加速器可以使用各种目标,所以如果你使用 x64 并行引擎是安全的)。

    据我所知,DirectCompute 将需要浮点运算的精确实现以及对整数的直接支持,因此这可能是未来的一个不错的选择(或者如果 Accelerator 最终开始使用 DirectCompute 作为其引擎)。

    【讨论】:

    • 您确定浮点问题在新的 NVDIA Fermi 一代(从 GTX 460 开始)上仍然存在吗?他们声称在 Fermi 上引入了对双精度算术的改进支持。
    • @Martin:我不确定最新一代的 GPU。也许他们已经解决了这个问题——有一些明确的保证会很有用。
    • 我可以向您保证,所有 Dx10 和 Dx11 代都支持 32 位整数精度。最新的 Dx11 gen(AMD/ATI 和 NVIDIA 都支持 IEEE 754-2008),这意味着融合-乘法-加法和所有花哨的东西。
    • -1 对于错误的信息。最新的 GPU 完全符合 IEEE 标准,并且支持整数。谁投票赞成这个废话?
    • 另外,Accelerator STILL 只是谈论 DX9 GPU。 DX10 和 DX11 GPU 为 GPU 编程提供了更多更好的选择。
    【解决方案2】:

    可能只有像我这样的核心 GPU 极客听说过它。 Tidepowerd -- dead link 使 GPGPU 可以用于基于 CIL 的语言(例如 F#、C#、VB.NET 等)。另一方面,您可以使用 Quotation-to-GPU 运行时/API 对唯一的 F# 语言执行相同的操作(期待看到有人实现它)。这是 Agent Smith 的博客 about 或者 F# 专家 1.0 书籍(面向语言的编程章节)AFAIK 中提到的内容。

    特工 Smith(好吧,抱歉)正在谈论 NVIDIA Cg。但是您可以使用 HLSL DirectCompute 着色器或 OpenCL C99.. PTX(低级 NVIDIA IL)、CAL-IL(低级 AMD/ATI IL)...

    【讨论】:

      【解决方案3】:

      作为替代方案,您可以考虑使用 DirectCompute。三大 GPU API:CUDA、OpenCL 和 DirectCompute,都非常相似。可以通过 SlimDX(DirectX 的 .NET 包装器)从 F# 轻松访问 DirectCompute。

      【讨论】:

      • -1 DirectCompute 是三个 GPU API 中最新的,也是文档记录最少的。现在真的不推荐。
      【解决方案4】:

      来自 MS 的Accelerator 允许您利用 GPU,因此可以执行类似的操作,但您不能使用 CUDA。

      【讨论】:

        【解决方案5】:

        您可能会查看 CUDA.NET。它可以让你直接从 F# 使用 CUDA。在这里能找到它: http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx

        从托管代码中使用 CUDA 的另一种常用替代方法是将 CUDA 功能封装在本机 DLL 中,然后 P/Invoke 或围绕它编写 C++/CLI 包装器,然后从例如你的 F# 程序。

        【讨论】:

          【解决方案6】:

          出于文档的考虑(这是一个老问题,其答案并未涵盖当前的技术环境),如果您今天必须编写 GPU/CUDA 应用程序,那么另一个需要考虑的选项是 aleagpu。

          【讨论】:

            猜你喜欢
            • 2021-08-09
            • 2014-07-07
            • 2021-02-15
            • 1970-01-01
            • 2021-09-28
            • 1970-01-01
            • 2022-11-02
            • 1970-01-01
            • 2011-04-14
            相关资源
            最近更新 更多