【发布时间】:2016-04-09 12:00:18
【问题描述】:
我最近一直在尝试提高软件的性能,该软件花费 60% 的时间在 hashmap 中进行搜索(通过 valgrind profiler 确认)。
当前实现使用boost::unordered_map<long long, FrequencyKey>。我想将它与google::dense_hash_map<long long, FrequencyKey> 进行比较。我在代码中更改了一行
boost::unordered_map<long long, FrequencyKey> result;
到
google::dense_hash_map<long long, FrequencyKey> result;
result.set_empty_key(-1);
地图接口在两个地方被调用。在大循环之前result.clear()。在循环内result[key]。
使用boost::unordered_map<long long, FrequencyKey> 我的软件性能是118 req/s。通过上面列出的更改,我得到 0.5 req/s。
我显然做错了什么,但在浏览了文档和 github code 之后我自己无法弄清楚。
我正在使用 gcc/g++ 4.4.7 在 CentOS 6.5 上编译代码。
【问题讨论】:
-
在检查 hash-map 的性能时,第一步是检查发生的冲突。使用
std::unordered_map和类似接口,您可以遍历存储桶列表并计算项目数,每次存储桶包含 N > 1 个项目时,您就会有 (N-1) 次碰撞,这会减慢您的速度。除此之外...不幸的是,您的问题缺少代码:产生MCVE 或遭受无用的(对您而言)答案:x
标签: c++ performance boost hashmap