【发布时间】:2021-09-09 13:41:31
【问题描述】:
我正在读这本教科书:
Randal E. Bryant, David R. O'Hallaron - 计算机系统。程序员的视角 [第 3 版](2016 年,Pearson)。
目前我不确定教科书中的问题 5.5。下面,我附上了这本书的链接,以便于查找。
这是他们给出的答案:
有人可以告诉我作者是如何得出这个问题的答案的吗? 我不确定他们如何计算计算次数(n 次加法和 2n 次乘法)。
提前谢谢你,任何帮助表示赞赏:)
【问题讨论】:
-
答案“n加法”忽略了
i++的加法,以及i <= degree所需的有效求和(减法)。 -
像计算机一样思考执行。第 7 行和第 8 行执行 2 次浮点乘法和 1 次加法。循环运行 n 次。第二个问题依赖于文本中您未提供的信息。 @WeatherVane 是正确的;较旧的文本通常会这样做。整数加法比浮点数快得多,因此被忽略。到 2016 年,这不是一个安全的假设,尽管出于其他原因忽略它是合理的。另请注意,这是实现多项式评估的糟糕方法。查找霍纳规则以获得更好的规则。或者也许这是下一个问题:)
-
不过,文本指出浮点加法只有 3 个时钟周期。每个整数加法至少需要 1 个周期。
-
@WeatherVane:FP add 有 3 个周期 latency,FP mul 有 5 个周期 latency。 Integer add 不是
xpwr*=x关键路径依赖链的一部分,因此它并不重要。你不只是添加循环。 (根据 Megan 之前的问题,他们使用的机器模型类似于 Haswell,因此整体吞吐量也不显着。这是一个延迟瓶颈,我们真的不需要查看前端或后端 -最终吞吐量)。所以是的,添加的总数应该包括i++,因为他们没有说“FP 添加”,但不,这对性能并不重要。 -
@MeganDarcy:CS:APP 第三版的全球版在asm实践问题上有很多严重错误,因为出版商雇佣了一些不称职的人来写不同的问题,没有与教科书作者核对。请参阅 csapp.cs.cmu.edu/3e/errata.html 和 CS:APP example uses idivq with two operands? 。非全局版本没有这些错误,所以“问题”是可用的。
标签: c performance assembly x86 cpu-architecture