Привет мир для CUDA.Net - PullRequest
7 голосов
/ 04 января 2011

Я пытаюсь написать детское приложение на CUDA.Net, но мне не повезло.

Я понял:

using GASS.CUDA;

// ...

var c = new CUDA();

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

myfunc, очевидно, должно быть типа GASS.CUDA.Types.CUfunction, но я не нашел, как определить его.

Ответы [ 2 ]

8 голосов
/ 21 апреля 2011

Для начала вам нужен файл .cu с вашим ядром (функция, выполняемая на GPU). Давайте иметь файл mykernel.cu :

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

Это должно быть скомпилировано в файл .cubin с компилятором nvcc . Чтобы сообщить компилятору о компиляторе Visual C ++, необходимо вызвать его из командной строки Visual Studio:

nvcc mykernel.cu --cubin

Это создает файл mykernel.cubin в том же каталоге.

Затем в коде C # вы можете загрузить этот двоичный модуль и запустить ядро. В объектном API более высокого уровня GASS.CUDA это может выглядеть так:

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

Вот и все!

Компилятор nvcc лучше вызывать как действие сборки, чем вызывать его вручную. Если кто-нибудь знает, как этого добиться, сообщите нам.

2 голосов
/ 17 марта 2011

К сожалению, CUDA.net очень плохо документирован, но http://www.hoopoe -cloud.com / files / cuda.net / 2.0 / CUDA.NET_2.0.pdf поможет вам начать работу. Кроме того, вам все еще нужно написать свое ядро ​​на CUDA C, так что http://developer.download.nvidia.com/compute/cuda/3_2_prod/toolkit/docs/CUDA_C_Programming_Guide.pdf также будет хорошей идеей, чтобы взглянуть на нее, и, возможно, попытаться начать с запуска приложения CUDA C, прежде чем переносить его на CUDA.net. .

...