如何使用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的代码:
- 使用提到的CUDA.NET库。 它工作得很好,但它的目标是CUDA,所以只有nVidia卡。 如果你想解决更复杂的问题,你必须学习CUDA,编写你自己的内核(用C语言编写),用nvcc进行编译,并通过这个库从C#执行。
- 使用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#中的其余应用程序,并通过使用开放工具包很好地协同工作;