web-dev-qa-db-ja.com

数学にGPUを使用する方法

いくつかの方程式をクランチするためにGPUを利用することを検討していますが、C#からそれにアクセスする方法を理解できません。 XNAおよびDirectXフレームワークではGPUにアクセスするためにシェーダーを使用できることを知っていますが、これらのフレームワークなしでアクセスするにはどうすればよいですか?

37
Neil Knight

C#からは行っていませんが、基本的にはCUDA(もちろん、ここではnVidiaカードを使用していると想定しています)SDKとCUDAツールキットを使用してプルします。

nVidiaは、CUDA対応デバイスで使用するためのBLAS実装を移植(または記述?)しています。 C#から数値を引き出す方法を理解する必要がありますが、数値計算を行う方法の例を数多く提供しています。私の賭けは、管理されていないCまたはC++で何かを記述し、それとリンクする必要があることです。

C#の使用に慣れていない場合は、 Theano を参照してください。彼らはPythonからGPUで機械学習を行うためのフレームワークを構築しているので、それはあなたのニーズに対して少々やり過ぎかもしれませんが、...それは機能し、非常にうまく機能します。

11

GPUがNVidiaの場合、 [〜#〜] cuda [〜#〜] を使用できます。

ここに、いくつかのC/C++コードを含むすべてのチェーンを説明する例があります。 CUDAとC#の統合

そしてここで利用可能なCUDA.NETと呼ばれるライブラリがあります: CUDA.NET

GPUがATIの場合、 ATIストリーム があります。 .NETのサポートについては、これについてはあまり明確ではありません。たぶん Open Toolkit LibraryOpenCL サポートを通じてそれを持っています。

そして最後に、 " Accelerator "と呼ばれるMicrosoft Researchプロジェクトがあります。これには、任意のハードウェアで動作するマネージラッパーがあります(DirectX 9をサポートしている場合)。

7
Simon Mourier

Brahma (LINQ to GPU)はどうですか?

LINQが大好きです!

7
George Duckett

私は、GPUの使用に関する私の知識は、DirectX/XNA用のシェーダーを記述し、CUDA(NVidia固有)に少し手を加えるよりもむしろ理論的であると思います。ただし、OpenCL(Op​​en Computing Language)について多くのことを聞いています。OpenCLがアルゴリズムを実行して、グラフィックカードにインテリジェントにプッシュしたり、互換性のあるGPUがない場合はCPUで実行したりできます。

GPUで実行するコードは、OpenCLのC99のサブセットで具体的に記述する必要があります(C#からの使用方法を尋ねたため、これが要件を満たしていない場合はお詫び申し上げます)。アプリケーションの残りの部分をC#で作成し、The Open Toolkitを使用してすべてをうまく連携させます。

http://www.opentk.com/

1
John Wordsworth

私はNVIDIAのCUDAライブラリと.NETのP/invokeを利用してC#でそれを行いました。これには、注意深いメモリ管理とCUDAライブラリの詳細な理解が必要です。この手法は、Cで作成するカスタムGPU/CUDAカーネルと組み合わせて使用​​できるため、非常に強力で柔軟なアプローチです。

多大な労力を節約したい場合は、CenterSpaceソフトウェア(私が働いている会社)から NMath Premium を購入すると、NVIDIA GPUでC#から数分で大きな問題が発生する可能性があります。 NMath Premiumは、大規模なC#/。NET数学ライブラリで、GPUでLAPACKとFFTの多くを実行できますが、ハードウェアが利用できない場合や、問題のサイズがGPUへの往復を正当化しない場合は、CPUにフォールバックします。

1
Paul

P/Invokeやアンマネージコードをいじりたくない場合は、2つのオプションがあります。

  1. 上記の CUDA.NET ライブラリを使用します。それは非常にうまく機能しますが、CUDAを対象としているため、nVidiaカードのみです。より複雑な問題を解決したい場合は、CUDAを学習する必要があります。独自のカーネルを(C ...で)作成し、nvccそして、このライブラリを介してC#から実行します。
  2. Microsoft Research Accelerator を使用します。これは、MS Researchによって構築された素晴らしいライブラリであり、多数のコア(マルチコアnVidia/ATI GPUおよびマルチコアプロセッサ)を備えたあらゆるものでコードを実行します。それは完全にプラットフォームに依存しません。それを使用し、私は結果にかなり感銘を受けました。 C#でのアクセラレータの使用についても、非常に優れた tutorial があります。

2番目のオプションは私がお勧めすることですが、nVidia GPUのみを使用することに問題がない場合は、最初のオプションがおそらく高速です。

1
Piotr Szmyd