已关闭
[Requirement|需求建议]: 【AscendC样例】SIMT分支发散特性样例 #1044
shaonaite创建于 6月25日关闭于 6月29日
6月25日 添加了label:requirement
6月25日 关联了pull request:simt新增warp divergence样例
shaonaite
6月25日 评论:
6月25日 评论:
预计6.30前闭环


6月26日 关联了pull request:新增simt控制流最佳实践资料
6月29日 关闭了 issue
6月29日 issue状态由 待办的 改变为 已解决
6月29日 添加了label:resolved
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
通过稀疏矩阵向量乘(SpMV)算子,介绍Ascend C SIMT编程方式Warp Divergence对性能的影响及优化思路。
Origin(信息来源)
无
Benefit / Necessity (价值/作用)
指导用户了解warp divergence特性及优化思路
Design(设计方案)
使用CSR格式存储稀疏矩阵,样例分为2个case,通过对比2个case的性能介绍warp divergence及优化。
case1:一个线程处理一行数据,由于不同行的非零元素数量不同,同一Warp内线程的循环次数不一致,产生严重的Warp Divergence。
实现方式:每个线程根据全局ID确定处理的行号,独立遍历该行的所有非零元素并累加乘积。同一Warp内32个线程处理32行,各行非零元素个数不同,循环次数从1到64不等。
case2:一个Warp协作处理一行数据,减小Warp Divergence。
实现方式:一个Warp的32个线程协作处理同一行数据,各线程以
warpSize为步长访问该行的非零元素,循环次数基本相同。使用asc_reduce_add()对Warp内各线程的部分和进行规约,由线程0写出最终结果。