私はグリッドからより多くの処理能力を得ようとしています。
私はすべてのcpus/coresを使用していますが、C#でGPUを利用できますか。
誰もがライブラリを知っているか、サンプルコードを手に入れましたか?
[この回答でさえかなり古くなるので、OCT 2017を編集してください]
これらの答えのほとんどはかなり古いので、各プロジェクトがどこにあると思うかについて、最新の要約を提供すると思いました。
GPU.Net (TidePowerd)-6か月ほど前にこれを試してみましたが、少し手間がかかりましたが機能しました。コンパイル時にC#カーネルコードをcudaに変換します。残念ながら彼らのウェブサイトはダウンしており、彼らのgithubは数年更新されていません。これはプロジェクトが死んだことを示しているかもしれません。
Cudafy -オープンソースで非常に使いやすい。実行時にC#カーネルコードをcudaに変換します(シリアル化およびキャッシュする機能があります)。 CPUで同じカーネルコードを簡単に実行できます(主にデバッグ用)。複数のGPUをサポートします。ここに他の例よりも多くの例があります。他の回答で参照される定型コードは最小限であり、私の場合は、少なくともコードの仕組みを理解するのに役立ちました。ただし、Cuda/Nvidiaのみ。残念ながら、彼らも数年間ソリューションを更新しなかったようです(2015年の最新のコミット-cuda 7.0のサポート)。
ハイブリダイザー 。 C#をCUDAにコンパイルする商用ソリューション。 visual studio marketplace で無料のコミュニティエディションを提供し、 github でサンプルを提供します。
AleaGP コンシューマGPUS向けの無料コミュニティエディションを備えた商用ソリューション。詳細については、ダニエルのコメントを参照してください。
Brahma -OpenCLを介してLINQ式を実行します(AMDもサポートします)。多くのドキュメント/例。 2011年の最終更新。
C $ -最後の開発は10年以上前でした...
Microsoft Accelerator -同様に、もはや積極的に開発されているようには見えません。
他のいくつか( C++ AMP 、 OpenTK-dead / Cloo )-これらの多くは単なるバインディングです-つまり、GPUを呼び出すことができますC#。ただし、カーネルコード(GPUで実際に実行されるコード)はCまたはOpenCLで記述する必要があります。つまり、別の言語を使用(および学習)する必要があります。
私が言ったように、私は他のすべてよりもCudafyをお勧めします-OpenCLとCudaで実行できれば、Cudafyは完璧です。
EDIT SEP 2013Cudafyでbothのコンパイルが可能になりましたCUDAとOpenCLは、すべてのGPUで同じC#コードを実行するため、OpenCLのコンパイルはまだテストしていませんが、これは素晴らしいですね。
Microsoft Research Accelerator は.NET GP GPUライブラリでした。
私は Brahma ...を見つけました。GPU上でメソッドを実行できるGPGPUプロバイダーもあります...質問をありがとう...今日新しいことを学びました。 :)
XNA Game Studioを探索の可能な手段として推奨できますか?それは明らかにゲームを書くために準備されていますが、グラフィックカードへの管理されたアクセスを提供し、以前のManaged 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はどうですか?
町に新しいMicrosoftソリューションがあります- C++ AMP (intro here )。
C#からの使用は、デモのようにP/Invokeを介して行われます here デスクトップアプリの場合 here (don't-call-it)Metroアプリの場合.
編集:C++ AMPには open specification があることに注意する必要があります。これは、必ずしもMSコンパイラ専用ではないこと、またはWindows専用です。
編集:どうやら、技術 現在は「メンテナンスモード」になっています バグを修正しているが、積極的に開発されていないことを意味します。
GPUがすべて同じブランドである場合、NvidiaのCUDAまたはATIのストリームのいずれかを使用して、ベンダーからGPGPUサポートを取得できる場合があります。知る限り、それらはDLLを提供します。DLLはP/Invokeで使用できます。
マネージドDirectXが何らかの形で機能する可能性があります
CenterSpace Softwareには、C#プロジェクトに追加できる NMath ライブラリにGPUを使用した計算があります。それは商用製品です。
カスタムカーネルを必要とする独自のアルゴリズムを適用する場合:
私は最近、OpenCLを使用する このgithubリポジトリ に私のオープンソースプロジェクトをアップロードしました。
Wikiページからも確認できますが、複数のOpenCL対応デバイスとカーネル文字列をユーザーから選択し、C#またはC++配列ラッパーを作成してから、自動ロードバランサーとパイプライン(レイテンシーを隠すため)を使用して、PCの効率を高めます。
その使用例は次のとおりです(すべてのデバイスにパーティション化された1024のワークアイテムで、それぞれ同じコードを実行しますが、異なるデータとthreadIdを使用します)。
// 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の問題タブに「問題」を追加してください。 Multi-pc-clusterに関連するクラスは機能せず、英語にまだ翻訳されていませんが、少なくとも単一のpcですべてのデバイスを使用できます。