emhash vs 竞品:实测证明比Swiss Table快15%的内存高效方案
emhash vs 竞品:实测证明比Swiss Table快15%的内存高效方案
【免费下载链接】emhashFast and memory efficient c++ flat hash table/map/set项目地址: https://gitcode.com/gh_mirrors/em/emhash
emhash是一款Fast and memory efficient c++ flat hash table/map/set,它在性能和内存效率方面展现出显著优势,尤其在与Swiss Table等竞品的对比中表现突出。
核心性能优势:快15%的实测数据
在不同数据类型的测试场景下,emhash的性能表现都令人印象深刻。
整数键值对性能对比
从这张针对int64_t_int64_t类型数据在Apple M1处理器上的测试图表可以清晰看到,emhash在多项操作中都领先于包括Swiss Table在内的其他竞品。在insert_no_reserve操作中,emhash8以88的成绩优于absl_flat的70和martin_flat的62;在find_hit_all操作里,emhash7的91也超过了absl_flat的74和martin_flat的79。综合各项指标,emhash整体性能比Swiss Table快15%左右。
整数与字符串混合键值对性能
在KunPeng920处理器上进行的int_string类型数据测试中,emhash同样表现出色。insert_high_load操作中,emhash7以100的成绩大幅领先其他竞品;find_hit_all操作里,emhash7和emhash8分别以100和97的成绩位居前列。这进一步验证了emhash在处理不同类型数据时的高效性。
内存高效的设计之道
emhash之所以能在性能上超越竞品,得益于其独特的设计理念和实现方式。
多样化的碰撞解决策略
emhash的不同版本采用了各异的碰撞解决策略,以适应不同的使用场景。emhash5采用三向混合探测:线性探测→二次探测→双向搜索;emhash6和emhash7使用带独立位掩码的链接桶,emhash7还在删除时进行链修复;emhash8则采用分离索引+密集对数组和链接桶链。这些策略使得emhash在各种负载情况下都能保持良好性能。
优化的内存布局
emhash5/6/7采用单内联数组与嵌入式桶链接的内存布局,emhash8则使用分离索引+密集对数组的布局,就像std::vector一样。这种设计使得emhash8的迭代速度极快,只需顺序扫描_pairs数组,这也是其性能优势的一个重要原因。
高负载因子下的卓越表现
emhash的一个显著特点是在极高的负载因子下仍能保持出色性能。即使在0.999的极端负载因子下,emhash依然稳定运行。
emhash7::HashMap<int64_t, int> myhash(1 << 20, 0.999f); // 插入1M+元素而无需重哈希 // 插入/删除性能稳定无下降相比之下,其他哈希映射(如absl、phmap、ska、tsl、robin_hood)无法在0.999的负载因子下运行,它们要么将最大负载因子限制在约0.875,要么会遭遇灾难性的集群问题。
字符串键值对性能展示
在Intel Xeon Gold 6271 CPU上的string_string类型数据测试中,emhash8在多项操作中表现优异。find_hit_50操作中,emhash8以99的成绩领先absl_flat的69和martin_dense的91;erase_50_find操作里,emhash8也以99的成绩位居第一。这表明emhash在处理复杂键值时同样高效。
如何开始使用emhash
要开始使用emhash,你可以通过以下命令克隆仓库:
git clone https://gitcode.com/gh_mirrors/em/emhash
emhash提供了多种实现版本,你可以根据具体需求选择合适的版本。例如,处理复杂或大型键/值(如std::string、自定义结构体)时,emhash8是不错的选择;插入密集型工作负载或需要高负载因子时,emhash7更合适;对于整数键的快速搜索和删除,emhash5/6表现出色;而对于应避免堆分配的小型映射,可以使用带EMH_SMALL_SIZE的emhash5。
emhash的设计充分考虑了性能和内存效率,通过实测数据证明了其比Swiss Table快15%的优势,是C++开发中处理哈希表需求的理想选择。
【免费下载链接】emhashFast and memory efficient c++ flat hash table/map/set项目地址: https://gitcode.com/gh_mirrors/em/emhash
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
