Google SwissTable 原理:SIMD 加速哈希表
Google SwissTable 原理:控制字节 + SSE2 16 路并行探测如何取代 std::unordered_map,从位级设计到 Abseil flat_hash_map 的工程实现。
发布来自土法炼钢兴趣小组的知识、笔记、进展和应用。主题包括数据结构和算法、编程语言、网络安全、密码学等。
共 4 篇文章 · 返回首页
Google SwissTable 原理:控制字节 + SSE2 16 路并行探测如何取代 std::unordered_map,从位级设计到 Abseil flat_hash_map 的工程实现。
从 Redis 7.4/8.x 的 dict 源码拆解链式哈希、双表渐进 rehash、rehashidx 步进与 DICT_RESIZE_AVOID 在 fork 期的行为,并对照站内哈希表内部文章说明与教科书一次性扩容的差异。
传统哈希表的 O(1) 查找是'期望'——运气不好时,线性探测可能走 50 步。Cuckoo Hashing 给出了'确定性' O(1):最多查 2 次(或 d 次)就知道元素在不在。这个保证对网络设备中的精确匹配至关重要。
Go 的 map 用的是什么哈希表?Rust 的 HashMap 呢?Python 的 dict 呢?它们分别选了三条完全不同的路线——链式哈希、Swiss Table、开放寻址。选择背后的 trade-off 远比你想象的深。本文从冲突解决到 SIMD 加速,再到当前环境可复现的 benchmark,用 C 代码和真实数据讲透哈希表的内部实现。