2011-01-04 15 views
7

私はCUDA.Netで幼稚なアプリを書こうとしていますが、運が悪いです。Hello world for CUDA.Net

私はに考え出した:どうやらタイプGASS.CUDA.Types.CUfunctionでなければなりませんが、私は1を定義する方法を見つけることができませんでした

using GASS.CUDA; 

// ... 

var c = new CUDA(); 

// c.Launch(myfunc); // ???? how ??? 

myfunc

答えて

2

残念ながら、CUDA.netは非常に詳細に文書化されていますが、ご利用にあたってはhttp://www.hoopoe-cloud.com/files/cuda.net/2.0/CUDA.NET_2.0.pdfが役立ちます。さらに、カーネルをCUDA Cに書く必要があるので、http://developer.download.nvidia.com/compute/cuda/3_2_prod/toolkit/docs/CUDA_C_Programming_Guide.pdfも見てみて、CUDA.netに移植する前にCUDA Cアプリケーションを起動してみてください。

8

まず、カーネル(GPU上で実行される機能)で.cuファイルが必要です。のは、ファイルmykernel.cuてみましょう:

extern "C" 
__global__ void fooFunction(float4* data) { 
    // there can be some CUDA code ... 
} 

これはNVCCコンパイラで.cubinファイルにコンパイルする必要があります。 Visual C++コンパイラのコンパイラのノウハウをさせるためには、Visual Studioコマンドプロンプトの中からそれを呼び出す必要があります:

nvcc mykernel.cu --cubin 

これは、同じディレクトリにmykernel.cubinファイルを作成します。

次に、C#コードでこのバイナリモジュールを読み込んでカーネルを実行することができます。 GASS.CUDAの上位レベルのオブジェクトAPIでは、次のようになります。

using GASS.CUDA; 

// ... 

CUDA cuda = new CUDA(true); 
// select first available device (GPU) 
cuda.CreateContext(0); 
// load binary kernel module (eg. relative to from bin/Debug/) 
CUmodule module = cuda.LoadModule("../../mykernel.cubin"); 
// select function from the module 
CUfunction function = cuda.GetModuleFunction(module, "fooFunction"); 
// execute the function fooFunction() on a GPU 
cuda.Launch(function); 

これだけです!

nvccコンパイラは、手作業で呼び出すよりもビルドアクションとして呼び出すほうがいいです。誰かがそれを達成する方法を知っているなら、私たちに知らせてください。