初入CUDA: VS2010+cuda6.0工程的建立
来源:互联网 发布:js eval 不能用 编辑:程序博客网 时间:2024/06/05 18:07
原创作品 转载请注明出http://blog.csdn.net/always2015/article/details/47322551
最近刚接触GPU高性能编程,感觉并行编程太高大上了。他的强大的并行计算也成为了全球研究的热点。下面的程序是在配置好了编译和运行CUDA C代码环境的基础上运行的第一个示例程序。具有纪念的意义。本文的例程是基于教材《GPU高性能编程CUDA编程实战》,这是一本很经典的一步cuda入门参考书,废话不多说,我已经迫不及待去感受cuda的魅力啦。
工程建立
1、打开VS2010,新建–>项目,建立一个空的win32控制台应用程序。如下图所示:
并且给该工程命名为cuda_test,单击确定。
2、然后在下一个窗口中点击“下一步”,然后再在下一个窗口中的”附加选项“中选择”空项目“。点击完成,如图:
3、这样我们就进入了工程的界面,右键源文件—–>添加—->新建项。
4、在打开的对话框中选择建立一个cuda格式的文件,即:NVIDIA CUDA6.0下的code——>CUDA C/C++ file,然后随便起一个名字main,点击添加。
5、右键工程—>生成自定义 如下:
弹出的窗口中选择CUDA6.0 .
6、右键项目—->属性,将项类型设置为:CUDA C/C++。如下图。
至此,平台已经搭建完毕,下面我们就可以运行一个代码来测试一下:
#include<cudahead/common/book.h>#include<stdio.h>__global__ void add(int a,int b,int*c){ *c=a+b;}int main(void){ int c; int *dev_c; HANDLE_ERROR(cudaMalloc((void**)&dev_c,sizeof(int))); add<<<1,1>>>(2,7,dev_c); HANDLE_ERROR(cudaMemcpy(&c,dev_c,sizeof(int),cudaMemcpyDeviceToHost)); printf("2+7=%d\n",c); cudaFree(dev_c); return 0;}
注意:上述代码的头文件book.h是《GPU高性能编程CUDA编程实战》整本书例程编写的一个头文件,在运行这个代码是需要包含进去,否则肯定会报错。
运行结果如下:
我们知道在GPU设备上执行的函数称为核函数(Kernel).但是编译器怎么区分函数应该在哪个地方运行呢。我们看到代码就知道了。CUDA C中,增加了global修饰符,这个修饰符告诉编译器这个函数在GPU上运行而不是CPU上运行。
还有就是通过cudaMalloc()来分配内存,这个函数类似于C语言的malloc。但是该函数作用是告诉我们是在GPU上分配内存。第一个参数是指针,指向用于保存的新分配内存的变量。第二个是所分配内存的大小。HANDLE_ERROR(),是一个宏,作为本代码的一个辅助部分,定义在book.h中。这个宏是判断函数调用是否返回了一个错误的值。cudaMemcpy()可以说是GPU内存和主机内存的一个接口,这里的意思是将GPU中内存dev-c的值复制给主机的c。因为在GPU上的指针是不能访问CPU上的内存的,所以通过cudaMemcpy来访问GPU的内存。注意cudaMemcpy最后一个参数是cudaMencpyDeviceToHost,这个参数告诉我们运行时源指针是在GPU内存的一个指针,目的指针是一个CPU内存一个指针。这个函数类似于C语言的Memcpy。要释放cudaMalloc分配的内存,需要调用cudaFree释放,这和函数free行为很类似。
- 初入CUDA: VS2010+cuda6.0工程的建立
- CUDA: VS2010+cuda6.0工程的建立
- VS2010下,C++工程调用CUDA工程
- cuda6.5 vs2010
- CUDA6.5-VS2010安装
- VS2010下建立QCustomPlot工程
- CUDA6.5+VS2010+OpenCV2.4.9的环境搭建过程
- cuda第0课环境配置+建立第一个程序:cuda4.2+VS2010+GeForce8500GT
- vs2010建立win32 application 编译错误(用vc6.0建立此工程正常运行)解决方法
- vs2010建立win32 application 编译错误(用vc6.0建立此工程正常运行)解决方法
- VS2010 操作Word(一)建立工程
- VC工程的cuda配置
- (1)VS2010 + CUDA 5.0 如何在 VC++工程里面编译 CUDA 源文件
- CUDA6.5+VS2010安装和搭建过程
- Qt工程的建立
- 建立工程的问题
- [爱编程]迟到的2015年终总结--初入工程开发
- Fedora20安装cuda6.0
- uva 11882Biggest Number
- Python 之 ImportError: No module named ***
- Java并发包总结
- sysfs与ramfs、tmpfs、devtmpfs的一点区别
- CMD获取当前目录的绝对路径
- 初入CUDA: VS2010+cuda6.0工程的建立
- 浅谈算法和数据结构: 八 平衡查找树之2-3树
- HDOJ-1242-RESCURE(营救公主)【BFS+优先队列】
- android开发笔记之进程通信Messenger
- SYBASE --- all commands
- 浅谈算法和数据结构: 七 二叉查找树
- Ganymed SSH2 模拟putty远程交互式执行命令工具
- iptables 实现流量监控,重定向: 一
- scala实现设计模式之单例设计模式