3

GPU で実行するために、一般的な C# コード構造を C++ CUDA コードにマッピングするためのさまざまなオプションを検討しています。システムの構造は次のとおりです (矢印はメソッド呼び出しを表します)。

C# プログラム -> C# GPU ライブラリ -> C++ CUDA 実装ライブラリ

GPU ライブラリのメソッドは次のようになります。

public static void Map<T>(this ICollection<T> c, Func<T,T> f)
{
   //Call 'f' on each element of 'c'
}

これは、各要素に対して関数を実行する ICollection<> 型の拡張メソッドです。ただし、私がやりたいことは、C++ ライブラリを呼び出して、GPU でメソッドを実行させることです。これには、何らかの形で関数を C++ コードに変換する必要があります。これは可能ですか?

詳しく説明すると、私のライブラリのユーザーが任意のコードを含むメソッドを (C# で) 実行した場合、このコードを CUDA で実行できるように C++ の同等のものに変換したいと考えています。これを行う簡単な方法はないと感じていますが、それを行う方法、または同じ効果を達成する方法があるかどうかを知りたい.

私が疑問に思っていたことの 1 つは、式で変換する関数をキャプチャし、これを使用して C++ の同等物にマップすることです。誰でもこれについて経験がありますか?

4

6 に答える 6

7

C# を GPU で実行する方法を参照したい場合は、CUDA.Netがあります。

于 2008-10-13T13:51:35.947 に答える
2

正直なところ、あなたが何を目指しているのか完全に理解しているかどうかはわかりません。ただし、.Net アプリケーション/ライブラリを .Net フレームワークを必要としないストレート C++ に変換するこのプロジェクトに興味があるかもしれません。 http://www.codeplex.com/crossnet

于 2008-10-13T13:57:13.613 に答える
1

C#プログラムのCUDAを使用して計算の一部を高速化するには、次のプロセスをお勧めします。

  • まず、高速化する関数に対してP/InvokeするアンマネージC++ライブラリを作成します。これにより、CUDAで簡単に操作できるデータ型に多かれ少なかれ制限されます。
  • アンマネージライブラリをC#アプリケーションと統合します。あなたが物事を正しくやっているなら、あなたはすでにある種のスピードアップに気付くはずです。そうでなければ、おそらくあきらめるべきです。
  • ライブラリ内のC++関数を(インターフェイスを変更せずに)置き換えて、GPUでCUDAカーネルを使用して計算を実行します。
于 2009-07-10T12:18:43.757 に答える
0

興味深い質問です。私はC#の専門家ではありませんが、ICollectionはオブジェクトのコンテナーだと思います。cの各要素が、たとえばピクセルである場合、CUDAが使用できるバイトまたはフロートのバッファーに変換するために多くのマーシャリングを行う必要があります。私はそれがGPUで何かをすることの利点を打ち消すのに十分にすべてを遅くするだろうと思う。

于 2008-11-25T22:38:55.677 に答える
0

できることは、 LINQ to SQLで LINQ クエリを SQL に変換する場合と同様に、独自のIQueryableLINQ providerを作成することです。

ただし、このアプローチで私が目にする 1 つの問題は、LINQ クエリが通常遅延して評価されるという事実です。パイプラインの恩恵を受けるには、これはおそらく実行可能なソリューションではありません。

また、C# および CUDA 用にGoogle のMapReduce APIを実装する方法を調査し、 PyCudaと同様のアプローチを使用してロジックを GPU に送信する方法も検討する価値があります。そのコンテキストでは、CUDA の既存のMapReduce 実装を調べることも役立つ場合があります。

于 2008-11-25T22:50:19.350 に答える
0

これは非常に興味深い質問ですが、これを行う方法がわかりません。

ただし、Brahma ライブラリは非常に似たようなことをしているようです。LINQ を使用して関数を定義し、GLSL シェーダーにコンパイルして GPU で効率的に実行できます。彼らのコード、特にGame of Life のサンプルを見てください。

于 2009-07-09T13:47:23.180 に答える