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]
写A := 读A * 读B
请注意,每个 J 循环有 2 次传输更改,而每个 I 循环仅更改 1 次传输。
1024 * (8 + 1024 * (1 + 1)) = 2105344 次转移
所以每次我们使用它时都会读取 B 的整行,因此我们将整行计算为已传输(8 页)。但是由于我们在传输时只读取了每个 A 行的一部分(1 个值),所以每次只抓取 1 页。
所以我想弄清楚的是,我们如何获得每次读取 B 时传输 8 页但每次读取和写入 A 时仅传输 1 个页面?