- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CUDA 显卡编程的架构及研究
CUDA 显卡编程的架构及研究
CUDA 显卡编程的架构及研究
CUDA graphics programming framework and research
CUDA 显卡编程的架构及研究
CUDA 显卡编程的架构及研究
- I -
- I -
摘 要
由于图形处理器(
由于图形处理器(GPU)最近几年的快速发展,基于 GPU 的通用计算已经成为一
个新的研究领域。通过对 NVIDIA 公司最新的通用计算 GPU 编程模型-CUDA 的研究, 阐明了CUDA 应用程序的结构和它本身特征,讨论和分析了CUDA 编程方法与普通CPU
滤波模块为实例,详细描述了
滤波模块为实例,详细描述了 CUDA 编程的方法和特点,最后通过与 CPU 编程实现的
去块滤波模块的性能比较,揭示了 CUDA 在计算能力上的优势,为进一步优化编解码器性能和 GPU 通用计算提供了新的方法和思路。针对GPU 的计算处理能力,提出了用
GPU
GPU 解决高性能计算的问题,其中包括详细描述 CUDA 编程的方法、优化处理原则等。
采用了对比实验,结果表明了
采用了对比实验,结果表明了CUDA 在并行计算上有很强的能力,为GPU 的通用计算
编程的差别,并以 H.264 数字视频编解码中,以消除宏块边界锯齿为主要目的的去块提供了新的方法和思路。现代GPU 拥有强大的计算能力。文中提出了利用GPU 解决高性能计算的问题,包括 GPU 编程的方法、高性能计算问题的划分原则等。实验表明,GPU高性能计算相比多核 CPU 具有更高的效率。
编程的差别,并以 H.264 数字视频编解码中,以消除宏块边界锯齿为主要目的的去块
关键词:GPU、CUDA、并行、通用计算
CUDA 显卡编程的架构及研究
CUDA 显卡编程的架构及研究
- II -
- II -
目 录
摘要 I
引言 3
CUDA 编程 5
概述 5
历史 5
并行算法设计的基本方法 6
设计方法 6
实践举例 7
并行算法性能的度量 11
并行算法分析 11
1.5 高性能计算利剑之 CUDA 17
2 CUDA 实例 19
总结: 25
CUDA 显卡编程的架构及研究
CUDA 显卡编程的架构及研究
-
- PAGE 10 -
引 言
计算需求是永无止境的,可以说高性能计算是计算机科学研究中的“日不落” 课题。并行计算是其中最有效的手段。作为软件编程人员,设计编写并行算法是最为核心的工作任务。笔者想从 3 个基本概念:时间重叠、资源重复和资源共享, 来让读者初步直观的认识一下并行算法的总体设计目标。
首先,时间重叠是指多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分。这个概念可从计算复杂度的角度来理解,一个算法的复杂度可表示为空间复杂度和时间复杂度。从算法树的结构来看,通常的串行算法树“深而窄”,因为串行算法的本质是为一维问题设计的。而并行算法的目标则是尽可能减少时间复杂度,通常是通过以空间换时间的方式实现的,即增加空间复杂度。典型的时间重叠就是流水线处理。虽然CUDA 平台上单个 GPU 暂时是不能设计流水线算法,但它也提供了异步访问以及 Fermi 架构的双 kernel 调度等时间重叠的处理方式。
除了时间重叠外,资源重复也可以实现将时间复杂度转化为空间复杂度。资源重复是指设置多个相同的处理器,同时从事处理工作,以数量取胜的方式提高处理速度。
这里给一个经典的以空间换时间的并行算法例子,寻找一个数列最大值。我们知道在数列中寻找最大值的一般算法复杂度为 O(n)但如果采用并行
算法则可为 O(1),假定有 2n 个处理单元,算法如下: int i=Px // 范 围 0~n-1
int j=Py //范围 0~n-1
arrB[i] = 1
_syncthreads() //线程同步函数ifarrA[i] arrA[j]
arrB[i] = 0
_syncthreads() ifarrB[i] == 1 printarrA[i]
这个算法并行的思路分析:是很简单,当 A[i]不是最大值时,B[i]标识为 0,
看到这个比较神奇的并行算法 idea,会否激起你的挑战欲望呢!
注意,这里给出的例子只是一个理论算法,要实现它必须假定处理系统是CRCW(Concurrent Read Concurrent Write(同时读同时写))系统而且处理器足够多(2n 个),所以很难在实际中应用,当然也不是在 CUDA 平台上解决这一问题的理想算法。但这个经典算法体现了并行算法设计目标与传统串行程序的本质区别,同时它也揭示了并行算法的理论加速比,关于加速比在章节1.3 会有详细说明。
由此,我们可以看到并行算法树采用的
文档评论(0)