Re: 不相干的程式做multi-thread有幫助嗎?

看板Programming作者 (ggg)時間15年前 (2008/11/10 07:38), 編輯推噓2(202)
留言4則, 1人參與, 最新討論串9/15 (看更多)
※ 引述《CharArray (char[])》之銘言: : ※ 引述《ggg12345 (ggg)》之銘言: : : 如果有兩個完全不相干的 thread (片段程式)要執行, 沒有相互干擾的 : : overhead 的辦法就是分開在兩部實體完全獨立無關的電腦上跑. 但稱為 : : multi-thread 卻是指在同一部電腦上跑. 這部電腦是多組 register set : : 的 RISC , 還是多個 functional pipeline unit , 還是多個 program : : counter 的多核, 甚至是共用 bus 及記憶體的多處理機系統. 在實體上 : : 就有不同程度的共用硬體資源成份. 有了共用資源, 自然就會有互斥使用 : : 的這一類型同步問題. 即使沒有互斥同步也會有共用部份有限的 register : : 與 cache 問題. 一旦是不考量同步的任意交錯輪換使用, 就會有 save/ : : restore 問題, 不必要的 save/restore 也就是一種 overhead ! 打斷 : : prefetch 與 pipleline buffer 也是另一種 overhead. : 我最核心的問題是,硬把2個不相干的multi-process轉成multi-thread的overhead : 但在只有一台實體電腦的狀況下,上述的情形在multi-process也都存在, : 甚至更多,那為什麼還算overhead呢? ======== Multi-process 的 context switch 就是系統在虛擬出兩個以上的 (processor + memory + file system)時, 必須付出的由 OS 制式切換的代價(overhead). User Level 的 multi-thread 則是配合硬體有兩套以上的 register set 與 functional pipeline unit , 但改由user program 自行由 user 針對使用狀 況自行簡化, 去減少 context switch overhead. 由 compiler 與 library API 支援的 multi-thread 在啟動與切換 thread 時就是讓不同 thread 使用不同的 register set. 在共用 process memory space 與工作環境的假設下, user program 的 threads 間不會自尋煩惱的相互 干擾, 因此就不必類似 multi-process 般的做此制式 save/restore 動作. 而 使用不同組的 register set, 當然更是不必全做存回 memory 的 save/restore 動作, 此類 overhead 就省了. Multi-thread program 通常寫成同一份的 program 給 compiler 編譯, 同 時指明要使用 thread 特性, 此時 compiler 就可細查會相互干擾的 register 有那些, 在切換時就可只針對會干擾到的 register 做最有效的暫存與還原. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12

11/12 10:24, , 1F
您似乎專注於user space的multi-thread
11/12 10:24, 1F

11/12 10:24, , 2F
非UserSpace的多線程有什麼大差異嗎?
11/12 10:24, 2F

11/12 10:39, , 3F
processor + memory + file system
11/12 10:39, 3F

11/12 10:39, , 4F
為何連filesystem也要啊? @.@
11/12 10:39, 4F
文章代碼(AID): #195tHgsT (Programming)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 9 之 15 篇):
文章代碼(AID): #195tHgsT (Programming)