make j* make j4 make j8 區別


轉載:

make -j4是什么意思
看書上說
1) make(1)只衍生一個作業//作業是什么意思?make(1) 是不是就是make的意思?
2) 在雙處理器上make -j4,難道是讓每個處理器跑兩個作業?那和make -j2效率相比 難道不是一樣的?


新手提問 多多關照

------解決方案--------------------
make(1)表示在unix手冊(man)的第一章,可以用 man 1 make 來查看。

兩個處理器的話,一般 -j2 能達到最高效率。
不過也有些進程會花時間在IO上,並不能利用完單個cpu的時間。這樣 -j4 可以更快。 
------解決方案--------------------
jobs=4
同時最多跑4個作業
make自己會協調,如果CPU等資源不夠可能小於4個。不過一般瓶頸都在硬盤,所以一般能看到4個進程一起跑。 
------解決方案--------------------
啟用4個cpu去編譯。提高編譯速度。 
------解決方案--------------------

感覺指的是邏輯線程數,和CPU無關,邏輯線程具體跑在哪個邏輯CPU上應該是由內核決定的。make說白了也只是個程序而已。

========================================

 

make(gmake,gnumake)的-j參數,優化多核、多線程的編譯過程

一直以為,現在主流的程序,比如apache2.2,編譯過程自動會對多核優化 結果發現不是這樣的

測試環境:默認./configure無參數后的apache2.2.14源碼根目錄

測試方法:使用以下命令,粗略記錄編譯過程時間。 $ date >> /qshen/time && make && date >> /qshen/time

對比與加了-j參數的make的編譯時間

查閱資料,網上很多人用雙路INTEL XEON E5404測試時使用參數-j16,使用單路E5405測試使用參數-j8。這個不太理解。因為E5405是四核心,每核心1線程,不知為何要使用二倍的jobs。在此也實際測試

我的測試環境CPU是INTEL XEON E5405,單路。8G內存。 首先,不帶-j的命令執行2次

然后,使用-j4執行二次

再然后,使用-j8執行二次

最后使用-j16執行一次作為參考數據

結果:共計執行

$ cat /qshen/time Mon Feb 1 12:51:17 CST 2010 Mon Feb 1 12:52:55 CST 2010
Mon Feb 1 12:53:29 CST 2010 Mon Feb 1 12:55:07 CST 2010
Mon Feb 1 12:55:34 CST 2010 Mon Feb 1 12:56:14 CST 2010
Mon Feb 1 12:56:37 CST 2010 Mon Feb 1 12:57:16 CST 2010
Mon Feb 1 12:57:38 CST 2010 Mon Feb 1 12:58:16 CST 2010
Mon Feb 1 12:58:36 CST 2010 Mon Feb 1 12:59:13 CST 2010
Mon Feb 1 12:59:48 CST 2010 Mon Feb 1 13:00:26 CST 2010 結果發現,確實默認的make不加-j參數效率比較低。加上-j參數,-j4和-j8性能差距不大,-j16性能就比較差了。准備進一步翻閱資料看看到底應該取值多少。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM