CUDA学习(二十七)-阿里云开发者社区

开发者社区> 人工智能> 正文

CUDA学习(二十七)

简介: 终于结束了CUDA关于纹理内存的介绍,接下来的应该会GPU对原程序的性能优化有关

英伟达终究是做游戏显卡出生的,在CUDA手册中也介绍了大量关于纹理拼图的相关知识(可能当初学得前在加速时没怎么用到),接下来讲的有助于优化。
整体性能优化策略:
性能优化围绕三个基本策略:

  • 最大化并行执行以实现最大的利用率;
  • 优化内存使用量以实现最大的内存吞吐量;
  • 优化指令的使用,以达到最大的指令吞吐量。

哪种策略能够为应用程序的特定部分产生最佳的性能增益取决于该部分的性能限制器; 例如,优化主要受存储器访问限制的内核的指令使用将不会产生任何显着的性能增益。 因此,应该通过测量和监测性能限制器来持续优化,例如使用CUDA分析器。 而且,将特定内核的浮点操作吞吐量或内存吞吐量(无论哪个更有意义)与设备的相应峰值理论吞吐量进行比较,都表明内核有多大改进空间。
最大限度地利用:
为了最大化利用率,应用程序的结构应尽可能地展现出尽可能多的并行性,并且有效地将这种并行性映射到系统的各个组件,以保持大部分时间。
应用级别:
在高层次上,应用程序应通过使用异步并发执行中所述的异步函数调用和流来最大化主机,设备以及连接主机和设备的总线之间的并行执行。 它应该为每个处理器分配最好的工作类型:将串行工作负载分配给主机; 并行工作负载到设备。
对于并行工作负载,由于某些线程需要同步以便相互共享数据,所以在并行性被破坏的算法中,有两种情况:这两个线程属于同一个块,在这种情况下,它们应该使用__syncthreads ()并通过同一内核调用中的共享内存共享数据,或者它们属于不同的块,在这种情况下,它们必须使用两个独立的内核调用(一个用于写入全局内存,另一个用于从全局内存读取)通过全局内存共享数据。 第二种情况是最不理想的,因为它增加了额外的内核调用和全局内存流量的开销。 因此,通过将算法映射到CUDA编程模型以使得尽可能在单个线程块内执行需要线程间通信的计算的方式,可以将其发生最小化。
设备级别:
在较低级别,应用程序应该最大化设备的多处理器之间的并行执行。
多个内核可以同时在一个设备上执行,所以最大的利用率也可以通过使用流实现足够的内核来并发执行,如异步并发执行。
1518178184309

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章