在这个CppCon视频中,Mike Acton谈到了带有隔离键/值的哈希映射:
https://www.youtube.com/watch?v=rX0ItVEVjHc
然而,他很少解释他的意思。
我试图找到有关该主题的更多信息,但我找到了任何内容。
有没有人可以向我解释他究竟意味着什么?
答案 0 :(得分:2)
我不记得他的演讲中的哈希映射部分,但它必须是关于缓存未命中。
他说,至少从前一年开始,我的想法;我们在学校学到的理论信息(例如在二进制地图中搜索logN,哈希常数......)很好,但我们正在使用机器,我们无法忽略它们的工作方式。例如,他给出了关于延迟的例子。他提供了关于l1,l2缓存未命中的不同示例。并且显示只是更改数据的内存布局(他将一些数据循环并将其传送到另一个结构,这有助于CPU将所有数据调整到64位寄存器)他可以使相同的代码运行速度提高10倍。我对他的数据引用印象深刻 "我们必须了解数据,不同的数据意味着不同的算法"
答案 1 :(得分:1)
您还没有意识到您发现的内容令人困惑,所以我将从最全面的概述开始 - 如果您有更具体的问题,请询问。
我还没看过你的视频,但是从其他提到的他的作品中我得出的结论是,它有时候会更加高效地将密钥保存在一个记忆区域中,与映射到值。这与存储std::unordered_map
值的std::pair<const key_type, mapped_type>
形成对比 - 显然在内存中并排键入值和值。将密钥放在一起意味着更少的缓存未命中,特别是对于count
之类的操作,它们甚至不需要查看值,但可能需要导航经过碰撞的密钥或三个。