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

看板Programming作者 (林約翰)時間16年前 (2008/11/12 02:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串10/15 (看更多)
冒昧請教幾個問題。 ※ 引述《ggg12345 (ggg)》之銘言: > > 一般使用高階語言程式與高階API者應該不會處理的這麼細. 這已 > 經是類似粗放與細耕的代價/獲益問題. 那麼,從軟體人的角度來看, CPU內部,如何實現硬體的多執行緒,似乎是太過細節的問題, 如此一來,粗放與細耕應該如何取捨呢? (通通交給作業系統與編譯器嗎?) > Multi-thread 要發揮效用, 程式設計者就要考慮到相當細節的部份, 同 > 步與切換的排程問題都得親自處理, 才能發揮出併行處理又無太多 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 做最有效的暫存與還原. 使用類似POSIX Threads這樣的東西,軟體人是不是就需要考慮較多的硬體細節? 而當使用OpenMP、Intel Threading Building Blocks這樣的東西的時候, 就可以把硬體細節丟給Compiler與Library API; 是這樣嗎? 各個平台與開發工具,對於Thread的支援程度/支援方式,似乎不盡相同, 您談到了CPU內部的暫存器(資料的存取), 能不能也請您談談Pipeline與Functional Unit的部份呢(機器指令的發派)。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.221.140.178
文章代碼(AID): #196Zi0iV (Programming)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 10 之 15 篇):
文章代碼(AID): #196Zi0iV (Programming)