2

我正在考虑通过采用线性数组并将每个元素写入另一个数组中的任意位置(从 CPU 的角度来看是随机的)来优化程序。我只做简单的写入而不是读回元素。

我知道经典 CPU 的分散读取可能会非常慢,因为每次访问都会导致缓存未命中,从而导致处理器等待。但我认为分散写入在技术上可能很快,因为处理器不等待结果,因此它可能不必等待事务完成。

不幸的是,我不熟悉经典 CPU 内存架构的所有细节,因此可能会出现一些复杂情况,这也可能导致速度很慢。

有没有人试过这个?

(我应该说我正在尝试反转我遇到的问题。我目前有一个线性数组,我从中读取任意值 - 分散读取 - 由于所有缓存未命中,它非常慢。我的想法是我可以将此操作转换为分散的写入以显着提高速度。)

4

2 回答 2

3

通常,您会为对尚未在缓存中的地址的分散写入付出高昂的代价,因为您必须为每次写入加载和存储整个缓存行,因此 FSB 和 DRAM 带宽要求将远高于顺序写入。当然,每次写入都会导致缓存未命中(现代 CPU 通常需要几百个周期),并且任何自动预取机制都无济于事。

于 2010-06-23T13:11:05.873 回答
2

我必须承认,这听起来有点硬核。但我还是冒着风险回答。

是否可以将输入数组划分为页面,并多次读取/扫描每个页面。每次通过页面,您只处理(或输出)属于有限数量页面的数据。这样,您只会在每个输入页面循环开始时获得缓存未命中。

于 2010-06-23T13:12:09.353 回答