Cuda学习笔记(四)——在vs2010中配置.cpp和.cu文件
来源:互联网 发布:ps for mac破解版下载 编辑:程序博客网 时间:2024/06/05 11:23
Cuda-c极大程度的方便了我们利用GPU并行处理来加快自己程序的运行速度,但是大多情况下我们的程序是一个极为庞大的工程项目,在这个项目中我们只需要利用cuda来加快其中某一块算法的运行效率,所以很多情况下利用cpp文件来调用cu中的kernel函数,从而完成程序的并行运算。虽然cuda5.0之后可以直接从vs中生成现有的cuda项目,但是利用cpp来调用cu文件的项目还是需要我们自己来进行配置的。
一. 文件配置
1. 首先假定我们已经写好了调用gpu运算的.cu文件,如下图所示。在这个文件中,我们首先定义调用global设备函数的主函数:
testghmain();
并在其前面加上extern “C” ,这个文件定义了a、b两个数组, 并利用gpu来实现c=a+b的运算。
2. 在我们的工程中,需要调用上面这个.cu文件中的函数进行并行加速的cpp文件中,对testghmain();函数进行调用,所以在文件前面需要对其进行事先声明。
extern “C” int testghmain();
3. 之后,在上面这个.cpp文件中,需要的地方直接调用testghmain()。
在这里我们声明了一个MFC的控件响应函数OnBnClickedbutton来调用testghmain(),当用户点击这个button时,程序首先调用.cu文件中的testghmain函数,而testghmain函数会调用global设备函数,通过gpu实现c=a+b的运算,并把计算结果最终返回给用户。
二. 工程属性配置
此外,在配置完文件之后,还需要对整个工程进行一些配置:
1. 右键工程->属性->附加依赖项,添加cudart.lib;
2. 右键工程->生成自定义->选择cuda6.5;
3. 右键添加的cu文件,属性->常规->项类型,选择cuda c/c++。
至此就全部配置完成,可以运行程序看看结果。测试程序是对数组a= { 1, 2, 3, 4, 5 };b= { 10, 20, 30, 40, 50 };相加得到c数组并计算c数组所有数据之和,正确结果应该返回165。
下面是在mfc中cpp文件来调用cu文件的项目结构组成,在其他类型的vs工程中调用.cu也是如此,封装cu文件,对主函数添加extern “C”,更改整个项目的属性配置。
三. Tips:
1. kernel函数是需要进行封装才能添加extern “C”来进行声明并调用的,cpp文件中是不能直接调用 __global__函数的,因为编译器是无法解析符号<<<……>>>以及blockIdx、threadIdx等,因此 __global__ 函数只能放在.cu文件函数里面定义和被调用。
2. 用extern “C” 修饰的原因,就是.cu是扩展C,但由于cuda-c只是部分属于c++,所以需要更改工程的配置属性,将.cu文件定义为类C语言编译(NVCC.exe编译)。
3. Cpp中是不能include“.cu”文件的,就好比cpp中不能include“.cpp”一样。
- Cuda学习笔记(四)——在vs2010中配置.cpp和.cu文件
- CUDA: VS中同时编译.cpp文件与.cu文件
- CUDA 问题解决 ——在 c 文件中调用 cu 文件中定义的函数失败
- 在vs2010中配置CUDA环境
- cpp文件中部分调用cuda程序—环境配置
- CUDA常见问题之无法在c文件中调用cu文件中定义的函数
- VS2010中配置CUDA和openMP
- CUDA: 不要在一个.cpp文件中声明kernel(即以_global_和_device_的函数)
- cuda编程:不要在一个cpp文件中声明__device__和__global__函数
- cpp学习笔记(四)
- GPU(CUDA)学习日记(四)----------VS2010 + win7 32位 + CUDA 4.2 环境配置以及一些小问题的解决
- GPU(CUDA)学习日记(四)----------VS2010 + win7 32位 + CUDA 4.2 环境配置以及一些小问题的解决
- cpp文件调用CUDA .cu文件实现显卡加速相关编程
- cpp文件调用CUDA .cu文件实现显卡加速相关编程
- cpp文件调用CUDA .cu文件实现显卡加速相关编程
- CUDA学习笔记四
- CUDA学习笔记四
- 【CUDA学习-原创】包含C和.cu的工程实现!
- HDU2084 DP + 水 /入门+ 递推 + 从后往前思考问题的方式
- 安卓012Activity生命周期
- Hibernate-Session使用的背后
- Java基础(3)
- [LintCode] 中序遍历和后序遍历树构造二叉树 Construct Binary Tree from Inorder and Postorder Traversal
- Cuda学习笔记(四)——在vs2010中配置.cpp和.cu文件
- spring配置文件详解--真的蛮详细
- 一张正则表达式的图,mark一下
- php连接mysql数据库
- java中作用域的问题
- Android问题之this与Activity.this的区别
- 最小生成树--Kruskal算法
- TCP/IP学习笔记(三)——IP,ARP,RARP
- ashx获取session