数値計算に F# を使用することに興味があります。F# で NVIDIA の CUDA 標準を使用して GPU にアクセスするにはどうすればよいですか?
6 に答える
現在最も簡単なオプションはMicrosoftResearchのAcceleratorを使用することであるというjasperに同意します。F#からの使用に関する一連の記事を書きました。簡単で直接的な紹介、Game of Lifeの例、引用符を使用したより高度な例、および高度な引用符機能の使用例。Satnam Singhのブログも、いくつかのF#デモを備えた優れたリソースです。
現在のグラフィックカードの問題の1つは、整数をサポートしていないことです(その結果、Acceleratorは、最適化されたx64並列エンジンを使用して実行している場合にのみ整数をサポートします)。また、現在のグラフィックカードは、IEEE標準に従って浮動小数点数を実装していません。三角形の位置を計算する場合は問題ではありませんが、問題になる可能性がある「推測」を少し行うことで、より高速にしようとしています。財務計算を扱っています。(アクセラレータはさまざまなターゲットを使用できるため、x64並列エンジンを使用している場合は安全です)。
私の知る限り、DirectComputeは浮動小数点演算の正確な実装と整数の直接サポートを必要とするため、将来的に(またはAcceleratorが最終的にDirectComputeをエンジンとして使用し始める場合)良い選択になる可能性があります。
おそらく私のようなハードコアGPUオタクだけがそれについて聞いたことがあります。Tidepowerd-デッドリンクにより、GPGPUはCILベースの言語(F#、C#、VB.NETなど)で使用できるようになりました。一方、Quotation-to-GPUランタイム/ APIを使用して、唯一のF#言語でも同じことができます(誰かがそれを実装するのを楽しみにしています)。これは、エージェントスミスがブログに書いたものであるか、F#エキスパート1.0の本(言語指向プログラミングの章) AFAIKでも言及されています。
エージェント・スミス(申し訳ありませんが)はNVIDIACgについて話しています。ただし、HLSLDirectComputeシェーダーまたはOpenCLC99を使用して同じことを行うことができます。PTX(低レベルNVIDIA IL)、CAL-IL(低レベルAMD / ATI IL)...
別の方法として、DirectComputeの使用を検討することもできます。3つの大きなGPUAPI:CUDA、OpenCL、DirectComputeはすべて非常に似ています。DirectComputeは、DirectXの.NETラッパーであるSlimDXを介してF#から簡単にアクセスできます。
MS のAcceleratorを使用すると、GPU を活用できるため、CUDA は使用できませんが、このようなことができます。
CUDA.NET を調べることができます。F# から直接 CUDA を使用できるようになります。ここにあります: http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx
マネージ コードから CUDA を使用するためのもう 1 つの通常の方法は、CUDA 機能をネイティブ DLL にカプセル化し、それを P/Invoke するか、その周りに C++/CLI ラッパーを記述して、F# プログラムなどから使用することです。