关于“计算机系统:程序员对执行算术运算所需的时钟周期的观点”中的问题5.5,我有一个问题:
就上下文而言,每项操作所需的时钟周期如下:
因此,对于“双”运算,“加法”花费3个周期,‘乘法’5个循环。
我认为,对于每个循环,第7行将指定成本,因为它需要一个加法和乘法,这意味着成本是‘3+5’。
然而,标准的答案是,第8行实际上是限制,因此每个循环的成本是5个周期:
有人能帮我理解一下为什么限制线8而不是第7行吗?
附上类似的后续问题5.6及其答案,这次计算的上限为“5+3”
发布于 2022-10-08 10:29:26
在问题5.5中,xpwr
的每一次计算都依赖于以前对xpwr
的计算(在编译器没有主动优化的情况下,例如循环展开),因此必须等待乘法的全部延迟。
result
的计算依赖于以前对result
的加法和可以并行完成的乘法。与乘法相比,加法具有较低的延迟,因此不限制计算。
更详细地说,CPU中的浮点操作(忽略负载、整数操作等)通常会发生如下情况:
将启动
a[i] * xpwr
(对于i
=0)。result += a[i] * xpwr
无法启动,因为它必须等待启动i
0:x * xpwr
。(我想我们可以在周期0中开始这两种方法,因为文本中说,每个周期的乘法能力是2。它还说在独立运作之间必须有一个周期,但我看不出有这样的感觉,因为每个cycle.)a[i] * xpwr
和x * xpwr
x * xpwr
5:result += a[i] * xpwr
都启动了( i
=0)。a[i] * xpwr
启动( i
= 1),H 128
循环5:D29
Cycle >是started.
Cycle 8:d32 finishes.
Cycle 8:result += a[i] * xpwr (对于i =1)。因为它的available.
Cycle不是finish.
Cycle 10:a[i] * xpwr和x * xpwr
xpwr 10:result += a[i] * xpwr是启动的(对于i =1)。
循环10:a[i] * xpwr被启动(对于i =2)。H 250H 151循环10:x * xpwr started.
Cycle 13:result += a[i] * xpwr完成。H 256F 257
然后每件事都会在五个周期内重复。
在问题5.6中,result = a[i] + x*result意味着,在我们得到result的前一个值之后,计算x*result需要五个循环,在得到乘法的结果之前,我们不能开始加法。然后计算a[i] + x*result需要三个周期,所以从一个result到下一个result需要8个循环。
https://stackoverflow.com/questions/73994881
复制相似问题