Proceedings

Best-First Heuristic Search for Multi-Core Machines

Download BibTeX Cite

Proceedings of the Twenty-First International Joint Conference on Artificial Intelligence. Pages 449-454.

© 2009 International Joint Conferences on Artificial Intelligence

Abstract

To harness modern multi-core processors, it is imperative to develop parallel versions of fundamental algorithms. In this paper, we present a general approach to best-first heuristic search in a shared-memory setting. Each thread attempts to expand the most promising open nodes. By using abstraction to partition the state space, we detect duplicate states without requiring frequent locking. We allow speculative expansions when necessary to keep threads busy. We identify and fix potential livelock conditions in our approach, verifying its correctness using temporal logic. In an empirical comparison on STRIPS planning, grid pathfinding, and sliding tile puzzle problems using an 8-core machine, we show that A* implemented in our framework yields faster search than improved versions of previous parallel search proposals. Our approach extends easily to other best-first searches, such as Anytime weighted A*.Ethan Burns, Seth Lemons, Rong Zhou, Wheeler Ruml

  1. [Edelkamp and Schrödl, 2000] Stefan Edelkamp and Stefan Schrödl. Localizing A*. In AAAI-2000, pages 885-890.
  2. [Evans, 2006] Jason Evans. A scalable concurrent malloc(3) imple- mentation for FreeBSD. In Proceedings of BSDCan 2006.
  3. [Evett et al., 1995] Matthew Evett, Ambuj Mahanti, Dana Nau, James Hendler, and James Hendler. PRA*: Massively parallel heuristic search. J. Par. and Dist. Computing, 25:133-143, 1995.
  4. [Felner et al., 2003] Ariel Felner, Sarit Kraus, and Richard E. Korf. KBFS: K best-first search. Annals of Math. and A. I., 39:2003.
  5. [Hansen and Zhou, 2007] Eric A. Hansen and Rong Zhou. Anytime heuristic search. JAIR, 28:267-297, 2007.
  6. [Hart et al., 1968] Peter E. Hart, Nils J. Nilsson, and Bertram Raphael. A formal basis for the heuristic determination of min- imum cost paths. IEEE Transactions on Systems Science and Cybernetics, SSC-4(2):100-107, July 1968.
  7. [Haslum and Geffner, 2000] Patrik Haslum and Hctor Geffner. Ad- missible heuristics for optimal planning. In ICAPS, pages 140- 149, 2000.
  8. [Lamport, 2002] Leslie Lamport. Specifying Systems: The TLA+ Language and Tools for Hardware and Software Engineers. 2002.
  9. [Powley et al., 1990] Curt Powley, Chris Ferguson, and Richard E. Korf. Parallel heuristic search: two approaches. In V. Kumar, P. S. Gopalakrishnan, and L. N. Kanal, eds, Parallel algorithms for machine intelligence and vision, pp 42-65. Springer, 1990.
  10. [Yu et al., 1999] Yuan Yu, Panagiotis Manolios, and Leslie Lam- port. Model checking TLA+ specifications. In Correct Hardware Design and Verification Methods, pp 54-66. Springer, 1999.
  11. [Zhou and Hansen, 2004] Rong Zhou and Eric A. Hansen. Struc- tured duplicate detection in external-memory graph search. In Proc. of AAAI-2004.
  12. [Zhou and Hansen, 2006a] R. Zhou and E. Hansen. Domain- independent structured duplicate detection. In Proc. of AAAI- 2006, pages 1082-1087, 2006.
  13. [Zhou and Hansen, 2006b] Rong Zhou and Eric A. Hansen. Breadth-first heuristic search. AIJ, 170(4-5):385 -408, 2006.
  14. [Zhou and Hansen, 2007] Rong Zhou and Eric A. Hansen. Parallel structured duplicate detection. In Proc. of AAAI-2007.
  15. A Pseudo-code for Safe PBNF search(initial node) 1. insert initial node into open
  16. for each p ∈ processors, threadsearch() 3. while threads are still running, wait()
  17. return incumbent threadsearch() 1. b ← NULL 2. while not done 3. b ← nextnblock(b) 4. exp ← 0
  18. while ¬shouldswitch(b, exp)
  19. else if n is not a duplicate then 12. children ← expand(n) 13. for each child ∈ children 14. insert child into open of appropriate nblock 15. exp ← exp + 1 shouldswitch(b, exp)
  20. if best(freelist) < b or best(interferenceScope())
  21. if best(interferenceScope(b)) < best(freelist)
  22. sethot(best(interferenceScope(b))
  23. for each b ∈ interferenceScope(b)
  24. if hot(b ) then setcold(b ) 11. unlock 12. return false sethot(b) 1. lock 2. if ¬hot(b) and σ(b) > 0
  25. and ¬∃i ∈ interferenceScope(b) : i < b ∧ hot(i) then
  26. hot(b) ← true 5. for each n ∈ interferenceScope(b) 6. if hot(n ) then setcold(n ) 7. if σ(n ) = 0 and σ h (n ) = 0
  27. and n is not empty then 9. freelist ← freelist \ {n }
  28. σ h (n ) ← σ h (n ) + 1
  29. unlock setcold(b)
  30. for each n ∈ interferenceScope(b) 3. σ h (n ) ← σ h (n ) -1 4. if σ(n ) = 0 and σ h (n ) = 0 and n is not empty then 5. if hot(n ) then
  31. setcold(n ) 7. freelist ← freelist ∪ {n }
  32. for each b ∈ interferenceScope(b) 2. σ(b ) ← σ(b ) -1 3. if σ(b ) = 0 and σ h (b ) = 0 and b is not empty then 4. if hot(b ) then
  33. freelist ← freelist ∪ {b }
  34. wake all sleeping threads nextnblock(b)
  35. if b = NULL then
  36. bestScope ← best(interferenceScope(b))
  37. if b < bestScope and b < best(freelist) then 6. unlock 7. return b
  38. if (∀l ∈ nblocks : σ(l) = 0) and freelist is empty then 10. done ← true 11. wake all sleeping threads 12. while freelist is empty and ¬done, sleep 13. if done then n ← NULL 14. else 15. n ← best(freelist)
  39. for each b ∈ interferenceScope(n) 17. σ(b ) ← σ(b ) + 1 18. unlock 19. return n

References were extracted automatically from the PDF and may contain errors.

Welcome Future Conferences AI Journal Division IJCAI Proceedings About IJCAI IJCAI Awards