赞
踩
原文: http://blog.csdn.NET/u012234115/article/details/34860273
在做项目集成的时候需要用到cpp和cuda文件联调,自己摸索了两种方式实现cpp和cu文件混合编译。
本文环境:
- windows7 64位
- VS2010
- CUDA5.5
- 英伟达显卡Tesla C1060
CUDA_BIN_PATH %CUDA_PATH%\bin CUDA_LIB_PATH %CUDA_PATH%\lib\Win32 CUDA_SDK_BIN %CUDA_SDK_PATH%\bin\Win32 CUDA_SDK_LIB %CUDA_SDK_PATH%\common\lib\Win32 CUDA_SDK_PATH C:\cuda\cudasdk\common
1.打开vs2010,新建一个cuda项目,名称CudaCpp。
2.cuda默认建立的工程是如下,实现了两个一维向量的并行相加。kernel函数和执行函数还有main函数全都写在了一个cu文件里。
3.接下来在工程里添加一个空的cpp文件。将原来cu文件里main函数里的内容剪切到cpp文件main函数里。
为了让cpp能够调用cu文件里面的函数,在addWithCuda函数前加上extern “C” 关键字 (注意C大写,为什么addKernel不用加呢?因为cpp里面直接调用的是addWithCuda)
4.在cpp里也要加上addWithCuda函数的完整前向声明。下图就是工程的完整结构
5.可以在cpp里的main函数return之间加入getchar()防止运行后一闪就退出,加上system(“pause”)或者直接ctrl+F5也行。
运行结果:
下面贴出CudaCpp项目代码。
kernel.cu
1.建立一个空的win32控制台工程,名称CppCuda。
2.然后右键工程–>添加一个cu文件
3.将方法一中cu和cpp文件的代码分别拷贝到这个工程里来(做了少许修改,extern “C”关键字和某些头文件不要忘了加),工程结构如图:
这个时候编译是通不过的,需要作一些配置。
4.关键的一步,右键工程–>生成自定义 ,将对话框中CUDA5.5前面的勾打上。
这时点击 工程–>属性,会发现多了CUDA链接器这一项。
5.关键的一步,右键kernel.cu文件–>属性,在 常规–>项类型 里面选择CUDA C/C++(由于cu文件是由nvcc编译的,这里要修改编译链接属性)
6.工程–>属性–>链接器–>附加依赖项,加入cudart.lib
7.工具–>选项–>文本编辑器–>文件扩展名 添加cu \cuh两个文件扩展名
8.至此配置成功。运行一下:
9.为了更加确信cuda中的函数确实被调用,在main.cpp里面调用cuda函数的地方加入了一个断点。
单步执行一下。
可以看到程序跳到了cu文件里去执行了,说明cpp调用cuda函数成功。
贴上代码(其实跟方式一基本一样,没怎么改),工程CppCuda
kernel.cu
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。