Multi-core scalable and efficient pathfinding with Parallel Ripple Search
Sandy Brand, Rafael Bidarra
In Computer Animation and Virtual Worlds, 23(2), 2012.
Abstract: Game developers are often faced with very demanding requirements on huge numbers of agents moving naturally through increasingly large and detailed virtual worlds. With the advent of multi-core architectures, new approaches to accelerate expensive pathfinding operations are worth being investigated. Traditional single-processor pathfinding strategies, such as A* and its derivatives, have been long praised for their flexibility. We implemented several parallel versions of such algorithms to analyze their intrinsic behavior, concluding that they have a large overhead, yield far from optimal paths, do not scale up to many cores or are cache unfriendly. In this article, we propose Parallel Ripple Search, a novel parallel pathfinding algorithm that largely solves these limitations. It utilizes a high-level graph to assign local search areas to CPU cores at "equidistant" intervals. These cores then use A* flooding behavior to expand towards each other, yielding good "guesstimate points" at border touch on. The process does not rely on expensive parallel programming synchronization locks but instead relies on the opportunistic use of node collisions among cooperating cores, exploiting the multi-core's shared memory architecture. As a result, all cores effectively run at full speed until enough way-points are found. We show that this approach is a fast, practical and scalable solution and that it flexibly handles dynamic obstacles in a natural way.
Keyword(s): Parallel Ripple Search, pathfinding, parallel algorithms, multi-core architectures
@article{Brand:2012:MSA,
author = {Sandy Brand and Rafael Bidarra},
title = {Multi-core scalable and efficient pathfinding with Parallel Ripple Search},
journal = {Computer Animation and Virtual Worlds},
volume = {23},
number = {2},
pages = {73--85},
year = {2012},
}
Return to the search page.
graphbib: Powered by "bibsql" and "SQLite3."