- 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程序的优化.pdf
第4 章 CUDA 程序的优化 4.1 CUDA 程序优化概述 CUDA 程序优化的最终目的,是以最短的时间,在允许的误差范围内完成给定的计算任 务。在这里,“最短的时间”是指整个程序的运行时间,更侧重于计算的吞吐量,而不是单个 数据的延迟。在开始考虑使用GPU 和CPU 协同计算之前,应该先粗略地评估使用CUDA 是 否能达到预想的效果,包括以下几个方面: 1.精度 目前,GPU 的单精度计算性能要远远超过双精度计算性能,整数乘法、除法、求模等运 算的指令吞吐量也较为有限。在科学计算中,由于需要处理的数据量巨大,往往只有在采用双 精度或者四精度时才能获得可靠的结果。目前,采用Tesla 架构的 GPU 还不能很好地满足高 精度计算的需求。如果应用程序需要很高的精度,或者需要进行多轮迭代,笔者建议只在关键 的步骤中使用双精度,而在其他部分仍然使用单精度浮点以获得指令吞吐量和精度的平衡。如 果应用程序对精度有更高的要求,那么现在的架构还不能获得太高的加速比。不过,在 2010 年将会普及的下一代架构中,双精度浮点和整数处理能力将有很大的提升,这种情况会有根本 性的改变。 2.延迟 目前,CUDA 还不能单独为某个处理核心分配任务,因此必须先缓冲一定量的数据,再 交给GPU 进行计算。这样的方式可以获得很高的数据吞吐量,不过单个数据经过缓冲、传输 到GPU 计算、再拷贝回内存的延迟就比直接由CPU 进行串行处理要长很多。如果对应用实时 性要求很高,比如必须在数十微秒内完成对一个输入的处理,那么使用 CUDA 可能会影响系 统的整体性能。对于要求实现人机实时交互的系统,应该将延迟控制在数十毫秒的量级,以及 时响应用户的输入。通过减小缓冲,可以减小延迟,但缓冲的大小至少应该保证每个内核程序 处理的一批数据能够让GPU 满负荷工作。在大多数情况下,如果应用要求的计算吞吐量大到 需要由中高端GPU 才能实时实现,那么在投入相同成本的前提下,是很难使用CPU 相近效果 的。如果确实对实时性和吞吐量都有很高要求,应该考虑ASIC 、FPGA 或者DSP 实现,这需 要更多的投入,更长的开发时间和硬件开发经验。 3.计算量 如果计算量太小,那么使用CUDA 是不划算的。衡量计算量有绝对和相对两种方式。 从绝对量来说,如果待优化的程序使用频率比较低,并且每次调用需要的时间也可以接 受,那么使用CUDA 优化并不会显著改善使用体验。对于一些计算量非常小(整个程序在CPU 上可以在几十毫秒内完成)的应用来说,使用CUDA 计算时在GPU 上的执行时间无法隐藏访 存和数据传输的延迟,此时整个应用程序需要的时间反而会比CPU 更长。此外,虽然GPU 的 单精度浮点处理能力和显存带宽都远远超过了CPU,但由于GPU 使用PCI-E 总线与主机连接, GPU 高性能运算之CUDA 因此它的输入和输出的吞吐量受到了IO 带宽的限制。当要计算的问题的计算密集度很低时, 执行计算的时间远远比IO 花费的时间短,那么整个程序的瓶颈就会出现在PCI-E 带宽上。此 时无论如何提高浮点处理能力和显存带宽,都无法提高系统性能。Tesla C1060 带宽与延迟的 比较如图4- 1 所示。 图4-1 Tesla C1060 带宽与延迟比较 从相对计算量来说,如果可以并行的部分在整个应用中所占的比例不大,那么GPU 对程 序整体性能的提高也不会非常明显。如果整个应用中串行部分占用时间较长,而并行部分较短, 那么也需要考虑是否值得使用GPU 进行并行计算。例如,假设一个程序总的执行时间为1.0, 其中串行部分占 0.8,而并行部分只占 0.2,那么使用 GPU 将并行部分加速 10 倍,总的执行 时间也只能从1.0 降低到0.82。即使是在CPU 和GPU 可以同时并行计算的应用中,执行时间 也至少是CPU 串行计算需要的0.8 。只有在并行计算占用了绝大多数计算时间的应用中,使用 CUDA 加速才能获得很高的加速比。不过,随着GPU+CPU 并行计算的普及和GPU 架构的进 一步改进,未来可能即使只能获得较小的加速比,也会由GPU 来执行更多的计算任务。 完成对GPU 加速效果的粗略评估后,就
文档评论(0)