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

时间:2014-05-30 23:38:09

标签: c++ arrays architecture computer-architecture

我有以下问题,请你帮我解决一下:

我有以下整数数组(大小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 个答案:

答案 0 :(得分:0)

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

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

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

编辑1:
以下是一些描述缓存优化的好链接:
CPU Cache Optimization
Effective Cache Memory usage

第一个链接有很好的图解说明了缓存的工作原理。

您还应该搜索"数据缓存优化"。以下是一些链接:
Keeping arrays in L1 cache
Low level C language optimizations
Data Locality
EETimes - Optimizing for cache performance