排列扫描(Permuted Scan)

举报
xenia 发表于 2019/10/11 17:19:00 2019/10/11
【摘要】 Brent-Kung的扫描算法在GPGPU中实现时会存在Bank Conflict传统上通过Padding的方式来解决Bank Conflict的问题 [Mark Harris, Shubhabrata Sengupta, John D. Owens. "Parallel Prefix Sum (Scan) with CUDA." GPU Gems 3 Chapter 39 2007](ht...

Brent-Kung的扫描算法在GPGPU中实现时会存在Bank Conflict

传统上通过Padding的方式来解决Bank Conflict的问题 [Mark Harris, Shubhabrata Sengupta, John D. Owens. "Parallel Prefix Sum (Scan) with CUDA." GPU Gems 3 Chapter 39 2007](https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch39.html "Mark Harris, Shubhabrata Sengupta, John D. Owens. "Parallel Prefix Sum (Scan) with CUDA." GPU Gems 3 Chapter 39 2007")

Merrill和Grimshaw提出了一种新的方法——排列扫描(Permuted Scan)——可以在不需要Padding的情况下解决Bank Conflict的问题 [Duane Merrill, Andrew Grimshaw. "Parallel Scan for Stream Architectures." University of Virginia, Department of Computer Science, Technical Report 2009.](https://libraopen.lib.virginia.edu/public_view/kd17cs85f "Duane Merrill, Andrew Grimshaw. "Parallel Scan for Stream Architectures." University of Virginia, Department of Computer Science, Technical Report 2009.")

但是,Merrill和Grimshaw并没有找到一种时间复杂度为O(1)的计算内存索引到元素Rank的映射关系的方法 "Unfortunately we are unaware of an O(1) function for performing such a mapping of element ranks to memory indices."——论文原文

我发现可以用倒位序(出自FFT)计算该映射关系 //特别声明:该方法由本人原创,在法律允许的范围内保留一切权利(包括但不限于著作权) HLSL MemoryIndex = reversebits(ElementRank)>>23 //23=(32-log(2,512)) //我们假定单个线程组内有256个线程 //512为局部共享内存维度

GLSL MemoryIndex = bitfieldReverse(ElementRank)>>23 //23=(32-log(2,512))

本文转载自异步社区

原文链接:https://www.epubit.com/articleDetails?id=N6c857ad6-35a4-483c-85d1-2854bf24630b

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。