繁体   English   中英

需要建议以将阵列保留在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 :: pair的位置推入std :: vector。 此代码是否正确以将元素保留在L1缓存中,还是应该修改我的代码...如果是,则建议。

只要处理器需要它或处理器需要将其他数据放入缓存中,您的数据就将保留在缓存中。

我最好的建议是将数据保持在一起并一起执行所有数据访问。 例如:输入所有数据,处理所有数据,输出所有数据。 更糟糕的情况是:输入一些数据,处理一些数据,输出一些数据,对所有数据重复。

您可能要使用数组而不是向量,因为向量动态分配内存,并且可能在不同的时间分配。 如果数组的大小没有变化,请使用数组。

编辑1:
以下是一些不错的链接,它们描述了缓存优化:
CPU缓存优化
有效的缓存使用量

第一个链接有很好的图表,说明了缓存的工作方式。

您还应该搜索“数据缓存优化”。 这里有一些更多的链接:
将阵列保留在L1缓存中
低级C语言优化
数据局部性
EETimes-优​​化缓存性能

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM