Re: 多CPU的機器OS如何align jobs?

看板Programming作者 (asdfasdf)時間16年前 (2009/07/01 20:47), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1AIrhXME (Programming)
文章代碼(AID): #1AIrhXME (Programming)