【问题标题】:How to make CUDA dll that can be used in C# application?如何制作可在 C# 应用程序中使用的 CUDA dll?
【发布时间】:2013-02-08 10:35:59
【问题描述】:

如果你能给我一个简短的教程而不是几句话,那就太好了。

我的 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# 应用程序的教程(以上链接),那就太好了。

我正在使用 Win7 64 位、Visual Studio 2010 Ultimate、Cuda Toolikt 5.0 和 NSight 2.2.012313

【问题讨论】:

  • 你可能对这个Dr. Dobbs article感兴趣。
  • 有一些尝试使 C# 接口与 CUDA 可用。也许其中任何人都可以帮助您前进:managedCUDACUDAfy.NET
  • 好吧,我宁愿只导入 dll,如果可能的话不添加任何东西。我想保持简单。不过谢谢你的建议

标签: c# c cuda nvidia


【解决方案1】:

ManagedCUDA 非常适合这种类型的事情。首先,您需要按照documentation 中的说明设置您的 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。

【讨论】:

  • 好的,谢谢,有时间我会去看看,如果有用的话给你分。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2012-08-21
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
相关资源
最近更新 更多