CUDA显卡编程的架构及研究_GPU与CPU的协同工作分析.docxVIP

CUDA显卡编程的架构及研究_GPU与CPU的协同工作分析.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CUDA显卡编程的架构及研究_GPU与CPU的协同工作分析

CUDA显卡编程的架构及研究CUDA graphics programming framework and research摘 要由于图形处理器(GPU)最近几年的快速发展,基于GPU的通用计算已经成为一个新的研究领域。通过对NVIDIA公司必威体育精装版的通用计算GPU编程模型-CUDA的研究,阐明了CUDA应用程序的结构和它本身特征,讨论和分析了CUDA编程方法与普通CPU编程的差别,并以H.264数字视频编解码中,以消除宏块边界锯齿为主要目的的去块滤波模块为实例,详细描述了CUDA编程的方法和特点,最后通过与CPU编程实现的去块滤波模块的性能比较,揭示了CUDA在计算能力上的优势,为进一步优化编解码器性能和GPU通用计算提供了新的方法和思路。针对GPU的计算处理能力,提出了用GPU解决高性能计算的问题,其中包括详细描述CUDA编程的方法、优化处理原则等。采用了对比实验,结果表明了CUDA在并行计算上有很强的能力,为GPU的通用计算提供了新的方法和思路。现代GPU拥有强大的计算能力。文中提出了利用GPU解决高性能计算的问题,包括GPU编程的方法、高性能计算问题的划分原则等。实验表明,GPU高性能计算相比多核CPU具有更高的效率。关键词:GPU、CUDA、并行、通用计算目 录摘要I引言31.1?CUDA编程51.1.1概述:51.1.2历史51.2?并行算法设计的基本方法61.2.1设计方法61.2.2实践举例71.3?并行算法性能的度量111.3.1并行算法分析111.5?高性能计算利剑之CUDA172? CUDA实例19总结:25引 言计算需求是永无止境的,可以说高性能计算是计算机科学研究中的“日不落”课题。并行计算是其中最有效的手段。作为软件编程人员,设计编写并行算法是最为核心的工作任务。笔者想从3个基本概念:时间重叠、资源重复和资源共享,来让读者初步直观的认识一下并行算法的总体设计目标。首先,时间重叠是指多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分。这个概念可从计算复杂度的角度来理解,一个算法的复杂度可表示为空间复杂度和时间复杂度。从算法树的结构来看,通常的串行算法树“深而窄”,因为串行算法的本质是为一维问题设计的。而并行算法的目标则是尽可能减少时间复杂度,通常是通过以空间换时间的方式实现的,即增加空间复杂度。典型的时间重叠就是流水线处理。虽然CUDA平台上单个GPU暂时是不能设计流水线算法,但它也提供了异步访问以及Fermi架构的双kernel调度等时间重叠的处理方式。除了时间重叠外,资源重复也可以实现将时间复杂度转化为空间复杂度。资源重复是指设置多个相同的处理器,同时从事处理工作,以数量取胜的方式提高处理速度。这里给一个经典的以空间换时间的并行算法例子,寻找一个数列最大值。我们知道在数列中寻找最大值的一般算法复杂度为O(n)但如果采用并行算法则可为O(1),假定有2n个处理单元,算法如下:int i=Px //范围0~n-1int j=Py //范围0~n-1arrB[i] = 1 _syncthreads() //线程同步函数ifarrA[i] arrA[j]arrB[i] = 0 _syncthreads()ifarrB[i] == 1printarrA[i]这个算法并行的思路分析:是很简单,当A[i]不是最大值时,B[i]标识为0,看到这个比较神奇的并行算法idea,会否激起你的挑战欲望呢!注意,这里给出的例子只是一个理论算法,要实现它必须假定处理系统是CRCW(Concurrent Read Concurrent Write(同时读同时写))系统而且处理器足够多(2n个),所以很难在实际中应用,当然也不是在CUDA平台上解决这一问题的理想算法。但这个经典算法体现了并行算法设计目标与传统串行程序的本质区别,同时它也揭示了并行算法的理论加速比,关于加速比在章节1.3会有详细说明。由此,我们可以看到并行算法树采用的是与串行算法树截然不同的“浅而宽”的结构,即每个时刻可容纳的计算量相应增加,使整个算法的执行步骤数目尽可能接近问题的关键路径长度,也可以这样说,通过增加每个时刻步的算法复杂度来减少整体的时间复杂度,从而达到把时间复杂度转化为空间复杂度的目的。最后由于数据在处理的过程中涉及到读取和写入操作,尤其是CUDA平台下存在多种访存类型,如主机端到设备端,GM(global memory全局存储器)到SM(share memory共享存储器)等等,资源共享也是并行处理技术重要概念之一,原始的定义是多个处理器按照一定的规则对同一数据资源进行访问,也包括处理器负载的均衡,即多个服务请求如何映射到多个处理器。笔者以为在CUDA平台下就是如何通过资源共享来减小访

文档评论(0)

wbjsn + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档