GPU.NETは、.NET開発者向けに Visual Studio 2010に統合されているマネージド ソリューションで、GPU用の計算集中型アプリケーションを作成するのが狙いである。
GPU.NET は、GPU上で走る HPC .NETアプリケーションを作成するためのマネージド ソリューションである。 GPU.NETは、 Visual Studio 2010でC#やVB.NET アプリケーションを書く際に、インテリセンスのサポートを提供する。できあがったアセンブリは、GPU.NETランタイムに参照を注入するAssembly Processorによって前処理されており、ランタイムは、順にアセンブリをネイティブ コードにコンパイルし、 既存のGPUデバイス上での実行を管理する。もしシステムにGPUデバイスが見つからない場合には、実行はCPUが行う。どのGPUもデバイス ドライバを持っているので、GPUをターゲットにするほうが、ユーザに他のSDKをインストールさせる必要のあるCUDAあるいはOpenCLコードを生成するより、ずっと有効である。
GPU.NETは、他のデバイスをサポートするためにプラグイン アーキテクチャになっている、と GPU.NETを開発している TidePowerdのCEOで共同創立者である Jack Pappasは、言う。
我々のランタイムは、ハードウェアをサポートするためにプラグイン アーキテクチャを使っています。ベータのリリース時点では、 nVidia CUDA搭載ハードウェア用のプラグインしかありませんが、現在AMDと協働で、彼らのハードウェアをサポートするプラグインを開発中です(ベータ期間の終わりごろ、v1.0のリリースの前には、リリースします)。このプラグイン ベースの設計のために、既存のハードウェア ベースのアクセラレータ カードのサポート(例えば、 IBM CellやFPGA ベースのカード)や今後出てくる新しいカードのサポート(Intelの “Knight’s Corner”)を追加するのが簡単です。
このランタイム設計の別な重要な意味は、エンドユーザにそれをデプロイした後でも、ハードウェア アクセラレータのコードを早くすることができることです。単にプラグインのアップデートをすればよいのです。そのアップデートには、バグ修正、新しいデバイス コード用JITコンパイラの最適化、ハードウェア ドライバのあるリリース向けの新しいAPIサポートがあります。このアップデート プロセスは、開発者とエンドユーザの両方に完全に透過的なことに注目してください。
GPU.NETは、現在Windows上でのみ走るが、Monoを介してMacやLinux上でも走るようになる。APIに関しては、Pappas氏は次のように言っている。
GPU.NETを使う開発者は、システムを使うために、わずかながらのAPIを学ぶ必要があります。若干の CUDA/OpenCLのような抽象性は、残りますが、我々は、「ネイティブ」な.NETのルック アンド フィールを持つようにAPIを設計したので、GPGPUの開発経験のない.NET開発者が、すぐに使い始めて、GPUによる加速コードを書くことができます。
例えば、CNDAで
int tid = blockDim.x * blockIdx.x + threadIdx.x;
が、GPU.NETを使ったC#では、
int ThreadId = BlockDimension.X * BlockIndex.X + ThreadIndex.X;
になります。並行プリミティブ( Thrustに似た)のような高レベルな機能を使えるAPIは、未だ仕上がっていません。ユーザからのフィードバックを受け取った後で、ベータ期間中に固めるつもりです。
ライセンスに関して、 Pappas氏が教えてくれたのは、 GPU.NETは、
商用製品で、開発者毎のライセンスになります。またプレミアム版もあり、チケットベースでのサポートで、購入すれば、技術的質問やできるだけ早く修正する必要のあるバグに対処します。しかし、我々は、GPU.NET を開発中に、内部で使うために、役立つツールやライブラリを開発しました。我々は、これらをv.1.0のリリース後に、オープンソース化して、リリースする予定です。
彼らは、 GPU.NETのソースコードをリリースするつもりは、無い。現在は Beta期間で、 GPU.NET 1.0は、今年の終りか来年の始めにリリース予定である。