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