c cuda 指定gpu_GPU并行编程:熟练使用CUDA C语言

【IT168 专稿】一个大任务通常可能被分解成许多可以一起处理的小任务,以便创建一个解决方案,这和粉刷房子的道理是一样的,在粉刷之前,假设你需要买5公升油漆和5把刷子,你可以自己一个人干完采购和粉刷的活,也可以请朋友或职业粉刷工人帮忙。

▲图 开始使用CUDA C

你可能想请人帮忙,为了节约时间,你出去购买油漆,另一个人去买刷子,然后你在4个人的帮助下,每人刷一面墙,这样并行进行,到任务完成时,你算一下,应该节省了大量的时间。

这个方法对计算机也适用,假设你想添加两个向量v(x,y,z)和u(x,y,z),这里v=(1,2,3),u=(4,5,6),那么v+u=(1,2,3)+(4,5,6)=(1+4,2+5,3+6)=(5,7,9),你自己可以算一下,一次计算一个,但正如你可能看到的,这个问题可以分解成多个更小的问题,你可以让一个“人”将x分向量一起加起来,另一个“人”将y分向量一起加起来,第三个“人”将z分向量一起加起来,如下表所示:

表中的每个人所有的工作都是一样的:a+b=c,但每个人使用的数字不一样,结果也不一样。

这并不是什么新概念,并行计算已经存在多年,PC使用多个CPU并行处理任务,提高不同应用程序的执行速度,你可以将上面提到的“人”看作一个进程或一个线程,计算机可以将每个进程分配给不同的处理器,接收到任务的所有处理器并行执行一个任务(计算)。

现在,大多数计算机拥有多颗可以处理多任务的处理器,大型应用程序使用计算机上的可用资源运行可以获得更好的性能,但如果应用程序需要增加功能会怎么样呢?你应该增加处理器,还是以某种方式升级系统?这取决于你应用程序的需求和采用的解决方案,其中一个可行的解决方案是使用GPU。

GPU是什么?GPU是图形处理单元(Graphics Processing Unit)的缩写,它处理所有桌面上或游戏中的图形,分担一些CPU负载,在游戏中,CPU要执行人工智能计算和冲突检测,任务非常繁重,因此任何帮助都是欢迎的,GPU本身采用了良好的并行架构,使算术运算和计算真正有效,它是CPU的好朋友。

▲图 CPU+GPU,让程序运行更高效

本文的目的是帮助你开始使用CUDA C语言在GPU上实现并行计算,CUDA C由nVidia创建,它是一种与C类似的编程语言,但它是专门为创建使用GPU执行并行计算的应用程序设计的,与之类似的还有OpenCL和DirectCompute(DirectX 11),但CUDA C是我懂得的唯一语言,因此本系列文章就选择了它。它们都基于相同的原则,因此你任意选择一种学习都可以。

先决条件

在开始写代码之前,我们先启动计算机,把CUDA运行起来先!你需要一个新的启用CUDA的GPU(2007年以后,带有256MB显存的应该都可以,如果你不确定,请移步到www.nvidia.com/cuda检查一下)。我使用的是Nvidia Geforce 480GTX,但最新的500系列看起来更好。

重要:确定也安装了最新的驱动!!

安装

在下载页面,找到CUDA工具包,根据你平台的实际情况选择下载32位或64位,下载完毕后,安装它。

可选步骤,但真的会给你带来方便:下载完软件后,再从CUDA工具包页面下载并安装GPU计算SDK代码示例。

▲ 图 安装GPU计算SDK

GPU计算SDK带有许多优秀的代码示例和文档,它们可以帮助你提高GPU计算技能。

CUDA工具包安装好后,你就可以使用你熟悉的文本编辑器编写CUDA C应用程序了,我使用的是记事本,如果要编译应用程序,你可以使用Visual Studio 2008命令提示符,或nvcc.exe编译。

▲图 Visual Studio 2008命令提示符

▲图 nvcc.exe

测试安装是否成功

让我们尝试一下吧,一个真正超级简单的CUDA应用程序,看起来和其它C代码没什么差别:

#include

int main( void )

{

printf( “Hello, World!” );

return 0;

}

这段代码可能会给你带来惊喜,实际上,你可以使用CUDA编写任何C应用程序,当我们开始决定在CPU上执行什么功能,在GPU上执行什么功能时,真正的奇迹发生了。

在你熟悉的文本编辑器中敲入上面的代码,然后将其保存为TestCUDA.cu。

接下来,我们开始编译和生成我们的应用程序,仍然是在控制台窗口,在你保存TestCUDA.cu相同的路径下,敲入下面的命令:

nvcc –o test.exe TestCUDA.cu

按下回车键,将创建一个test.exe可执行文件。

▲图 创建test.exe文件

现在如果你敲入test.exe,你的第一个CUDA C应用程序将会运行,并在屏幕上输出“Hello,World”,如下图所示:

▲图 运行test.exe

如果你在编译时遇到了问题,拷贝错误消息,在搜索引擎中搜索一下,可以获得大部分常见失误和错误的解决办法,祝你好运!(如果你下载的是64位CUDA工具包,试试将其卸载,然后换为32位版本测试一下)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js中使用0 “” null undefined {}需要注意

注意:在js中0为空(false) ,代表空的还有“”,null ,undefined; 如果做判断if(!上面的四种值);返回均为false console.log(!null);// true console.log(!0);//true consol…

PhpStorm 10.0.3破解版下载

汉化破解版软件下载: http://pan.baidu.com/s/1geNO24r 密码: d5ci 这个汉化破解软件解决了大纲视图里空白的问题。 先安装腾讯电脑管家,然后安装这个软件,安装到最后提示有个文件有病毒已删除,点确定后正常使用。转载于:https://…

Jenkins:部署JEE工件

随着持续集成和持续交付的出现 ,我们的构建被分为不同的步骤,以创建部署管道。 这些步骤中的一些步骤可以是例如编译和运行快速测试,运行慢速测试,运行自动验收测试或发布应用程序等。 部署流程的最后一步意味着将我们的产品&…

seafile 部署_Seafile开启webdav及读写性能测试

为什么要在seafile搞webdavSeafile 一直是一款可靠的文件同步web应用,经过个人测试,同一台机器上,seafile在传输文件时的速度比nextcloud要快(可能也与php的设置有关系),这是seafile的优势。但是&#xff0…

Python--校园网爬虫记

查成绩,算分数,每年的综合测评都是个固定的过程,作为软件开发者,这些过程当然可以交给代码去做,通过脚本进行网络请求获取数据,然后直接进行计算得到基础分直接填表就好了,查成绩再手动计算既容…

Spring–添加SpringMVC –第1部分

欢迎来到本教程的第四部分。 在这一部分中,我们将使用Spring MVC编写控制器和视图,并考虑我们的REST模型。 我们必须做的第一件事,就是根据目前的情况制作一个Web应用程序。 我们将web / WEB-INF文件夹添加到我们的项目根目录。 在WEB-INF内创…

[Linux] 权限与指令间的关系

我们知道权限对于使用者帐号来说是非常重要的,因为他可以限制使用者能不能读取/创建/删除/修改文件或目录! 在这一章我们介绍了很多文件系统的管理指令,第五章则介绍了很多文件权限的意义。在这个小节当中, 我们就将这两者结合起来…

access month函数用法_学会了这7个EXCEL日期函数技巧,老板再让你加班,你找我!...

日期函数,常用年月日,时分秒,星期,季度,求差值等,学会以下几个函数,老板再让你加班,你找我!1、记录当前时间(不随系统时间变化)NOW()函数与数据有效性结合,记…

css样式表的选择器与分类

css 样式表的作用: 主要用于结构,样式与行为,CSS主要的作用就是美化网页的一个语言,它的特点: 1.结构与样式分离的方式,便于后期维护与改版; 2.样式定义精确到像素的级别; css样式表的结构:CSS 称为层叠样式表 用于给网页设置各种样式 css样式的语法由3部…

Spring 3.1缓存和@Cacheable

缓存在软件领域已经存在很长时间了。 它们是那些真正有用的东西之一,一旦您开始使用它们,您会想知道如果没有它们,您是如何相处的,所以似乎让Spring的家伙们只是在版本中向Spring核心添加缓存实现有点奇怪。 3.1。 我猜想以前没有…

pytorchyolov4训练_使用pytorch-yolov5 訓練自己的數據集-2020.6.15

make yolov5 pytorch train datasets训练所需环境 python3.5, pytorch1.3, torchvision 0.4.1 , tensorboard 1.14.0 , tensorflow-gpu1.14.0本例制作yolov5数据集 并进行数据训练从VOC数据集转为训练所需的coco数据集代码有待改进包含文件夹voc2coco/(Annotations/ JPEGImages…

meta 的作用 搜集

Meta标签中的format-detection属性及含义 format-detection翻译成中文的意思是“格式检测”&#xff0c;顾名思义&#xff0c;它是用来检测html里的一些格式的&#xff0c;那关于meta的format-detection属性主要是有以下几个设置&#xff1a;<meta name"format-detecti…

Web服务安全性和SOA路线图的人为维度

在大多数非平凡的SOA环境中&#xff0c;很难跟踪系统之间不断发展的集成&#xff0c;除非有明确的发布和查找适当信息的方法。 概述IT环境&#xff0c;定义当前或将要连接的内容&#xff0c;是维护环境的先决条件。 缺少这种情况通常会导致“面向意大利面条的环境”的感觉&…

pccad自定义图框_(PCCAD自定义标题栏详细方法.doc

PCCAD2011自定义标题栏详细方法下面以图3-1为例说明标题栏的自定义过程。图3-11&#xff0e;新建文件(用New 命令)。2&#xff0e;用绘图和文字中的相关命令设计出图3-1所示的图形。其中在使用中不变的内容&#xff0c;如厂名等均用“文字”命令标出&#xff0c;而需临时填充的…

ThinkPHP 3.2.x 集成极光推送指北

3.2版本已经过了维护生命周期&#xff0c;官方已经不再维护&#xff0c;请及时更新至5.0版本 —— ThinkPHP 官方仓库 以上&#xff0c;如果有条件&#xff0c;请关闭这个页面&#xff0c;然后升级至 ThinkPHP 5&#xff0c;如果由于各种各样的原因无法升级至 TP 5 &#xff0c…

Java:选择正确的集合

这是在应用程序中选择Set &#xff0c; List或Map的正确实现的快速指南。 最好的通用或“主要”实现可能是ArrayList&#xff0c;LinkedHashMap和LinkedHashSet。 它们的整体性能更好&#xff0c;除非您需要其他实现提供的特殊功能&#xff0c;否则应使用它们。 该特殊功能通常…

Java多线程——不变性与安全发布

1、不变性 某个对象在被创建后其状态就不能被修改&#xff0c;那么这个对象就称为不可变对象&#xff0c;不可变对象一定是线程安全的。不可变对象很简单。他们只有一种状态&#xff0c;并且该状态由构造函数来控制。 当满足以下条件时&#xff0c;对象才是不可变的&#xff1a…

中tr不能显示字符_垃圾文本识别中基本操作指南和错误总结,第三部分

创建模型需要用到机器学习的库&#xff0c;所以我们先下载sklearn库sklearn库下载完成后再输入库文件&#xff0c;就可以完美运行。然后就是划分测试集和训练集&#xff0c;需要注意的是&#xff0c;在从数据处理函数中导入数据时&#xff0c;足足运行了有将近30多秒&#xff0…

mvc后台post发送json数据

代码比较简单&#xff0c;不废话&#xff0c;直接上代码&#xff1a; /// <summary>/// 提交json数据&#xff0c;并接收/// </summary>/// <param name"apipath">要请求的服务器地址</param>/// <param name"jsonStr">要提…

(转载)20分钟读懂程序集

转自&#xff1a;http://www.cnblogs.com/damonlan/p/3221347.html 说到程序集&#xff0c;我刚开始对这个名词特别的郁闷&#xff01;~。然后 前些天花了些时间 好好读了一下&#xff0c;现在比较清晰了&#xff0c;把一些书上看到的 记下来&#xff0c;以飨读者。希望没浪费你…