3 ms·
I think that the work looks quite interesting but it seriously lacks some important points to be covered. Benchmarks [1] only cover the random insert workload.
by menaerus 2y ago
I think that the work looks quite interesting but it seriously lacks some important points to be covered.
Benchmarks [1] only cover the random insert workload. Why doesn't it include other types of workloads? Inserting into the hashmap is not the only interesting workload that there is. How about mixed workloads, read-only workloads, workloads that fit in LLC and ones that do not etc
Benchmarks only contrast the implementation against std::unordered_map. Why not against Abseil's flat_hash_map as well because that's a library that this work, according to information on the page, is based on?
Benchmarks only display 8-threads concurrency scenario and again only in random insert workload. This isn't a particularly high concurrency figure. I could make a "for-concurrency" wrapper around std::unordered_map, or Abseil's flat_hash_map, with RW-lock and modulo arithmetic to minimize the contention in probably no more than 100 lines of code. And it would scale to as many cores as there are on the machine.
[1] https://greg7mdp.github.io/parallel-hashmap/ https://greg7mdp.github.io/parallel-hashmap/
- bee_rider 2y agoFor thread-level parallelism and reading, I guess the thing to do would be to do multiple reads in parallel, right? So there isn’t much for the implementation to do. Mixed could be interesting.
- rurban 2y agoNo, concurrent writes are the problem. That's why it spreads writability into buckets, so that they are mostly independent.
- menaerus 2y agoConcurrent reads are also an issue if you hold an exclusive lock.
- bee_rider 2y agoWhat’s the issue here? (Why would a lock be needed for reading). Or is it a read in parallel with a write (seems very tricky! But people are very clever).
- menaerus 2y agoBecause under general case you cannot read from concurrent hashmap unless you make sure that write is not taking place. And to do that we need locks, either exclusive (mutex) or more fine grained locks such as rw-lock.
- bee_rider 2y agoThat’s a different problem. I was responding to a comment asking about benchmarks for concurrent reads. In general we have CPU systems with hundreds of cores nowadays, so I think it’s hard to say something is “the problem” as far as parallelism goes. For example, I have a problem where I got a 100x speed up in the “computationally difficult” part of the problem… suddenly all the stuff that looked too cheap to bother with became more noticeable!
- menaerus 2y agoYes, I mean if you have a hashmap for read-only workload where insertion is not going to take place after initial build-up then there isn't much to do.