作者kyuudonut (善良老百姓)
看板Grad-ProbAsk
标题Re: [理工] unrolling问题 交大
时间Sun Dec 16 12:15:42 2018
: → wacheck: 想在请问一下unrolling有偏好static multiple issue或 12/15 15:02
: → wacheck: dynamic multiple issue吗 12/15 15:02
: → anonimo: Loop unrolling 应该是compiler(software)处理的 12/15 16:23
Loop unrolling 最大的好处是减少 branch overhead,
这个好处对於 static/dynamic multiple issue 都会是有益的。
但对於 dynamic multiple issue 可能好处没有显着於 static,
毕竟它本来就能够 speculative execution。
但会说对於 dynamic multiple issue processor 仍有好处的原因是因为:
speculative execution 的 cost 高,每遇到一个 branch 会需要做一份 checkpoint,
branch miss 後整个 processor state 又要 roll back,所以还是有蛮大的 penalty。
所以 loop unrolling 可以减缓这种 dynamic multiple issue 遭遇的情况。
至於 static multiple issue 更需要 loop unrolling 的原因是因为,
loop unrolling 後可以给我们带来更多的 ILP (Instruction Level Parallelism),
让 Compiler backend 更有空间可以去做 instruction scheduling,
以实现 software pipelining,才能够让 static multiple issue processor
的所有 pipelines fully utilized。
当然缺点还是有:
1. code size 会变大,做 embedded 上的 library 需要去考虑此问题,
I$ 也因此容易 cache miss。
2. register pressure 会变大,如果 instruction scheduling 没做好,
因 unrolling 被 spill 掉的 register 会让整个 performance 掉下来。
想了解更多的话可再参考 Computer Architecture: A Quantitative Approach,
里面有专门一个章节在探讨 loop unrolling。
--
◢ ◣ ▁▂█▂▁◢茄你老木! ◥ ▁▂▁
你这个茄子 ◤◥◤◥ 你有得茄吗? ◢█ ◆ █◣ 【茄~】
◣ ◤ ˋ ˊ ◥ 你有得茄吗?◢ ◤ ◥◥◤◤ ◥ ◤
◤ ㄧ ◣ ◤ (因为很重要 ▉ ⊙ ⊙ ▏
…
▍ 所以说两次)▉ △ ◢ ▏
◣ ◤◤ ◣ ◤◢ ψJeans1020
◢ ◣ ▁▂█▂▁◢茄你老木! ◥ ▁▂▁
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.16.173
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Grad-ProbAsk/M.1544933746.A.A40.html
1F:推 b10007034: dynamic好像少讲OOOE?不然有speculation也没办法执行 12/16 13:01
这边的 dynamic 其实就是意指 OOOE 了,
而 Speculation 与 OOOE 算是两件事情,你的问题是?
2F:→ b10007034: 吧? 12/16 13:01
3F:→ b10007034: 其他的内容都很赞 12/16 13:01
4F:推 wacheck: 太神啦感谢大神 12/16 14:15
※ 编辑: kyuudonut (175.96.113.214), 12/17/2018 19:54:41
6F:推 b10007034: dynamic跟OOOE不是等於吧? 12/18 11:24
感谢指正! 藉此文我也终於了解柱子本对於 dynamic issue 的定义,
即使是 dual in-order issue processor,dynamic 的地方是在於
单一 cycle 可 issue 0 ~ 2 instructions 不定。
但 VLIW 不一样,它是由 compiler static time 就决定一次要
issue 多少 instructions。
7F:→ b10007034: 原文书有详细做分类,另外speculation那边我的意思是 12/18 11:24
8F:→ b10007034: 如果要用hardware做loop unrolling,要用 12/18 11:25
9F:→ b10007034: dynamic scheduling+OOOE+speculation 12/18 11:26
或许行为上有些许类似,但本质上是完全不一样的,
一个是 static time 时就确保 unrolled loop 是可以执行的 (还会做 scheduling),
一个则是使用额外 resource 去偷跑下一个 iteration,我想你也明白。
一个 Architecture 老师应该会严正否认这种说法 XD
另外沿着你一开始的 context,我必须说,只要有 Speculation 就可以偷跑,
不一定需要 OOOE。Itanium 2 就是一个典型的例子。
※ 编辑: kyuudonut (175.96.113.214), 12/18/2018 22:30:44
10F:推 b10007034: 没错,dynamic那边我一开始也搞混,搞懂之後也会忘XD 12/19 10:53
11F:→ b10007034: 然後你这边指正的一点都没错XD,我打完之後才发现我的 12/19 10:55
12F:→ b10007034: 意思跟我表达的有落差,原本想解释,但是懒XD 12/19 10:56
13F:→ b10007034: speculation我还是不太懂,我一直以为他是一个侦测的 12/19 10:57
14F:→ b10007034: 概念,侦测到某处instr.可以先执行之後,在由OOOE把 12/19 10:58
15F:→ b10007034: 某处instr.先放到issue slot 12/19 10:59
16F:→ b10007034: 我在多看看CA.原文书对HW based&SW based的实作与解释 12/19 11:01
17F:推 b10007034: 目前是直接看Itanium是写有speculatively prefetch 12/19 15:38
18F:→ b10007034: OOOE也看得更懂了一点,以为跟speculation有一定关系 12/19 15:38
19F:→ b10007034: 看原文书上解释不太像有一定关系,独立运作 12/19 15:39
OOOE 通常会自带 speculation 是因为想要 exploit 更多的 instruction 塞进 pipeline
看原文书会理解有限,甚至现在商用的 Processor 其实 issue / execute 的定义
都会跟课本不一样。只能看网路上 ARM Cortex-A8 的架构来多参考 (课本也有~)
或是找最经典的 Alpha 21264 的论文来看,可能都会有更深的体悟,
不过就研究所考试来说,应该不用准备这麽多,连台大可能都不太可能考这麽细,
不过还是欢迎後续讨论 :)
※ 编辑: kyuudonut (175.96.113.214), 12/19/2018 20:02:02
20F:推 b10007034: 纯粹就是个人兴趣而已,CPU其实蛮有趣好玩的 12/19 20:51
21F:→ b10007034: 这颗没注意到过,我是关注另外一颗RISC-V 12/19 20:52
22F:→ b10007034: 还是谢谢你的回复,目前还是处於尴尬的状态 12/19 20:56
23F:→ b10007034: 半只脚进入这个领域,太浅很难聊,太深又无法理解 12/19 20:57