基于CUDA的GPU优化建议

GPU硬件特性

存储层次

Global memory

大小一般为几GB

chip-offDRAM介质存储器

访问速度慢(是shared memory的上百倍)

对于是否对齐和连续访问敏感(由DRAM的性质决定)

可以被所有的线程访问

Shared memory

每个SM中一般几十KB

chip-onSRAM介质存储器

访问速度快(与register相当)

对于是否对其和连续访问不敏感,但是对bank conflict敏感(由bank设计决定)

只对自身block中的线程可见

Register

每个SM中一般为几千个(约30K

Chip-on的寄存器

访问速度最快

只对每个thread本身可见

Other

Local memory

每个线程有512KB(计算能力2.x),或者16KB(计算能力1.x

Chip-off的存储器,与global memory类似

访问速度慢(与global memory类似)

由编译器控制,存放寄存器溢出的自动变量

只对每个thread本身可见

Texture memory

大小为6-8KB

Constant memory

大小为64KB

执行层次

逻辑

Grid:由block构成,维数及维度可以设置,所有的blockGrid中并行执行

Block:由thread够层,维数及维度可以设置,同一个block中的thread并行执行

Thread:由threadId识别,每个thread有自己的寄存器,私有变量,共享同一个block中的shared memory

物理

SM:由多个流处理器组成,每个SM有独立的资源,包括:block槽,warp槽,thread槽,shared memoryregister

Warp:由32thread组成,每次执行的时候,32thread动作一致,如果有分支,则串行执行

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的效率,让

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值