Fast, Dynamically-Sized Concurrent Hash Table
We present a new design and a C++ implementation of a high-performance, cache-efficient hash table suitable for use in implementation of parallel programs in shared memory. Among the main design criteria were the ability to efficiently use variable-length keys, dynamic table resizing to accommodate data sets of unpredictable size and fully concurrent read-write access.
We show that the design is correct with respect to data races, both through a high-level argument, as well as by using a model checker to prove crucial safety properties of the actual implementation. Finally, we provide a number of benchmarks showing the performance characteristics of the C++ implementation, in comparison with both sequential-access and concurrent-access designs.
KeywordsModel Checker Hash Table Cache Line Data Race Memory Overhead
- 1.Intel Corporation, Threading Building Blocks (2014–06-01) (2014). http://www.threadingbuildingblocks.org
- 3.Laarman, A.W., van de Pol, J.C., Weber, M.: Boosting multi-core reachability performance with shared hash tables. In: Sharygina, N., Bloem, R. (eds.) FMCAD 2010. IEEE Computer Society, Los Alamitos (2010)Google Scholar
- 4.Purcell, C., Harris, T.: Non-blocking hashtables with open addressing. In: Proceedings of the 19th International Symposium on Distributed Computing, DISC 2005, September 2005, a longer version appears as Technical report UCAM-CL-TR-639. http://research.microsoft.com/apps/pubs/default.aspx?id=67422
- 6.Wijs, A., Bošnački, D.: Many-core on-the-fly model checking of safety properties using GPUs. Int. J. Softw. Tools Technol. Transf. 1–17 (2015) (to appear)Google Scholar
- 7.Jenkins, R.J.: A hash function for hash table lookup (2006). http://burtleburtle.net/bob/hash/doobs.html
- 8.Jenkins, R.J.: SpookyHash: a 128-bit Noncryptographic Hash (2012). http://burtleburtle.net/bob/hash/spooky.html
- 9.Pike, G., Alakuijala, J.: Introducing CityHash (2011)Google Scholar
- 11.Ročkai, P., Šill, V., Barnat, J.: Techniques for memory-efficient model checking of C and C++ code. In: Software Engineering and Formal Methods (2015, submitted)Google Scholar