Re: [問題] 有關古老程式跑在多核平台上的問題?
※ 引述《lkerr (kerr)》之銘言:
: 這樣就能不用更改程式卻能大大提升程式的效能.
把 cpu clock 加快, 周邊 I/O 處理加快, 才能 "完全都不更改程式"
卻能提升程式效能.
這句 "不更改" 要看如何下定義. 指令碼都不變, 但解譯執行時卻隨
使用者與設定狀況而不同, 這算不算更改? 如果原執行的效果結果都
不變, 但速度有異, 這算不算更改 ?
要加速, 顯然就是只要求結果不變. 那麼, 結果不變, 速度也變快,
但插入或修改適當的執行碼又如何 ? 所以不更改, 是指原始程式不
再找人更改修訂囉 !
問題出在沒有原 programmer 的協助, 能否辨識或學習出程式碼
塊可以同時並行處理的區段, 然後自動調派多個實核PU來同時執行,
合併後的結果跟原來循序跑必須是一樣的, 再把這些辨識, 調派, 合
併的成本時間也都算進去, 結果是變快有賺, 那就達成目標了.
intel 公司 以 預取指令 再做"錯序並行"調派, 資源衝突則遲延,
這種硬體支援算是正確的做法. Intel 似乎已把此一部份改進到
compiler 裡面, 如同 RISC 想法以精減硬體.
整件事的重點就是在做程式碼的區塊轉譯, 這個轉譯的成本先不
算在內. 這是傳統 parallel compiler 的變形, 只是處理對象是機器
碼, 結果也可能是 machine-dependent.
嚴格說應該是 Emulater 不是 VM , 利用 Emulater 協助, 是先不做
硬體, 弄對所有關鍵處才來做該做的大投資. 弄清楚該插斷攔截的片
段(這可能已經不是單一指令的事了), 清楚敏感的(sensitive)部位,
VM 就可以上陣了.
假如在 VMM 之下有多個實核, 之上的 VM 是傳統的單 CPU OS 與古老
的程式. 再假設 VMM 就是要讓多個實核併行的執行多段片段程式碼
塊, 也就是用多核來模擬單核的行為特性, 使執行結果如同單核.
所以 VMM 將之上的 VM/OS/AP 預取 L 個可併行的碼塊, 饋入 M 個
cpu chip , 每個 chip 各有 N 組實核可併行處理, M*N = 1 就是老
式的單機單核逐一執行.
如果 M*N > 1 且 L >= M*N 那就是企圖用併行處理來加速老式程式的
執行, 而且不會在使用的資源上造成干擾與無效率, 這就達到不更改
原始程式與程式碼, 但執行速度因多機多核而提速.
這件事當然是電腦業的大事, 有如基因改造 !
(確實沒錯, 懂的人稍一塗鴉, 舉例為證, 就掰出論文了 !)
推
08/03 17:25, , 1F
08/03 17:25, 1F
→
08/03 17:26, , 2F
08/03 17:26, 2F
=======
上面的說法不是 Goldberg 的 sensitive instruction model 能敘述的.
特權指令, 敏感指令是因為這類指令的執行生效與否, 是依賴狀況而定,
不能逕自執行.
想像有一長串指令合在一起時, 都是被視為一堆 illegal instruction ,
這一堆指令經由攔截解譯的機制, 被重組為幾段碼塊, 分別讓多個實核對
這幾段碼塊同時執行.
再假設這個攔截解譯的機制是 VMM 功能的一部份, 這個問題就變為原來
一堆長串循序執行的非法指令被識別出來, 並能轉換為 n 堆合法指令讓
n 個實核同時執行. 這個 n 堆合法指令如果直接讓 VMM 再執行, VMM
會將之視為合法指令不必再轉換. 此時, 如果 VMM 只能操控 m 個實核,
但 m < n , 這 n 個碼塊就被分批讓 m 及 (n-m) 個實核分批次執行.
當 m = 1 時, 長串循序執行指令都可直接對應, 被視為合法. 若 m > 1
只有 VMM 檢視轉譯過的碼塊才被視為是合法的.
Parallel Compiler 就是 VMM 的預處理器, 可先做檢視, 並做大部份的
轉換, 可能有一部份的轉換才由 VMM 做最後檢視與解譯.
這是個 Block Code Extented VM , 並不是 Goldberg 的 Single
Instruction VM.
假設單核/多核的相容架構可如上運作, 關鍵問題就落在長串指令對併行
碼塊間的轉換規則.
※ 編輯: ggg12345 來自: 140.115.4.12 (08/04 00:49)
討論串 (同標題文章)
完整討論串 (本文為第 5 之 10 篇):