并行计算中的前缀和模式及其重要性
1. 哈希表与前缀和的引入
在并行计算里,哈希表的运用十分关键。以输入网格中的单元格 9 为例,它的操作流程如下:
- 首先,将单元格索引写入中级哈希表,接着在较粗哈希表的哈希桶中写入一个哨兵值。
- 读取单元格 9 时,先访问最粗级别的哈希表,找到哨兵值 -1,由此知晓需访问更细级别。
- 在中级哈希表找到三个单元格和另一个哨兵值,递归访问最细级别,找到四个值用于求和。
- 其他查询都在最粗哈希表中找到,对应值被分配到输出网格。
每个哈希表可以是完美哈希或紧凑哈希,该方法具有递归结构,在 GPU 上也能良好运行。
2. 前缀和(扫描)模式及其重要性
前缀和是使哈希排序在并行计算中生效的关键要素。它是不规则大小计算中的常见操作,很多此类计算需知道写入起始位置才能并行操作。比如每个处理器的粒子数量不同,为了能写入输出数组或访问其他处理器或线程的数据,每个处理器需了解本地索引与全局索引的关系。
前缀和可分为包含当前值的包含扫描和不包含的排除扫描。以下是标准的串行扫描操作代码:
1 y[0] = x[0];
2 for (int i=1; i<n; i++){
3 y[i] = y[i-1] + x[i];
4 }
扫描操作完成后,每个进程就能并行执行操作,因为它知道结果的存放位置。不过,扫描操作本身看似本质上是串行的,每次迭代都依赖前一次,但有有效的并行化方法,下面介绍几种算法。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



