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ć.