2011-01-04 6 views
7

Próbuję napisać dziecinną aplikację z CUDA.Net, ale nie mam szczęścia.Witaj na świecie dla CUDA.Net

Mam zorientowali się:

using GASS.CUDA; 

// ... 

var c = new CUDA(); 

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

myfunc widocznie powinny być typu GASS.CUDA.Types.CUfunction ale nie mogę znaleźć, jak zdefiniować jeden.

Odpowiedz

8

Najpierw trzeba plik .cu z jądra (funkcja być wykonywane na GPU). Rzućmy plik mykernel.cu:

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

To musiał być skompilowany do pliku .cubin z nvcc kompilator. Aby pozwolić know kompilator Visual C++, trzeba wywołać ją od wewnątrz Visual Studio wiersza poleceń:

nvcc mykernel.cu --cubin 

Stwarza to mykernel.cubin plik w tym samym katalogu.

Następnie w kodzie C# można załadować ten moduł binarny i wykonać jądro. W interfejsie API obiektu wyższego poziomu GASS.CUDA może wyglądać tak:

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); 

To wszystko!

Kompilator nvcc powinien być nazywany jako działanie budować lepsze niż nazywając ją ręcznie. Jeśli ktoś wie, jak to osiągnąć, daj nam znać.

Powiązane problemy