@MISC{Perez_speculativeparallelism, author = {Ruben Perez and Gregory Malecha}, title = {Speculative Parallelism in Cilk++}, year = {} }
Share
OpenURL
Abstract
Backtracking search algorithms are useful in many domains, from SAT solvers to artificial intelligences for playing games such as chess. Searching disjoint branches can, inherently be done in parallel though it can considerably increase the amount of work that the algorithm does. Such parallelism is speculative, once a solution is found additional work is irrelevant, but the individual branches each have their own potential to find the solution. In sequential algorithms, heuristics are used to prune regions of the search space. In parallel implementations this pruning often corresponds to aborting existing computations that can be shown to be pursuing dead-ends. While some systems provide native support for aborting work, Intel’s current parallel extensions to C++, implemented in the cilk++ compiler [Lei09], do not. In this work, we show several methods for implementing abort as a library in the cilk++ system. We compare our implementations to each other and quantify the benefit of abort in a real game AI. We derive a mostly mechanical translation to convert programs with native abort into cilk++ using continuation passing style.