如何使用GPU进行math

我正在寻找利用GPU来处理一些方程式,但不知道如何从C#中访问它。 我知道XNA和DirectX框架允许您使用着色器来访问GPU,但是如何在没有这些框架的情况下访问它?

我没有从C#做到这一点,但基本上你使用CUDA(假设你在这里使用的是nVidia卡)SDK和CUDA工具包。

nVidia已经移植(或书写了)一个BLAS实现,以便在支持CUDA的设备上使用。 他们已经提供了大量的例子来说明如何进行数字运算,尽pipe你必须弄清楚你将如何从C#中解脱出来。 我敢打赌,你将不得不写一些未经pipe理的C或C ++的东西,并与它链接。

如果您不想使用C#,请查看Theano 。 这可能是有点矫枉过正,因为他们正在构build一个框架,从Python进行机器学习的GPU,但是…它的工作,并且工作得很好。

如果您的GPU是NVidia,则可以使用CUDA 。

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

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

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

最后,还有一个名为“ 加速器 ”的微软研究项目,它有一个托pipe包装器,可以在任何硬件上工作(只要它支持DirectX 9)。

Brahma (LINQ到GPU)如何?

得爱LINQ!

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

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

第二个select是我推荐,但是如果你坚持使用nVidia GPU没有问题 – 第一个可能会更快。

我已经在C#中使用了NVIDIA的CUDA库和.NET的P / invoke。 这需要一些谨慎的内存pipe理和对CUDA库的详细了解。 这个技术可以和你想在C中创build的任何定制的GPU / CUDA内核一起使用,所以这是一个非常强大的灵活的方法。

如果您想省下不less努力,您可以从CenterSpace软件(我工作的人)购买NMath Premium ,并且可以在几分钟内在C#上运行NVIDIA GPU上的大问题。 NMath Premium是一个大型的C#/。NETmath库,可以在GPU上运行大部分的LAPACK和FFT,但是如果硬件不可用或者问题大小不合理,GPU就会退回到CPU。

我担心,除了为DirectX / XNA编写着色器和使用CUDA(NVidia特定版本)之外,我对使用GPU的知识还有相当的理论。 不过,我听说OpenCL(开放计算语言)的相当多,它允许你运行algorithm,OpenCL将智能地推送到你的graphics卡,或者如果你没有兼容的GPU运行在CPU上。

您在GPU上运行的代码必须专门写在OpenCL的C99子集中(如果您不能满足您的要求,请致歉),但是除了您的数字运算algorithm外,您还可以编写在C#中的其余应用程序,并通过使用开放工具包很好地协同工作;

http://www.opentk.com/