a lock free dynamically resizable array
play

A Lock-Free Dynamically Resizable Array Damian Dechev 1 Peter - PowerPoint PPT Presentation

A Lock-Free Dynamically Resizable Array Damian Dechev 1 Peter Pirkelbauer 1 Bjarne Stroustrup 1 , 2 1 Department of Computer Science Texas A&M University 2 AT&T Research OPODIS, December 2006 Parasol Lab (Texas A&M) Lock-Free Dynamic


  1. A Lock-Free Dynamically Resizable Array Damian Dechev 1 Peter Pirkelbauer 1 Bjarne Stroustrup 1 , 2 1 Department of Computer Science Texas A&M University 2 AT&T Research OPODIS, December 2006 Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 1 / 18

  2. Overview A first design of a lock-free [Fra04] dynamically resizable array for C ++ Similar to STL vector [Str00]. Dynamic memory management Constant-time random access Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 2 / 18

  3. Motivation STL containers used with locks ◮ Performance problems (low parallelism) ◮ Safety problems (deadlock, livelock, priority inversion) Application Areas ◮ Autonomous Real-Time Systems ◮ Mission Data Systems at JPL ◮ Distributed Parallel Containers [AJR + 01] Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 3 / 18

  4. Design Principles Portability ◮ word-size compare and swap (CAS) Efficiency ◮ Minimal Overhead ◮ Wait-free [Fra04] random access read and write Linearizable operations [HW90] Lock-free memory allocation and management Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 4 / 18

  5. std::vector goes lockfree Complexity of operation: Operation modified Location resize all entries push_back size, tail pop_back size write one element read none size none resize : relocates all elements and alters the capacity ◮ Two-level array push_back : modifies size and an element ◮ Barnes-style announcement [Bar93] element-size: pointer semantics Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 5 / 18

  6. lockfree::vector - interface Semantics Assumes sequential semantics ◮ vec.back(); vec.pop_back(); pop_back : removes the last element ◮ returns and removes the last element Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 6 / 18

  7. lockfree::vector - push_back T:class T:class Vector Descriptor +desc +size: size_t = 2 +memory: T*[32] +writeop a b 0 1 ... 31 Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 7 / 18

  8. lockfree::vector - push_back (cont’d) T:class T:class Vector Descriptor +desc +size: size_t = 2 +memory: T*[32] +writeop a b 0 1 ... 31 Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 8 / 18

  9. lockfree::vector - push_back (cont’d) T:class T:class Vector Descriptor +desc +size: size_t = 2 +memory: T*[32] +writeop a b 0 T:class 1 Descriptor ... +size: size_t = 3 31 +writeop T:class WriteOp +pending: bool = true +value_old: T = NULL +pos: T* +value_new: T = c Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 9 / 18

  10. lockfree::vector - push_back (cont’d) T:class T:class Vector Descriptor +desc +size: size_t = 2 +memory: T*[32] +writeop a b 0 T:class 1 Descriptor ... +size: size_t = 3 31 +writeop T:class WriteOp +pending: bool = true +value_old: T = NULL +pos: T* +value_new: T = c Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 10 / 18

  11. lockfree::vector - push_back (cont’d) T:class Vector +desc +memory: T*[32] a b 0 T:class 1 c Descriptor ... +size: size_t = 3 31 +writeop T:class WriteOp +pending: bool = false +value_old: T = NULL +pos: T* +value_new: T = c Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 11 / 18

  12. lockfree::vector - Operations Operations Descriptor (Desc) Complexity push_back Vec × Elem → void Desc t → Desc t + 1 O ( 1 ) × cong . pop_back Vec → Elem Desc t → Desc t + 1 O ( 1 ) × cong . resize Vec × size _ t → Vec Desc t → Desc t O ( 1 ) read Vec × size _ t → Elem Desc t → Desc t O ( 1 ) write Vec × size _ t × Elem → Vec Desc t → Desc t O ( 1 ) size Vec → size _ t Desc t → Desc t O ( 1 ) Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 12 / 18

  13. lockfree::vector - Performance (Dual-Core) Intel 1.83GHz Dual Core ◮ 512MB shared RAM, 2MB shared L2 cache, MAC OS X Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 13 / 18

  14. lockfree::vector - Performance (4xDual-Core) AMD 2.2GHZ Quad Dual Core Opteron ◮ 4GB shared RAM, 1MB L2 cache (per die), MS Windows 2003 Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 14 / 18

  15. lockfree::vector - ABA Problem Common to all CAS-based systems General Solution: ◮ version counter Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 15 / 18

  16. lockfree::vector - ABA Problem (cont’d) Prevention: store unqiue elements Solution: ◮ Object Reclamation Scheme ⋆ Pass The Buck (Herlihy et al. [HLMM05]) ⋆ Hazard Pointers (Michael [Mic04]) ◮ Implement Value Semantics Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 16 / 18

  17. Conclusion and Future Work First practical and portable design of a lock-free vector Future Work ◮ Integrate effective ABA solution ◮ Refine lockfree::vector interfaces Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 17 / 18

  18. References I Ping An, Alin Jula, Silvius Rus, Steven Saunders, Tim Smith, Gabriel Tanase, Nathan Thomas, Nancy Amato, and Lawrence Rauchwerger. STAPL: A Standard Template Adaptive Parallel C++ Library. In LCPC ’01 , pages 193–208, Cumberland Falls, Kentucky, Aug 2001. Greg Barnes. A method for implementing lock-free shared-data structures. In SPAA ’93: Proceedings of the fifth annual ACM symposium on Parallel algorithms and architectures , pages 261–270, New York, NY, USA, 1993. ACM Press. Keir Fraser. Practical lock-freedom. Technical Report UCAM-CL-TR-579, University of Cambridge, Computer Laboratory, February 2004. Maurice Herlihy, Victor Luchangco, Paul Martin, and Mark Moir. Nonblocking memory management support for dynamic-sized data structures. ACM Trans. Comput. Syst. , 23(2):146–196, 2005. Maurice P . Herlihy and Jeannette M. Wing. Linearizability: a correctness condition for concurrent objects. ACM Trans. Program. Lang. Syst. , 12(3):463–492, 1990. Maged M. Michael. Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects. IEEE Trans. Parallel Distrib. Syst. , 15(6):491–504, 2004. Bjarne Stroustrup. The C++ Programming Language . Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2000. Parasol Lab (Texas A&M) Lock-Free Dynamic Array OPODIS, December 2006 18 / 18

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend