如何使用GPU进行数学[关闭]

问题描述 投票:37回答:6

我正在寻找利用GPU来处理一些方程式,但无法弄清楚我如何从C#中访问它。我知道XNA和DirectX框架允许您使用着色器来访问GPU,但是如果没有这些框架,我将如何访问它?

c# math gpu-programming
6个回答
11
投票

我没有用C#做过,但基本上你使用的是CUDA(假设你当时正在使用nVidia卡)SDK和CUDA工具包将它拉下来。

nVidia已经移植(或编写?)BLAS实现,以便在支持CUDA的设备上使用。他们提供了很多关于如何进行数字运算的例子,尽管你必须弄清楚如何从C#中取出它。我敢打赌,你将不得不在非托管C或C ++中编写一些内容并与之链接。

如果您没有使用C#,请查看Theano。这可能对你的需求有点过分,因为他们正在构建一个框架,用于从Python上对GPU进行机器学习,但是......它的工作原理非常好。


7
投票

如果你的GPU是NVidia,你可以使用CUDA

这里有一个例子,它解释了所有的链,包括一些C / C ++代码:CUDA integration with C#

这里有一个名为CUDA.NET的库:CUDA.NET

如果您的GPU是ATI,那么就有ATI Stream。 .NET支持对我来说不太清楚。也许Open Toolkit Library有它,通过OpenCL支持。

最后,有一个名为“Accelerator”的Microsoft Research项目,它有一个托管包装器,可以在任何硬件上运行(前提是它支持DirectX 9)。


7
投票

Brahma(LINQ to GPU)怎么样?

一定要爱LINQ!


1
投票

我担心,除了为DirectX / XNA编写着色器以及使用CUDA(特定于NVidia)时,我对使用GPU的理解相当理论化。但是,我听说过很多关于OpenCL(开放计算语言)的内容,它允许您运行OpenCL将智能地推送到您的图形卡的算法,或者如果您没有兼容的GPU则运行在CPU上。

您在GPU上运行的代码必须专门编写在OpenCL的C99子集中(如果您不知道如何从C#中使用它,那么这不符合您的要求),但除了您的数字运算算法之外,您还可以编写您在C#中的其余应用程序,并使用The Open Toolkit完美地协同工作;

http://www.opentk.com/


1
投票

如果你不想搞乱P / Invoke的东西和非托管代码,有两种选择:

  1. 使用提到的CUDA.NET库。它工作得很好,但它的目标是CUDA,所以只有nVidia卡。如果您想解决更复杂的问题,您必须学习CUDA,编写自己的内核(在C ...中),使用nvcc编译并通过此库从C#执行。
  2. 使用Microsoft Research Accelerator。这是MS Research构建的一个很好的库,它可以在任何具有大量内核(多核nVidia / ATI GPU和多核处理器)的代码上运行代码。它完全独立于平台。使用它,我对结果印象深刻。在C#中使用Accelerator也有非常好的tutorial

第二种选择是我建议,但如果你只坚持使用nVidia GPU没问题 - 第一种可能会更快。


1
投票

我通过利用NVIDIA的CUDA库和.NET的P / invoke在C#中完成了它。这需要一些仔细的内存管理和对CUDA库的详细了解。此技术可以与您希望在C中创建的任何自定义GPU / CUDA内核结合使用,因此它是一种非常强大的灵活方法。

如果您想省下很多精力,可以从CenterSpace软件(我工作的人)购买NMath Premium,并且您可以在几分钟内在C#上运行NVIDIA GPU上的大问题。 NMath Premium一个大型的C#/。NET数学库,它可以在GPU上运行大量的LAPACK和FFT,但是如果硬件不可用或者问题大小不能证明往返GPU的话,则可以回退到CPU。

© www.soinside.com 2019 - 2024. All rights reserved.