make j的最佳引數

2022-07-02 20:45:08 字數 1909 閱讀 4844

c/c++之類的編譯型語言採用make作為構建工具已歷史攸久。make -j的最佳引數一直都眾說紛云。

我目前見過以下幾種觀點:

與物理cpu數目相同

與cpu所有物理核心數相同

與邏輯執行緒數相同

物理核心數目乘以2

物理核心數目乘以2加1

最近恰好想起這個問題,手頭又有合適的倉庫,就做了一下測試,結果志於此。

我找了兩個c++倉庫,規模適中且相仿,均採用cmake的「原始碼外」構建方式。每個他倉庫跑10輪測試,測試指令碼如下:

for i in 

do echo "**********=pass $i**********=" >> result.txt

for j in

do make clean && time -p -ao result.txt make all -j$j

done

done

即每次都將構建結果清除,再按照make -jn的方式構建,每個倉庫跑10輪,每輪分20次,分次別以make -j1

make -j20來構建,time命令用來統計時間。

所採用的機器為intel的至強cpu,8核心,8gb記憶體。

將每一輪中相同執行緒數的構建時間平均値作為最終結果。倉庫甲

乙make -j1

85.10

189.48

make -j2

45.00

101.27

make -j3

31.41

78.16

make -j4

26.57

67.88

make -j5

23.89

62.53

make -j6

22.30

59.42

make -j7

21.09

56.13

make -j8

21.05

54.42

make -j9

21.68

54.57

make -j10

21.91

54.80

make -j11

22.50

54.69

make -j12

22.40

54.75

make -j13

22.16

55.11

make -j14

22.33

55.16

make -j15

22.81

54.91

make -j16

22.81

55.39

make -j17

23.11

55.58

make -j18

23.21

55.22

make -j19

23.59

55.48

make -j20

23.55

55.35

以執行緒數為橫軸,時間為縱軸,畫成座標圖

自單執行緒始,執行緒數增大,構建時間迅速下降。到八執行緒時達到最低值。

繼續增大執行緒數,構建時間略有上公升,但總體可以認為保持不變。

無論哪個倉庫,執行緒數等於物理核數時,其構建是最快的。

測試用cpu為每個物理核心乙個邏輯執行緒,個人猜測,如果是乙個物理核心對應兩個邏輯執行緒,

make -j16應為最佳選項。故,當執行緒數等於物理核心數/邏輯執行緒數時,構建效率最高。

make j 引數簡介

在linux編譯程式的時候,io往往不是瓶頸,那cpu就應該是乙個影響編譯速度的重要因素了。用make j帶乙個引數,可以把專案在進行並行編譯,比如在一台雙核的機器上,完全可以用make j4,讓make最多允許4個編譯命令同時執行,這樣可以更有效的利用cpu資源。還是用kernel來測試 用mak...

make j 8引數的作用

今天在編譯安裝乙個原始碼包的時候,不小心看到乙個make j 8的引數,make命令常見用來進行編譯的,編譯完成後執行make install進行安裝,可是 j 8 是用來做什麼的?用make j帶乙個引數,可以把專案在進行並行編譯,比如在一台雙核的機器上,完全可以用make j4,讓make最多允...

python預設引數的坑以及最佳實踐

an example defaddend l end return l print addend end print addend end end 坑!對一切的列表有記憶了,不是我們想要的print的結果和想象中不同,從上述呼叫結果發現,函式每次都記住了上次新增了 end 後的list,python...