Open ktprime opened 2 years ago
非常感谢你的分享,我知道你的,也知道你是国人,前几天搜到过你的代码,开始还以为是外国人,后来在知乎上知道你是国人。
另外,我有点好奇,你是怎么知道我这个仓库的。。
https://github.com/martinus/map_benchmark 粗略的看了一下,还不错。
目前我的 jstd::flat16_hash_map 只是试验性初级版本,当前测试是不如 absl::flat_hash_map 和 ska::flat_hash_map,但这两个的性能也不是很好。
我准备重写以前的版本 jstd::Dictionary ,因为以前写得比较乱,且理念不够清晰,所以我重建了一个仓库,准备重构一下,等我完成了再加到这个 benchmark 里试一下。当前的 jstd::Dictionary 版本我自己会私下用这个 benchmark 试一下,不过旧的代码有些地方是不合格的,比如没有针对 <int, int> <size_t, size_t> 优化,这种情况可以不保存 hash_code,直接比较 key,这样也更省内存,指针也可以改为 index,甚至只保留 next 指针或索引,以前有这个想法,但没实现,等我重新完成吧。
没事经常搜索是否有新的hashmap 实现,我git上收集了10个左右第三方测试代码,有复杂和简单的。可以加入你的测试
最近测试我改进的swiss table- emilib2/3. 我的实现查询性能比官方慢20%,插入则快20%,一直分析对比查找哪里查询慢(我在乎查询性能),一个区别在于我使用线性探测,而swiss table使用二次探测,还有你之前说的swiss做了随机内存地址优化,这些难道是主要原因?
-------------------------------- function benchmark -----------------------------------------------
erase_50
85 emilib3 100.0%
95 emilib2 89.9%
97 absl_flat 87.5%
erase_reinsert
62 absl_flat 100.0%
88 emilib3 70.1%
100 emilib2 62.2%
find_erase_50
79 absl_flat 100.0%
94 emilib3 84.1%
99 emilib2 80.3%
find_hit_0
85 absl_flat 100.0%
92 emilib2 92.8%
98 emilib3 87.2%
find_hit_100
83 absl_flat 100.0%
94 emilib2 88.5%
97 emilib3 85.7%
find_hit_50
85 absl_flat 100.0%
93 emilib2 91.3%
97 emilib3 87.2%
find_hit_50_erase
91 absl_flat 100.0%
94 emilib3 97.2%
98 emilib2 92.9%
hash_iter
44 emilib2 100.0%
44 emilib3 99.0%
100 absl_flat 44.3%
insert_erase
71 emilib3 100.0%
86 absl_flat 82.9%
97 emilib2 73.0%
insert_find_erase
76 emilib3 100.0%
93 emilib2 81.6%
96 absl_flat 79.0%
insert_hit
93 emilib3 100.0%
96 emilib2 96.4%
97 absl_flat 96.0%
insert_l1_cache
33 emilib2 100.0%
35 emilib3 94.5%
100 absl_flat 33.5%
insert_l3_cache
86 emilib3 100.0%
89 emilib2 97.2%
97 absl_flat 89.0%
insert_no_reserve
94 emilib3 100.0%
95 absl_flat 99.7%
96 emilib2 97.9%
multi_small_ife
84 emilib3 100.0%
93 emilib2 90.8%
95 absl_flat 88.5%
======== hash top1 top2 top3 =======================
absl_flat 2.0 4.0 22
emilib2 0.0 22.0 6
emilib3 26.0 2.0 0
======== hash score weigh ==========================
absl_flat 85 92.4%
emilib2 88 95.0%
emilib3 93 100.0%
--------------------------------------------------------------------
最新测试结果出来了,可以看看 https://martin.ankerl.com/2022/08/27/hashmap-bench-01/
https://github.com/martinus/map_benchmark