Git Product home page Git Product logo

Comments (6)

ktprime avatar ktprime commented on May 29, 2024

a good hash map, it's quite same as one of my emhash8(https://github.com/ktprime/emhash/blob/master/hash_table8.hpp) design
I have added it into my bench (https://github.com/ktprime/emhash/blob/master/bench/ebench.cpp).

from dense_hash_map.

ktprime avatar ktprime commented on May 29, 2024

if index moves from node to bucket, your hashmap will be more efficient(memory and performance)

from dense_hash_map.

Jiwan avatar Jiwan commented on May 29, 2024

Hi @ktprime would you mind expanding a bit more on your idea of moving the index?

from dense_hash_map.

ktprime avatar ktprime commented on May 29, 2024

I use the following bucket vector as index(metadata)

    struct Bucket
    {
        size_type next;   //next collision index in current bucket vector. 
        size_type index; //index in node vector
    };

.....
Bucket bucket_[];
NodeType node[]; //std::pair<key,value> NodeType;

your current implemention is simple(use integer index/vector to replace chained map's pointer/list) and also efficient,
but it's slow for finding miss because of serach/comparation in node vector may produces more cache miss than in bucket vector(small dataset).

from dense_hash_map.

ktprime avatar ktprime commented on May 29, 2024

huangyuanbing1@ubuntu:~/map_benchmark/build ```
./bench_jiwan_dense_hash_map__robin_hood_hash IterateIntegers

"jg::dense_hash_map"; "robin_hood::hash"; "IterateIntegers"; "01"; "iterate while adding"; 20833333325000; 0.63688; 2.08984
"jg::dense_hash_map"; "robin_hood::hash"; "IterateIntegers"; "02"; "iterate while removing"; 62498750000000; 0.636369; 2.08984

huangyuanbing1@ubuntu:~/map_benchmark/build
./bench_ktprime_hash_table8__robin_hood_hash IterateIntegers

"emhash8::HashMap"; "robin_hood::hash"; "IterateIntegers"; "01"; "iterate while adding"; 20833333325000; 0.566379; 1.56641
"emhash8::HashMap"; "robin_hood::hash"; "IterateIntegers"; "02"; "iterate while removing"; 62498750000000; 0.558062; 1.56641

at present the two hashmap(dense hash map) is the fastest iteration implemention compared with other's flat hash map in martinus's benchmark code.

from dense_hash_map.

Jiwan avatar Jiwan commented on May 29, 2024

Right. I am getting what you mean now. By moving the next index into the bucket's structure, you are removing some unnecessary gaps in between the nodes.

I believe that a colleague of mine tried that strategy on our dense_hash_map but couldn't see any significant improvements and we abandoned that idea. But it seems that you have reproducible results which are really interesting. Thanks for pointing it out 👍

I will think of the trade-offs of doing it this way (if there is any of course) and could attempt to improve that hash_map.

from dense_hash_map.

Related Issues (2)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.