Primero necesita un archivo .cu con su kernel (función que se ejecutará en una GPU). Vamos a echar un archivo mykernel.cu:
extern "C"
__global__ void fooFunction(float4* data) {
// there can be some CUDA code ...
}
Esto tiene que ser compilado en un archivo con el .cubin NVCC compilador. Con el fin de permitir que los conocimientos del compilador de Visual C++ Compiler, es necesario llamar desde dentro del Visual Studio Comando:
nvcc mykernel.cu --cubin
Esto crea el archivo mykernel.cubin en el mismo directorio.
Luego, en un código C# puede cargar este módulo binario y ejecutar el kernel. En el objeto API de nivel superior de GASS.CUDA puede verse así:
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);
Eso es todo!
El compilador nvcc se debe llamar como una acción de compilación mejor que llamarlo a mano. Si alguien sabe cómo lograr eso, háganoslo saber.