并行程序设计导论作业(二)

1 当讨论浮点数加法时,我们简单那地假设每个功能单元都花费相同的时间。如果每个取命令与存命令都花费2纳秒,其余的每个操作耗费1纳秒。
a 在上述假设下,每个浮点数加法要耗费多少时间?
b 非流水线1000对浮点数的加法要耗费多少时间?
c 流水线1000对浮点数加法要耗费多少时间?
d 如果操作数/结果存储在不同级的内存层级上,那么取命令与存命令所要耗费的时间可能会差别非常大。假设从一级缓存上去数据/指令要耗费2纳秒,从二级缓存上取数据/指令要耗费5纳秒,从主存取数据/指令要耗费50纳秒。当执行某条指令,取其中一个操作数时,发生了一次一级缓存失效,那么流水线会发生什么情况?如果又发生二级缓存失效,又会怎样?

a :
Fetch 2
Compare 1
Shift 1
Add 1
Normalize 1
Round 1
Store 2
Total 9纳秒
b : 9 ×1000 = 9000纳秒
c : 9+999*2 = 2007
d:如果操作数 n 不在 1 级缓存中,但在 2 级缓存中,则获取将花费 5 纳秒。
当然,2 级未命中会更糟:数据将停留在从 t 到 t + 50 的提取阶段。显然,如果在提取过程中处理器有一些有用的工作要做,则有机会提高整体性能。

2 请解释在CPU硬件里实现的一个队列,怎么使用可以提高直达高速缓存(write-through cache)的性能。
在直达高速缓存中,每次写入缓存都会导致写入主存。当然,写入主存比在 CPU 内处理要慢得多。如果我们在 CPU 中有一个队列,我们​​可以将写入的内容放入队列中,队列可以以内存的速度被清空,而 CPU 可以继续处理。只要队列未满,CPU 就不需要等待对主存的写入完成。

3 回顾之前一个从缓存读取二维数组的示例。请问一个更大矩阵和一个更大的缓存是如何影响两队嵌套循环的性能的?如果MAX=8,缓存可以存储4个缓存行,情况又会是怎样的?在第一对嵌套循环中对A的读操作,会导致发生多少次失效?第二对嵌套循环中的失效次数又是多少?
  假设矩阵有 8 或 64 个元素;缓存行大小仍然是 4;缓存可以存储4行;并且缓存是直接映射的。然后下表显示了 A 如何存储在缓存行中。
在这里插入图片描述

  假设第一对循环开始时,缓存中没有 A 的行,我们看到 A 的每一行都会有两次未命中。此外,在读取前两行后,缓存将已满,并且每个小姐将驱逐一条线。正如文中的例子,被驱逐的行不需要再次阅读。所以我们看到第一对循环的未命中总数是 16,或者 A 中 的 元 素 数 c a c h e l i n e 大 小 \frac{A 中的元素数}{cache line大小} cachelineA
  更一般地说,对于第一对循环,未命中数仅受 A 大小的影响,而不受缓存大小的影响。
  对于第二对嵌套循环,我们还假设循环开始时缓存中没有 A 行。当我们处理第 0 列 (j = 0) 时,每次我们乘以 A[i][0]*x[0] 时,我们需要首先加载一个新的缓存行,因为之前读取的行将只包含行 < i 中的元素。因此,执行 j = 0 的循环将导致 8 次未命中。在分别读取包含 A[0][0]、A[1][0]、A[2][0] 和 A[3][0] 的四行后,后续读取第 0 列的元素将驱逐这四行。所以在完成涉及 A 的第 0 列的乘法之后,A 的前 4 行中的元素将不会存储在缓存中。因此,每次读取第 1 列的第 0-3 行中的 A 元素都会导致未命中。事实上,我们看到每次乘法都会导致一次未命中,并且将有 64 次未命中。然而,请注意,在第二对循环中,如果我们有一个 8 行缓存,那么涉及 A 的第 1-3 列的乘法不会导致未命中,并且在我们开始按元素进行乘法之前我们不会有额外的未命中在第 4 列中。一旦加载了包含第 4 列元素的行,就不会有任何额外的未命中,我们看到,使用 8 行缓存,未命中总数减少到 16。
4 在表2-2中,虚拟地址由12位自己偏移量和20位的虚拟页号组成。如果一个程序运行的系统上拥有这样页大小和虚拟空间,这个程序有多少页?
2 20 = 1048576 页 2^{20}= 1048576页 220=1048576
5 在冯·诺依曼系统中加入缓存的虚拟内存改变了它作为SISD系统的类型吗?如果加入流水线呢?多发射或硬件多线程呢?

缓存和虚拟内存的最基本实现不会改变一次可以执行的指令数量或一次可以操作的数据量。然而,更复杂的系统可以提供一些并发性:当出现缓存未命中或页面错误时,CPU 可能会尝试执行不涉及不可用数据或指令的指令。这种系统可能被描述为具有有限的 MIMD 能力:加载/存储指令可以与其他指令同时执行。我们可以将流水线视为将一条复杂的指令应用于多个数据项。因此它有时被认为是 SIMD。多发射和硬件多线程尝试将可能不同的指令应用于不同的数据项。所以它们可以被认为是 MIMD 的例子。·

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值