2015-06-22 43 views
1

我们有一个1024 * 1024的矩阵,其中32位数字将被归一化。假设虚拟内存中的页面大小为4KB,并且我们在工作时分配了1MB的主内存来保存矩阵。假设我们需要10毫秒从光盘上传页面。向我解释这个解决矩阵规范化的练习?

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

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

b)如果我们按行排列而不是按列排序?

的答案,这是1024个故障* 2 * 1024

我们如何获得这两种回答,你能解释一下这些给我吗?

回答

0

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

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

现在我们遍历矩阵行,每次我们访问一个元素时,它都不会被包含在内存中。这一点很清楚,因为我们始终在内存中有一列,并且我们从不按顺序访问同一列的元素。所以每个条目都会导致页面错误,导致1024 * 1024页面错误。

+0

我爱你比什么都重要。 – Xizi

+0

附加因子2来自哪里? 1024 * 2 * 1024? –

+0

这个因素是错误的,你不能有比访问请求更多的页面错误。虽然在这里需要做更多的工作,但每加载256个条目,我们也必须重新加载主内存,但是当发生这种情况时,我们仍然只有一个页面错误。 – ShellFish