CUDA和VC8的混合编译

本文介绍如何在Visual C++ 8.0环境中设置CUDA项目,实现CUDA与C/C++代码的混合编译。具体步骤包括添加CUDA规则文件、修改规则文件中的命令行、配置CUDA文件属性等。此外,还提供了解决链接问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/chinacodec/article/details/3865558


如果想建立一个完全使用CUDA的程序,那么下载http://sourceforge.net/projects/cudavswizard/这个就可以了,但是很多时候对于大型工程,主要还是以c或者cpp代码为主,只是在需要性能优化的地方使用CUDA代码,这个时候需要一点点小知识来实现CUDA和VC8的混合编译.步骤如下:

1) 在你的VC8工程下面添加规则文件. 在工程文件上右键选择 -> 自定义生成规则 -> 查找现有的 -> $(NVIDIA CUDA SDK)/common/Cuda.rules -> 把CUDA Build Rule前面的勾给勾上

2) 鼠标选中 CUDA Build Rule ->修改规则文件 -> 修改生成规则 -> 修改"命令行"里面的内容, 最后面 把$(InputFileName)改成[inputs].

3) 添加你要使用的 *.cu 代码到你的工程, 在.cu文件上点右键 -> 属性, 一般你添加了规则后,会自动识别.cu文件,然后工具栏里面显示的是 CUDA Build Rule, 如果不是, 手工选择之.

最后就可以重新编译你的工程了,不过你马上会遇到很多问题:首先是比如你的cuda函数名字叫做 foo,但是在C或者cpp代码中提示无法连接,我们需要如下操作:

4) 用写字板或者记事本打开cuda.rules文件,使用替换功能将所有 *.cu.obj 改成 *.obj

做了这个修改以后,千万要注意不要有相同文件名的cu和cpp文件再同一个工程中.比如说,不能在一个工程中同时存在foo.cpp 文件和 foo.cu 文件, 因为两者都会被编译成为 foo.obj, 这样就造成了冲突

5) 在你自己的工程中将.cu文件中的foo函数定义成 extern "C" void foo();

6) 在.c或者.cpp中要调用cuda函数的地方声明foo: extern void foo();

7)最后添加cuda库支持cudart.lib cutil32.lib


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值