10

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

4

6 回答 6

7

我同意 jasper 的观点,目前最简单的选择是使用 Microsoft Research 的 Accelerator。我写了一系列关于使用 F# 的文章。一个简单直接的介绍生命游戏的例子,更高级的使用报价的例子和一个使用高级报价功能的例子。Satnam Singh 的博客也是一个很好的资源,其中包含一些 F# 演示。

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

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

于 2010-10-28T16:13:42.953 回答
6

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

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

于 2010-10-29T00:07:00.907 回答
5

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

于 2010-10-28T13:37:37.167 回答
3

MS 的加速器允许你利用 GPU,所以可以做这样的事情,虽然你不能使用 CUDA。

于 2010-10-28T11:04:59.467 回答
2

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

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

于 2010-10-28T13:48:55.233 回答
2

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

于 2020-07-30T00:10:49.947 回答