Re: [理工] unrolling問題 交大
: → 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://www.ptt.cc/bbs/Grad-ProbAsk/M.1544933746.A.A40.html
推
12/16 13:01,
7年前
, 1F
12/16 13:01, 1F
這邊的 dynamic 其實就是意指 OOOE 了,
而 Speculation 與 OOOE 算是兩件事情,你的問題是?
→
12/16 13:01,
7年前
, 2F
12/16 13:01, 2F
→
12/16 13:01,
7年前
, 3F
12/16 13:01, 3F
推
12/16 14:15,
7年前
, 4F
12/16 14:15, 4F
※ 編輯: kyuudonut (175.96.113.214), 12/17/2018 19:54:41
推
12/18 11:19,
7年前
, 5F
12/18 11:19, 5F

推
12/18 11:24,
7年前
, 6F
12/18 11:24, 6F
感謝指正! 藉此文我也終於了解柱子本對於 dynamic issue 的定義,
即使是 dual in-order issue processor,dynamic 的地方是在於
單一 cycle 可 issue 0 ~ 2 instructions 不定。
但 VLIW 不一樣,它是由 compiler static time 就決定一次要
issue 多少 instructions。
→
12/18 11:24,
7年前
, 7F
12/18 11:24, 7F
→
12/18 11:25,
7年前
, 8F
12/18 11:25, 8F
→
12/18 11:26,
7年前
, 9F
12/18 11:26, 9F
或許行為上有些許類似,但本質上是完全不一樣的,
一個是 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
推
12/19 10:53,
7年前
, 10F
12/19 10:53, 10F
→
12/19 10:55,
7年前
, 11F
12/19 10:55, 11F
→
12/19 10:56,
7年前
, 12F
12/19 10:56, 12F
→
12/19 10:57,
7年前
, 13F
12/19 10:57, 13F
→
12/19 10:58,
7年前
, 14F
12/19 10:58, 14F
→
12/19 10:59,
7年前
, 15F
12/19 10:59, 15F
→
12/19 11:01,
7年前
, 16F
12/19 11:01, 16F
推
12/19 15:38,
7年前
, 17F
12/19 15:38, 17F
→
12/19 15:38,
7年前
, 18F
12/19 15:38, 18F
→
12/19 15:39,
7年前
, 19F
12/19 15:39, 19F
OOOE 通常會自帶 speculation 是因為想要 exploit 更多的 instruction 塞進 pipeline
看原文書會理解有限,甚至現在商用的 Processor 其實 issue / execute 的定義
都會跟課本不一樣。只能看網路上 ARM Cortex-A8 的架構來多參考 (課本也有~)
或是找最經典的 Alpha 21264 的論文來看,可能都會有更深的體悟,
不過就研究所考試來說,應該不用準備這麼多,連台大可能都不太可能考這麼細,
不過還是歡迎後續討論 :)
※ 編輯: kyuudonut (175.96.113.214), 12/19/2018 20:02:02
推
12/19 20:51,
7年前
, 20F
12/19 20:51, 20F
→
12/19 20:52,
7年前
, 21F
12/19 20:52, 21F
→
12/19 20:56,
7年前
, 22F
12/19 20:56, 22F
→
12/19 20:57,
7年前
, 23F
12/19 20:57, 23F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):