zoukankan      html  css  js  c++  java
  • 并行与CPE

    来自csapp第5章. 关于指令级并行, 我觉得一个典型的例子是多项式求值(练习5.5与练习5.6).


    看这两个循环哪个会快一些?
    如果没有并行的意识, 那么我想都会觉得第二个快, 因为第一个多了一次乘法操作.
    但考虑到并行, 是第一个快. 第一个有两条关键路径. xpwr构成的, 和result构成的. 前者的CPE是5, 后者是3(浮点数的乘法和加法周期数). 它与第二个循环的区别是, xpwr并不依赖result, 不过result依赖xpwr. 这种情况下, 总用时应该是max(xpwr的延迟时间,result的延迟时间). 显然加法快于乘法, 因此是xpwr的延迟. 它的CPE是5. 为什么不考虑吞吐量下界? 因为达不到. 乘法功能单元貌似是2个, 周期数为5, 这意味着它支持10条指令的并行. 但现在只有2条乘法指令并行(分别是a[i]*xwpr与xpwr自己). 因此CPE就是5.
    第二个, 关键路径同时有加法和乘法, 因为它们相互依赖, 加法要等乘法算完了才能进行, 乘法也要等加法算完了才行. CPE是8.
    因此, 第一个快于第二个.
    之前某博客说了cache. 两个例子结合起来, 说明: 只看操作次数没什么意义, 指令级并行和局部性可能都比它来得重要.

  • 相关阅读:
    现代软件工程 第一周博客作业
    最后一周总结
    阅读后感
    软件工程作业个人项目——csdn app分析
    第二次结对编程
    软件工程作业二
    软件工程作业一
    ASE 课程最后小结
    阅读后感
    Judy Beta 第五天
  • 原文地址:https://www.cnblogs.com/Tokubara/p/13957035.html
Copyright © 2011-2022 走看看