2011-01-04 17 views
7

Sto provando a scrivere un'app infantile con CUDA.Net, ma sono sfortunato.Hello-world per CUDA.Net

ho capito a:

using GASS.CUDA; 

// ... 

var c = new CUDA(); 

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

myfunc a quanto pare dovrebbe essere di tipo GASS.CUDA.Types.CUfunction, ma non ho trovato come definire uno.

risposta

8

Per prima cosa è necessario un file .cu con il proprio kernel (funzione da eseguire su una GPU). Diamo un file mykernel.cu:

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

questo devono essere compilati in un file .cubin con la nvcc compilatore. Al fine di far conoscere al compilatore del compilatore Visual C++, è necessario chiamare dall'interno di Visual Studio Command Prompt:

nvcc mykernel.cu --cubin 

Questo crea il file dimykernel.cubin nella stessa directory.

Quindi in un codice C# è possibile caricare questo modulo binario ed eseguire il kernel. Nell'API di livello superiore di GASS.CUDA può apparire così:

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

Questo è tutto!

Il compilatore nvcc deve essere chiamato come azione di compilazione meglio di chiamarlo a mano. Se qualcuno sa come realizzarlo, faccelo sapere.

Problemi correlati