具有隔离键/值的c++缓存友好散列映射

C++ cache friendly hash map with segregated key / values

本文关键字:映射 缓存 c++ 隔离 值的      更新时间:2023-10-16

在这个CppCon视频中,Mike Acton谈到了具有隔离键/值的散列映射:

https://www.youtube.com/watch?v=rX0ItVEVjHc

然而,他几乎没有解释他的意思。

我试图找到更多关于这个主题的信息,但我什么也没找到。

有没有人能给我解释一下他到底是什么意思?

我不记得哈希映射是他演讲的一部分,但肯定是关于缓存丢失的。

他说,至少是去年留在我脑海里的;我们在学校学到的理论知识(例如在二进制映射logN中搜索,哈希常数…)很好,但是我们和机器一起工作,我们不能忽视它们的工作方式。例如,他给出了关于延迟的例子。他举了不同的例子关于l1 l2缓存丢失。并显示只是改变数据的内存布局(他采取一些数据,他正在循环并将其携带到另一个结构体,这有助于CPU适合所有数据,他正在循环到64位寄存器),他可以使相同的代码运行速度快10倍。他对数据的引用也给我留下了深刻的印象"我们必须理解数据,不同的数据意味着不同的算法"

你还没有给出任何你觉得困惑的地方,所以我将从最一般的概述开始-如果你有更具体的问题,请提问。

我没有看过那个youtube视频,但是从其他提到他的工作中,我收集到他的观点是,有时将键打包在一个内存区域中,与映射到的值分开,性能会更高。这与存储std::pair<const key_type, mapped_type>值的std::unordered_map形成了鲜明对比——显然在内存中并排打包键和值。把键放在一起意味着更少的缓存丢失,特别是对于像count这样的操作,它甚至不需要查看值,但可能需要经过一个或三个冲突的键。