转发前后差多少拍
运行下面这段程序,填写它打印出来的结果。 STAGES = 5 def one_by_one(n): return n * STAGES def pipelined(n): return n + STAGES - 1
取数之后马上用,还是得停
运行下面这段程序,填写它打印出来的结果。 STAGES = 5 def one_by_one(n): return n * STAGES def pipelined(n): return n + STAGES - 1
自己写:算转发能省多少
给冒险处数和每处的停顿拍数,算出「有转发 / 无转发」两种情况的总拍数。
把不相干的指令插进去
把一条不相干的指令挪到有依赖的两条中间,算出调度前后的冒险数。
⚠️ 挪错了会算出别的结果
把一条有依赖的指令也挪到前面去。⚠️ 冒险数确实降了,但程序算的东西变了——把两件事都打出来。
为什么要猜
遇到分支时,流水线不等结果就先猜一个方向往下走。这么做是因为【0】。
猜错了会怎样
分支猜错之后,CPU 要【0】。
什么样的分支好猜
分支预测器最容易猜准的是【0】。
猜错率不同,多花多少拍
运行下面这段程序,填写它打印出来的结果。 STAGES = 5 def one_by_one(n): return n * STAGES def pipelined(n): return n + STAGES - 1
自己写:一个最简单的预测器
实现「上次怎样这次还怎样」的预测器,数出一串分支结果里猜错了几次。第一次没有历史,算猜错。