【发布时间】:2021-01-16 13:11:07
【问题描述】:
假设我们有一个名为DataList 的长数组。我们还有另外两个包含索引的数组,一个包含以升序排列的索引(即:0, 1, 2, 3, 4, ...),命名为sIndexes,另一个数组由随机的索引组成打包(即:6、5、1、9、7,...)命名为 rIndexes。
这些索引数组(sIndexes 和rIndexes)用于索引DataList 数组。当我们使用sIndex 数组来索引DataList 时,它会按顺序索引元素。当我们使用rIndexes 来索引DataList 时,它会在数组中的随机位置进行索引。
所以我的问题是,
使用随机索引而不是顺序索引时是否存在任何性能差异?缓存未命中是否会导致性能损失(例如,如果索引指向缓存行中不可用的位置)?
【问题讨论】:
-
“缓存未命中是否会导致性能损失” - 缓存未命中会减慢速度,因此理论上,如果证明缓存未命中肯定会发生,“随机索引”应该更慢。然而,真的有那么重要吗?如果有的话,您可能会受到 2 微秒的性能损失。
-
嗯,是的,如果数据不在缓存中,加载它需要更多时间。所以顺序排序应该更有效。但这也取决于
DataList中元素的大小 - 如果它们大约是缓存线(64 字节)或更多的大小,或者如果索引足够稀疏因此没有交集,那么不应该有有很大的不同。然后再次测量它以查看性能差异。
标签: c++ arrays performance