我有以下问题,请你帮我解决一下:
我有以下整数数组(大小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缓存中,或者我应该修改我的代码...如果是,那么请建议。
答案 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