给定两个数组,比如A和B,每个数组包含大约10 ^ 7个元素(任何C基类型,但最可能是int,char有4个字节)。 我将把这些数组拆分成更小的部分(取决于CPU中的可用内核)并合并它们。我不得不期待Cache未命中吗?
在我的理解中,如果两个数据块在内存中非常靠近,并且每个内核将这些数据加载到其L1缓存中,则会出现缓存未命中。 例如,假设运行ThreadA的Core1和运行ThreadB的Core2。
然后,线程A对Cache(Core1)中的数据执行写操作,并且CPU必须假设线程B中的缓存数据(Core2)不再相关。所以它必须从RAM重新加载整个Cache,这很慢。
由于我只会从数组A和B中读取,我认为这不会有问题,但我偶然发现了其他一些问题,其中由于读取数据而导致的Cache错误似乎是一个问题。
但即便如此 - 我猜想,缓存未命中率会很低。
例如,假设Zero为数组和|中的数据将由线程处理的块之间的分隔符。
<00> 00000000 0 | 0 0000000 0 | 0 000000 0 | 0 00000000 |我的猜测是,只有分离器上的小部件会受到影响,但由于我大部分时间都在处理大数据,所以不会那么糟糕。
只有我的目标Array C将从多个线程写入 - 我是否必须在此处预期性能问题?
所以我的问题是:
由于我没有找到第一个问题的确切答案,因此阅读本主题的文章并不能让我满意。
编辑:添加了存储元素的大小。