Autodetect processing units with -j At the moment, though this moment lasts for decades now, -j/--jobs without argument starts infinite number of parallel jobs. Practice shows that compilation with jobs bigger than number of available threads is not faster in any way, only uses more memory and more processor too. Try to compile kernel or gcc with -j. And if one misses infinite jobs so much why not use -j999; it's the same thing, only makes you aware of it. Therefore I propose to use -j without argument as autodetect of available processing units and modify jobs accordingly to that number. One could argue that optimal number of jobs is nproc+1 (or at most +2) although some propose nproc*2, which is overkill and close to -j<infinity> in reality. I have attached patch and test script that allows to show how compilation time changes with jobs growing above available number. I have tested it myself, tried it online and used few friends to test it too, and result is always the same - jobs bigger than nproc does not make compilation any faster. It actually makes it slower. Hope you find these arguments convincing and change useful. Regards.
#!/bin/sh
URL=http://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz FILE=`basename $URL` [ -f "$FILE" ] || wget $URL DIR=${FILE/.tar.gz/} [ -d "$DIR" ] || tar -xzf $FILE ( cd $DIR [ -f "config.status" ] || sh configure > /dev/null 2>&1 nproc=`nproc` echo uname -a uname -a echo nproc nproc echo for i in `seq $nproc $((nproc*2))`; do make clean V=0 > /dev/null 2>&1 CMD="make -j$i V=0" echo $CMD time eval $CMD > /dev/null 2>&1 echo sleep $i done make clean V=0 > /dev/null 2>&1 CMD="make -j V=0" echo $CMD time eval $CMD > /dev/null 2>&1 echo )
<<attachment: make-4.4.1-jnproc.diff.zip>>