• 深入理解计算机习题5.5 解析


    题目如下:
    对多项式求值a0+a1*x+a2*x^2+...+an*x^n。
    代码如下:

     1 double poly(double a[], double x, int degree)
     2 {
     3     long int i;
     4     double result = a[0];
     5     double xpwr = x;
     6     for ( i = 1; i <= degree; i++)
     7     {
     8         result += a[i] * xpwr;
     9         xpwr = x * xpwr;
    10     }
    11     return result;
    12 }         


    该题第二问说到,在参考机Core i7上,测量这个函数的CPE等于5.00。
    参考答案是这样解释的:限制性能的计算是反复地计算表达式xpwr = x * xpwr。这需要一个双精度浮点数乘法(5个时钟周期),并且直到前一次迭代完成,下一次迭代的计算才能开始。两次连续的迭代之间,对result的更新只需要一个浮点加法(3个时钟周期)。

    这题想了半天,大概是这样: 这个cpu有俩浮点乘法单元,号0,1。其中1号兼备浮点加功能,在5.7.1节有介绍。
    第一个循环时并行的话,1号线xpwr1 = x * xpwr0花了5,0号线a[1] * xpwr0花了5,区间时间5。

    第二次循环,0号线result1+=花了3;0号线并发执行a[2]*刚得到的xpwr2,花了5;1号线xpwr3 = x * xpwr2花了5;区间时间为5。

    第三次循环,0号线result2+=花了3;0号线并发执行a[3]*刚得到的xpwr3,花了5;1号线xpwr4 = x * xpwr3花了5;区间时间5。

    以下每次都是这样的5,直到第n次。
    第n次循环之后,还有个最后一次的0号result_n+=花了3,可以被忽略掉了.
    可如果并发在功能单元中会产生间隔,也就是发射(issue time),result那条线就是4了,不是3。因为0号线上并发的两个计算都依赖上一个循环的结果,只能同时开始或者加法比乘法早进入。于是书上给的解析应该不对吧,虽然结果是对的,或者是还有什么没想到的 因素?可惜这边没环境得到那么精准的测试。

    网上没出结果的讨论:

    https://bbs.csdn.net/topics/390174670

    https://blog.csdn.net/vogel_im_kafig_/article/details/107866006

  • 相关阅读:
    项目总结升级2
    项目总结升级1
    项目总结升级
    项目总结4
    项目总结3
    体温填报app2.0开发
    每日博客
    第一周开课博客
    学习日报
    学习日报
  • 原文地址:https://www.cnblogs.com/flangrean/p/15247220.html
Copyright © 2020-2023  润新知