2011-01-04 23 views
7

Estoy tratando de escribir una aplicación infantil con CUDA.Net, pero no tengo suerte.Hello-world para CUDA.Net

que he descubierto a:

using GASS.CUDA; 

// ... 

var c = new CUDA(); 

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

myfunc aparentemente debería ser de tipo GASS.CUDA.Types.CUfunction pero no encontré la forma de definir una.

Respuesta

8

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.

Cuestiones relacionadas