并行计算中的前缀和模式及其重要性
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 }
扫描操作完成后,每个进程可以自由并行执行操作,因为进程知道将结果放置的位置。不过,扫描操作本身似乎本质上是串行的,每次迭代都依赖于前一次。但有有效的并行化方法,下面将介绍
超级会员免费看
订阅专栏 解锁全文
1267

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



