GPUプログラミングの概念とAPIの知識がありません。いくつかの質問を聞きたいんです:
また、適切な学習リソースを備えたあらゆる種類のドキュメントへのリンクがあれば嬉しいです。
最高、ジョゼフ
1)いいえ-C#の一般的なケースではありません-明らかに、言語のサブセットに対して何でも作成できます
2)はい-DirectXまたはOpenGLを使用するHLSL
3)一般的には不可能-CPUとGPUのコーディングは根本的に異なります
基本的に、CPUとGPUのコーディングを同等と考えることはできません。 GPUは、高度に特殊化された並列処理ツールであり、多くの並列単純計算に使用できます。
ブランチなどがたくさんあるGPUで一般的なプログラムを作成しようとすると、効率が悪くなります。おそらく不可能ですらあります。
それらのメモリアクセスアーキテクチャは完全に異なります。
CPU用に作成する必要がありますが、適切な並列計算をGPUにファームアウトします。
1)いいえ、C#の一般的なケースではなく、小さなサブセットです。ランタイム(Tidepowerd GPU.NETを確認)または言語サポート(LINQまたはコード引用)のいずれかを介して。
2)はい、DirectCompute(DX11 Compute Shaders)とOpenCLはどちらもベンダーに依存しない成熟したAPIであり、それらの.NETバインディングを見つけることができます。
3)いいえ、ジェームズが言ったように、彼らは別の獣です。 GPUは、高スループットのデータ並列アプリケーション用に最適化された高遅延プロセッサですが、CPUは、シーケンシャルな汎用アプリケーション用に最適化された低遅延プロセッサです。
この問題に対処しようとしている私が知っている唯一の研究プロジェクトは [〜#〜] spap [〜#〜] 言語です。
私のアドバイスですが、完璧なユニバーサルAPI /ランタイムを見つけようとしないでください。既存のテクノロジー(DirectComputeまたはOpenCL)を選択し、それをビジネスに活用する方法を確認してください。
開始するための便利なリンク:
梵天 もあります。おそらく式をキャプチャし、GPU用にコンパイルします。私は自分自身を試していません。
また、Microsoftには accelerator という研究用プロトタイプがあります。これは目標は似ていますが、構文が異なります。
1)私が知っていることではありませんが、C#用のライブラリが役立つ可能性があります。
2)OpenCL。 GPUに依存せず、CPUでも実行できます。
3)OpenCLはそれを支援します。OpenCLを使用してCPU用にコンパイルすることもできますが、CPU用にどれだけ優れたコードが作成されるかはわかりません。私は最近OpenCLに本当に夢中になりました、それは本当に本当にうまくいきます。
Alea GP を見たことがありますか?そこの図書館は完全に無料ではありませんが、公正なライセンスを持っています。優れたドキュメントと印象的な外観のツールチェーンがあります。
Javaについては、Aparapiプロジェクト( https://github.com/aparapi/aparapi )を参照してください。これにより、OpenCLをサポートする任意のGPUでJavaのサブセットを実行できます。カーネルクラスのバイトコードは、実行時にOpenCLコードにクロスコンパイルされます。クロスコンパイルできるJavaコードには厳しい制限があります。基本的に、フィールド、ローカル、またはメソッド引数としてオブジェクトを使用することはできません。
ただし、大きな利点は、カーネルをJavaまたはOpenCLのいずれかで実行できることです(適切なGPU/APUデバイスが使用できない場合は、Java ThreadPool実行に自動的にフォールバックします)。これは、質問のパート3で探しているものに最も近いもののように聞こえます(もちろん、管理言語はC#ではありません)。
私はC#で同様のものを知りません。