Warp divergence & Bank conflict

Warp divergence & Bank conflict

1、warp、bank概念

        warp是并行计算时最小的并发结构,通常由连续32个thread组成。bank是对SM中共享内存的划分,划分个数与对应硬件warp中所含thread数一致。对应使用的计算能力3.x版本的显卡,一个warp含有32个thread,因此划分的bank数也为32,并且每个bank的宽度大小为4bytes,对应于一个int型或float型变量。

2、warp divergence

        对于同一个warp中的所有thread是完全并行的,且必须要执行相同的指令,当同一warp中的thread分配了不同的指令时,会发生warp divergence,增加了程序的运行时间。为了有效地解决上述divergence问题,在分配任务时,尽量的使用索引号连续的thread,使活跃的thread全部集中到某些warp中,避免同一warp中同时存在活跃和不活跃两种状态的thread。

3、bank conflict

        一个SM中,共享内存会被分成多个bank,共享内存中以每4*32bytes为单位,顺序的存储在bank0~bank31中,当两个不同的thread同时访问同一bank内的值时,会发生bank conflict,也会增加程序运行的时间。这通常会发生在同一warp中,因为只有同一warp中的thread才是完全的同时执行。有效解决bank conflict的方法:遇到具体问题需要具体的实现实施方案,所要解决的根本问题是同一warp内的thread不要同时访问相同的bank。以归约算法计算向量和为例,每个活跃的thread中所执行的任务都是对两个数进行相加,这就需要确保每个thread中的两个数都和其余thread中的数不在同一个bank中,具体做法为设置相加的两个数之间的offect为32的倍数,使同一warp中每个thread访问的两个值在同一bank中,且不同thread访问的值不在同一bank中,即可有效避免bank conflict。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
warp divergence(指变形发散)是计算机图形学中的概念,用于描述在并行计算中的处理器线程之间的差异性。在图形渲染过程中,为了提高性能,常常采用并行计算的方式来对多个像素或顶点进行处理。 然而,不同处理器线程之间的运算速度、内存访问和负载的差异性会导致某些线程完成任务的时间比其他线程更快或更慢。这种差异性被称为warp divergence。 当一个warp(一组连续的线程)中的线程执行不同的代码路径时,就会发生warp divergence。这种情况下,线程无法同时进行计算,需要等待其他线程完成执行,从而影响了整个warp的性能。 常见引起warp divergence的情况包括分支语句(如if/else、switch等),当分支条件不同的时候,不同线程会进入不同的代码分支,从而产生warp divergence。此外,也会发生在访问不连续内存、常量内存的操作中,或者在执行不同的指令集等。 为了避免warp divergence对并行计算的性能造成负面影响,可以采用一些优化技术来减少warp divergence的发生。例如,可以将分支条件相同的线程放在一个warp中,这样它们可以同时执行相同的代码分支。此外,通过合并指令、重新组织数据、考虑内存访问模式等方式,也可以降低warp divergence的风险。 综上所述,warp divergence是计算机图形学中一个重要的概念,用于描述并行计算中处理器线程之间的差异性。理解和优化warp divergence对于提高并行计算性能具有重要意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值