# 2016q3 Homework3 (software-pipelining) contribute by <`petermouse`> ## 開發環境 * OS:Lubuntu 16.04 LTS * Memory: 8 GB * CPU: * Name: * Intel(R) Core(TM) i5-4200H CPU @ 2.80GHz * Cache: * L1d Cache: 32K * L1i Cache: 32K * L2 Cache: 256K * L3 Cache: 3072K ## 資料閱讀 ### [Modern Microprocessors](http://www.lighterra.com/papers/modernmicroprocessors/) * 不同CPU時脈高不等於運算上比較快,因為還牽扯到每個CPU在每個clock下做的動作 * Pipeline要注意到: * 後面指令可能要馬上使用到前面還沒儲存的運算結果→加入forwarding line趕快將結果告訴前面的 * 運算時可能因為不同的指令,而有不同的運算單元處理 * RISC比CISC來得容易pineline,因為都是很精簡的動作 * Superpipelining:clock speed被最複雜的stage限制→再把stage切得更細,clock speed加快,IPC維持不變,但每秒Clock變多了,處理更多指令。 * Superscalar:因為有不同的運算單元,為了充分利用,乾脆想辦法全都使用到吧!→一次執行多個不同指令(多個pipeline運作) * 增加fetch/decode單元數量(也就是增加issue width) * 各取所需:INT與FP以不同pipeline運算 * 每個pipeline所需時間不一致 * 不同pipeline、同個pipeline間的forwarding * 不會一次多個指令都剛好有適用的pipeline→運算單元通常比issue width多 * VLIW:執行一個"明確的"長指令,一個指令包含很多"明確的"次指令。 * 簡化一開始的decode/dispatch(調度)處理 * 不考慮次指令之間的dependency→變成交由compiler處理 * 部份應用:GPU、DSP等 * Instruction Dependencies & Latencies * 指令間有先後執行順序 * latency:從指令執行到結果可被其他指令使用的時間。 * 因為latency→stage越多不會越有效益 * memory有更多麻煩:cache hit/miss的latency差很多 * branch prediction * 先猜再說,猜錯在取消 * 改善方向 * 增加猜對機率 * 降低猜錯成本 * static:complier猜測提示處理器 * runtime:有on-chip branch prediction table以及1~2bit來決定先執行哪個branch * mispredict→mispredict penalty.,尤其是愈深的pipeline,反映出diminishing returns(報酬遞減) * out-of-order:避免branch產生的bubble以及instruction的latancy產生浪費的cycle→更改執行順序。 * dynamic instructin scheduling:dispatch logic需要先看好幾個instruction來規劃順序。 * Register Renaming:更改目標的暫存器,使得指令可以平行不衝突 * 耗電,但可以不用重新編譯 * 另一種方法:編譯器來更改執行順序,但也有可能出差錯 * brainiac vs speed-demon debate * Brainiac:OOO取向 * speed-demon:complier最佳化&結構單純化。 * 各家CPU朝不同取向在發展,也有轉向發展,也可能考量其他問題。 * The Power Wall & The ILP Wall:CPU的發展到了瓶頸 * power wall:clock speed到了極限,可以往上但極度耗熱 * ILP wall:平行因為load latencies, cache misses, branches and dependencies between instructions也有發展極限 * About x86 * 屬於CISC架構,複雜而且慢 * 為了和RISC匹敵→將x86指令decode成類似RISC的小指令 * 稱為μops(micro ops) * 因為細節(μops)只有在執行時知道,complier難對其最佳化 * Simultaneous multi-threading * OOO、Superscaler、Complier優化都對指令的平行化影響有限(ILP Wall) * 一樣是解決bubble等問題,但這次是用不同執行緒填補,讓運算單元充分利用 * 一個physical processor但是多個logical processor * 需增加硬體成本,以區別、維護不同執行緒資料以及資料狀態 * intel稱為Hyper-Threading * 來不及整理 待續