Sfortunatamente anche porzioni diverse della stessa build possono essere ottimali con valori di fattore j contrastanti, a seconda di cosa viene costruito, come, quali risorse di sistema sono il collo di bottiglia in quel momento, cos'altro sta succedendo sulla macchina di build, cosa sta succedendo in la rete (se si utilizzano tecniche di compilazione distribuite), stato / posizione / prestazioni dei numerosi sistemi di memorizzazione nella cache coinvolti in una build, ecc.
Compilare 100 minuscoli file C potrebbe essere più veloce della compilazione di un singolo enorme o viceversa. La creazione di piccoli codici altamente contorti può essere più lenta della creazione di enormi quantità di codice diretto / lineare.
Anche il contesto della build è importante: l'utilizzo di un fattore j ottimizzato per build su server dedicati ottimizzati per build esclusive e non sovrapposte può produrre risultati molto deludenti se utilizzato dagli sviluppatori che costruiscono in parallelo sullo stesso server condiviso (ciascuna build potrebbe richiedere più tempo di tutti combinati se serializzati) o su server con diverse configurazioni hardware o virtualizzati.
C'è anche l'aspetto della correttezza delle specifiche di build. Build molto complessi possono avere condizioni di gara che causano fallimenti di build intermittenti con tassi di occorrenza che possono variare selvaggiamente con l'aumento o la diminuzione del fattore j.
Posso andare avanti all'infinito. Il punto è che devi effettivamente valutare la tua build nel tuo contesto per cui desideri ottimizzare il fattore j. Si applica il commento di @Jeff Schaller: scorrere fino a trovare la soluzione migliore. Personalmente inizierei dal valore nproc, proverei prima verso l'alto e verso il basso solo se i tentativi verso l'alto mostrano un degrado immediato.
Potrebbe essere una buona idea misurare prima diverse build identiche in contesti apparentemente identici solo per avere un'idea della variabilità delle tue misurazioni - se troppo elevata potrebbe compromettere l'intero sforzo di ottimizzazione (una variabilità del 20% significherebbe eclissare completamente un miglioramento del 10% / lettura del degrado nella ricerca del fattore j).
Infine, IMHO è meglio usare un server di lavoro (adattivo) se supportato e disponibile invece di un fattore j fisso - fornisce costantemente una migliore prestazione di compilazione in una più ampia gamma di contesti.
ccache
per la ricostruzione successiva, ma questo è OT