Re: 多CPU的機器OS如何align jobs?
※ 引述《sorryChen (陳揚和)》之銘言:
: 如果我在多CPU上的機器, 比如說8 或 16個
: for i in {0..1} do { time ./myprogram ${i}.input; } 2> ${i}.time;
: 這樣話 每次call myprogram時 會自動assign 給一個cpu嗎
: 還是全部的都只會在一個上跑..
:
: 現在的OS應該有聰明到會自己assign吧 但這樣一起跑..
: 會不會比一個一個跑的CPU hours 多呢?
如果script是上面這樣,shell不會也不應該同時跑多個job。
因為誰也不知道myprogram有什麼副作用,直接「聰明」地一起跑,
有可能會導致結果不同。
如果你自己確定一起跑不會有事,那你可以用這個方法:
先編輯一個makefile,內容大概長這樣:
default : 0.time 1.time ...
%.time : %.input
time ./myprogram $^ 2> $@
然後跑make -j4,這樣就是同時跑4個process。
通常看你有幾個CPU就跑幾個job啦,如果是CPU bound的狀況的話。
比較爛的作法是一樣在那個shell script跑,但是把myprogram放背景,
(加一個&在後面)。
不過這樣就是全部一起跑,通常效能會比較差,因為switch overhead比較大,
或者更慘的話會有swap。
: 推 ggg12345:Shell啟動的執行程式都是一個process,每 140.115.4.12 06/28 12:46
: → ggg12345:個process在OS管理下在對稱式多處理機就 140.115.4.12 06/28 12:47
: → ggg12345:資源管理立場由OS將所有process輪派給所 140.115.4.12 06/28 12:49
: → ggg12345:有的cpu去跑,沒事幹的cpu跑idle process. 140.115.4.12 06/28 12:53
: → sorryChen:所以是說每個process 都會倫到各個CPU上 128.125.87.33 06/29 00:42
: → sorryChen:但應該會想辦法利用每個CPU吧 128.125.87.33 06/29 00:43
原本的script都是把process跑在foreground,所以會循序跑,
從頭到尾都只有一個process,也沒有所謂輪流了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.237.149
推
07/02 08:29, , 1F
07/02 08:29, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):