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

看板Programming作者 (ggg)時間18年前 (2007/09/07 16:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/6 (看更多)
※ 引述《freesamael (燒賣)》之銘言: : ※ 引述《bookmarket (bookmarket)》之銘言: : : 請問一下,現在應用程式或者系統程式怎麼跑在多核心架構下呢 : : 譬如說,現在有A、B兩個cpu, : : 現在有兩個程式要執行分別是game和一個應用程式如word : : 那麼這兩個程式是怎麼執行呢 ... : 這是由作業系統的排程器決定的。 : 我手邊這本作業系統的書上說 Windows 2000 的多處理器排程方式是有 N 個處理器 : 的時候,擁有最高等級優先權的 N-1 個執行緒會使用 N-1 個處理器,剩下那些相對 : 低優先權的執行緒共享 1 個處理器。 : 對程式設計師而言,要有效利用多處理器/多核心處理器的方式就是將程式寫成 Multi- : threading/Multiprocessing。在 Unix/Linux 上標準的作法就是透過 pthread(Multi- : threading) 或是 fork(multiprocessing)。不過 fork 比較消耗資源,因為它會複製 : 整隻程式,相對於 pthread 付出代價大很多。 ====== 以前只有 MP 還沒 Multi-Core , 現在是用多個 Multi-Core Chip 組成 MP. 對作業系統言, 都是把每個 core 當成 real processor 看待, 假設 CPU1 有 core1, core2 , CPU2 有 core3 , core4 , OS 會看待他們相當於有 4 個 Real CPU . 但一個 job 可能寫成多個 process (使用 Fork) , 每個 process 可能只有一個或一個以上(例如使用 pthread)的 thread. 通常 multi-core 是各有一套 instruction pointer, instruction prefetch queue 及 register set 但共用 processor 內部的同一組多功能的 function unit 及 cache , 所以同一個 CPU 的兩個 core 最好是做不同的指令, 但如 果有共用資料, 透過共用的 cache 會較快. CPU1 , CPU2 是共用 system bus 及 Main memory , 但各自有 Chip 上全套的 function unit 及 cache. INTEL 的 multi-core 可以讓外部 interrupt 指明對應的那個 cpu 內的那個 core 來處理, 這可以加快反應的速度. 只有 kernel thread 會被 OS 分派一個 real cpu/core 去執行, 如果是 many to one 的 multiple user threads in one process 只會隨 process 對應一 個 kernel thread , 所以只會讓一個 real cpu/core 去執行. 但如果是 one to one 或是 Two Level Many to many mode 則可以讓一個 user thread 綁住 一個 kernel thread 去執行. pthread 讓 OS 如何分派 kernel thread 的適 用範圍稱為 scope , 可用參數查問與設定. 兩個工作要派 core1 , core3 跑, 還是 core1 , core2 跟兩件事在何處的相 關度有關. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.1.146
文章代碼(AID): #16uGcAAE (Programming)
文章代碼(AID): #16uGcAAE (Programming)