向我解释这个已解决的矩阵归一化练习?

Explain to me this solved matrix normalization exercise?

我们有一个 1024*1024 矩阵,其中包含 32 位数字,将被归一化。假设虚拟内存中页面的大小为 4KB,我们在工作时分配 1MB 的主内存来保存矩阵。假设我们需要10毫秒从光盘上传一个页面。

a) 假设我们一次处理一列矩阵。如果按列保存在虚拟内存中,遍历所有矩阵元素会导致多少页错误?

答案是1024,但我不明白这是为什么?

b) 如果我们按行而不是按列工作会怎样?

答案是1024页错误*2*1024

我们如何得到这两个答案,你能给我解释一下吗?

由于矩阵的一个条目的大小为 32 位,即 4 字节,因此整行或整列可以存储在 4 字节 * 1024 = 4KB 的虚拟内存中。由于内存是使用列填充的,因此我们可以在内存中恰好容纳一列。

假设我们逐列遍历元素。获取第一个条目,我们看到这个条目不存在于虚拟内存中,因此我们必须加载它(即页面错误)。现在存储了整个列,因此接下来的 1023 个元素不会产生页面错误(它们都存在于内存中)。访问第二列的第一个元素时出现下一个错误。通常我们每列有一个页面错误,这会导致 1024 个页面错误。

现在我们逐行遍历矩阵,每次访问一个元素都不会被包含在内存中。这很清楚,因为我们在内存中始终只有一列,而且我们从不顺序访问同一列的元素。所以每一个entry都给一个page fault,导致1024*1024个page fault。