- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为了方便,我们场景中的物体全是球形物体 * Hit函数用来计算这个表面与ox,oy这条射线有没有相交,如果相交的话,交点的深度是多少,既交点到image的距离是多少。下面我们看一下没有使用contant memory的主程序 * Cuda event函数主要是用来计时的,cudaeventrecord函数里的0代表是是哪个cudastream,cudastream我们就不再讲了。还有cpubitmap结构,这是一个像素矩阵,我们直到这是一个二维矩阵就够了,这个不是cuda 定义的。从代码中可以看到,我们在cpu和gpu端分别定义了20个球体。For循环是对这20个球体进行初始化。 * 然后将初始化后的球体拷贝到gpu端。下面就是计算每个像素点与每个物体的交点了,kernel函数我们就不再展示了。我们看红色框里的内容也是用来计时的,它和前面的计时的相对应,我们把这个用法记住就行了。这是普通的写法,我们知道contant memory是用来存储常量的。那么程序里面哪些是不会改变的呢,球体这个数组,一旦我们初始化之后,球体数组就不再改变了。下面我们看一下怎么修改主程序,kernel函数不需要修改。 * 左边的是修改后的代码,右边是原来的代码,我们来看一下不同之处,我们在开头多了一个constant的声明,这表明这个球体数组存储在了constant memory上。并且constant memory必须声明维全局变量。Constant memory的初始化还和以前一样,当然了,为了更快的初始化,我们也可以在gpu上完成初始化。将constant memory拷贝到gpu上时,要用特殊的拷贝函数,用法和传统的cudamemcpy一样,只不过cudamemcpytosymbol不需要指明拷贝的方向,因为只能从cpu端拷贝到gpu端。其它的没有任何区别了,以上便是contant memory的用法了。 * * * 我们用一个heating model来说明如何利用texture memory * 不同的颜色代表不同的温度, * k是一个效率因子,代表有百分之多少的热量保存下来了,其余的都流失了。 * 第一步初始化时,热源的温度是一个随机的正数,其它的全是0. 第二步是为了保证热源的温度是不变的,所以每次都从constant grid中将热源的温度拷贝到input grid中。第三步是计算每个方格的温度。第四步将输入和输出矩阵交换。 整个过程最耗时的就是计算每个方格的温度。我们并行化的方法是每个线程处理一个方格。 我们先看一下如何在主函数中声明texture memory,然后再以step3为例看一下怎么用texture memory,Step1和step2,step4我们不再说了。 * 首先是声明texture memory,texture 是c++中的模板类,所以声明的时候要指明类型。这只是声明,定义了一个texture的引用,并没有分配空间,要想分配空间,我们首先用传统的cudamalloc分配空间,然后将指针和我们定义的引用利用cudabindtexture绑定在一起,这样才会再texture上开辟空间因为我们使用cudamalloc分配的内存,所以cudabindtexture的第一个参数是0或者NULL,具体原因我也不太清楚。向texture memory中传数据时和以前一样,也是用cudaMemcpy,在cudamemcpy里,我们还是使用用cudamalloc分配的指针,不用texture定义的引用(texConstSrc,texIn,texOut),这些引用是在取数据时用到的。在这里我们要注意一下,我们使用cudabindtexture来绑定的,这个函数将cudamalloc分配的空间看作一个维数组,这就相当于我们的texture 引用绑定到了一个一维空间上。如果想要使用一个二维的texture, 我们在声明,绑定,取数据时都是要指定这是二维矩阵,关于二维的texture我们不再讲了,有兴趣的可以自己查一下。下面我们看一下怎么用texture memory * 第三步是计算每个方格的温度。texin和texout都是texture memory,这个函数里面访问数据的模式呢就符合txture memory的要求,首先计算出当前线程要计算的方格坐标,然后将二维坐标转换成一维坐标offset,然后计算出它的上下左右,这四个空间相邻的数据坐标。最后用tex1Dfetch, 从texture memory中取数据,最后计算此方格的温度。以上便是关于cuda的所有内容了。 * * * GPU的全局内存是GPU的主要的存储器,之所以是全局的,主要是因为GPU与CPU都可以对它进行写操作。任何设备都可以通过PCI-E总线对其进行访问。 全
您可能关注的文档
最近下载
- 医院信息网络安全培训PPT课件.pptx
- 2025年前列腺科普试题及答案.docx
- 立式叶片排渣过滤机-中国化工设备网.doc
- 20250508 北京大学DeepSeek系列06:DeepSeek私有化部署和一体机.pptx VIP
- 【7上英YL】芜湖市2024-2025学年七年级上学期期中考试英语试卷.pdf VIP
- 屋面瓦及檩条拆除安全方案.doc
- Schneider Electric施耐德Easy Altivar ATV610 变频器编程手册(中文).pdf VIP
- NB∕T34024-2024生物质成型燃料质量要求及分级.docx VIP
- STM32F1开发标准教程-教学大纲、授课计划.docx
- 新语境幼儿园教师专业能力等级与评定.pdf VIP
文档评论(0)