作者cvictor (asdfasdf)
看板Programming
标题Re: 多CPU的机器OS如何align jobs?
时间Wed Jul 1 20:47:27 2009
※ 引述《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
1F:推 sorryChen:感谢 大概知道的 128.125.87.33 07/02 08:29