繁体   English   中英

如何制作可在C#应用程序中使用的CUDA DLL?

[英]How to make CUDA dll that can be used in C# application?

如果你能给我一个简短的教程而不是几句话,那将是件好事。

我的CUDA应用程序正在按我的意愿工作。 现在,问题是如何将CUDA代码导出到C#,因为我想在C#中创建前端和其他所有内容。

从这个链接:

http://www.codeproject.com/Articles/9826/How-to-create-a-DLL-library-in-C-and-then-use-it-w

我知道如何用C语言创建一个可以作为Win32 dll导入C#应用程序的库。

但我的问题是, 如何制作可以运送到C#并从C#应用程序中使用的CUDA应用程序DLL(或其他扩展程序)? 如果有一个CUDA的教程就像C库到C#app的那个教程(上面的链接)那样会很好。

我使用的是Win7 64位,Visual Studio 2010 Ultimate,Cuda Toolikt 5.0和NSight 2.2.012313

ManagedCUDA非常适合此类事物。 首先,您需要按照文档中的说明设置Visual Studio项目。

以下是解决方案的示例:

test.cu(编译为test.ptx)

#if !defined(__CUDACC__)
#define __CUDACC__
#include <host_config.h>
#include <device_launch_parameters.h>
#include <device_functions.h>
#include <math_functions.h>
#endif

extern "C"
{
    __global__ void test(float * data)
    {
        float a = data[0];
        float b = data[1];
        float c = data[2];

        data[0] = max(a, max(b, c));
    }
}

这是C#代码:

private static void Test()
{
    using (CudaContext ctx = new CudaContext())
    {

        CudaDeviceVariable<float> d = new CudaDeviceVariable<float>(3);
        CUmodule module = ctx.LoadModulePTX("test.ptx");
        CudaKernel kernel = new CudaKernel("test", module, ctx)
            {
                GridDimensions = new dim3(1, 1),
                BlockDimensions = new dim3(1, 1)
            };
        kernel.Run(d.DevicePointer);
    }
}

这只是一个概念验证,设备内存甚至没有被初始化,结果也没有被读取,但足以说明如何做到这一点。

您可以通过多种方式分发应用程序。 在这种情况下,我选择将.cu文件编译为PTX并从文件系统加载到C#项目中。
您还可以将PTX作为资源直接嵌入到C#应用程序中。
你也可以编译成一个cubin并加载或嵌入而不是PTX。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM