我们有一个1024 * 1024矩阵,32位数字将被标准化。假设虚拟内存中页面的大小为4KB,我们在工作时分配1 MB主内存来保存矩阵。假设我们需要10毫秒来从光盘上传页面。
a)假设我们一次使用矩阵一列。如果它们按列保存在虚拟内存中,将导致遍历所有矩阵元素的页面错误数量是多少?
答案是1024,但我不明白为什么会这样?
b)如果我们按行而不按列工作怎么办?
答案是1024页错误* 2 * 1024
我们如何得到这两个答案,你能解释一下吗?
答案 0 :(得分:0)
由于矩阵的条目大小为32位,即4字节,因此整个行或列可以存储在4字节* 1024 = 4KB的虚拟存储器中。由于使用列填充内存,我们可以在内存中恰好填充一列。
假设我们逐列遍历元素。获得第一个条目,我们看到这个条目不存在于虚拟内存中,因此我们必须加载它(即页面错误)。现在整个列都被存储,因此接下来的1023个元素不会产生页面错误(它们都存在于内存中)。访问第二列的第一个元素时出现下一个错误。通常,每列有一个页面错误,导致1024页错误。
现在我们遍历行矩阵,每次访问一个元素时它都不会包含在内存中。这很清楚,因为我们总是在内存上有一列,而且我们永远不会按顺序访问同一列的元素。因此每个条目都会出现页面错误,导致1024 * 1024页面错误。