Re: [理工] unrolling問題 交大

看板Grad-ProbAsk作者 (善良老百姓)時間7年前 (2018/12/16 12:15), 7年前編輯推噓7(7016)
留言23則, 2人參與, 7年前最新討論串2/2 (看更多)
: → 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
dynamic好像少講OOOE?不然有speculation也沒辦法執行
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:24, 7年前 , 6F
dynamic跟OOOE不是等於吧?
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
原文書有詳細做分類,另外speculation那邊我的意思是
12/18 11:24, 7F

12/18 11:25, 7年前 , 8F
如果要用hardware做loop unrolling,要用
12/18 11:25, 8F

12/18 11:26, 7年前 , 9F
dynamic scheduling+OOOE+speculation
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
沒錯,dynamic那邊我一開始也搞混,搞懂之後也會忘XD
12/19 10:53, 10F

12/19 10:55, 7年前 , 11F
然後你這邊指正的一點都沒錯XD,我打完之後才發現我的
12/19 10:55, 11F

12/19 10:56, 7年前 , 12F
意思跟我表達的有落差,原本想解釋,但是懶XD
12/19 10:56, 12F

12/19 10:57, 7年前 , 13F
speculation我還是不太懂,我一直以為他是一個偵測的
12/19 10:57, 13F

12/19 10:58, 7年前 , 14F
概念,偵測到某處instr.可以先執行之後,在由OOOE把
12/19 10:58, 14F

12/19 10:59, 7年前 , 15F
某處instr.先放到issue slot
12/19 10:59, 15F

12/19 11:01, 7年前 , 16F
我在多看看CA.原文書對HW based&SW based的實作與解釋
12/19 11:01, 16F

12/19 15:38, 7年前 , 17F
目前是直接看Itanium是寫有speculatively prefetch
12/19 15:38, 17F

12/19 15:38, 7年前 , 18F
OOOE也看得更懂了一點,以為跟speculation有一定關係
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
純粹就是個人興趣而已,CPU其實蠻有趣好玩的
12/19 20:51, 20F

12/19 20:52, 7年前 , 21F
這顆沒注意到過,我是關注另外一顆RISC-V
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
文章代碼(AID): #1S5T5of0 (Grad-ProbAsk)
討論串 (同標題文章)
文章代碼(AID): #1S5T5of0 (Grad-ProbAsk)