深入理解计算机系统第五章,关于每元素周期数(CPE)的计算问题
练习题5.5 题目如下:
对多项式求值a0+a1
x+a2
x^2+...+an*x^n。
代码如下:
double poly(double a[], double x, int degree)
{
long int i;
double result = a[0];
double xpwr = x;
for ( i = 1; i <= degree; i++)
{
result += a[i] * xpwr;
xpwr = x * xpwr;
}
return result;
}
该题第二问说到,在参考机Core i7上,测量这个函数的CPE等于5.00。
参考答案是这样解释的:限制性能的计算是反复地计算表达式xpwr = x * xpwr。这需要一个双精度浮点数乘法(5个时钟周期),并且直到前一次迭代完成,下一次迭代的计算才能开始。两次连续的迭代之间,对result的更新只需要一个浮点加法(3个时钟周期)。
那我的问题就是,a[i] * xpwr这个代码不应算入对result的更新的时钟周期么?也就是说实际的CPE不应该是5+3么?
被诅咒的小狐狸
11 years, 4 months ago