frozen
parallel-hashmap
frozen | parallel-hashmap | |
---|---|---|
10 | 31 | |
1,210 | 2,326 | |
- | - | |
6.1 | 7.8 | |
about 1 month ago | 29 days ago | |
C++ | C++ | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
frozen
-
Making a "constant mapping"
I found this extension that implements "frozen" versions of some C++ containers, but I was wondering if there is a good solution available in the standard library.
-
Static map - is it possible?
A library exists that can produce constexpr hash table based containers.
-
What C++ library do you wish existed but hasn’t been created yet?
I use the Frozen library for that. Since the conversions should be known at compile time you can make constexpr hash tables for lookups.
-
Command-line util for class implementation (My first try at a professional c++ application)
The constexpr dependency of note here is frozen.
-
Ambition is cute.
In C++, a drop-in replacement for your DSA can provide significant improvements over the standard library. Particularly the standard unordered_map class can be improved by 50% to 100% (e.g. https://github.com/greg7mdp/parallel-hashmap, or for static maps https://github.com/serge-sans-paille/frozen). Of course, recognize that creating a DS/A from scratch is an entire project, and you shouldn't roll your own for an independent codebase.
-
[Hobby] Bomberman fan 2D Animator needed
Technologies (for curious folks): C++17, SFML, Entt, Frozen, Protobuf, spdlog, GoogleTest, GoogleBenchmark, CMake and Dear ImGui for debug purpose.
-
May 2021 monthly "What are you working on?" thread
In the language, I added anonymous array literals. I did some cleanup in the compiler and updated to LLVM 12 from 10 (which was pretty trivial, surprisingly). I also added frozen, a C++ perfect-hashing library, as a dependency to speed up the lookup of keywords in my lexer. The library exploits C++’s constexpr features to generate a perfect hash at compile-time without any separate build step, which is great, and it also provides a drop-in replacement for std::unordered_map that uses the hash.
-
MSVC Backend Updates in Visual Studio 2019 version 16.10 Preview 2 | C++ Team Blog
This is where I plug Frozen :-] https://github.com/serge-sans-paille/frozen
-
What (relatively) easily to implement features would you like to see in c++23.
I’ve no idea how hard it is to implement, but return type polymorphism would be nice. Especially returning different things based on the constexpress of the result. And then add Frozen eqivalents of associative containers to the STL, so that, for example constexpr auto set = std::make_set(...) would be frozen::set, and auto set = std::make_set(...) would be std::set.
-
Compile-time INI config parsing and accessing with C++20
In which case, I believe the answer your question would be yes: the frozen map.
parallel-hashmap
-
The One Billion Row Challenge in CUDA: from 17 minutes to 17 seconds
Standard library maps/unordered_maps are themselves notoriously slow anyway. A sparse_hash_map from abseil or parallel-hashmaps[1] would be better.
[1] https://github.com/greg7mdp/parallel-hashmap
-
My own Concurrent Hash Map picks
Cool! Looking forward to you trying my phmap - and please let me know if you have any question.
-
Boost 1.81 will have boost::unordered_flat_map...
I do this as well in my phmap and gtl implementations. It makes the tables look worse in benchmarks like the above, but prevents really bad surprises occasionally.
-
Comprehensive C++ Hashmap Benchmarks 2022
Thanks a lot for the great benchmark, Martin. Glad you used different hash functions, because I do sacrifice some speed to make sure that the performance of my hash maps doesn't degrade drastically with poor hash functions. Happy to see that my phmap and gtl (the C++20 version) performed well.
-
Can C++ maps be as efficient as Python dictionaries ?
I use https://github.com/greg7mdp/parallel-hashmap when I need better performance of maps and sets.
-
How to build a Chess Engine, an interactive guide
Then they should really try https://github.com/greg7mdp/parallel-hashmap, the current state of the art.
-
boost::unordered map is a new king of data structures
Unordered hash map shootout CMAP = https://github.com/tylov/STC KMAP = https://github.com/attractivechaos/klib PMAP = https://github.com/greg7mdp/parallel-hashmap FMAP = https://github.com/skarupke/flat_hash_map RMAP = https://github.com/martinus/robin-hood-hashing HMAP = https://github.com/Tessil/hopscotch-map TMAP = https://github.com/Tessil/robin-map UMAP = std::unordered_map Usage: shootout [n-million=40 key-bits=25] Random keys are in range [0, 2^25). Seed = 1656617916: T1: Insert/update random keys: KMAP: time: 1.949, size: 15064129, buckets: 33554432, sum: 165525449561381 CMAP: time: 1.649, size: 15064129, buckets: 22145833, sum: 165525449561381 PMAP: time: 2.434, size: 15064129, buckets: 33554431, sum: 165525449561381 FMAP: time: 2.112, size: 15064129, buckets: 33554432, sum: 165525449561381 RMAP: time: 1.708, size: 15064129, buckets: 33554431, sum: 165525449561381 HMAP: time: 2.054, size: 15064129, buckets: 33554432, sum: 165525449561381 TMAP: time: 1.645, size: 15064129, buckets: 33554432, sum: 165525449561381 UMAP: time: 6.313, size: 15064129, buckets: 31160981, sum: 165525449561381 T2: Insert sequential keys, then remove them in same order: KMAP: time: 1.173, size: 0, buckets: 33554432, erased 20000000 CMAP: time: 1.651, size: 0, buckets: 33218751, erased 20000000 PMAP: time: 3.840, size: 0, buckets: 33554431, erased 20000000 FMAP: time: 1.722, size: 0, buckets: 33554432, erased 20000000 RMAP: time: 2.359, size: 0, buckets: 33554431, erased 20000000 HMAP: time: 0.849, size: 0, buckets: 33554432, erased 20000000 TMAP: time: 0.660, size: 0, buckets: 33554432, erased 20000000 UMAP: time: 2.138, size: 0, buckets: 31160981, erased 20000000 T3: Remove random keys: KMAP: time: 1.973, size: 0, buckets: 33554432, erased 23367671 CMAP: time: 2.020, size: 0, buckets: 33218751, erased 23367671 PMAP: time: 2.940, size: 0, buckets: 33554431, erased 23367671 FMAP: time: 1.147, size: 0, buckets: 33554432, erased 23367671 RMAP: time: 1.941, size: 0, buckets: 33554431, erased 23367671 HMAP: time: 1.135, size: 0, buckets: 33554432, erased 23367671 TMAP: time: 1.064, size: 0, buckets: 33554432, erased 23367671 UMAP: time: 5.632, size: 0, buckets: 31160981, erased 23367671 T4: Iterate random keys: KMAP: time: 0.748, size: 23367671, buckets: 33554432, repeats: 8, sum: 4465059465719680 CMAP: time: 0.627, size: 23367671, buckets: 33218751, repeats: 8, sum: 4465059465719680 PMAP: time: 0.680, size: 23367671, buckets: 33554431, repeats: 8, sum: 4465059465719680 FMAP: time: 0.735, size: 23367671, buckets: 33554432, repeats: 8, sum: 4465059465719680 RMAP: time: 0.464, size: 23367671, buckets: 33554431, repeats: 8, sum: 4465059465719680 HMAP: time: 0.719, size: 23367671, buckets: 33554432, repeats: 8, sum: 4465059465719680 TMAP: time: 0.662, size: 23367671, buckets: 33554432, repeats: 8, sum: 4465059465719680 UMAP: time: 6.168, size: 23367671, buckets: 31160981, repeats: 8, sum: 4465059465719680 T5: Lookup random keys: KMAP: time: 0.943, size: 23367671, buckets: 33554432, lookups: 34235332, found: 29040438 CMAP: time: 0.863, size: 23367671, buckets: 33218751, lookups: 34235332, found: 29040438 PMAP: time: 1.635, size: 23367671, buckets: 33554431, lookups: 34235332, found: 29040438 FMAP: time: 0.969, size: 23367671, buckets: 33554432, lookups: 34235332, found: 29040438 RMAP: time: 1.705, size: 23367671, buckets: 33554431, lookups: 34235332, found: 29040438 HMAP: time: 0.712, size: 23367671, buckets: 33554432, lookups: 34235332, found: 29040438 TMAP: time: 0.584, size: 23367671, buckets: 33554432, lookups: 34235332, found: 29040438 UMAP: time: 1.974, size: 23367671, buckets: 31160981, lookups: 34235332, found: 29040438
-
Is A* just always slow?
std::unordered_map is notorious for being slow. Use a better implementation (I like the flat naps from here, which are the same as abseil’s). The question that needs to be asked too is if you need to use a map.
-
New Boost.Unordered containers have BIG improvements!
A comparison against phmap would also be nice.
-
How to implement static typing in a C++ bytecode VM?
std::unordered_map is perfectly fine. You can do better with external libraries, like parallel hashmap, but these tend to be drop-in replacements
What are some alternatives?
gram_grep - Search text using a grammar, lexer, or straight regex. Chain searches for greater refinement.
Folly - An open-source C++ library developed and used at Facebook.
STL - MSVC's implementation of the C++ Standard Library.
robin-hood-hashing - Fast & memory efficient hashtable based on robin hood hashing for C++11/14/17/20
bluebird - A work-in-progess programming language modeled after Ada and C++
libcuckoo - A high-performance, concurrent hash table
mpv - 🎥 Command line video player
rust-phf - Compile time static maps for Rust
c3c - Compiler for the C3 language
flat_hash_map - A very fast hashtable
read - A small header-only library to make input in C++ sensible
tracy - Frame profiler