我正在实现 tbb 的并发哈希映射,以将它的性能与一组其他并发哈希表进行比较。
但是我从中得到的性能是可怕的,我简直不敢相信它与其他并发哈希表相比有那么慢
这是我的实现:
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 分钟的时间内完成了这个测试。
这是我的构建代码:
-w -DNDEBUG -g -msse2 -m32 -DINTEL -D_REENTRANT -lrt -pthread -fno-strict-aliasing -l cds -l tbb -lllalloc
更新:我已调整我的测试代码以将哈希表预填充为 1000,而不是 100,000。再次运行时,tbb 执行 92 op/sec,而另一个实现执行 89431 op/sec。(64线程环境)...只是说什么似乎不对....
附加信息:计算机是具有 6gb 内存和 6 个内核的 HP Z600 工作站。
注意交叉定位:http ://software.intel.com/en-us/forums/showthread.php?t=86119