如何制作可在C#应用程序中使用的CUDA dll
本文关键字:CUDA dll 应用程序 何制作 | 更新日期: 2023-09-27 18:00:41
如果你能给我一个简短的教程,而不是几个字,那就太好了。
我的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#应用程序。
但我的问题是,如何制作CUDA应用程序dll(或其他扩展),它可以发送到C#并从C#应用程序使用如果有CUDA的教程,比如C库到C#应用程序的教程(上面的链接),那就太好了。
我使用的是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。