具有隔离键/值的c++缓存友好散列映射
C++ cache friendly hash map with segregated key / values
在这个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
这样的操作,它甚至不需要查看值,但可能需要经过一个或三个冲突的键。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- QT通过C++添加映射QML项目
- 在c++中访问int到类对象的映射时出错
- 在C++中搜索嵌套多映射值
- C++ 映射缓存找不到条目
- 使用静态映射在C++中缓存数据的推荐方法是什么
- 缓存 PID 到端口映射窗口的安全方法
- 映射查找函数调用 Vs 将查找缓存为静态变量
- 具有隔离键/值的c++缓存友好散列映射