论文标题
DEPA:简单,高效且实用的订单维护
DePa: Simple, Provably Efficient, and Practical Order Maintenance for Task Parallelism
论文作者
论文摘要
并行计算中的许多问题需要并行程序中的依赖性结构的推理。例如,动态竞赛检测取决于对顺序和并行任务之间依赖关系的有效“即时”确定(例如,快速确定是否并行出现两个内存访问)。已经提出了解决此“并行订单维护”问题的几种解决方案,但它们都有几个缺点,包括缺乏可证明的界限,高渐近或实用的开销,以及对并行执行的支持不佳。 在本文中,我们为并行订单维护问题提供了一种解决方案,该问题被证明是高效,完全平行且实用的。我们的算法(称为DEPA)表示一个计算作为图形,并用两个组件编码图表中的顶点:dag-depth和fork-path。在此编码中,每个查询都需要$ o(f/ω)$工作,其中$ f $是相比的两个顶点的最小动态嵌套深度,而$ω$是单词大小。在常见情况下(例如$ f $很小,少于100),每个查询仅需要一个内存查找和少量恒定数量的位指令。此外,叉子和连接的图形维护只需要持续不断的工作,从而对整体工作和跨度没有渐近影响。因此,DEPA是工作效率且完全平行的。
A number of problems in parallel computing require reasoning about the dependency structure in parallel programs. For example, dynamic race detection relies on efficient "on-the-fly" determination of dependencies between sequential and parallel tasks (e.g. to quickly determine whether or not two memory accesses occur in parallel). Several solutions to this "parallel order maintenance" problem has been proposed, but they all have several drawbacks, including lack of provable bounds, high asymptotic or practical overheads, and poor support for parallel execution. In this paper, we present a solution to the parallel order maintenance problem that is provably efficient, fully parallel, and practical. Our algorithm -- called DePa -- represents a computation as a graph and encodes vertices in the graph with two components: a dag-depth and a fork-path. In this encoding, each query requires $O(f/ω)$ work, where $f$ is the minimum dynamic nesting depth of the two vertices compared, and $ω$ is the word-size. In the common case (where $f$ is small, e.g., less than 100), each query requires only a single memory lookup and a small constant number of bitwise instructions. Furthermore, graph maintenance at forks and joins requires only constant work, resulting in no asymptotic impact on overall work and span. DePa is therefore work-efficient and fully parallel.