Re: [問題] 程式在多核心架構下執行
※ 引述《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
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)
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章