星期二, 10月 27, 2009

研究雜想

或許以後,這種雜想文而亂無章法的文章也會出現在這裡。

如何達成 hardware parallelism 的目標,最基本的答案是 pipeline ,但是因此產生了 data hazrd, control harzrd, struct hazard,其實這三種 hazard 並不一定會存在,端看設計者如何設計,而每個 program 會存在不可平行的部分,如何跨過不可平行部分,變成一種挑戰。

如果我們先為一個問題建立模型的時候,其實我們是想要解決在 pipeline 下的 data dependency & control dependency ,進而展出種種的方法,所謂的 data dependency 簡單的來說,當你要用時,上一個在使用的指令還沒有使用完(所以會有 RAW, WAW, WAR),進而造成 data hazrd,解決方法以 Computer Organziation and Design 提出的 data forwarding 是最簡單的方法,這是在硬體的方法,其實在現有的 CPU 架構,一個 instruction 進入 pipeline 時,會被拆成數個 microinstruction 來執行,也就是說,如果我們在 Compiler 所解決的 data dependency ,進入 hardware 這層是否會有用,不知道(因為我沒有研讀這方面的資訊),hardware/ software solution 並不一樣,但是是為了相同的目的而存在的。而 control dependency 是為了不要讓 pipeline 空閒,提高 CPI,其實真的是如此嗎,我不覺得,如果把程式的指令視為可平行的部分,那麼 control branch 是不可平行之處,也就是說,就會跟沙漏的中間點一樣,停在那裡,要過那邊之後,又是一個較大的可平行區,解決 control branch 並不單單只是為了那個 stall cycle 而己,最終目的是為了追求高度平行化。

也就是說,就一個現在的架構上再加入 VLIW 與 Superscalar 來討論會產生怎麼樣的模型與問題,要解決這三種的 harzard 分別為何,找到問題就幾乎等於找到解法,所以他媽的我一開始就搞錯方向了,搞懂架構,猜出問題才是主要的解決方法,建立一個主架構,而 hardware 的 out-of-order execution, dynamic branch prediction, hardware specluation 與 sofware(compiler) 的 sofware pipeline, loop unrolling, trace scheduling, 等等,這些方法自然能貼到問題所建立的架構上,因應環境而提出解法。


---
好亂啊...