需要将数组保留在L1缓存中的建议

Need suggestion to keep arrays in L1 cache

本文关键字:缓存 L1 数组 保留      更新时间:2023-10-16

我有以下问题,您能帮我解决一下吗?

我有以下整数数组(大小为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 -优化缓存性能