CUDA1-hello world
电脑配置:windows7 sp1 64bit + CUDA6.5 + GeForce GTX780 Ti
显卡中的GPU因为多核可以处理很多相同的操作,相比较来说cpu就像个健全的手,什么活都能干,而gpu就是个非健全的手,只能干特定的事情,但是架不住手多,随便几百上千的。
关于从cpu过渡到GPU推荐先看《大规模并行处理器编程实战》中前两章,其中有详细地 讲解人们从cpu关注到gpu的历史,开始是用来图形处理的gpu,而且当时如果想使用gpu也需要通过opengl转换自己的思想成为图形处理,然后才能交予gpu处理。自从nvidia公司发现了这一潜力,他们开发了cuda,使得不需要经过opengl的api也能使用gpu这种多核处理的优势。这本书第二章中也详细说明了关于gpu上的结构包括寄存器,局部共享内存,全局共享内存,只读内存等;本书的缺点就是没有从开头介绍如何架构一个项目,也就是没有介绍hello
world。
《GPU高性能编程CUDA实战》中说明了如何进行从cpu编程转移到gpu编程上的过程,不过还不是完全详细。本文参考这本书加上官方文档完。
首先: 1、登陆https://developer.nvidia.com/cuda-gpus 查看自己的显卡是否支持CUDA。
2、进入https://developer.nvidia.com/cuda-toolkit 下载cuda6.5,点进去之后记得注意系统、位数和是笔记本还是桌面版,我按照系统字节64位选择的是64位版本。
3、首先安装Visual studio(推荐10 12 13 三个版本),就像往常一样,装好就行。
4、卸载本计算机上的NVIDIA的驱动和任何文件,因为你下载的cuda 6.5中包含了这些,而且你之前通过例如驱动精灵安装的驱动有可能高于内部的版本。为了少麻烦,推荐先卸载驱动,然后安装cuda6.5.
5、在安装cuda6.5的时候会有三个路径选择,第一个默认就行,第二个因为默认的是programdata,是隐藏的 推荐修改成自己其他定义的路径,第三个默认就行。
6、经过5的安装和重启,它会自动进行环境设置和vs的配置,无需手动操作。如果步骤5中第一项是默认的,那么就能够在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\doc下面找到html和pdf两个文件夹,没错这个pdf文件夹中就是包含的所有资料。
7、(可选)编译cuda6.5自带的例子,在上面步骤5中的第二个路径中(C:\Program Files\NVIDIA GPU Samples)有三个.sln,分别是vs10,vs12和vs13.这是全局部分,如果想单独编译,那就点击如各自的文件夹中选择.sln。
双击打开然后进行重新生成项目,接下来等着132个生成完成就行(我只成功了122个)。
按照步骤6中提示的pdf文件夹中的《CUDA_Getting_Started_Windows.pdf》中所述“A few of the example projects require some additional setup. The simpleD3D9 example requires the system to have a Direct3D SDK (June 2010 or later) installed and the Visual Compiling CUDA Programs www.nvidia.com NVIDIA
CUDA Getting Started Guide for Microsoft Windows C++ directory paths (located in Tools > Options...) properly configured” 也就解释了为什么之前只成功了122个。
因为编译器是在win32位下运行,所以生成的所有可执行文件在C:\Program Files\NVIDIA GPU Samples\bin\win32\Debug里面,也就是上图中的bin文件夹中。common文件夹暂时不管。
测试是否安装完成:cmd命令行进入\bin\win32\Debug文件夹下,运行deviceQuery.exe,显示计算机上的显卡设备等信息
结果是pass。然后运行bandwidthTest.exe
结果显示的是主机(tip:对于cuda来说,host就是cpu和电脑的内存,而device指的是gpu和显卡的显存)到设备和设备到主机以及设备到设备之间的通信带宽速度。
hello world
正常的新建新项目:
然后:,写项目名称,接着确定就行。
这时候会在解决方案资源管理器中有kernel.cu。对于cpp语言来说,扩展名就是.cpp,而对于cuda的来说,他的源文件就是.cu。
这个kernel.cu,暂时不需要,可以移除就行。
如上图所示,进行添加新建项。
扩展名为.cu。
成功。接下来就可以进行其他的代码编写了。因为cuda是为了最大程度的迎合c/cpp语言,使得对cuda的编程的不适应程度降到最小,从而很多语法上,你几乎都不知道这是个cuda编程。这方面在书籍《大规模并行处理器编程实战》有所提及,不过那书有些年头了,对于cuda这种快速发展的东西来说,只能看看,因为后来的cuda新的特性多了很多。
CUDA1-hello world的更多相关文章
- CUDA1.1-函数类型限定符与变量类型限定符
这部分来自于<CUDA_C_Programming_Guide.pdf>,看完<GPU高性能变成CUDA实战>的第四章,觉得这本书还是很好的,是一种循序渐进式的书,值得看,而不 ...
- 我的第一个CUDA程序
最近在学习CUDA框架,折腾了一个多月终于把CUDA安装完毕,现在终于跑通了自己的一个CUDA的Hello world程序,值得欣喜~ 首先,关于CUDA的初始化,代码和解释如下,这部分主要参考GXW ...
- CUDA 安装完成以后如何判断安装是否成功
最近在家里过寒假,可能这是还在学校里带着最大的福利了,无意之中翻出了多年前买的几本关于CUDA编程的书,于是随便在自己电脑上配置了一下环境,试试能不能把当年没有看完的书给看完了,于是有了今天这个判断C ...
- FFmpeg新版本(2016年10月份以后) 支持硬件解码
FFmpeg provides a subsystem for hardware acceleration. Hardware acceleration allows to use specific ...
- 离线配置Anaconda3+tensorflow-gpu1.4.0+cuda8.0+cudnn6.0
1.首先下载anaconda3 ----从官网上下载Anaconda3-5.1.0-Linux-x86_64.sh 直接通过命令 bash Anaconda3-5.1.0-Linux-x86_64.s ...
- CUDA编程(二) CUDA初始化与核函数
CUDA编程(二) CUDA初始化与核函数 CUDA初始化 在上一次中已经说过了,CUDA成功安装之后,新建一个project还是十分简单的,直接在新建项目的时候选择NVIDIA CUDA项目就能够了 ...
- VS2015 dlib编译 x64 Debug .lib生成
VS2015 dlib编译 x64 Debug >------ 已启动生成: 项目: ZERO_CHECK, 配置: Debug x64 ------ > Checking Build S ...
随机推荐
- SQL Server(九)——事务
事务: 保障流程的完整执行,就像银行取钱,先在你账上扣钱,然后存入别人的账上:但是从你账上扣完钱了,突然网断了,对方没有收到钱,那么此时你的钱也没了,别人的钱也没加上,事务为了防止此类情况的出现. 事 ...
- Sql Server之旅——第二站 理解万恶的表扫描
很久以前我们在写sql的时候,最怕的一件事情就是sql莫名奇妙的超级慢,慢的是撸一管子回来,那个小球还在一直转...这个着急也只有当事人才 明白,后来听说有个什么“评估执行计划“,后来的后来才明白应该 ...
- 全站HTTPs,没那么简单
“全站 HTTPs”俨然成了目前的热门话题,很多网站都在摩拳擦掌要实行全站 HTTPs.凑巧,我们(沪江)也在推行这个计划. 一开始大家想得都很简单,把证书购买了.配好了,相应的路径改一改,就没有问题 ...
- java 的常用设计模式--大话设计模式
设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...
- Java api 入门教程 之 JAVA的SYSTEM类
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部.该类位于java.lang包. 由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类.其内部的成员变 ...
- 烂泥:ESXI开启SNMP服务
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要监控ESXI,打算通过snmp方式进行监控,这样操作比较简单.但是要使用SNMP方式进行监控,必须要开启ESXI的SNMP服务.ESXI由于版本号的不 ...
- 禁止用户选定文本: user-select
双击文本 select,会被选定,如下 但有时点击元素时不想要被选定的状态,有一个尚未成为标准的 CSS 属性: user-select,它有 4 个值: text 可以选择文本 element 可以 ...
- linux 目录结构及其相关命令
目录也是一个文件,它的唯一功能是用来保存文件及其相关信息.所有的文件,包括普通文件.设备文件和目录文件,都会被保存到目录中. 主目录 登录后,你所在的位置就是你的主目录(或登录目录),如果是root用 ...
- Ubuntu14.04桌面版基本配置
最近公司需要用Ubuntu测试一些功能,安装好后绚丽的桌面环境很是吸引人,但切换到字符界面后,发现不少地方与RHEL不一样,连ssh.vim都没有,字符界面玩得不开心. 搜了不少文章,才将基本的功能配 ...
- nodejs模块——fs模块
fs模块用于对系统文件及目录进行读写操作. 一.同步和异步 使用require('fs')载入fs模块,模块中所有方法都有同步和异步两种形式. 异步方法中回调函数的第一个参数总是留给异常参数(exce ...