【发布时间】:2012-12-12 22:39:59
【问题描述】:
for I := 1 to 1024 do
for J := 1 to 1024 do
A[J,I] := A[J,I] * B[I,J]
对于给定的代码,我想根据以下假设计算在磁盘和主内存之间传输了多少页:
- 页面大小 = 512 字
- 主内存中不能超过 256 页
- LRU 替换策略
- 所有二维数组大小 (1:1024,1:1024)
- 每个数组元素占1个字
- 二维数组以行优先顺序映射到主存中
我得到了解决方案,我的问题源于此:
A[J,I] := A[J,I] * B[I,J]
writeA := readA * readB
请注意,每个 J 循环有 2 次传输改变,1 次传输 只会改变每个 I 循环。
1024 * (8 + 1024 * (1 + 1)) = 2105344 次转移
所以每次使用时都会读取 B 的整行,因此我们 将整行计算为已传输(8 页)。但由于我们只阅读 每个A行的一部分(1个值)我们在传输的时候,我们只抓取1个 每次页面。
所以我想弄清楚的是,我们如何获得每次读取 B 时传输 8 个页面,但每次读取和写入 A 时只传输 1 个页面?
【问题讨论】:
标签: arrays paging virtual-memory