回答:
[ この回答でさえかなり古くなるので、2017年10月を編集してください]
これらの回答のほとんどはかなり古いので、私は各プロジェクトがどこにあるかについての更新された要約を提供すると思いました:
GPU.Net(TidePowerd)-6か月ほど前に試してみましたが、少し作業は必要でしたが、動作しました。コンパイル時にC#カーネルコードをcudaに変換します。残念ながら、彼らのウェブサイトはダウンしていて、彼らのgithubは数年更新されていません。それはプロジェクトが死んでいることを示しているかもしれません...
Cudafy-オープンソースで非常に使いやすい。実行時にC#カーネルコードをcudaに変換します(シリアル化およびキャッシュ機能付き)。CPUで同じカーネルコードを簡単に実行できます(主にデバッグ用)。複数のGPUをサポートします。他の例よりも多くの例がここにあります。他の回答で参照されているボイラープレートコードは最小限であり、私の場合、少なくともコードがどのように機能するかを理解するのに役立ちました。Cuda / Nvidiaだけですが。残念ながら、彼らは数年も彼らのソリューションを更新しなかったようです(2015年の最新のコミット-cuda 7.0のサポート)。
ハイブリダイザ。C#をCUDAにコンパイルする商用ソリューション。Visual Studioマーケットプレイスで無料のコミュニティエディションを提供し、GitHubでサンプルを提供します。
AleaGPU商用ソリューション。コンシューマーGPUS向けの無料のコミュニティエディション。詳細については、ダニエルのコメントを参照してください。
梵天は、 - (サポートがあまりにもAMDようにする)のOpenCLを経由してLINQの式を実行します。あまりドキュメント/例はありません。2011年の最終更新。
C $ -最後の開発は10年以上前でした...
Microsoft Accelerator-同様に、もはや活発に開発されているようには見えません。
その他(C ++ AMP、OpenTK-dead / Cloo)-これらの多くは単なるバインディングです。つまり、C#からGPUを呼び出すことができますが、カーネルコード(実際にGPUで実行されるコード)を記述する必要があります。 CまたはOpenCL。つまり、別の言語を使用(および学習)する必要があります。
私が言ったように、私は他のすべてのものよりもCudafyをお勧めします-それがOpenCLおよびCudaで実行できればそれは完璧です。
EDIT SEP 2013 Cudafyでは、 CUDAとOpenCLの両方をコンパイルできるようになったため、すべてのGPUで同じC#コードを実行できます。OpenCLのコンパイルはまだテストしていませんが、これは素晴らしいと思います。
Microsoft Research Acceleratorは.NET GP GPUライブラリでした。
私はBrahmaを見つけました... GPUでメソッドを実行できるGPGPUプロバイダーもあります...質問をありがとう...今日何か新しいことを学びました。:)
探索の可能な道としてXNA Game Studioをお勧めできますか?それは明らかにゲームを書くために準備されていますが、グラフィックスカードへの管理されたアクセスと、以前に管理されたDirectXなどで利用可能であった機能列挙関数とシェーダー開発へのより良いアクセスを提供します。WinFormsとXNAを組み合わせてハイブリッドアプリケーションにする方法もあります。
http://www.ziggyware.com/news.php?readmore=866
シェーダープログラミング(XNAはHLSLをサポートします)の学習に少し努力する必要がありますが、これはnVidiaのCUDAなどのベンダー固有のソリューションを学習するよりも簡単なアプローチかもしれません。利点は、100%管理された環境でプログラミングできることです。いくつかのHLSLリンクは次のとおりです。
http://www.ziggyware.com/weblinks.php?cat_id=9
GPGPUサイトは、汎用GPUプログラミングの推奨宛先でもあります。
がんばって!
どの程度http://www.tidepowerd.com/ GPU.NET?
さて、これはかなり古い質問です。質問されて以来、状況は大きく変わりました。
誰もでの回答に記載していない書き込みGPUコードに.NETを使用するための別のオプションアリアGPU。C#、F#、VBをカバーしています。
.NETおよびMono用のプロフェッショナルGPUソフトウェア開発環境。本当にクロスプラットフォーム
F#の公式サイトでは、AleaがGPGPUプログラミングでF#を使用するための最初のオプションです。
このフレームワークについて理解するために、サンプルの包括的なリストを見てみることをお勧めします。
カスタムカーネルが必要な独自のアルゴリズムを適用する場合:
私は最近、私のオープンソースプロジェクトをOpenCLを使用するこのgithubリポジトリにアップロードしました。
それは何ですか(あなたもそのwikiページから確認できます)は、ユーザーから複数のOpenCL対応デバイスとカーネル文字列を選択し、C#またはC ++配列ラッパーを作成してから、オートロードバランサーとpcから良好な効率を引き出すための(待ち時間を隠すための)パイプライン。
以下にその使用例を示します(すべてのデバイスにパーティション化された1024のワークアイテムで、それぞれが同じコードを実行していますが、異なるデータとスレッドIDを使用しています)。
// select all GPUs and all CPUs in same pc
ClNumberCruncher gpuCpu = new ClNumberCruncher(AcceleratorType.GPU | AcceleratorType.CPU, @"
__kernel void distributeTanh(__global float * data,__global int * data2)
{
int threadId=get_global_id(0);
data[threadId]=tanh(data[threadId]);
data2[threadId]=threadId;
}
");
// a wrapper that can hold C# or C++ arrays
ClArray<float> data = new ClArray<float>(1024);
ClArray<int> data2 = new int[1024];
// load-balances "distributeTanh" on all devices more fairly
// at each repeatation of this line with same compute-id(1 here)
data.nextParam(data2).compute(gpuCpu, 1, "distributeTanh", 1024);
// threadId in kernel receives unique continuous id value for all work
// either it is in cpu or gpu doesn't matter
// compute method also has parameters to enable pipelining to
// elliminate buffer copy latencies or compute latencies
すべてが使用されなくなると、すべてのC ++リソースがデストラクタと共に解放されます。
しかし、それはそれほど成熟していないので、githubの問題タブに「問題」を追加してください。マルチPCクラスター関連のクラスはまだ機能しておらず、英語に翻訳されていませんが、少なくとも1つのPCですべてのデバイスを使用できます。
WPFもGPUを使用し、HLSLを使用してカスタムシェーダーを追加できます。