CUDA.Net的Hello-world

时间:2011-01-04 16:49:38

标签: cuda.net

我正在尝试用CUDA.Net编写一个幼稚的应用程序,但我运气不好。

我已经想到了:

using GASS.CUDA;

// ...

var c = new CUDA();

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

myfunc显然应该是GASS.CUDA.Types.CUfunction类型,但我没有找到如何定义一个。

2 个答案:

答案 0 :(得分:8)

首先,你的内核需要一个.cu文件(要在GPU上执行的功能)。我们有一个文件 mykernel.cu

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

必须使用 nvcc 编译器将其编译为.cubin文件。为了让编译器知道Visual C ++编译器,您需要在Visual Studio命令提示符中调用它:

nvcc mykernel.cu --cubin

这会在同一目录中创建 mykernel.cubin 文件。

然后在C#代码中,您可以加载此二进制模块并执行内核。在GASS.CUDA的高级对象API中,它看起来像这样:

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编译器作为构建操作调用,而不是手动调用它。如果有人知道如何做到这一点,请告诉我们。

答案 1 :(得分:2)

不幸的是,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。