Igpu优化建议.docxVIP

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

GPU硬件特性存储层次Global?memory:大小一般为几GBchip-off的DRAM介质存储器访问速度慢(是shared?memory的上百倍)对于是否对齐和连续访问敏感(由DRAM的性质决定)可以被所有的线程访问Shared?memory:每个SM中一般几十KBchip-on的SRAM介质存储器访问速度快(与register相当)对于是否对其和连续访问不敏感,但是对bank?conflict敏感(由bank设计决定)只对自身block中的线程可见Register每个SM中一般为几千个(约30K)Chip-on的寄存器访问速度最快只对每个thread本身可见OtherLocal?memory每个线程有512KB(计算能力2.x),或者16KB(计算能力1.x)Chip-off的存储器,与global?memory类似访问速度慢(与global?memory类似)由编译器控制,存放寄存器溢出的自动变量只对每个thread本身可见Texture?memory大小为6-8KBConstant?memory大小为64KB执行层次逻辑Grid:由block构成,维数及维度可以设置,所有的block在Grid中并行执行Block:由thread够层,维数及维度可以设置,同一个block中的thread并行执行Thread:由threadId识别,每个thread有自己的寄存器,私有变量,共享同一个block中的shared?memory物理SM:由多个流处理器组成,每个SM有独立的资源,包括:block槽,warp槽,thread槽,shared?memory,registerWarp:由32个thread组成,每次执行的时候,32个thread动作一致,如果有分支,则串行执行Thread:物理上属于warp,与其他thread一同,组成最小的执行单元warp,拥有自己的寄存器GPU优化原则访存方式Global?memory:尽量让一个warp中的线程访问连续的一个内存块,实现级联访问(合并访问)Shared?memory:尽量减少bank?conflict,让同一个warp中的线程访问不同的bank数据分块Shared?memory?block:在SM能够支持的情况下,尽量多地利用此资源提高局部重用性Register?memory:在shared?memory之上可以多加一层寄存器层,进一步提高重用性(寄存器的带宽和延迟都优于共享内存)限制分支Warp?divergence:尽量减少分支判断,将同一个分支中的thread尽量放在同一个warp中提高计算密度Instruction?throughput:一方面提高warp的效率,让warp充分用到function?unit,尽量接近理论峰值;另一方面可以降低非运算类的比例,使得指令更多地用于计算GPU优化策略级联访存Global?memory:将线程组织称为可以一次性访问一个warp中内容的形式共享内存Shared?memory:减少bank?conflict来加快对shared?memory的访问重组线程将各个分支中的线程进行重组,让同一个warp中的线程尽量地走同一个分支指令流水线对指令进行分类,分析每一类指令的吞吐量,减少混合指令指令调度将长延迟的指令插入到与该指令独立的计算密集点处,使用计算来隐藏延迟(一般为访存造成的延迟)GPU优化实现《实战》CGMA:compute?to?global?memory?access计算:浮点数操作/访存操作,能够比较准确地体现kernel的性能,在访存性能一定的时候,通过提高CGMA的值可以使得浮点操作的性能大幅提升(浮点操作的峰值性能远远超过访存的峰值带宽)例子:CGMA=1.0,则浮点操作的性能最好的时候也就跟访存性能一致,而G80的global?memory的带宽为86.4GB/s,但是其浮点计算的峰值性能却为367Gflops,这样,性能将被访存速度所约束减少global?memory的流量将具有局部重用性的数据块加载到每个block中的shared?memory中,减少对global?memory的频繁访问,提高读取数据的性能例子:矩阵乘法的分块实现,利用shared?memory来存储每一小块所需的数据及结果存储器的使用需要谨慎如果每个线程使用得存储器过多,将会直接导致每个SM上可以驻留的线程数减少,造成并行度不足的问题例子:G80中每个SM有8K的寄存器,16K的shared?memory,如果每个块分配的shared?memory超过了2K,则SM中驻留的块将无法达到全部的8个,降低并行度,寄存器也是同样的道理Warp?divergence的问题一个warp中的线程存在分支的时候,会造成串行执行不同分支,降低性能,可以通过

文档评论(0)

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

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

1亿VIP精品文档

相关文档