: → 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。