Re: [問題] 程式在多核心架構下執行

看板Programming作者 (燒賣)時間18年前 (2007/09/07 01:48), 編輯推噓2(200)
留言2則, 1人參與, 最新討論串2/6 (看更多)
※ 引述《bookmarket (bookmarket)》之銘言: : 請問一下,現在應用程式或者系統程式怎麼跑在多核心架構下呢 : 譬如說,現在有A、B兩個cpu, : 現在有兩個程式要執行分別是game和一個應用程式如word : 那麼這兩個程式是怎麼執行呢 : 是由A cpu執行game,b cpu跑word嗎 : 還是說另一種情況 : game的程式中,有某一段程式碼(code area S)可以獨立出來執行 : 那這樣game就分成兩邊跑 : A cpu跑word,而B cpu跑 code area S嗎 : 還是說上述說的情況都不是呢? : 麻煩各位指點一下 : 謝謝 這是由作業系統的排程器決定的。不同作業系統的設計目標不同,所以排程器的設計 也會有差別,可能是以公平性為優先,也可能以回應時間為優先做設計。實際執行的 情況和當時的執行緒數量、執行緒優先權都有關係。 我手邊這本作業系統的書上說 Windows 2000 的多處理器排程方式是有 N 個處理器 的時候,擁有最高等級優先權的 N-1 個執行緒會使用 N-1 個處理器,剩下那些相對 低優先權的執行緒共享 1 個處理器。 對程式設計師而言,要有效利用多處理器/多核心處理器的方式就是將程式寫成 Multi- threading/Multiprocessing。在 Unix/Linux 上標準的作法就是透過 pthread(Multi- threading) 或是 fork(multiprocessing)。不過 fork 比較消耗資源,因為它會複製 整隻程式,相對於 pthread 付出代價大很多。 最近這幾年還有一個看起來滿有前景的 OpenMP API 可以用來做 parallel programming。 OpenMP 因為能使用在 Unix/Linux 也能用在 WindowsNT,而且使用上比較簡單,因此 漸漸受到歡迎。Intel C/C++ Compiler 已經支援 OpenMP 很長一段時間,VC++ 2005 也支援 OpenMP 2.0,GCC 則是從 4.2.1 開始支援 OpenMP 2.5。 -- Licensed under CC2.5(TW) by-sa, Samael Wang. http://creativecommons.org/licenses/by-sa/2.5/tw/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.82.153

09/07 02:02, , 1F
多緒效能主要還是卡在資源搶占的問題上
09/07 02:02, 1F

09/07 02:05, , 2F
倒是很好奇MP API提供了哪些平行運算功能
09/07 02:05, 2F
基本功能是可以指定 Max threads number,然後指定特定的 section 要以 parallel 的方式執行,由 OpenMP 決定執行數量,比如說: omp_set_num_threads(10); #progma omp parallel for for (int i = 0; i < N; i++) { .... } 這樣這個 for 會被拆成最多 10 個 threads 平行執行。 至於比較進階的方法...歹識我沒有深入研究( ̄ー ̄;) ※ 編輯: freesamael 來自: 220.135.82.153 (09/07 02:23) ※ 編輯: freesamael 來自: 220.135.82.153 (09/07 02:23)
文章代碼(AID): #16u3rjUb (Programming)
討論串 (同標題文章)
文章代碼(AID): #16u3rjUb (Programming)