需要将数组保留在L1缓存中的建议
Need suggestion to keep arrays in L1 cache
我有以下问题,您能帮我解决一下吗?
我有以下整数数组(大小为1024),我试图找到所有数组中存在的公共元素(以及找到公共元素的位置):
Array1: 15, 89, 100, 167, 202, ...
Array2: 16, 89, 109, 178,179, 202, ...
Array3: 15, 89, 100, 178, 189, 202, ...
Array4: 17, 89, 109, 167, 178, 202, ...
Array5: 7, 89, 100, 178, 179, 180, 202, ...
现在常见的元素以及它们在各自数组中的位置是:
Array1: 89(2), 202(5), ...
Array2: 89(2), 202(6), ...
Array3: 89(2), 202(6), ...
Array4: 89(2), 202(6), ...
Array5: 89(2), 202(7), ...
当数组相交时,是否有可能将这些数组保留在L1缓存中?我写了一个简单的c++代码,将公共元素及其作为std::对的位置推入std::vector。这个代码是否正确,以保持L1缓存中的元素,或者我应该修改我的代码…
只要处理器需要,或者处理器需要将其他数据放入缓存,您的数据将留在缓存中。
我最好的建议是把数据放在一起,并一起执行所有的数据访问。例如:输入所有数据,处理所有数据,输出所有数据。更糟糕的情况是:输入一些数据,处理一些数据,输出一些数据,重复所有数据。
您可能希望使用数组而不是向量,因为向量动态分配内存,并且可能在不同的时间分配。如果数组的大小不变,则使用数组。
编辑1:
下面是一些描述缓存优化的链接:
CPU缓存优化
有效缓存内存使用率
第一个链接有很好的图表解释缓存是如何工作的。
你还应该搜索"数据缓存优化"。这里有更多的链接:
将数组保存在L1缓存
底层C语言优化
数据本地化
EETimes -优化缓存性能
相关文章:
- cmake更新缓存的变量
- 试图对缓存进行跨步测试,但程序并没有结束
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 通过ccmake在cmake中缓存依赖选项
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- 如何使缓存线程安全
- 存储指令是否会阻止缓存未命中的后续指令?
- 缓存局部性与函数调用
- Qt 网页程序集缓存
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- 是否可以检查变量是否位于 L1/L2/L3 缓存中
- 使用C++查找 L1 和 L2 缓存的大小
- 测量 l1/l2 缓存中加载的用于读取(包括预取)的行数
- 添加 L1 缓存大小的数组.大数组绝对比短数组快
- 如何通过IO定时测量来查找L1高速缓存行大小
- 在C++中清除L1、L2和L3缓存的最正确方法是什么
- 如果不同的核有不同的L1缓存,为什么会出现缓存乒乓和问题
- 需要将数组保留在L1缓存中的建议
- 如何清除L1、L2和L3缓存
- 有多少对象(包含 std::vectors)加载到 L1/L2/L3 缓存中