2011年5月存档

按组合进行并行树扫描

我最近几篇博客文章的主题是扫描,尤其是平行扫描。可组合并行扫描,我在一个非常普通的环境中处理并行扫描。有五个简单的构建块可以构建各种各样的数据结构,即常量(无值)、恒等式(一个值)、总和、乘积和组合。这五个“函子组合子”中的每一个的后定义并行前缀和后缀扫描,根据对每个组件函子的相同扫描操作进行。由此基本集构建的每个函子都有一个并行扫描。更传统地定义的函数可以通过将其转换为基本集的组合、扫描,然后返回到原始函数来实现扫描。此外,我希望此实现可以自动生成,类似于GHC的派生函数扩展。

现在我想展示两个以二叉树为单位的并行扫描组合示例,即前几篇文章中使用的完美二叉叶树的自顶向下和自下而上变体。(在之前的帖子中,我使用了“右折叠”和“左折叠”这两个术语,而不是“自上而下”和“自下而上”。)由此产生的两种算法表达方式几乎相同,但在执行的工作中有显著差异。自上而下的版本可以Θ(n个日志n个)工作,而自下而上版本仅Θ(n个)因此,后一种算法是高效的,而前一种算法则不是。此外,使用非常简单的优化,自下而上的树算法与Guy Blelloch的数组并行前缀扫描密切相关,如下所示编程并行算法。我对这个结果很满意,因为我一直想知道如何思考盖伊的算法。

编辑:

  • 2011年5月31日:新增扫描适用的实例T2段T4类.

继续阅读“按组成进行并行树扫描”»