首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TBB并发Hash映射

TBB并发Hash映射
EN

Stack Overflow用户
提问于 2011-09-17 03:20:04
回答 1查看 10.4K关注 0票数 9

我正在实现tbb的并发哈希表,以将其性能与其他一组并发哈希表进行比较。

然而,我从它得到的性能是可怕的,我只是不敢相信它与其他并发哈希表相比是那么慢

下面是我的实现:

代码语言:javascript
复制
class TBB: public TestDs{
    typedef tbb::concurrent_hash_map<int,int, HashCompare<int> > hash_t;
private:
        hash_t _ds;
public:
        TBB(const Configuration& config) : _ds(config.initial_count) {
        }

    bool containsKey(int key) {
        hash_t::accessor a;

        if(_ds.find(a,key)){
            return true;
        }
        else 
            return false;
    }

    int get(int key) {
        hash_t::accessor a;

        if(_ds.find(a,key)){
             return (int)(a->second);
        }
        else 
            return 0;
    }

    int put(int key, int value) {
        return _ds.insert( std::make_pair(key, value) );
    }

    int remove(int key) {
        return _ds.erase(key);
    }

    int size() {
        return _ds.size();
    }
    const char* name() {
        return "TBB";
    }
    void print() {}
    void shutdown() {}

};

有没有人看到我的实现有任何问题,或者知道为什么它可能运行缓慢的原因?在单线程环境中插入200,000个元素需要超过30分钟。为了正确理解这一点,几乎所有其他表都在不到5分钟的时间内执行了此测试。

下面是我的构建代码:

代码语言:javascript
复制
-w  -DNDEBUG -g -msse2 -m32  -DINTEL -D_REENTRANT -lrt -pthread -fno-strict-aliasing -l cds -l tbb -lllalloc 

更新:我已经调整了我的测试代码,将哈希表预先填充到1000,而不是100,000。当再次运行它时,tbb执行92op/sec,而另一个实现执行89431 op/sec。(64线程环境)...Just说了些不太对劲的话...

附加信息: Computer是一台HP Z600工作站,具有6 6gb内存和6个内核。

注意:交叉发布:http://software.intel.com/en-us/forums/showthread.php?t=86119

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-17 05:53:36

您的HashCompare::hash()返回sizeof(int),我猜这意味着每个条目都映射到同一个存储桶中。看起来你并没有把它当做一个哈希表,而更像是一个链表。

您可以尝试使用Boost的散列:

代码语言:javascript
复制
#include <boost/functional/hash.hpp>

template<typename K> 
struct HashCompare { 
    static size_t hash( const K& key )                  { return boost::hash_value(key); } 
    static bool   equal( const K& key1, const K& key2 ) { return ( key1 == key2 ); } 
}; 
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7449382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档