Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

时间:2024-03-24 20:09:00

如何把自己写的cuda代码生成dll库,方便集成到其他主项目中去进行调用呢,这里总结了一个基本流程:

操作环境:Windows10,visual studio2017,cuda10.2, opencv4.2都已经安装并配置好了。

主题1:cuda代码生成dll库

1. 创建项目:在vs里边创建常规dll项目(可选择选择”动态链接库”或者”具有导出项DLL的动态链接库”)均可,后者会自动生成一对h文件和cpp文件而无需自己创建。但由于是构建cuda的dll库,所以还是自建比较合适,因此建议直接选择”动态链接库”.Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

2. 创建文件:通过”添加/新建项”,添加一个空的cuh头文件和一个cu文件

        Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

3. 设置项目:整个项目/生成依赖项/勾选CUDA10.2,相当于增加cuda编译器;同时在视图/其他窗口/属性管理器中,加载自己预先存放好的cuda属性设置(cuda头文件路径/库文件路径/静态库文件名)。

 

4. 设置cuh/cu文件:在cuh/cu文件上右键/属性,把从生成中排除设置为否,把项类型设置为CUDA C/C++,只有当生成依赖项勾选了CUDA10.2后这里项类型中中才有CUDA C/C++可以选择。

Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

 

5. 创建cuh文件内容

- 需要包含cuda的2个系统库函数

- 需要声明extern “C”前缀给每一个要声明的函数

- 需要声明一个接口宏__declspec(dllexport):当然也可以直接用这个接口宏

- 需要声明每个接口函数,并在函数开头增加接口宏定义

Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

 

6. 创建cu文件内容:把之前已调试通过的cu文件内容完整拷贝过来,内容不需要修改,只需在前面额外增加一个cuh头文件即可。

Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

 

7. 生成dll文件:保存后执行”生成解决方案”,即可在根目录/x64/debug下生成lib文件和dll文件,其中lib文件包含了函数的声明,dll文件包含了函数的定义。

Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

至此,动态链接库生成完毕,接下来就可以创建一个常规控制台项目来调用dll中的函数了。

 

主题2:新项目调用dll库中的函数

1. 创建vs常规控制台项目:同时创建主文件cpp

2. 设置项目:由于项目要使用cuda的dll文件,而该文件对应的头文件有包含cuda系统库,因此需要设置项目的编译器包含cuda的编译器,即项目/生成依赖项/勾选CUDA10.2

3. 添加dll相关文件:包含头文件和库文件即可通过编译并运行,此时不需要dll文件

- 把dll项目生成的lib/h/dll三个文件拷贝到新项目根目录,然后用include指令包含头文件,用pragma指令包含库文件。

Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

 

4. 在主文件的main()函数中即可直接调用dll库中的相关函数并运行结果。

5. 如果要直接运行dll,则可单独把dll和主函数生成的exe拷贝到其他地方即可运行。如下3个文件就可以拷贝到其他没有安装cuda的机器上也都可以独立运行了。

Windows下把CUDA程序生成dll库并在项目中调用dll中的函数

至此,实现了在其他项目中调用dll库文件并生成可执行文件运行的完整过程。

如果你喜欢,请点赞哦!