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.
fonte
2011-04-20 20:13:54